Upload
yusuke-ohmichi
View
3.350
Download
4
Embed Size (px)
DESCRIPTION
第13回Android勉強会in札幌にて「ADKを使って音声コマンドで操作する戦車を作ってみた」として講演した時の資料です
Citation preview
ADKを使って音声コマンドで操作する戦車を作ってみた
第13回Android勉強会in札幌
at 2012/6/2(sat)
大路 裕介(まいむぞう)12年6月2日土曜日
あばうと・みー札幌のWeb/スマートフォン系フリーランサーです。最近はAndroid専業になってます。
元々Web系プログラマーです。単独のサーバからAmazon EC2やGAEを使ったクラウドまで、サーバ構築からシステム開発まで一人でやってます。
最近はOpenCVやKinectや電子工作やってます。
日本Androidの会の北海道支部長をしています。
12年6月2日土曜日
あばうと・みー
ラジコンは好きです。
元々電子工作には興味がありました。
でも最後にハンダゴテを触ったのは、高校の工作の時間だった気がします。
電気の小難しい理論はわかりません。直列繋ぎと並列繋ぎはわかります。(えっへん)
一方、電子工作に関しては...
12年6月2日土曜日
こんな僕でも、音声コマンドで動く戦車を作ることができたので、
その過程をお伝えしようと思います
12年6月2日土曜日
まずはどんなもんか動かしてみましょう
12年6月2日土曜日
全体構成
ADK Android
Android
直流コード USB
WiFi (XMPP)
コイツしゃべる
コイツ日本語わかる
コイツ動く
12年6月2日土曜日
何を作ろう?せっかくなので、動くものがいい
ラジコンを改造しよう!
どんなラジコンを改造しよう?
ヘリコプター → × 操縦が繊細過ぎる
車 → × 速度が早すぎてハンドル操作が難しそう
戦車 → 鈍いし、キャタピラなので安定してる
◎ 操作がラフでもOK12年6月2日土曜日
戦車を買うヤフオクでジャンク扱いのものを買いました
基盤は死んでてもどうせ捨てるので
挫ける可能性を考慮し最初は安いやつを狙う
12年6月2日土曜日
まずは戦車を動かしてみるマジにゴミだと困るので、一応動くことを確認多少壊れてるけど一応ひと通り動くようだ
12年6月2日土曜日
戦車ラジコンの構造基本的に、左右のキャタピラそれぞれにモーターが付いている両方回せば前進、右だけ回せば左旋回、両方逆回転すればバック
12年6月2日土曜日
立止マッテ考エルこのプロポ、左右ともに上下しかついて無いよねでも、戦車にはBB弾を発射する機能ついてるよね
12年6月2日土曜日
はい、変なの引いたー( ´_ゝ`)
12年6月2日土曜日
戦車をバラすそうは言っても買ってしまったのでしょうが無いバラして構造を確かめ、テスターを使って電圧を計測する
戦車が届いて5分後の状況
12年6月2日土曜日
どうやら、右キャタピラを逆回転させると、
BB弾を発射するらしい。変なの。
(そういうギヤボックスになってる)
12年6月2日土曜日
調査結果
搭載しているバッテリーはマンガン電池単三4本直列(1.5V×4本=6.0V)モーター2つだけで動いているモーターはそれぞれ6.0Vで動いているらしい左キャタピラは前後に動くが、右キャタピラはバックさせるとBB弾を発射するモーターを逆回転させるには、+と-を入れ替えれば良い(一般的にそういう構造)
12年6月2日土曜日
基本方針を考える
Arduinoには5V電源が必要、かつモーターを回すと電圧が下がり5Vをキープできないので、別途バッテリーを積む必要がある
とりあえず最初はブレッドボードで回路を組んでみて、動いてから細部を考える(というか、最初から細部まで想像できない)
12年6月2日土曜日
モーターを逆回転させる方法ソフトならif文でできることが、電子工作だと意外に面倒らしいググってみたら、Hブリッジという回路が必要らしい
こうしたい Hブリッジ概念 実際の回路図
12年6月2日土曜日
ごめん、いろいろ無理!(>_<)
12年6月2日土曜日
モーターを逆回転させる方法さらに調べると、Hブリッジ回路を内蔵したドライバ(IC?)があるらしい使い方は単純に結線するだけ!
すばらしい!!
こんなの
前進・後退・停止はデジタル出力でコントロール。PWMを使ってアクセルコントロールも出来る。モーター駆動は別電源を使える
12年6月2日土曜日
ブレッドボードで組むそんなこんなで、一旦できました!でも問題点山積み...頭でっかち!そして重い戦車に載り切らない...動かない...電流は来てるっぽい
12年6月2日土曜日
対策を考える(その1)そもそも何故動かんのだ?逆さにするとキャタピラは動く。でもトルクがないので走ることはできない。9V電池を4個直列繋ぎ(=36v)にしてみる → 煙が出るそもそも、単三電池4本(=6v)で動いていたはず!単三電池6本(=9v)のケースを見つけた。これならいけるんじゃね? → 動いたよくわからんけど、9v電池だと出力できる電流が足りないとかなのかな?動く要素は電圧だけじゃないんだ。へー
12年6月2日土曜日
対策を考える(その2)USB給電用のバッテリーでかすぎ!コレはラジコンのバッテリーボックス(単三電池4本)から取るように変更接続用のコネクタはハンダ付けして自作電圧がちょっとぐらい変わっても動くはず!
12年6月2日土曜日
対策を考える(その3)Arduino Mega-ADKでかすぎ!使ってないポートが多すぎる! むだムダ無駄!!最近発売されたHarpy-Nanoってのが、ちっちゃくて安くて良い感じ!
ADK互換Arduino互換
デジタル入出力6ポートアナログ入力7ポートこれで¥2880!!
(HarpyNano単体の場合)参照:harpyhack.com
12年6月2日土曜日
対策を考える(その4)そもそもブレッドボードでかすぎ!ユニバーサル基板を使えば、小さくできるかも!?部品をはんだで固定し、自分で配線するおれのハンダゴテが火を噴くぜ!
ユニバーサル基板の例
表
裏
12年6月2日土曜日
ユニバーサル基板で組むホントに火を吹いた実際に部品がハンダゴテに焼かれてしまった!!でも、なんとかできたすごく小さくなった!でも、収まりが悪い作り直しだ…
12年6月2日土曜日
ハード部分完成今度こそ完成!
HarpyNanoとユニバーサル基板をソケットで接続した。収まり良いのでオススメ!ケースは名刺入れのプラケースを削った
12年6月2日土曜日
さて、いよいよソフトウェア実装です
12年6月2日土曜日
ADKの制御
ADKのリファレンス実装を理解することは大切だけど、あれを毎回書くのは大変
Javaコード部分は、要はシリアル通信なので、送信と受信をシンプルに実装した汎用クラスを使い回せば良いと思う
12年6月2日土曜日
ADKCore(自作クラス)ADK制御用自作クラスADKCoreを作ったインスタンスを作って
面倒な処理は全部移譲
12年6月2日土曜日
ADKCore(自作クラス)ADKへのメッセージ送信はsendCommand()
メッセージ受信はReceiveListenerを使う
これだけ。
12年6月2日土曜日
音声コマンドの実装android.speech.SpeechRecognizerというクラスを使うと、音声認識した結果の文字列を取得できる
12年6月2日土曜日
音声レスポンス
本当は映画などから必要な音源をピックアップしたかったけど、あまりに語彙が少なくて断念。AndroidにしゃべらせることにしたAndroid標準のテキスト読み上げシステムText to Speach(TTS)は、日本語をサポートしていない2011年9月にKDDI研究所よりN2 TTSという、標準フレームワーク互換の日本語読み上げシステムが提供された。現在はPlayストアからN2 TTSを無料でダウンロードでき、TTSとして登録した後、日本語を渡すと読み上げることができる
12年6月2日土曜日
音声レスポンス使い方
APIDemosと同じコードで十分動きますLocale.JAPANを指定するだけ
12年6月2日土曜日
リモートコントロール
やっぱ人として、手元のAndroidを使って、ラジコンを操作したくなりますよね?
せっかくアンテナ取ったのにね。
IP指定でソケット通信してもいいけど、将来的に複数の端末を協調動作させたいので、ちゃんとしたプロトコルを使いたい
12年6月2日土曜日
リモートコントロール今回はXMPPを使う
GTalkとかJabberに使われてるプロトコル。要はIMとして必要な機能のためのプロトコル今回は、手元のAndroidからラジコンに乗ってるAndroidに、テキストメッセージを渡してコントロールする(複雑なデータならJSONでもOK)でも最近XMPPは下火で、ちゃんとメンテナンスされているAndroid用XMPPライブラリが少ない今回はasmack-android-7というライブラリを使用する。コードはステップ数が結構あるので割愛
12年6月2日土曜日
まとめ
電子工作おもしろい。
みんな手を付けてない(=比較的簡単に解決できる問題が身近にたくさん残っている=ビジネスチャンス!?)
タブレット型Android+ADKを使った自作デバイス+自作アプリ(+サーバ)の組み合わせで、業務用システムを作る機会が増えてくるのでは?
12年6月2日土曜日
おしまい
ご清聴ありがとうございました
12年6月2日土曜日