スマホで自由自在に操作できる「IoTミニ四駆」の仕組みを解説(技適済みWi-Fiモジュール「ESP8266」で始めるIoT入門)

speialBoard

「ESP8266」で始めるIoT入門シリーズはこちらからお読みいただけます

こんにちは、押切です。どうみてもインドア派な私ですが、今は青空のもと、娘のテニス教室の様子を見ながら執筆しています。

予告では、別環境での開発ということで、Luaの回を準備していたのですが、 第3回のミニ四駆が好評だったことでDMM.makeさんの方でも興味を持っていただき、 共同でワークショップを開催することになりました。

CerevoとDMM.make AKIBA、ワークショップ「スマホで自由自在に操作できるIoTミニ四駆を作ろう!」開催
http://info-blog.cerevo.com/2015/10/14/1445/

定員20名ということもあり、わずか数時間で満員御礼となってしまいました。ありがとうございます。

こちらとしてもより多くの方に楽しんでいただきたいのですが、 運用上大幅に人数を増やすことは難しく、11月28日に第2回を実施することになりました。

第2回の申し込みは10月21日13時頃から受付を開始する予定です。お知らせは、CerevoDMM.makeさんから公式に通知されるので、ご興味のある方はTwitterなどフォローしていただければと思います。

今回は、ワークショップに向けて前回制作したミニ四駆をDMM.makeさんと改良した点を中心に解説したいと思います。

4thtitle


前回からの改良点は、

  1. ステアリング機構とサーボモータ搭載により左右に曲がれる
  2. 通信受信検知用のLED追加
  3. スマホのユーザーインターフェイスがボタンでなく、より直感的な操作性

となっています。

1.  については、DMM.makeさんの方で3Dプリンタで作成してもらいました。 秋月電子さんにも売っている安価なSG−90というサーボーモータでの動作を想定しています。 この機構のため、どうしてもある程度の大きさが必要となってしまうので、通常のレース用カーではなく、大型の「ワイルドミニ四駆」のみに対応します。

ワイルドミニ四駆であれば、どのボディでも装着可能です。 なかなか特徴的なボディがあるので、差し替えるだけでも楽しめますし、馬力があるタイプなので、 多少重さがあってもオリジナルのボディを作成されても楽しめると思います。

ステアリング機構についてはDMM.makeさんの設計なので、別途そちらのブログなどと連携できればと思います。3Dプリンタ用STLデータはいただいたので、GitHubにいれておきます。

次に回路について説明します。回路図は下記にしました。

Circuit
Circuit

今回もGitHubにファイル一式公開します。

cerevo/techblog-ESP8266-4th · GitHub
https://github.com/cerevo/techblog-ESP8266-4th

最終的にシンプルに纏めましたが、以下の点を考慮しました。
電源の定格を並べると、

  • ミニ四駆電池:3V(単三電池2本)
  • サーボモーター:5V
  • ミニ四駆用モーター:3V
  • ESP8266:3.3V

となっています。

前回はeneloop 2本と電気2重層コンデンサで簡略化しましたが、今回はサーボもあるのでそうもいきません。

そこで、

  • 電池:単四電池3本(4.5V)
  • サーボモーター:4.5V
  • ミニ四駆用モーター:4.5V
  • ESP8266:3.3V(4.5Vからレギュレータで降圧)

としています。

サーボモータは電源定格については仕様の4.8Vを下回るもののなんとか動いていますが、トルクが下がります。それを補うために、サーボモーターの制御周期を仕様の20msec(50Hz)から10msec(100Hz)の倍にあげてトルクと応答性をあげています。

なお、制御用のPWM信号は3.3VでもOKですのでESP8266からそのまま出力しています。ミニ四駆駆動用モーターの定格は3Vなので、4.5V入れっぱなしだとだと焼き切れてしまう危険があります。こちらはモータードライバの制御をDuty50%以下(ずっと通電せず、回転時間の半分はOFFにする)に抑えているので耐えることができます。

また、通信状態が分かるようにインジゲータLEDも追加しています。

