3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Spresense BLE1507で簡易ラジコンの製作

Posted at
1 / 2

概要

12/4にspresense sdk 3.3.0 になり、ArduinoIDE環境でBLE1507(serialization FW版)が制御できました。
BLE1507とメインボードとモータドライバを使って簡易ラジコンを製作してみました。

外観

以下のようなラジコンです。
image.png

部品リスト

主な部品のリストは以下です。

No 部品名 購入先
1 Spresense Main1ボード Switch Science等
2 BLE1507 Switch Science等
3 モータードライバ amazon
4 電池ボックス 単3x3(Spresense用) amazon
5 電池ボックス 単3x2(モーター用) amazon
6 ラジコンシャーシ amazon
7 ブリッジ基板 JLCPCB

ブリッジ基板について

BLE1507はメインボードのソケットに直接差し込んで使いますが、
差し込んだ場合に、別のピンが引き出せないので、別のピンが使えるように
ブリッジ基板を作成しました。
今回は23-26pinをモータ制御のピンとして使用しました。
image.png
上記のCN1の6,7,8,9を制御ピンとして使用する。

image.png

Arduinoスケッチ

https://github.com/TomonobuHayakawa/BLE1507_Arduino
のBLE1507_write.inoと
https://sensing-solution-hackathon-materials.sonyged.com/SPRESENSE_BLE_2024.pdf
を参考に修正を加えました。
write発生時にコールバック関数にモータドライブの制御を
追加しました。

BLE1507_write_car.ino
/*
 * BLE1507_write.ino
 * Copyright (c) 2024 Yoshinori Oota
 *
 * This is an example of BLE1507
 *
 * This is a free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */


/****************************************************************************
 * Included Files
 ****************************************************************************/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "BLE1507.h"

/****************************************************************************
 * ble parameters
 ****************************************************************************/
#define UUID_SERVICE  0x3802
#define UUID_CHAR     0x4a02

static BT_ADDR addr = {{0x19, 0x84, 0x06, 0x14, 0xAB, 0xCD}};
static char ble_name[BT_NAME_LEN] = "SPR-PERIPHERAL";

BLE1507 *ble1507;


/****************************************************************************
 * ble write callback function
 ****************************************************************************/

void bleWriteCB(struct ble_gatt_char_s *ble_gatt_char) {
  static int led = 0;
  printf("write_callback!\n");
  ledOff(led);
  printf("length : %d \n",ble_gatt_char->value.length);
  printf("value : ");
  for (int i = 0; i < ble_gatt_char->value.length; i++) {
    printf("%c ", ble_gatt_char->value.data[i]);
  }
  if(ble_gatt_char->value.data[0]==0x1){
    digitalWrite(23, HIGH);
    digitalWrite(24, LOW);
  }else if(ble_gatt_char->value.data[0]==0x2){
    digitalWrite(23, LOW);
    digitalWrite(24, HIGH);
  }else{
    digitalWrite(23, LOW);
    digitalWrite(24, LOW);
  }

  if(ble_gatt_char->value.data[1]==0x1){
    digitalWrite(25, HIGH);
    digitalWrite(26, LOW);
  }else if(ble_gatt_char->value.data[1]==0x2){
    digitalWrite(25, LOW);
    digitalWrite(26, HIGH);
  }else{
    digitalWrite(25, LOW);
    digitalWrite(26, LOW);
  }


  led = (ble_gatt_char->value.data[0] % 4)+ 0x40;
  ledOn(led);
  printf("\n");

}

void bleCommandCB(struct ble_gatt_char_s *ble_gatt_char) {
  String command = "";
  for (int i = 0; i < ble_gatt_char->value.length; i++) {
    command += (char)ble_gatt_char->value.data[i];
  }
  Serial.println(command);

  if (command.equals("start")) {
    Serial.println("Recieve: start!");
  }
  else if (command.equals("stop")) {
    Serial.println("Recieve: stop!");
  }
  else {
    Serial.println("Recieve unknown command.");
  }
}
/****************************************************************************
 * setup function
 ****************************************************************************/
void setup() {

    pinMode(23, OUTPUT);
    pinMode(24, OUTPUT);
    pinMode(25, OUTPUT);
    pinMode(26, OUTPUT);


  Serial.begin(115200);

  ble1507 = BLE1507::getInstance();
  ble1507->beginPeripheral(ble_name, addr, UUID_SERVICE, UUID_CHAR);
  ble1507->setWritePeripheralCallback(bleWriteCB);
//  ble1507->removeBoundingInfo();

  ble1507->startAdvertise();
}

/****************************************************************************
 * loop function
 ****************************************************************************/
void loop() {

}

改善点

ブリッジ基板なのですが、BLE1507の端子が短いにもかかわらず、低背ではない
ピンソケットを使ってしまいました。。。その結果、BLE1507を差し込む時に
テープで固定してあげる事で、ギリギリ接続している状態になっています。
低背かつ、足の長いピンソケットがあるとよいのですが、なかなか見つかりません。
image.png

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?