2023年 SPRESENSE活用コンテスト への道⑨ ーBLE通信4ー
前回は9軸Addon ボードのIMUセンサ BMI270 を用いてSPRESENSE傾斜計を実現しロボット犬の姿勢制御を楽しみました。
目次
BLEボードとXL330の併用
本道シリーズではDYNAMIXELシリアルサーボ XL330-M077-T をSPRESENSEのハードウェアシリアルUART2で制御し動作を確認いたしました。
XL330と同様にSPRESENSEのUART2でのSTS3032動作が確認できました。#HMGspresense2023 pic.twitter.com/6zovEPuMYW
— HomeMadeGarbage (@H0meMadeGarbage) December 1, 2023
しかし、BLEボード BLE1507 もUART2を使用するため XL330との併用ができません。
SPRESENSEのハードウェアシリアルピンがUART2のみとなっているため、BLE1507かXL330のいずれかをソフトウェアシリアル対応させる必要があります。
BLEボード加工
XL330のArduinoライブラリをソフトウェアシリアル対応させるのは難しいと考え、ここではBLE1507をソフトウェアシリアル対応するべくボードを加工しました。
BLE1507のシリアル RX, TXピンのピンヘッダを除去して、RXをD16ピンにTXをGNDに配線接続しました。
今回はBLEボードからの送信は行わないためTXはGND接続としました。
この加工によってソフトウェアシリアルによるBLE1507通信動作が実現できました。
参考
XL330との併用
BLE1507のソフトウェアシリアル対応ができたため、XL330との併用動作を確認しました。
動作
BLE1507とSPRESENSE間の通信をソフトウェアシリアル (RX:D16ピン)で実施し、XL330をUART2で制御しています。
スマホアプリ nRF Toolbox を使用してBLE通信で回転速度を送ってXL330を制御しています。
BLEでXL330の回転制御
BLEボード:ソフトウェアシリアル (Rx:D16)
XL330:UART2#SPRESENSE pic.twitter.com/A2dy2qHrJ3— HomeMadeGarbage (@H0meMadeGarbage) December 28, 2023
Arduinoコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
#include <Dynamixel2Arduino.h> #include <SoftwareSerial.h> SoftwareSerial mySerial(16, -1); // RX,TX #define DXL_SERIAL Serial2 const float DXL_PROTOCOL_VERSION = 2.0; Dynamixel2Arduino dxl(DXL_SERIAL); //This namespace is required to use Control table item names using namespace ControlTableItem; String Data; int pos = 0; float spd = 50.0; void setup() { Serial.begin(115200, SERIAL_8N1); mySerial.begin(115200); Serial2.begin(2000000, SERIAL_8N1); // Set Port baudrate to 57600bps. This has to match with DYNAMIXEL baudrate. dxl.begin(2000000); // Set Port Protocol Version. This has to match with DYNAMIXEL protocol version. dxl.setPortProtocolVersion(DXL_PROTOCOL_VERSION); // Turn off torque when configuring items in EEPROM area dxl.torqueOff(0); dxl.torqueOff(1); dxl.setOperatingMode(0, OP_PWM); dxl.setOperatingMode(1, OP_PWM); dxl.torqueOn(0); dxl.torqueOn(1); } void loop() { while(mySerial.available() != 0){ Data = mySerial.readStringUntil('\n'); if (Data.indexOf('T') != -1) { pos = Data.substring(1).toInt(); spd = pos / 10.0; Serial.println(spd); }else{ Serial.println(Data); } } dxl.setGoalPWM(0, spd, UNIT_PERCENT); dxl.setGoalPWM(1, -spd, UNIT_PERCENT); delay(1); } |
Dynamixel2Arduinoライブラリを使用してPWMでXL330を回転させています。
XL330とはUART2でボーレート 2M bpsで通信しています。
ソフトウェアシリアルのRXをBLE1507と接続されているD16ピンに指定して通信します。
冒頭が’T’の数字データを受け取って10で割ってPWM値としてXL330を回転させます。
おわりに
ここではBLEボードBLE1507をソフトウェアシリアル通信対応させてXL330とのSPRESENSEによる併用を確認しました。
2023年 SPRESENSE活用コンテスト への応募に向けて事前に確認すべき課題がだいぶ解決されたと考えております。
次はBLE1507とXL330との併用にさらにIMUセンサや別のシリアルサーボSTS3032を加えての動作確認を実施したいと思います。
それではまた。