注意点として、ESP8266はノイズの影響を受けるとWi-Fiが繋がらないことがあるので、モーターからはなるべく離した方が良いです。今回は車体のリア側に設置しています。

また、4.5Vから3.3Vを作っているものの、モータの負荷により大幅に電圧が下がりますので、3.3Vが3V以下にならない電源設計が必要です。一時的にでもESP8266の電源が2.6V以下に下がるとWi-Fi接続が切れてしまいます。

配置は、底面に単四電池BOX、リアにESP8266モジュール基板、もともとモーターBOXがあった場所に新規基板とし、モータードライバとレギュレータを載せています。
写真は、手作りですが、ワークショップではこれをもとに専用基板を起こして作りやすくします。

speialBoard
speialBoard
ESP8266
ESP8266
BatteryBOX
BatteryBOX

と、割と詳しく書きましたが、結果的にシンプルな回路構成になったと思います。電池を2系統積む、DC−DCをのせるなど他にも案があるかと思いますが、初心者の人が参加するワークショップということもあり、作りやすさとコスト、ノイズ耐性を重視しています。

車体のフロント側はばっさり切って、DMM.makeさん作成のステアリング機構と制御用のサーボモータを接続しています。

なお、ワークショップでは時間の都合上ステアリング部分は3Dプリント済みものを配布予定です。ステアリング機構のおかげでもとより車体の全長が伸びていますが、ワイルドミニ四駆シリーズの車体は共通なので、どの車種にも対応できます。

4_06

ワイルドミニ四駆自体も、通常のレーサータイプミニ四駆よりも組み立てはより簡単で、初めての方もすんなり組めるかと思います。

wild parts
wild parts

次にソフトについて説明します。sketchについては、Githubのファイルを参照ください。ベースは第三回のものですが、改良点としては、

  1. IOポート12でLED通信インジゲータ制御
  2. IOポート16でサーボモータ制御
  3. スマホのユーザーインターフェイス用の画面をボタンから、スライド操作に変更

となっています。2台以上で遊ぶ場合はSSIDを変えて書き込んでください。

2. については、Arduino Libraryを使わずservo_control()関数部分でPWM制御しています。Libraryの方は便利ですが、強制的に割り込みが入って使い勝手よろしくありませんでした。

3. については、弊社のフロントエンジニアの協力を得てJavaScriptで記載しています。

前進状態を0°として、
スマホ画面に触れた状態から、

上:前進
左:−90°前進
右:+90°前進
下:後進
上左:−45°前進
上右:+45°前進
下左: -45°後進
下右: +45°後進
指を離す:停止

と8方向と指の接触で直感的に制御できるようになりました。
スマホならではの操作感で多少慣れは必要ですが、プロポでの操作とは
また違った楽しさがあります。

今回は

SSID:Wild−WS
PASWARD:なし
URL:192.168.4.1

で接続します。

スマホはWi-Fiのみ使うのでキャリアとの契約が切れたもので構いませんが、Javascript使用のため若干ブラウザ依存があるので、最新のChromeを使うと確実です。

また、少し専門的になりますが、スマホのブラウザとESP8266はWi-Fiを通して、TCPで通信しています。TCPはデータ通信の確実性を重視しているので、今回のように即応性が求められる用途には不向きで、本来はUDPの方が向いています。

また、操作コマンド以外にもブラウザから意図しない通信も発生してレスポンスに影響を与えます。しかし、専用アプリを用意するなど機種依存性は避けたかったので、ネットワークの80番ポートを使って、javascriptが書かれたhtmlファイルを送信後、 ポート番号を変更して、ミニ四駆への動作指示は8080番ポートを使用することにより レスポンスを向上しています。

上記を踏まえて、弊社広報に作ってもらった動画を再度見ていただくと仕組みが良くわかるかと思います。

ワークショップでは私自身も説明員として参加予定です。当日の様子は別途弊社とDMM.makeさんから発信しますし、第2回の予定もありますので、よろしくお願いします。次回は、Arduino IDEを使わず、Luaを使った開発環境で、「引きこもり係数」をツイートする予定です。