はじめに
せっかくなのでIntel Edisonを使って、何か作ってみようと思います。実用性とかそういうことは考えずに、なんとなく思いついたものを出していければと思います。また、ソフトウェアというよりはハードウェアの面を前面に出していきたいと思います。
使用している「Intel Edison Module」などについて
- 本記事で試用している「Intel Edison Module」などは、インテル株式会社のご厚意により“さかきけい”個人に貸し出されたものです。このため私の勤務先等とは一切関係がありません。
- 本記事は“さかきけい”が完全に自由意思で書いているもので、インテル株式会社からは何らの要請、制限等は受けていません。
途中で機材を変更すると記事の連続性に難があるかと思いますので、発売後である今回も前回に引き続いて貸し出しを受けている「Intel Edison Module」と「Intel Edison Board for Arduino」を使用しています。
免責の宣言
本記事は“さかきけい”の作業内容を共有するためのものであり、何ら保証はありません。自己責任でのみ使用することができます。
作ってみたもの
今回はこんなものを作ってみました。下の動画を見てみてください(音が出ます):
これはWindowsパソコンに接続されたゲーム用コントローラーで動くIntel Edison Kit for Arduinoを搭載したブルドーザーです。
※撮影時点で手に目立つ傷がある状態であったために手袋を着用しています。
構成
使用したものは以下の通りです(カッコ内は今回実際に使用したものです):
- ネットワーク
- Wi-Fi親機/アクセス・ポイント(WPA2対応、DHCP対応)
- パソコン側
- ノートパソコン(HP Pavilion DM1-4009AU)※1
- XInput対応のゲーム用コントローラー(Logicool Rumble Gamepad F510)
- ブルドーザー側
- ブルドーザー(タミヤ 楽しい工作シリーズ No.104 2チャンネルリモコン ブルドーザー工作基本セット)
- Intel Edison Board Kit for Arudino(Intel EDI1ARDUIN.AL.K)
- I2Cモーター・ドライバー(Grove – I2Cモーター・ドライバー V1.1)
- USBポータブル電源(ソニー CP-V5W)
- 3.6V 900mAhの単三型リチウムイオン電池(UltraFire LC14500 Protected Li-Ion Rechargeable Battery)×2本
- スイッチ付き単三電池×2用ボックス(ELPA スイッチ&カバー付電池ボックス単3形*2本 UM-SC32NH)
- Groveベース・シールド(Grove Starter Kit Plusに付属のもの)
- Groveケーブル(Grove Starter Kit Plusに付属のもの)※VCC切断加工済み
接続図
パーツ
特に難しいことはしていません。市販品を接続しているだけです。一番難しいのはブルドーザーを組み立てることだと思います。※2ポイントはGroveケーブルのVCCラインをカットする必要があることです。※3
通常の単三電池と異なる電圧のリチウム・イオン電池を使用しています。誤って1.5V用の機器に入れると、かなりの確率でその機器を壊したり異常過熱させることになるので取り扱いには十分ご注意ください。
装着状況
ブルドーザーの上面に両面テープでUSBポータブル電源を固定し、その上に両面テープでスイッチ付き単三電池×2用ボックスとIntel Edison Kit for Arduinoを固定します。
Intel Edison Kit for ArduinoにはGroveベース・シールドを装着し、そこにVCCをブロックする加工をしたGroveケーブルでI2Cモーター・ドライバーに接続しています。また、USBポータブル電源からは付属の15cmのUSBケーブルで電源をボード上にJ16というシルク印刷がある方のMicro USBコネクターに接続しています。
※Intel Edison Board for ArduinoとGroveベース・シールドのジャンパーはすべてデフォルトのままです。
横から見ると、ブルドーザーの上に素直にUSBポータブル電源、スイッチ付き単三電池×2用ボックスおよびIntel Edison Kit for Arduinoが乗っている状態がわかりやすいかと思います。
UltraFire用バッテリーの電源ON/OFFや充電の際にも分解する必要がないように配置しています。
I2Cモーター・ドライバーはブルドーザー後方に画鋲で取り付けています。別に画鋲でなければならないということはありません。仮組みでとりあえず画鋲を使ってみたのがそのままになっているだけです(これでも悪くないなぁ、と思いまして)。
ブルドーザーのモーターとの接続は前述の接続図で示した色と一致するように接続しています。同様に単三電池ボックスからのコードも接続図で示した色と一致するように接続しています。特に単三電池ボックスの極性を誤るとI2Cモーター・ドライバーやそこに接続している各種機器を破損あるいは燃やす恐れがあるので十分ご注意ください。
※I2Cモーター・ドライバーのジャンパーはすべてデフォルトのままです。
ネットワーク
WindowsパソコンとIntel Edison Kit for Arduinoを親機(アクセス・ポイント)経由でLANに接続し、IPアドレス(v4)をDHCPで配布しています。この状態で使用することを前提としており、このメモでの動作もその状態で行っています。また、Intel Edison Kit for Arduinoを親機(アクセス・ポイント)として、そこへWindowsパソコンを接続させた状態でも動作することを確認しています。
なお、USBケーブルでIntel Edison Board for ArduinoのJ16側のUSBコネクターとWindows側を接続した状態では動作させないでください。設定によっては正常に動作しません。
ソフトウェア構成
Windows上で動作する専用アプリケーションからIntel Edison Kit for Arduino上で動作する専用スケッチにデータを送って操作する構成となっています。データはUDP/IP(ポート番号34567※4)で送信します。基本的にはWindows側からIntel Edison Kit for Arduinoへ一方的にデータを送信するだけですが、Windows側のアプリケーションが起動した場合に限り、Windows側アプリケーションからのブロードキャストを受けて、Intel Edison Kit for ArduinoからIPアドレスを知らせるための送信を行います。
複数のIntel Edison Kit for Arduinoで該当スケッチが動いている場合には、Windows側で一番最初に返信を受け取ったIPアドレスのターゲットが操作対象となります。
Windows側
アプリケーションはMicrosoft Visual Studio Community 2013を使用して作成しました。Unicode仕様(ソースコードはDBCSとUnicode両対応)で、通信はWinSock 2、ゲーム用コントローラーはXInputに対応しています。
起動すると以下のようにウィンドウが切り替わります:
- Intel Edison Kit for Arduinoを搭載したブルドーザーをネットワークで検索します。検索中は進行状況を表示します:
- もしも見つからなければそのことを表示して終了します:
- 取得したIPアドレスに対して、ゲーム用コントローラーから入力した情報を元にモーターの制御情報をUDP/IPで送信します。
Windows側の表示内容と入力について
Windows側ではXInput対応コントローラーからの入力と設定に基づいた情報とコントロール・モードを指定するための表示と入力を受け付けています。
Motor Status
モーターに対する出力情報を表示します。マウスなどによる入力は受け付けません。
左側がブルドーザーの向かって左側のモーター、右側が同右側のモーターに対する出力の大きさと方向を示しています。各モーターに対して、上側が前方向へ、下側が後方向への出力を意味しています。
制御モード(Control Mode)によってはコントローラからの入力がそのままモーターへの出力とはならないことを考慮して、コントローラーからの入力情報に基づいてどのようにモーターをコントロールするための値を決めているかを見るためのステータスです。
Control Mode
ゲーム用コントローラーからの入力をモーターの出力に反映させるための制御モード(Control Mode)は3モードがあり、それぞれ操作方法が異なります。
Direct
左右のアナログ・スティックの上下がそのままモーターの左右の強さとなります。上に入れると前進、下に入れると後進します。左右独立しているので、同じ強さで左・上、右・下と入れるとその場で回転します。
本ページの最初に掲載した動画はこのモードで動作させたものです。
One Hand
左のアナログ・スティックのみで操作する片手用のモードです。左のアナログ・スティックの上下で、左右のモーターとも前進および後進をすることができます。また左のアナログ・スティックを左右に倒すことでそれぞれの方向に回転します。さらに、左のアナログ・スティックの上下を入れたまま左右に倒すと、その方向へ曲がります。
Both Hands
一般的なラジコンのコントローラーと同じように、左のアナログ・スティックは上下で前進と後進を操作します。右のアナログ・スティックの左右で左折と右折を操作します。前進および後進をしていない状態で、右のアナログ・スティックのみで左右に操作するとその方向に回転します。
Network Status
Windows側のアプリケーションの起動時に検出したIntel Edison Kit for Arudino側で動作するスケッチのIPアドレスです。表示されている対象のIPアドレスに対してモーターの制御用パケットを送信します。
Intel Edison Board for Arduino側
Intel Edison Kit for Arduinoで動作するスケッチは、Windows側から送信されてくるUDP/IPを受け取り、そのデータをI2C(Inter-Integrated Circuit / アイ・スクウェアド・シー)でモーター・ドライバーへ流す動作と、Windows側からブロードキャストがあった際に応答する処理を実装しています。
モーター・ドライバーへの値はWindows側で計算しているのでスケッチでは受け取った情報をそのままモーター・ドライバーへ流すだけです。
ソースコードについて
使用条件
- このソフトウェアは現状のままで提供される、一切保証のないソフトウェアです。作成者および権利者は一切の責任を負いません。これに同意する場合に限り、本ソフトウェアを使用することができます。
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
ダウンロード
おことわり
セキュリティーを一切考慮していません!!
パケットの内容を一切検証せずにそのまま使用しています。Intel Edison Kit for Arduino側ではこのことによって特に深刻な影響があり、不正なUDP/IPによって最悪のケースではモーターを焼切る可能性があります。信頼できるネットワーク以外では絶対に使用しないでください。
フェイル・セーフを一切考慮していません!!
一定時間UDP/IPによる通信がない場合に圏外判定をして自動的に停止するといった、基本的なフェイル・セーフ機能を一切盛り込んでいません。稼働させる場合には十分ご注意ください。
同じ構成でも動かない可能性あり!!
今回の構成は筆者の環境では問題なく動作していますが、インテル株式会社の方が用意した同様の構成では正しく動作しなかったとの情報をいただいています。このため同じ構成にしたとしても相性などの原因によって動作しない可能性があります。
インテル株式会社による試作版「Eaglet(イーグレット) Rev.1.1」では動きません!!
今回の構成にI2Cレベル変換基板(秋月電子通商のAE-PCA9306)をJ2/J3オープン・J4/J5オープンとして「Eaglet(イーグレット)」を組み込んでみましたが、正常に動作したりしなかったりと安定しませんでした。実質的に動作しないと判断すべきかと思います。なお、これ以外のジャンパー設定の組み合わせでは全く反応しませんでした。
※スイッチサイエンスの「スイッチサイエンス版Eaglet (MFTバージョン)」ではテストを行っていません。
ウィルス/マルウェア対策ソフトウェアとの競合
ブロードキャストにてIntel Edison Kit for Arduinoで動作するスケッチを検索する処理が「疑わしい処理」としてブロックされることがあります。※7実際に疑わしいかどうかはソースコードをご覧になり、ご自身でご判断ください。
Windows側からスケッチ側のIPアドレスを見つけることができない場合には、ネットワーク設定とともにファイア・ウォールの設定やウィルス/マルウェア対策ソフトウェアの設定を確認してみてください。
まとめ
とりあえず動かしてみようと思って素直に組み立てたものです。なのですべて剥き出しです。使用しているパーツがすべてそのまま見えるようにするというのも目的のひとつでした。
それを今回公開するにあたってプログラムを大幅に改良して、それなりに動くようにしてみました。当初はコンソール・アプリケーションでIPアドレスは決めうちで、操作モードはDirect相当のみで、といった感じでした。ただ、それだとあまりにもあんまりかな~ということで、GUIとネットワーク・サーチ機能を追加してみました。そんなこんなをプライベート・タイムにしていたらあっという間に3週間ほどたってしまいました。
Intel Edison Board for Arduinoを使用していて接続用の端子には余裕があるので、センサーをいろいろと取り付けて自律的に動けるようにするとさらに楽しくなるかともいます。また、できれば「Eaglet(イーグレット)」でも動作させることができないかと考えています…。
私個人の感想としては、動かしてみて、またプログラミングをしてみて結構楽しかったです。やはり動くもの系はいいですね。
- AMD E-450 APU with AMD Radeon™ HD 6320 Graphics / SSDはIntel SSD 320 160GB(出荷時のもの) / メモリ8GB(出荷時から4GB増量)
- 時間があるときに気が向けばブルドーザーの組み立て方についても書いてみたいと思います。
- ほとんどのケースでカットしなくても問題なく動作すると思われますが、電気の流れの安定しないことになるのでカットすべきです。
- ポート番号はWindows側のアプリケーションとIntel Edison Kit for Arduino側のスケッチの両方の「
#define TARGET_PORT 34567
」の記述を変更してアプリケーションのビルドおよびスケッチのビルドと転送を実施することで変更できます。 - 実行用のEXEファイルなどは含まれないため、別途ビルドをする必要があります。
- ビルドと実機への転送が必要です。
- 私の環境ではSymantecのNorton Internet Securityが「SONAR が edisonbulldozer.exe (SONAR.Heuristic.120) で疑わしいアクティビティを検出しました」と表示してブロックするか許可するかの問い合わせをしてきました:
Kei様の本ページを拝見させていただきました。
ありがとうございます。
•Intel Edison Board Kit for Arudino(Intel EDI1ARDUIN.AL.K)をお使いとのことですが、
こちらは現在入手できないようで、「EDI2ARDUIN.AL.K」なら海外から入手できそうですが、
ちなみに「EDI1ARDUIN.AL.K」と「EDI2ARDUIN.AL.K」の違いがお分かりでしたらご教授
いただけますと幸いです。
お忙しいところすみません。
Product Change Notification#115730 – 00に記載された改定によってRev2になるとありますので、それが型番の変化になっているのではないかと思います。
変更の内容としては、Rev2ではEUへ輸入規則に適合するように付属の紙が改定されたとあります。それ以外の変更点はないと記載があります。
ですので、Rev2のボックスに含まれるボードでも従来と全く同じように使用できるものと思います。