ちゃお 2017年4月号付録のお掃除ロボをハック!
巷で話題になった ちゃお(価格580円!!やすいーーーー)の付録のお掃除ロボ
子どもが飽きて見向きもしなくなったのでBLEで遠隔操作できるようにしましたwww
目次
お掃除ロボの機構
以下のツィートが非常に詳しく説明されてます。
最もロボット界隈の人が興味あるであろう機構は、僕の把握した範囲でこんな感じ!理解に結構時間がかかった笑#ちゃおの付録 pic.twitter.com/hTJbLmOz0o
— Aiel (@satsuki_eng) 2017年3月5日
モーターとギアのみで前進と障害物回避を実現してます!!!
スイッチをONするとモーターが起動しロボは前進します。前方の腕が障害物に当たると一定時間シャフトが移動して片輪が逆走し機体が回転します。
よく考えるよな〜と大感心!!購入時は何かしらの電子センサ使ってると思っていたもの。。。
構成
部品
- BLE搭載マイコンAdafruit Feather 32u4 Bluefruit LE
- リポバッテリー
- モータドライバ DRV8830
- サーボモータ SG90
改造手順
Blynk Arduino用ライブラリ
お掃除ロボをスマホでコントロールするためにBlynkアプリを使用しました。
最新ライブラリは以下にあります。
https://github.com/blynkkk/blynk-library
今回はAdafruit Feather 32u4 Bluefruit LEを使うので
[スケッチの例] -> [Blynk] -> [Boards_BLE]-> [Adafruit_Feather_32u4_BLE]を参考にコード生成しました。
Blynk設定
新規プロジェクトを作成します。ハードウェアではAdafruit製品がまだないのでとりあえずArduino UNOを選択。
AUTH TOKENはArduinoコード生成時に使用しますので控えときます(もしくはメール送信します)。
ウィジェットとしてBLEとジョイスティックを配置します。
ジョイスティックの設定はヴァーチャルピンV1に2軸の数値を出力します。
x, yの値はそれぞれ最小-128 最大128としました。
Arduino IDE
[スケッチの例] -> [Blynk] -> [Boards_BLE]-> [Adafruit_Feather_32u4_BLE]を参考にコード生成しました。
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 |
#define BLYNK_USE_DIRECT_CONNECT #define BLYNK_PRINT Serial #include <BlynkSimpleSerialBLE.h> #include <Adafruit_BLE.h> #include <Adafruit_BluefruitLE_SPI.h> #include <SPI.h> #include <Wire.h> #include <Servo.h> Servo myservo; const int DRV8830 = 0x64; int power = 0; int Speed = 0; int angleServo = 0; int rot = 0; // You should get Auth Token in the Blynk App. // Go to the Project Settings (nut icon). char auth[] = "BlynkアプリのYourAuthTokenを入力"; // SHARED SPI SETTINGS (see adafruit webpages for details) #define BLUEFRUIT_SPI_CS 8 #define BLUEFRUIT_SPI_IRQ 7 #define BLUEFRUIT_SPI_RST 4 // Optional but recommended, set to -1 if unused #define BLUEFRUIT_VERBOSE_MODE true // Create ble instance, see pinouts above Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_CS, BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST); //モータドライバ I2C制御 motor driver I2C //Reference //http://makers-with-myson.blog.so-net.ne.jp/2014-05-15 void writeMotorResister(byte vset, byte data1){ int vdata = vset << 2 | data1; Wire.beginTransmission(DRV8830); Wire.write(0x00); Wire.write(vdata); Wire.endTransmission(true); } //ジョイスティック値受信 BLYNK_WRITE(V1) { float x = param[0].asInt(); float y = param[1].asInt(); //モータスピード power = sqrt(x*x + y*y); if(power > 128){ power = 128; } Speed = map(power, 0, 128, 5, 30); //6〜64 //モータ回転方向 if(y >= 0){ rot = 2; //前進 } else { rot = 1; //後進 } //サーボ角度 if(x > 80){ angleServo = 40; }else if(x < -80){ angleServo = 40; }else{ angleServo = 0; } //モーター、サーボ実行 if (power == 0){ writeMotorResister(0x00, 0x00); }else { writeMotorResister((byte)Speed, (byte)rot); } myservo.write(angleServo); //delay(15); Serial.print("x: "); Serial.print(x); Serial.print(" y: "); Serial.print(y); Serial.print(" power: "); Serial.print(power); Serial.print(" Speed: "); Serial.print(Speed); Serial.print(" angleServo: "); Serial.print(angleServo); Serial.print(" rot: "); Serial.println(rot); } void setup() { Serial.begin(9600); Wire.begin(); //SCL:A5 SDA:A4 writeMotorResister(0x00, 0x00); myservo.attach(6); myservo.write(angleServo); ble.begin(BLUEFRUIT_VERBOSE_MODE); ble.factoryReset(); // Optional ble.setMode(BLUEFRUIT_MODE_DATA); Blynk.begin(auth, ble); } void loop() { Blynk.run(); } |
Blynk BLE接続
BlynkプロジェクトのBLEウェジットをクリックして設定します。
“Connect BLE device”をクリックして “Adafruit Bluefruit LE”が表示されたらOKをクリックして接続する。