ArduinoラジコンをWeb画面から無線経由で動かす。

ArduinoラジコンをWeb画面から無線経由で動かす。

mikilabo
mikilabo (ID1881) 2014/09/07
0

Arduinoを使い始めて最初に作ったプロトタイプです。
「動くもの」を作りたかったのと、「無線通信」をしてみたかったので、こういったモノとなりました。
ラジコン部分はTamiyaの各種キットを、無線部分はXBeeを使っています。
ラジコンのコントロールはNode.js, Socket.IOを使ってWeb画面から行うようにしました。

https://www.youtube.com/watch?v=N0uek2y1kxQ

全体の仕組み・使ったもの・利用したソフトなど

全体の仕組みは上図の通りです。MacBookPro上にて、Node.jsにシリアル通信ライブラリである(node-serialport)をインストールして、XBeeとの通信を担います。また、Socket.IOを使ってブラウザの画面を同期させています。

今回利用した主な部品・ソフトは以下です。
●Arduino関連
Arduino Uno x 1
XBee Shield(sparkfun) x 1
XBee Explorer USB(sparkfun) x 1
XBee(Series 1) x 2

●モーター制御用
モータードライバ TA7267BP x 2 (左右用)
コンデンサ 0.1uF, 33uF それぞれx2

●Tamiya関連
ダブルギヤボックス(左右独立4速タイプ) x 1
ユニバーサルプレート x 1
オフロードタイヤセット x 1
ボールキャスター x 1

●その他
電池ボックス x 1 (モーター電源用)
モバイルバッテリー(Arduino電源用)

●ソフト、ライブラリ関連
Node.js (XBeeの通信ハンドリングおよびWebサーバ)
node-serialport (Node.jsでシリアル通信を扱うライブラリ)
Socket.IO (Webブラウザの画面制御)

今回の配線図

今回の配線図です。モータードライバのTA7267BPについては、Webで検索すると解説記事が沢山あります。そちらも参考にしてみてください。他は特に難しいところはないかと思います。

プログラミング関連・トラブルシューティング

今回作成したプログラムのソースはすべて下記のGitHubにアップしてあります。
https://github.com/mikilabo/arduino_remote_car

今回作っているなかでハマった所は次のような所でした。
●MacにおけるXBeeの設定
WindowsにおけるXBeeの設定に関する記事は多数あるのですが、Macのものが少なくて少し難儀しました。色々とググってMac版XCTUを見つけました。Macの方はこちらを使うのが良いかと思います。

●Arduino上のメモリーリーク
最初は順調に動くのですが、数分すると動かなくなるバグが発生。XBeeの通信関連においてメモリーリーク(メモリの開放忘れ→プログラムのミス)が原因でした。ぱっと見では問題ないので、結構悩みました。これはプログラムに慣れていないと難しいかも。

●画面デザイン
Arduino、サーバ関連のプログラムは自分で作れますが、Webの画面デザインは苦手です。という事で画面イメージのスケルトンを自分で書いて、HTML化はoDeskを使ってアウトソースし、バングラディシュ在住の人に$6.67で作ってもらいました。微妙にレイアウトが乱れているけど、金額を考えれば十分という判断です。

●そもそものトラブルの切り分け
Arduinoでモノを作り始めると、何か思い通りに動かない時、Arduinoプログラム, 配線・回路、サーバプログラムなど考えられる要素が多岐に渡ります。ついさっきまで動いていたモノが、配線が少し緩んだだけで動かなくなったりして、原因を掴むまでに結構な時間が掛かった事もあります。でも、こういう所も、Arduinoを使ったプロトタイプの楽しみかもしれないですが。

まとめ

Arduinoラジコンが初めて自分の思い通りに動いた時はちょっと感動しました。随分昔になりますが、初めて書いたプログラムが画面上で正しい結果を出した時を思い出します。 Arduinoの場合は、プログラミングの結果が画面を飛び出して物理的なモノとして動きます。元々、サーバー系のプログラムをやってきた自分としては、物理的なモノとして動く所が特に面白く感じます。

今回のプロトタイプ用に初めてNode.jsとSocket.IOを使いました。これらの基本はドットインストールで学んでいます。今回動かしたプログラムもドットインストールのサンプルプログラムをベースとしています。Arduino(やRaspberry Piなど)を使って何かを作る為には、プログラムの知識が必須です。プログラミングに慣れていない場合は、これらのサイトで基本を勉強すると良いかと思います。

違反について