工学ナビLocomoはArduino互換のロボットプロトタイピングボードです。無線制御の移動ロボットの開発を支援する目的で作られました。Locomoを使えば、DCモータやサーボモータを無線制御するロボット・システムを手軽に作ることができます。(公開:2013年10月31日/最終更新:2013年11月5日)LocomoとはLocomoは無線操縦のロボットのプロトタイピングのために作られたマイコンボードです。Locomoという名前は「locomotion(移動)」に由来し、主にモータ駆動の移動ロボットをターゲットとしています。通常そのようなロボットを作る場合、マイコンや無線モジュール、モータドライバなどの複数のパーツから構成される複雑な制御回路を自分で作る必要がありますが、それはなかなか負担の大きい作業です。その工程をショートカットしてくれるのがこのLocomoです。MR-9102)をLocomoを使ってPCから無線コントロールできるようにした例です。Wi-Fiを使っており、PC以外にもスマートフォンからもコントール可能です。このようにモータ駆動のモノを無線コントロールしたいときにLocomoは威力を発揮します。ハードウェア回路図(PDF)基板データ(EAGLE)DCモータ端子Locomoに接続できるモータは、タミヤの工作キットやおもちゃなどに使われている駆動電圧3Vの小型DCモータです。DCモータから伸びているコードを直接接続することできます。タミヤから発売されているモータ&ギヤボックス各種DCモータ端子にモータを接続した様子DCモータの制御には3種類のピンを使用します。ピンの割り当てと動作モードを以下の表に示します。FWDとREVでモータの回転方向と停止の制御を行い、PWMによって速度制御を行います。DCモータ1を正転させたければ、D2をHIGHに、D4をLOWにして、D3に0〜255の範囲でアナログ出力します。ブレーキ(停止)サーボモータ端子サーボモータ端子には5V駆動のサーボモータを合計2個接続することができます。PWM」の順になっています。これとは異なるピン配置のサーボモータを利用するときは注意してください。サーボモータを制御するときは、PWMピンであるD9またはD10に対してPWM出力します。Arduinoには標準でサーボモータ用のライブラリ(Servo.h)がありますので、それを利用してプログラムを書いてください。D10センサ端子アナログピンA0〜A7に対して、電源供給のためにGNDと5Vをセットにして並べました。センサ5とセンサ6にアナログピンが2個含まれているのは、ロータリエンコーダのような2個の入力端子を必要とするセンサの利用を想定しているためです。アナログピンA0〜A7はピン設定によってデジタル入出力端子としても利用可能です。5VXBeeエクスプローラモードLocomoにはボード本体が「XBeeエクスプローラUSB」として動作するモードが搭載されています。一般的にXBeeの通信設定を行う際には、XBeeエクスプローラUSBに代表されるXBee用USBアダプタを使いますが、それがなくてもLocomo単体で通信設定が行えます。XBeeエクスプローラUSBLocomoをXBeeエクスプローラモードにするときは、XBee端子の左にある3つのスイッチで切り替えます。あとはXBeeエクスプローラUSBを使うときと同様の手順でXBeeの設定を行うことができます。通常モード3つのスイッチがすべて上側XBeeエクスプローラモード3つのスイッチがすべて下側Locomo本体の側面にあるボタンスイッチは、XBeeエクスプローラモードで使用するリセットボタンです。XBeeの設定作業中にリセットボタンを押す必要がでてきたときは、このボタンを押してください。※安全のため、DCモータとサーボモータにはUSBから給電されません。プログラミング・チュートリアル実際のプログラミングの手順について紹介します。作例として、PCやスマートフォンから無線操縦できる移動ロボットを作ることを想定して、2個のモータをWiFi経由で制御するものを作ってみましょう。動かすターゲットLocomoにバッテリ(単三電池×6)と2個のDCモータ(タミヤのダブルギヤボックス)を接続しました。左右の車輪が個別に回転することによって前後移動と左右への旋回ができる仕組みです。Wi-Fiが挿さっています。車体はいつか作るとして、ここでは2個のDCモータを制御する仕組みの作り方を解説していきます。PC、Locomo、電池、モータ&ギヤボックスPCとの接続確認PCとの接続はUSBケーブルで行います。LocomoにはFTDI社のFT232Rというシリアル通信モジュールが搭載されており、PC側からはUSBシリアルポートとして認識されます。Vista以降であれば、PCに接続したタイミングでドライバが自動的にインストールされます。ドライバが自動的にインストールされない場合やMacの場合は、こちらからドライバをダウンロードして手動インストールしてください。モータをコントロールするプログラムを作る(Arduino)LocomoにはArduinoと同じATMega328というマイコンが搭載されており、中にはArduinoのブートローダが書き込まれています。IDEを使ってプログラミングを行うことができます。IDEで以下の2つの設定を行ってください。「ツール」→「シリアルポート」でLocomoに対応するシリアルポートを選択サンプルプログラム以下はシリアル通信で左右輪のモータをコントロールするプログラムです。文字列の送信によって各モータの回転方向と速度を指定できるようになっています。R-100」のような文字列を受信すると、左モータを速度100で正転、右モータを速度100で逆転させます。LとRがそれぞれ左右のモータを意味しており、後に続く数値が速度です。数値が負のときに逆転になります。atoi(string);}まずはUSB接続した状態で動作確認プログラムをLocomoに書きこんだら、動作確認してみましょう。LocomoではXBeeによる無線通信だけでなく、USB経由でのシリアル通信も可能です(XBeeは挿したままでOK)。無線通信をやるときは接続上のトラブルが何かとつきものですので、XBeeでやる前にUSB経由でテストするのがおすすめです。R-100」のように文字列を送ってみてください。モータが意図通り回転したらOKです。モータが逆方向に回転するようであれば、DCモータ端子に接続しているコードを入れ替えてみてください。Wi-Fiを使ってWiFi経由での無線通信にトライしてみましょう。Locomoに搭載されたモード切り替えスイッチ(3つのスイッチ)を切り替えて、XBeeエクスプローラモードにしてください。XBeeエクスプローラモード:3つのスイッチがすべて下側PCでの操作について説明します。ここではターミナルからATコマンドを使って通信設定を行う方法を紹介します(なお、WindowsであればX-CTUというXBee設定ツールがありますので、そちらを使ってもOKです)。WindowsではTeraTermなどの適当なターミナルソフト、Macではscreenコマンドを使ってシリアルポートにアクセスし、以下のコマンド入力操作を行ってください。※黒文字があなたが入力する文字、赤文字がXBeeからの応答です。......ポート番号を16進数で設定。......無線LANから割り当てられたIPアドレスを表示192.168.100.102設定が終わったら、モード切り替えスイッチを戻して通常モードにしてください。Wi-Fiに割り当てられたIPアドレスを確認したら、Telnetで接続できるかチェックしてみましょう(ポート番号は9750)。R100」)を送信してモータが反応すればOKです。WiFi経由でコントロールするホスト側プログラムを作るWiFi接続がきちんと動作するのが確認できたら、今度はWiFi経由でLocomoをコントロールするホスト側のプログラムを作ってみましょう。ホスト側プログラムはTCPによるソケット通信ができる言語であれば、C++やJava、Processingなどなんでも良いです。ここではProcessingでの作例を紹介します。サンプルプログラム(Processing)PCからTCP通信によってLocomoをコントロールするプログラムを以下に示します。キーボード入力を行うと、Locomoに対してモータをコントロールする文字列が送信されます。キーを押している間モータが回転し、キーを離すとモータが停止します。ここで紹介したものはPCから操作するものでしたが、スマートフォンのアプリを作る場合でも基本は同じです。Processingであれば、上で紹介したプログラムをベースにAndroidで動作するものも作れます。以下のページにProessin、Java、Pythonによる通信プログラムのサンプルを用意しました。こちらも参考にしてください。GitHubLocomoの販売についてLocomoは研究・教育・ホビーなどの用途で利用したい人のために、量産・販売することを予定しております。「ウチで販売したい!」「学校の実験で使ってみたい!」「ここはこうしてほしい!」などのご意見・ご質問・コメント等ございましたら、ぜひぜひお寄せください。五十嵐デザインインタフェースプロジェクトで開発されました。