お急ぎの方は記事中盤【完成編】からどうぞ 2015/9/29追記
※使用サンプルスケッチ
[WiFi Web Server] [StringLength] [SwitchCase] [LiquidCrystal]
○はじめに
みなさんこんにちわ。なんちゃってサンデープログラマのhakonekoです。
縁あってまたもやEdisonのレビューを書かせていただくことになりました。
今回は欲張って2台のEdisonを使った電子工作にチャレンジしてみようと思います。
○インテル(R) Edison キット for Arduino とは?
ざっくり言うと「SDカードサイズの無線機能内蔵コンピューター」でございます。
小さくても中でしっかりLinuxが動いていて、しかも無線やBTも使えるもんだからとっても便利。
流行りのIOT(身の回りの“モノ”が“インターネット”に接続して情報を送受信できる仕組み)を作るのにはもってこいのデバイスですな。
ただRaspberry Piに比べるとイマイチ人気が……っていいんです。大人はそんなこと関係なく楽しく元気に電子工作に勤しむのです。強がってなんかないんだからね、
Edisonボード自体はSDカードサイズでとっても小さいのだけお、残念ながら単体ではうんともすんともいいません。使うにはこれに「拡張ボード」と呼ばれる下駄を履かせてあげる必要があります。
今回利用する拡張ボードはArduino互換のボード。
Ediso単体比べるとかなり大きくて若干引いてしまうでかさですが、ボード上に設置された各種ポートや、なによりArduino互換のシールド(さらなら拡張ボード)やスケッチ(Arduino用開発言語)を利用できるのが一番の強み。これでぐっと利用の間口が広がります。
詳しくは公式サイト
http://www.intel.co.jp/content/www/jp/ja/do-it-yourself/edison.html
や前回レビュー
http://zigsow.jp/?m=zigsow&a=page_fh_own_item_detail&own_item_id=285562
を参考にしてみてください。
○ファームウェアがあがったみたいだよ。
去年ぼくがEdisonをいじった時より後に、新ファームウェア「Var2.0」が今年の2月に発表されていたみたいです。主な変更点は以下の4つ。
1. アクセスポイント不要でWi-Fi接続可に
2. Bluetoothのアップデートでオーディオのストリームが可能
3. 周辺機器とのBLE接続もOK
4. IoT通信ライブラリの機能拡張
なんと!アクセスポイント不要でEdison同士が通信したり、Bluetoothの機能が強化されているではないですか!
これはもう神様「Edison同士を通信させなさい」とってるも同然!というわけで、今回は「2台のEdisonに通信させる」事に挑戦してみたいと思います。
※現在ではさらに機能追加がされた「Release 2.1」が2015年5月7日付(日本時間では5月8日)で発表されてるみたいですね。一応ご参考に。
https://software.intel.com/en-us/iot/hardware/edison/downloads
○今回作りたいもの
さて、今回のテーマが「2台のEdisonに通信させる」に決まったのはいいのですが、電子工作として具体的になにを作ればいいでしょうか?
すぐに思いつくのは「無線機」とかですかねえ。でも前回レビューの反省点として「動かない工作は地味」という事に気がついてしまったので、今回は元気に動き回る電子工作を作ろうと思います。
動き回るといえばラジコン!子供の頃は早起きしてタミヤのRCカーグランプリ
https://ja.wikipedia.org/wiki/タミヤRCカーグランプリ
を欠かさずみていた僕としては是非とも挑戦してみたい題材です。
Edisonをリモコンの送信機と受信機に見立て、ステアリング制御はややこしいのでモーター2機を左右並列に設置してそれぞれ独立して制御。あれ?これじゃ戦車だな。まあいいや。っていうかむしろ戦車かこいい。キャタピラ大好き!
ということで、今回挑戦するEdisonを使った電子工作の題材は
エジソン&パンツァー「Edison2台で使ってラジコン戦車を作ろう!」
に決定でございます。
○開封から組み立て
ZIGSOW本部からEdisonが送られてきました。ちゃんと2台入っています。もはや後にはひけません。さっそく開封して組み立てを行います。
Edison本体は前回のレビューと同様「エジソン先生の顔」が描かれたパッケージに梱包されてきました。開けるとEdisoの本体チップと拡張ボード。それを固定するネジが入っています。っていうかそれ以外は全然なし。
親切な取り扱い説明書がないのはもちろん、電源コードも通信ケーブルもありません。玄人歓迎ゆとりさんさようなら。必要なものくらい自分でわかってるでしょ?といわんばかりのスパルタっぷりは相変わらずです。まあこんな商品買う人なら困ることもないでしょうけど。
さっそく本体チップと拡張ボードをねじ止めします。っていうか組み立てはこれだけです。どんなに機械音痴の方でも5分とかかりません。これにPC通信用と電源用のマイクロUSBケーブルをつないでPCに繋ぎます。さてここからが本番ですぞ。
○ファームウェアの確認とアップデート
※Edisonと母艦(今回もMac)との詳しい接続方法は前回レポート
http://zigsow.jp/?m=zigsow&a=page_fh_own_item_detail&own_item_id=285562を参照ください。
さっそく2台のEdisonのファームウェアVerを確認してみます。
最新版になっているかな?と期待しつつターミナルから「cat /etc/version」と打ち込んでみると……。
「2014-08-20_15-54-05」
ほぼ初期ロットのVerやないかーい!
※あんまりがっかりしすぎて写真撮り忘れてくらい。
まあ憂いでいてもしかたない、さっそくファームウェアのVerアップ作業を始めましょう。
Edisonの最新版ファームウェアは公式サイトにありました。
https://software.intel.com/en-us/iot/hardware/edison/downloads
ここから常に最新版のファームウェアや開発端末用のSDKがダウンロードできるようです。
さっそく「Intel Edison® Board Firmware Software Release 2.1」と書かれたファイルをダウンロードしました。
ここから先は前回レビューと同様、一度Edison内の旧いファイルを削除し、新しいファイルを上書きしてリブートすれば終わりなはずです。前回はおっかなびっくりコマンドを叩いたものですが、今回は慣れているのでさくさくと作業は進みました。よし、あと再起動すれば終わりだねってとこまできて、起動中の流れるコンソールの文字を追いかけていたら異変に気がつきました。
[FAILED]Failed to status Hostname service
あれ?おかしいな。なにか手順間違ったかな?と思いもう一度最初からやり直すも結果変わらず。まさか最初の最初でつまづくとは……。
仕方ないので他の人の例を探すもそこは不人気っぷりに定評のあるEdisonさん。なかなか該当する記事がみつかりません。小一時間ほどはんべそでGoogle先生に聞きまくっていると、一つの記事をみつけました。
Intel® Edisonを使ってみる−セットアップ編②(Firmwareアップデート)
http://workpiles.com/2015/07/intel-edison-setup2/
なんと!落としてきていたファイルが悪かったとの新事実。それは何度やってもうまくいかないはずですわ。
あらためて違うファイルを落とし、ファームウェアのアップデートをかけるとすんないうまくいきました。なんだよもう。
○初號戦車をLEGOで組む
Edisonの初期設定はうまくいったので、今度はラジコンのハード側を考えてみます。
今回は2台のEdisonを送信機と受信機に見立ててラジコンを作る予定ですが、受信機Edisonを積んで元気に走り回る戦車を用意しないといけません。
色々と考えた結果。以下のLEGOブロックモデルを使って戦車を作る事にしました。
42028 トレンチティガー
http://www.lego.com/ja-jp/technic/products/42028-bulldozer
これの後部をとっぱらって荷台を設置、Edisonをそこに積載させようという作戦です。
コントロール自体はLEGOモデルにモータを積み、それをLEGO純正の赤外線で制御できるような仕組みをつくりましょう。Edison側からは赤外線でLEGOを制御するからくりです。これならEdisonに繋がなくても普通にLEGO単体で遊ぶ事もできます。え?それならEdisonいらないんじゃないかって。そういう無粋な事をいう大人は嫌いです。
トレンチティガーを組んだあと、LEGO純正のパワーファンクションキットを無理くり組んで自走可能なラジコン戦車に改造をします。モーターは2機搭載。無駄にライトをつけたりするギミックもつけました。さっそく試運転してみましょう。
あれ?なんか遅いような。しかもしばらく走らせていたらガリガリ言って片方のキャタピラが動かなくなってしまいました。
バラバラにして確認してみると、モータの動力を車軸に伝えるウォームギアをとめているブロックが割れていた事が判明。おもったより車体の重量があったせいで部品の強度がもたなかったようです。むうこれは致命的。
○初號戦車(改)の製作
色々考えたけ結果。めんどくなってギアとか使うのが馬鹿らしくなり「直は効くぜ〜」とばかりモータに直接動輪をつけてしまうという荒技で解決する事にしました。みた目はあまりかわっていませんが車体下半分はほぼ作り直しです。でもこういうトライ&エラーが人間を強くすると信じてもくもくとブロックを組み替えてついに初號機(改)がついに完成しました。
どうですかこの機動性!通常の3倍の速度で迫ってくるこの迫力!これが求めていたものですよ!
というわけでこの高軌道戦車をいよいよ赤外線で制御することに……ってあれ?赤外線制御ってどうやるんだ?
○挫折、そして弐號戦車へ
前回レビュー家のエアコンを制御した時はIRKitデバイスという神機械で楽々赤外線を制御したものでした。
http://getirkit.com
今戦車についているモーター2機を制御したかったのですが、ここで問題は多々発生します。
・モーター2機「動かし続ける」信号を断続的に発信しないと戦車は前進できない。
・そもそもモーター2機を同時に制御するには信号を2波用意しないとむりっぽい。
・制御信号は読み取れても、その信号を「断続的」に出力する方法がわからない。
・しかもスケッチ上で赤外線を扱おうとすると #include <avr/interrupt.h>が読み込めないよというエラーがでてコンパイル通らず。
一ヶ月ほど悩み、苦しみ、そしてでた結論は……
赤外線、あきらめよ。
という結論。すなわち赤外線制御以外の方法でLEGO戦車を制御するという作戦です。
ここまでせっせと作ったLEGO戦車も泣いていますが仕方ない。電子工作というのは壁にあたるものなのです。むしろここで決断できたことに感謝すべきですチクショー。
ということでファーストインプレッションはとりあえずここまで。
次回完成編をお楽しみに。
【完成編】2015/9/29追記
★前回までのお話
・Edison2台でラジコン戦車をつくるよ!
・届いたEdisonのファームウェアが古いので新しくしたよ
・LEGOで戦車を作ったよ(壊れたけどなおしたよ)
・あれ?赤外線通信てどうやるの?
というところまででした。
今回はそこから先の完成編まで一気にご紹介させてただきます。はりきっていきましょう。
○作戦の変更を行うッ!
前回あえなく諦めた赤外線にかわる方法を検討します。
試行錯誤した結果、以下の作戦を実施することにしました。
・Edison同士の無線のやりとりはWifiで行う。
・送信側のEdison側にWebサーバを用意、コントローラーの情報そこに書き込む処理を用意する。
・受信側は一定間隔でWebサーバにアクセス、コントロール情報を取得する。
・取得したコントロール情報に従ってモーター2台を制御する。
図にするとこんな感じ。
相変わらず絵心はないのは気にしない方針で。
うまくいけば送信側のコントロール情報を元に、受信側のEdisonが上手にモーターを制御してくれるはず。
さっそく開発に入ります。
○リモコン送信機の開発
今回使用するEdisonは2台。まずは送信側の開発をしてみましょう。
送信側に必要な機能はだいたいこんな感じ。
1.EdisonによるWebサーバーの立ち上げる。
2.コントロールスイッチを2系統用意、それぞれON/OFF信号取得してWebサーバにUPする。
さっそく一つつづやってきましょう。
1.EdisonによるWebサーバーの立ち上げる。
サンプルスケッチ[WiFi Web Server]の利用
まずはEdisonをWebサーバー化しなくてはいけません。
使用するスケッチサンプルは[WiFi Web Server]
上のほうにある設定値
を書き換えて、そのままEdisonに書き込み!簡単簡単と思いきや。
あれ?なんか画面かわならいんですけど?
調べてみると、どうもWiFi Web Serverを使うには一度Edison側でデフォルトで立ち上がるWebサーバを停止しなきゃなあらんとのこと。めんどいなあ。
参考URL[やってみよう!Edisonでつくる サーバー編]
http://goo.gl/8QB6m6
EdisonLabBlogの記事従ってコマンドを叩いてデフォルトのWebサーバを停止させました。
でもこれ、電源を切るたびにゾンビの如く蘇るらしい。いちいち仕方ないけどしばらくは我慢です。
まあ今回はとりあえず毎回コマンド叩いて停める事にしましょう。悲しけどこれしきたりなのよね。
2.コントロールスイッチを2系統用意、それぞれON/OFF信号取得してWebサーバにUPする。
サンプルスケッチ[StringLength]の利用
送信側のEdisonにつなぐスイッチはGroveスターターキットについてきた「タッチセンサ」モーターを二つ制御したいので2個使います。安いからもう一つ買ってきたよ。
それぞれのスイッチが押下されているかどうかを判断して、戦車をコントロールする作成ですな。
※本当はGroveのベースシールドに差し込んで使うものなのだけど、ベースシールドは車体側で使うので今回は配線をぶったぎって直差し。Groveシステムの意味が全くないですが動けばよしとします。ひっぱるとすぐ抜けちゃうので優しく触りましょう。
https://www.switch-science.com/catalog/1293/
スイッチが2つなのでコントロール信号は2ビット。今回はそれを以下の信号に割あてました。
スイッチA[0]:スイッチB[0]→どちらも押されてない=[停止]
スイッチA[1]:スイッチB[1]→どちらも押下されている=[前進]
スイッチA[1]:スイッチB[0]→Aだけ押下されている=[左旋回]
スイッチA[0]:スイッチB[1]→Bだけ押下されている=[右旋回]
え?逆進がないって?うん、考えてませんでした。でも男は前進あるのみパンツァーフォー!
スイッチからきた信号をサンプルスケッチ[StringLength]を使って切った貼ったを実施。それをWebサーバ側にUPします。ブラウザでみるとこんな感じ。
おーでたでた。11ということは前進でありますな。あとはこれを受信側でうまく処理できれば戦車が動くかも!
○弐號戦車の開発
次にいよいよ受信側、Edisonを積んだ戦車の開発をしてみましょう。
モーターの制御は[I2Cモータードライバ]で行います。
https://www.switch-science.com/catalog/827/
外部電源の取り込みもできるのでパワフルに動くはず。
ついでにただ動くだけでは寂しいのとデバックがしずらいので、LCD液晶も積んじゃいましょう。
https://www.switch-science.com/catalog/1629/
コントロール信号ごとに色が変わるときっとかっこいいぞ。
というわけで受信側に必要な機能はざっくりこんな感じでしょうか。
1.Webサーバーからコントロール信号を受信、モーターを制御する。
2.コントロール信号に従ってLCDの表示を変更する。
前回レビューに引き続き、戦車本体は良い子の味方LEGOブロックで作成します。
ヤフオクで入手した型遅れのMindstormsの部品を使って無限軌道の車台を作成しました。
電源周りももLEGOのパワーファンクションキットから流用。大砲こそついていないけどキャタピラがつくとそれっぽくなりますね。
1.Webサーバーからコントロール信号を受信、モーターを制御する。
サンプルスケッチ[SwitchCase]の利用
先ほどサーバー化した送信側Edisoんからに対して定期的にコントロール信号の値を取得します。
今回は取得したコントロール信号に従ってSwitchCase文で分岐を制御、二つのモーターを制御しました。
お、動いた動いた。相変わらず後ろには進みませんが、どうやらうまくいったようです。
2.コントロール信号に従ってLCDの表示を変更する。
サンプルスケッチ[LiquidCrystal]の利用
モーターが動けは一応戦車は動くのですが、せっかくなのでLCDの表記を変えてみましょう。
送信側Edisonから取得したコントロール信号に従って、下記のようにLCDの表記を変えてみます。
00=[停止]→[Stop!]の表記、バックカラーは赤
11=[前進]→[Go!]の表記、バックカラーは緑
10=[左旋回]→[Turn!]の表記、バックカラーは青
01=[右旋回]→[Turn!]の表記、バックカラーは青
これなら遠目でもLCDの色で今どんなコントール信号を受信しているかがわかるようになりました。
ついに完成です!長かった……。
※ちょっとだけ動画も。机がせまいのでキャタピラの動作は台の上でやってます。
○[おまけ]幻の参號戦車の紹介
実はこのレビューを書くにあたり、日の目を見ることのなかった幻の作品がいくつか存在します。
そのうちの一つがこれ、EVShieldを装備した参號戦車です。
EVShieldはLegoのMINDSTORMS規格でるEV3またはNXTのモーターを直に制御できるArduinoのシールド。
これさえあればMINDSTORMSのモーターをEdisonからこまかく制御できるはずでした。
しかし実際は赤外線の時にひっかかった#include <avr/interrupt.h>のエラーがでて動かず……。
せっかくKickstarterから大金出して船便で取り寄せたのに。こいつのおかげでただでさえキツかった開発費が大幅赤字に転落。ちゃんと使えるかどうか確認しないで買った僕が悪いんですけどね。
組み立ては簡単だけど、もう少し説明があっても。
同梱物が少ないのはシンプルでいいのですが、全く説明がないのはちょっと不親切。Arduino拡張ボードの各端子の説明とかあってもいいかと思います。
あとせめて電源ケーブルくらいは同梱してほしかったです。僕はたまたま余っているマイクロUSBケーブルがあって大丈夫でしたが、みんながみんなそうでもないと思うので。
スケッチサンプルはすごく楽ちん。楽しく電子工作できます。
今回はEdison2台を使って通信をするという目標でレビューさせていただきましたが、思いの他たいへんでした。
本当はWifiにぶら下げる形じゃなくて、個々に赤外線でやりとりさせるか直接2台の端末をBluetoothかWifiでアドホック接続させたかったのだけどそれは次回に宿題です。
それにしてもスケッチの例が数多く用意されているのはやっぱり便利ですね。色々なスケッチの例を切った貼ったして自分好みの動きをさせるのは楽しかったです。
yosyos888さん
2015/08/17
が、まだ手が進みません。
険しい道ですが、頑張りましょう。