- 目標
インテル(R) Edison キット for Arduinoを使い何か作ろうと考えた時、特徴と利点を考えると以下を思いつきました。
- wifi、Bluetoothを使える
- Arduino互換である
- USB機器を使える
- これらが簡単に使える
さて、ここから何を作ろうかというと、
「移動できる監視カメラ」です!
よくマンガやアニメにあるような全自動で動き回るものや画像認識して色々するような機能は難しいので、
「簡単に」「遠隔から」「モーターを動かせる」「USBカメラ」を作ろうと思います。
- Set Up
まず初めにEdisonさんの初期設定をしましょう いざ、開封の儀!
まず初めに本体が出てきました。
Edison本体はだいたいSDカードのサイズと表現されるように非常に小さいです。
しかしこの中に
- wifi (技適認証済み)
- Bluetooth4.0
- メモリ1GB、内部ストレージ4GB、Atom CPU(2コア 500MHz 32bit)
- SDカード用、UART、I2CなどのGPIO 40ピン
等々が詰まっています。
技術の進歩を感じますね〜〜〜
他にもArduino互換ボードと説明書、本体固定用の小型ナットとボード用のスペーサーとネジが入ってました。
では本体をボードに固定しましょう
本体のIOはすべてこの小型コネクタに集められてるので刺すだけです。
あとはナットを付けて固定。
最後にスペーサーを付けて完成です!
さて、使う前にサイズ比較をしてみましょうか
比較対象はRaspberry Pi Bモデルと、皆大好き安心と信頼のFRISKケースです。
横の長さはwiriドングルとSDカードを刺したラズパイと同じ程度、縦はFRISKケースと同じ程度ですね。
(これはEdisonの小ささを生かせてないので完全に開発用ボードだな……)
ハードウェアは以上です。
次にソフト面を……
まず先に、私が使う環境は OS: Ubuntu14.04 64bit です。
(Windowsの方は申し訳ありませんがドライバー等のセットアップは自力で……)
まずは2つのmicroUSB Bにデータ通信可能なケーブルを差します。
そして外側のmicroUSBにつないだケーブルをPCに繋ぎます。
そしてscreenコマンドでシリアルコンソールにアクセスします。
「screenコマンドが入ってない!」という場合は入れましょう。
たぶん使ってるOSのパッケージマネージャで入ると思います。
(yum install screen とか apt-get install screen とか)
あと 「/dev/ttyUSB0 がないよ!」という場合は
# dmesg | grep tty
をやってみるとこんな感じに見つかると思います。
そして次に内側のUSBを繋ぐと、screenで繋いだシリアルコンソールにずらずら流れてくると思います。
やったね!Edison起動!!!
バージョン確認してみると、やはり古いですね……最新にしましょう
Intel公式から最新のYoctoOSを拾ってきます。
ついでに対応しているArduino IDEとSDKもダウンロードしておくといいかもしれませんね
私の環境はLinux 64bitなので上記のものをダウンロードしました。
使っているOSに対応しているものをダウンロードしてください。
さて、OSの書き換えも簡単で、
ダウンロードして展開してできたファイルを全部USBとして認識されているEdisonに
コピーしたあとにシリアルコンソールでreboot otaをして再起動するだけ
# reboot ota
そしてEdisonが2回勝手に再起動したら完了です。
では、こういった開発ボードの定番のLチカ (LEDチカチカ)をしましょう
ダウンロードしておいたArduino IDEを解凍し起動しましょう。
おそらく、解答されたファイルのなかにarduinoという実行形式のファイルがあると思うので
それをターミナルから実行します。
# sudo ./arduino
(root権限が無いと書き込めず失敗したのでroot権限有りで起動してください)
そして ファイル>スケッチの例>01.Basics>Blink を開きます。
あと ツール>マイコンボードからIntel(R) Edisonを選択、
ツール>シリアルポートが/dev/ttyACM0となっていることを確認してください。
こんな感じに点滅しましたよね!?
ブートからArduinoとしての機能が動き始めるのに30秒ほどかかっていますが、
本体横のLEDが点滅してると思います。
さて、EdisonはLinuxのファイルシステムからもGPIOをいじれます。
が、それはfor Arduinoという立場でやることではないので余裕があったら最後の方にやろうと思います。
とりあえず今回はここまで。
次はArduinoシールドとUSB機器を繋いでみたいと思います。
遅く始まったから早く作らねばっ!!
- Yocto Linuxのビルド
さて、今回はYocto LinuxというEdisonに使われているOSをビルドしようと思います。
正しくは「ビルドする必要に迫られました」
そもそもYocto Linuxというのはraspberry piやEdisonといった
PIC、AVRのように組み込こまれるサイズのコンピュータ向けに開発されているOSのようで、
組み込みコンピュータは基本的に使えるリソースが限られているため、
自分が必要な最低限の機能を持ったOSを作るために、
必要なパーツだけを集めてOSにしようという感じのものらしいです。
面白いことに、ビルドすればraspberry piにfirefoxOSを載せるということもできます。
まだはっきりとは理解していないのですが、完結に言うと
公式のYoctoではUSBカメラ、USB DACが使えませんでした。
そのため自前でビルドすることになりました。
。
今回はEdisonでUSBカメラを使うというそのまんまなことをやっている人がいたので以下のサイトを参考に、
同じことをしました。
その結果、公式とほぼ同じ容量のYoctoができたのですが、
600MBほどのファイルを作るために28GBも消費しましたよ…………
またcore i7の4コアで16並列したのですが、ビルドにはそこそこ時間がかかりました。
(ビルド始めて寝て起きたら終わってた程度)
バージョンチェックするとこのように
今回、UVC(USB video class)という、USBカメラなどの映像機器をUSBで繋ぐための
企画に対応したモジュールを追加したのでUVC対応等書いてあるUSBカメラが使えるようになった。
カメラにLOGICOOL HD Webcam C615を使用してmjpg-streamerでストリーミング配信ができた。
次はArduinoシールドを使ってみる。
・Arduinoシールドを使う
モーターを正逆転する回路を作るのは面倒なので、今回はArduino用のモータードライブシールドの
Ardumotoを使ってモーターを回そうと思います。
Ardumotoはスイッチサイエンスさんから購入。
・Arduino用モータドライバシールド「Ardumoto」
またモータはタミヤさんのダブルギヤボックスを使用しました。こちらはAmazonから
シールドをつけるとこんな感じに
このArdumotoは13番ピンと12番ピンのデジタルアウトに寄って回転方向を、11番ピンと3番ピンのPWM出力で回転速度をコントロールする仕様です。(Sparkfun公式より)
モータ電源を別電源から供給するため、心配だったのでArduinoからのVin端子のピンを切ってあります。
また、EdisonはPWMが4本しか出力できない関係で、Arduino互換にするために
ジャンパーピンによって6出力に切り替えられるようになっています。
しかしデフォルトの配置では3、5、6、9ピンからの出力に設定されていて、
11番ピンからPWMを出せなかったので、11番ピンも切ってあります。
こちらが動作確認用の動画です。
完成系は移動するため、Edisonの電源を006Pの電池から。
USBの出力でEdisonが落ちることを避けるために、セルフパワーのUSBハブを使い、
その電源をモバイルバッテリーから供給。
また、このUSBハブには電源を取るためだけのポートがあるので、Ardumotoの電源はここから取っています。
さぁここまでくればあとは組み立てるだけ!
・完成
と、いうことでできました!
MDFを基やボックスのサイズに切り抜いて全て固定しました。
大雑把な繋いだだけの動画で申し訳ない限りです……
さて、まずお気づきの方がいたらお恥ずかしい限りなんですが、
設計ミスがございます。
モバイルバッテリーをUSBハブの電源に使う予定でしたが、
そのバッテリーを積むスペースがありません!!!
(気がついた時はもう「嗚呼……」って感じでしたよ)
そのため、Edison後ろに伸びてるケーブルがバッテリーに繋がっています。
完全に独立させられませんでした。
しかし、構想製作合わせて1ヶ月半でしたが基本的に最初に考えた通り、
「簡単に」「遠隔から」「モーターを動かせる」「USBカメラ」を作ることができました。
さて、このカメラはOSビルド、Ardumotoの実験の通り、
Webカメラでとらえた映像をmjpg-streamerでストリーミング配信し、
Ardumotoからモーターを動かすことで自由に動かすことができます。
遠隔から動かす方法は、sshでこのEdisonにログインし、
Intelが出しているmraaというライブラリをpythonから叩くことで
3,9番ピンからPWM、12,13番ピンのHLを操作してArdumotoを動かしています。
またmjpg-streamerの機能に配信しているその時の映像の静止画にする機能もありますので、
今回はモーター操作時の入力コマンドに「画像保存」コマンドを追加しました。
この時の画像はさらっと今まで触れずに挿入されていたmicroSDカードに保存されます。
Edison本体のストレージは4GBと、いろいろ入れると気がついたら満杯になってしまう程度なのでmicroSDを使いました。
このSDカードはEdison上では\media\sdcard\にマウントされるのですが、
別のPCで見ることで保存した画像を見ることができます。
この写真はあくまでもストリーミングしていた映像から一定の感覚でフレームを取り出してきて
静止画として保存しておくものなので、ストリーミングの画質と同じになります。
この時はHD画質(1280*720)でストリーミングしていたので、
1枚当たり150kB程度のHDの写真が保存されるわけですが、
ストリーミングする解像度は変えられるため、おそらくフルHD(1920*1080)も可能です。
YoctoLinuxビルドしたり、EdisonでPWM出す方法を探ったり、プログラム書いたりと
少し慌ただしい一ヶ月半でしたが、なんとか動くものができて本当に良かったです!
前述の設計ミスのため、完全にはスタンドアロンにできなかったのですが、
それもベースとなるMDFのサイズをもう少し大きい物にするなどすれば解決できると思います。
実際の使用感ですが、やはりラズパイよりもスペックが良いからか、安定して動作します。
また006Pの9Vでも動いてしまったので、やはりラズパイよりも消費電力が低いというのも実感できます。
Arduino互換機となっているためArduinoシールドを使うことが可能ですが、
これだけのスペックのものをArduinoとして使うのはもったいないので、
Linux PCとして使い、PCならではの処理をさせつつArduinoシールドを使うというのが良い使い道かと思います。
長いようで短い一ヶ月半でしたが、これで私のレビューを終わらせていただきます。
ありがとうございました!!
jakeさん
2015/01/31
Node.jsで挑んで激しく苦労しました……(汗
正直すんなり実装されてるのが羨ましいです。
バッテリーですが、薄いバッテリーならシャーシを伸ばして
キャスターとモーターの間あたりにぶら下げてみてはどうでしょうか?
重量物は低い位置に置いたほうが、安定しますよ。
ちばとどさん
2015/01/31
ビルドはちょっとたいへんそうですけれど。
Edisonが電池でも実用可能なら、互換ボードから外すとウエアラブルな何かが出来そうです。作りたくなってきました。