こんにちは。
今回は1か月前くらいにBlynkyラジコンを作った報告です。 Blynky自体は難しくない(他記事の方が明らかに上手く説明できている)ので、自分はどういうものを動かしたかについて書いていこうと思います。
使用したのは写真のマシンです。
車系の制御の勉強をしたくて、自作した基板です。今まで車系の製作ではLPC1114FDHを使っていたのですが、色々と機能が貧弱だったのでESPにアップグレードしました。
搭載機能
- マイコン内蔵フルカラーLED 4連(なぜか1つしか点灯しない)
- モータ 4つ
- 9軸センサ
- ESP-WROOM-32で使える機能(Wi−FiやBluetooth)
- ラインセンサ 8個分のアナログ入力
- スピーカー(マイクロマウス勢がピピピピっと鳴らしているのが羨ましかった)
デフォで9軸センサを搭載できるようにしており、倒立振子もできるスグレモノです。あと、これは次の記事で紹介しようと思うのですが、4輪のメカナムホイールにも対応させました。
使用部品
- フルカラーLED WS2812B 昔買ったこいつから4つ奪還(安く大量に買えるので便利です。)
- ESP-WROOM-32(表面実装)
- 9軸センサ BMX055
- モータドライバ DRV8835
- レギュレータ TA48033S
- ADコンバータ MCP3208T
- 赤外線トランジスタ
- 赤外線LED
- モータ
- タイヤ
- その他SMDやタクトスイッチや抵抗類、コネクタ等
ハード
こちらが回路図。GPIしかできないピンを間違ってDRV8835用に用いてしまっていたので、回路の状態では基板右側のモタドラで2つ分のモータしか使えません。。。
そしてこちらが基板です。
Blynkyの実装
こんな感じで実装しました。一部定義部分や初期化部分を省略しています。なんだかんだはじめてブログにソースコードを載せました。
#define BLYNK_PRINT Serial #include <WiFi.h> #include <WiFiClient.h> #include <BlynkSimpleEsp32.h> /* GPIO definition */ #include <Adafruit_NeoPixel.h> #include <Wire.h> //色々な定義 (省略) char auth[] = "アプリからコピーしてきたやつ"; char ssid[] = "yourSSID"; char pass[] = "yourPassword"; BLYNK_WRITE(V1) { //アプリ側でV1ピンを指定 int x = param[0].asInt(); int y = param[1].asInt(); int r = (y*2-1023); int l = (y*2-1023); if(x-512>=0){ //右向き l = l * (1023 - x)/512; }else{ //左向き r = r * (x)/512; } actMotorFB(BACK, l, r); } void setup() { Serial.begin(115200); init(); //オリジナル基板の各種初期化 Blynk.begin(auth, ssid, pass); ledcWrite(LEDC_CHANNEL_0,0); ledcWrite(LEDC_CHANNEL_1,0); ledcWrite(LEDC_CHANNEL_2,0); ledcWrite(LEDC_CHANNEL_3,0); pixels.clear(); pixels.show(); } void loop() { Blynk.run(); }
完成形
動いているところの動画です。ちょっと操作しずらいプログラムなのと、即応性が高くないので動きが悪いです。すみません。
この動画に移っている chessmenというクッキーが最高においしい。
おわりに
Blynkyが簡単すぎて引きました。ここまで簡単だと、有料で使う人がいるっていうのに納得できますね。通信がぷつぷつ切れて暴れてしまうのが難点でしたね。web socket実装してみたいな。
あまりに簡単にできてしまったので、書くことなかったです
本記事の机上の空論:ちゃんと作り直したらM6-stackCarとして売れないかなぁ