micro:bit で ラジコン – Adafruit Bluefruit LE Connect –
micro:bitでスマホでコントロールするラジコンを作りました。
スマホアプリはBlynkを使おうと思ったけど以下のやり方でなぜかスマホとmicro:bitを接続できず断念。。。。ライブラリやアプリが更新されて情報が古いのか、スマホ自体の問題なのか現状よくわからない。誰か教えて。。。
今回はAdafruit Bluefruit LE Connectというスマホアプリでmicro:bitと接続してラジコンを実現しました!
目次
構成
micro:bitでモータドライバを介して左右のモータを制御します。
部品
-
micro:bit
-
micro:bit用エッジコネクタピッチ変換基板
-
モータドライバDRV8835
-
ダブルギヤボックス
-
トラック&ホイールセット キャタピラです
-
ユニバーサルプレート
-
電池ケース
車体
ユニバーサルプレートで土台構成してモータギアボックスとキャタピラホイール接続。
モータドライバとモータを配線。モータドライバのMODEピンはGNDに接続しています。
http://akizukidenshi.com/download/ds/akizuki/AE-DRV8835-Ss.pdf
モータドライバとmicro:bitの接続にはmicro:bit用エッジコネクタピッチ変換基板を使用。
電源は乾電池2本。
micro:bit Arduino開発環境設定
micro:bitのピン配列は以下の通り
http://microbit-micropython.readthedocs.io/ja/latest/pin.html
Arduinoボードマネージャにmicro:bit登録
- メニュー [Arduino]->[Preference]内のAdditional Boards Manager URLsに
https://sandeepmistry.github.io/arduino-nRF5/package_nRF5_boards_index.json
を追加し[OK]をクリック
-
メニュー [ツール]->[ボード]内の[ボードマネージャ]を選択 [ボードマネージャー] 内のNordic Semiconductor nRF5 Boards by Sandeep Mistryを選択し[Install]をクリック
-
インストール後メニュー [ツール]->[マイコンボード]内に”BBC micro:bit”が追加される。
Softdevice:”S110″を選択
シリアルポート:接続したmicro:bitを選択
ライブラリダウンロード
BLE Peripheralライブラリをダウンロード
micro:bitのBLEを使用するためのライブラリを導入
Adafruit GFXライブラリをダウンロード
micro:bitのLEDマトリクスを使用するためのライブラリです。
Adafruit Microbitライブラリをダウンロード
micro:bit用のプログラム例などがまとめられています。以下をダウンロードしてArduinoのライブラリフォルダにコピーするだけ。
https://github.com/adafruit/Adafruit_Microbit
Arduinoプログラム
先程ダウンロードしたAdafruit Microbitライブラリの”ble_controller”と”matrixdemo”を参考にしました。
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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
#include <Adafruit_Microbit.h> Adafruit_Microbit microbit; Adafruit_Microbit_Matrix microbitMat; //LEDマトリクス表示パターン const uint8_t one[] = { B00100, B01100, B00100, B00100, B00100, }; const uint8_t two[] = { B01110, B10001, B00010, B00100, B11111, }; const uint8_t three[] = { B01110, B10001, B00110, B10001, B01110, }; const uint8_t four[] = { B00010, B00110, B01010, B11111, B00010, }; const uint8_t forward[] = { B00100, B01110, B10101, B00100, B00100, }; const uint8_t backward[] = { B00100, B00100, B10101, B01110, B00100, }; const uint8_t left[] = { B00100, B01000, B11111, B01000, B00100, }; const uint8_t right[] = { B00100, B00010, B11111, B00010, B00100, }; // function prototypes over in packetparser.cpp uint8_t readPacket(Stream *ble, uint16_t timeout); float parsefloat(uint8_t *buffer); void printHex(const uint8_t * data, const uint32_t numBytes); // the packet buffer extern uint8_t packetbuffer[]; #define BLE_READPACKET_TIMEOUT 1000 void setup() { Serial.begin(115200); Serial.println("Controller demo ready!"); pinMode(0, OUTPUT); pinMode(1, OUTPUT); pinMode(2, OUTPUT); pinMode(16, OUTPUT); // custom services and characteristics can be added as well microbit.BTLESerial.begin(); microbit.BTLESerial.setLocalName("microbit"); microbit.begin(); microbitMat.begin(); } void loop(void) { /* Wait for new data to arrive */ uint8_t len = readPacket(&(microbit.BTLESerial), BLE_READPACKET_TIMEOUT); if (len == 0) return; // Buttons if (packetbuffer[1] == 'B') { uint8_t buttnum = packetbuffer[2] - '0'; boolean pressed = packetbuffer[3] - '0'; Serial.print ("Button "); Serial.print(buttnum); if (pressed) { Serial.println(" pressed"); switch (buttnum) { case 1: microbitMat.show(one); break; case 2: microbitMat.show(two); break; case 3: microbitMat.show(three); break; case 4: microbitMat.show(four); break; case 5: //前進 microbitMat.show(forward); digitalWrite(0, LOW); digitalWrite(1, HIGH); digitalWrite(2, HIGH); digitalWrite(16, LOW); break; case 6: //後進 microbitMat.show(backward); digitalWrite(0, HIGH); digitalWrite(1, LOW); digitalWrite(2, LOW); digitalWrite(16, HIGH); break; case 7: //左旋回 microbitMat.show(left); digitalWrite(0, HIGH); digitalWrite(1, LOW); digitalWrite(2, HIGH); digitalWrite(16, LOW); break; case 8: //右旋回 microbitMat.show(right); digitalWrite(0, LOW); digitalWrite(1, HIGH); digitalWrite(2, LOW); digitalWrite(16, HIGH); break; } } else { Serial.println(" released"); microbitMat.clear(); digitalWrite(0, LOW); digitalWrite(1, LOW); digitalWrite(2, LOW); digitalWrite(16, LOW); } } } |
Adafruit Bluefruit LE Connect設定
Adafruit スマホアプリ Adafruit Bluefruit LE Connectを使用してmicro:bitとBLE通信します。
アプリは以下でインストール
iOS;https://itunes.apple.com/jp/app/adafruit-bluefruit-le-connect/id830125974?mt=8
Android;https://play.google.com/store/apps/details?id=com.adafruit.bluefruit.le.connect&hl=ja
起動&接続
動作
コントローラの各種ボタンでLEDマトリクスの表示が変わります。
コントローラの上下で前進・後進、左右で左旋回・右旋回します。
今度これにサーボとか載っけてショベルカー作りたいね。