2010年3月末で仕事が終わりになり時間ができたので、3才の孫(男の子)が遊べるおもちゃを作ることにした。動くものに限ると思いあれこれ検討した結果、以前息子用に買ってあったレゴのマインドストームを使うことに決めた。制御は自作することにしてネットでCPUの調査を行い、昔ながらのDIPのパッケージが自作向きなのでPICを使うことにした。 いくつかおもちゃを作成し、自分用のメモを作っておくことにしたがついでなのでブログを作成して公開することにした。 写真と動画を見て笑っていただきたい。 なお、1ページで表示できなくなってきたので、以前のものを見る場合は、このページの最後の「前の投稿」をクリックしてください。
2011年4月21日木曜日
3.2 双方向になったPC用赤外線リモコン
自分で駐車場に停まる車を作っているとき、超音波のセンサーの測定値が怪しいことに気がつき、測定値を調査してみることにした。デバッガだと毎回動作を止めないとデータが見れないので、動作状態で測定値を見る仕組みを作ることにした。
以前、声で動かす偽バイクのときに、PCに接続して使う赤外線リモコンを作成してあるので、これに赤外線信号を受信してPCにシリアルで送る機能を追加し、車に赤外線LEDをつけ、これで測定値をPCに送ることにした。
四輪車からの赤外線信号送信
PICの基板に赤外線LEDを追加した。ついでにこれまで外付けで使っていた赤外線受信器も基板に追加してある。
4番目の写真右下の黒いものが赤外線受信器で、スイッチを挟んで反対側にある白い円筒形のものが赤外線LEDである。
距離を測定し、駐車処理を行った後に、送信要求がオンになっていれば、その時点のセンサーの状態を送信する。送信要求は、リモコンの「プログラムナビ」ボタンを押すとオンになり、駐車中もオンになる。
駐車場からの超音波の発生間隔の200ms毎に送信することになるので、その間に送信できるよう、1回の送信データは6バイトとした。
送信データは、
Byte0: 駐車モード
Byte1: 距離のフラグ
Byte2,3: 駐車場からの超音波、右-左の時間差
Byte4,5: 自分で送信した超音波、右-左の時間差
リモコンでの赤外線信号受信とシリアル信号送信
赤外線受信器を基板に追加した。また、シリアル信号送信のため、USB-シリアル変換基板のRXD端子にPICからの信号を接続した。
メインループで赤外線入力を監視し、データを受け取る。正しいデータが受信されると、6バイトのデータをシリアルで送信する。送信時はタイマー割り込みでシリアルのタイミングを管理する。
PC->LegoとLego->PCの両方の信号を扱い、タイマーなどのリソースを共用しているので、どちらかの処理が行われている間はもう一方の入力を無視するようにした。
PCでのシリアル信号受信
ハイパーターミナルでシリアル信号の送・受信を行う。
キーボードの'f'をタイプすると車が前進し、'b'で後退、's'で停止する。
Legoからの信号は1バイトずつヘキサで表示される。
測定値
毎回値がバラツクことが一目でわかる。最後の写真の一番左の数字が08のところが車が停止して角度を測定しているところであるが、この間の測定値(Byte4,5)は0x0Bから0x17までの値になっており±6のバラツキがある。8回の平均をとり、なんとか使えるようになった。
登録:
コメントの投稿 (Atom)
アンフィニの娘です。昨日お孫さんにお会いしました時に当ブログで拝見しました作品たちのお話をしました所、いつも照れてあまりお話してくれない彼から止まる事無く言葉が溢れ、帰るのが惜しい程でした。
返信削除素晴らしいおもちゃたちと創造力溢れるおじいさまのいらっしゃる彼がとても羨ましいです。私の娘も料理のスペシャリストの祖父がおりますが。
また訪れます。次作品を楽しみにしております。