ArduinoとXBeeとNode.jsを使用したらWeb画面からラジコンを操作できそう

最近はIoTにとても興味があるので、IoTを学ぶためにWeb経由でロボットを動かせたら面白いなと思って今回取り組んでみました。取り組んでみた結果、ArduinoとXBeeとNode.jsを使用したらWeb画面からラジコンを操作できたので、今回はその方法をご紹介したいと思います。

完成したらこんな感じに動きます。↓

以下の知識を使用しました!

今回、Web画面から操作できるラジコンを作成するにあたって以下の知識が必要になりました。
Node.js、Socket.IO、node-serialportなどは今回初めて使用したので、少し苦労しました。
ロボットは去年のGWに本を見ながら作成したものをそのまま流用したので、そのときの記憶を思い出しながら改良しました。1年も放置すると忘れるものですね。。。

・Arduino
・XBee
・電子回路
・HTML
・Node.js
・Socket.IO
・node-serialport

❏関連資料・記事
ArduinoとGroveのセンサで部屋の温度・湿度を測定してみた!
ArduinoとNode.jsで測定したセンサからの値をmongoDBに保存してみたよ!【#IoTっぽいこと】
NodejsをWindowsにインストールする方法

Node.jsの環境構築を行う

まずはNode.jsを触ったことがなかったので、Node.jsの動かし方から学びました。
「ドットインストール」さんにNode.jsのレッスンもありましたので、そこで「こんな感じか~」ぐらいに学習しました。

まずは以下の通り「Node.js」のインストールから行っていきます。なお、私はWindows7の64bitのPCを使用しているのですが、それでは動かないモジュールが出てきたのでVMwareにWindows8.1をインストールして、その上に構築していきました。

①Node.jsをインストールする。
 こちらの記事をご参照ください
  →NodejsをWindowsにインストールする方法

②Nodistをインストールする。
 こちらの記事をご参照ください
  →NodistをWindowsにインストールする方法

Socket.IOのインストール

次に今回はSocket.IOを使用したいので、Socket.IOをインストールします。

Socket.IOをインストールする方法
 →Socket.IOをWindowsにインストールする方法

node-serialportのインストールを行う

次にシリアルポート通信をNode.js⇔XBee⇔Arduino間で行いたいので、node-serialportをインストールします。

○node-serialportをインストールする
 →node-serialportをWindowsにインストールする方法

ロボットを組み立てる

次にロボットのフレーム部分を組み立てます。今回は去年作成したロボットをそのまま流用しました。

○ロボットの機械部分を組み立てる
 こちらの記事をご参照ください
  →ArduinoとXBeeを使用してロボットを遠隔操作する!

受信回路を作成する

回路は、去年作成したロボットの回路を基本的に流用しました。そのままだと通信ノイズのようなものが発生し、うまく動作させることができなかったので、一部回路を改良しています。

ブレッドボードを2枚並べて配線しています。
※回路について専門的な知識はあまり持ち合わせていないため、動作は保証しかねます。
※単3電池を4本使用している電源は、電圧が低いのかロボットの動作が遅かったため、今回はアダプタから直接電源を供給しました。

Node.jsとhtmlのコードを書く

Node.jsとHtmlのソースは以下のようになっています。
ソースはGitHUBに公開していますので、こちらからダウンロードしてください。

次にクライアント側のNode.jsのソースは以下のようになっています。

次にサーバー側のNode.jsのコードは以下のようになっています。

Arduinoのコードを書く

次にArduinoに書き込むコードは以下のように記述しています。

動くか検証してみる

では、いよいよ動かしてみたいと思います。
コマンドプロンプトを起動し、以下を入力します。すると、サーバーを起動できたことが確認できます。

ブラウザから以下を入力し、操作画面が表示されることを確認します。

画面が表示されたら、コマンドプロンプトには以下のように表示されます。

Fボタンを押すとブラウザから「F」が送信され、XBee経由でロボットが信号を受信して前進します。

Bボタンを押すとブラウザから「B」が送信され、XBee経由でロボットが信号を受信して後進します。

まとめ

今回は、ArduinoとXBeeとNode.jsを使用してWeb画面からラジコンを操作できるようにしてみました!
Nodejsの環境構築や、シリアル通信に手間取りましたがなんとか動かすことができました。
ここまでできたら、これをベースにしてもっとロボットに違う動きをさせたり、逆にロボットに取り付けたセンサーの情報を取得するといったこともできそうです。
これから他のことにも応用していきたいと思います!