2010年3月末で仕事が終わりになり時間ができたので、3才の孫(男の子)が遊べるおもちゃを作ることにした。動くものに限ると思いあれこれ検討した結果、以前息子用に買ってあったレゴのマインドストームを使うことに決めた。制御は自作することにしてネットでCPUの調査を行い、昔ながらのDIPのパッケージが自作向きなのでPICを使うことにした。 いくつかおもちゃを作成し、自分用のメモを作っておくことにしたがついでなのでブログを作成して公開することにした。 写真と動画を見て笑っていただきたい。 なお、1ページで表示できなくなってきたので、以前のものを見る場合は、このページの最後の「前の投稿」をクリックしてください。
2011年4月26日火曜日
7.1 メリーゴーラウンドもどき
観覧車に続き、メリーゴーラウンドを作ることにした。
本物は柱に沿って上下に乗り物が動くが、このメカをレゴで作るのは難しくあきらめた。代わりに支点を中心に円運動で上下する簡単なメカを作成した。これでもどきになってしまった、、。乗り物も、馬や馬車は作れないので簡単な車としてある。
水平方向に回転する仕組みをしっかり作るのが難しく、回転軸が多少ガタガタするのも残念である。
孫の反応
やっぱり興味なし。レゴで消防のはしご車をいっしょに作ることになった。最近は家ではLaQでいろいろ自分で作るようになってきていて、形を作るのが面白いようである。
最後の写真がこのとき作ったはしご車で、作者がはしごの部分を作り、それ以外はリー君が作ったものである。
2011年4月24日日曜日
4.2 キッチンタイマーの追加機能
キッチンタイマーのシステムを使ってメトロノームとテスターの2つのツールを作成したので、これも紹介しておくことにした。
☆メトロノーム
昨年末にちょっときつい山歩きをしたら、足がかなり痛くなってしまった。体力作りが必要と思い、家の階段を上り下りすることにし、同じペースで一定回数だけ上り下りできるよう、メトロノームを作成した。
テンポと長さを設定できる。テンポは普通のメトロノームと同じように1分間の4分音符の数で設定し、長さはコーラス数で設定する。1コーラスは32小節としてある。
コーラスと小節を3桁の数字で表示する。コーラスは2桁必要で、小節には1桁しか使えないため、実際の小節数の4分の1の値を表示している。
1拍ずつ「キッコッコッコッ」と音が鳴り、4小節毎に「キッコッコッコ-ッ」と4拍目が長くなるようにして、区切りがわかるようにしてある。
操作
電源投入時、右のスイッチを押しながら電源を入れる、これでメトロノームになる。
右のスイッチを2回連続押しするとテンポの値が表示され、3回連続押しするとコーラス数が表示される。左のスイッチを押すと値が増加し、まん中のスイッチを押すと値が減少する。右のスイッチを1回押すと、動作がスタート・ストップする。
これでテンポ93で12コーラス、48往復の階段昇降を毎日続けているが、効果は絶大である。先日7時間くらいアップダウンのきつい山道を歩き続けたが、長い登りでも休まずに登れるし、翌日足も痛くならなかった。
☆テスター
おもちゃを作るようになって、単3・単4の電池がたくさんたまってきた。捨てるものと使えるものを区別するために、電圧を測定できるようにした。電池の電圧をそのままPICのAD変換器に入力する。測定値は「1.50」のように3桁で表示される。
また、抵抗のカラーコードが3桁のものと4桁のものがあって紛らわしいので、抵抗も測定できるようにした。正確に測定しようとするとレンジを切り替える必要があるが、オーダーが分かればよいことにし、レンジ切り替えは行わない。電源とグラウンドの間に測定対象の抵抗と10KΩの抵抗を直列に接続し、中点の電圧をAD変換し、抵抗値を計算する。
測定値は「470.」「47.0」「4.70」「470」のように表示される。
操作
電源投入時、左のスイッチを押しながら電源を入れる、これでテスターになる。
電圧を測定する場合は、電池を端子に接続し左のボタンを押す。抵抗を測定する場合は、抵抗を接続し右のスイッチを押す。
☆写真
1番目はメトロノームの写真で2番目がテスターで電池の電圧を測定する写真。
3番目はメトロノームの動画で、最後はテスターの動画。
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回の平均をとり、なんとか使えるようになった。
2011年4月16日土曜日
6.3 一定速度で走る四輪車
これまでの速度制御はモーターを駆動するPWMのデューティーの変更で行っていた。これだと速度の変更はできるが、床の状態などによって速度が影響を受けてしまう。
ステアリングのモーターの歯車にフォトインタラプタをつけて回転数を測定しているが、これと同じ仕組みを車輪を駆動するモーターにも取り付けた。
一定期間(200ms)毎に動いた歯数をカウントし、設定速度との差をみてPWMのデューティーを制御するようにしてある。
これで床が木でもカーペットでも、ほぼ同じ速度で走るようになった。また、これまではカーペット上を低速で走らせるのは難しかったが、起動時はPWMのデューティーが大きくなるため、低速でもカーペット上を走れるようになった。
2011年4月7日木曜日
6.2 自分で駐車場に停まる車
デフつきの四輪車が自分で駐車場に停まる仕組みがなんとか動くようになった。
センサーは得意の超音波を使う。駐車場が超音波を発信し、車はその超音波の方向にバックで進み駐車場に近付いたら停止する。そこで車が発信した超音波が駐車場から反射して戻ってくる時間を測定し、車の角度を求め、直角になるように角度を調整する。
駐車を開始するときは、駐車場からの超音波が聞こえていることが条件となる。
距離や角度をきちんと測定しようとしたところ、超音波のセンサーではいくつか問題があることが判明した。受信器が40KHzの超音波を受けた信号をオペアンプで増幅し、それで割り込みをかけて時間を測定するようにしているが、40KHzの周期(25μsec)毎に波形のピークがあり、そこで割り込みがかかるため、時間の精度は25μsecまでとなる。これは音波が進む距離にすると約8mmとなる。距離の測定精度は±8mmまでということになる。
また、車が超音波を発信し、駐車場からの反射音が戻ってくるまでの時間を測定しているが、ある距離の範囲(20-30cm)だと床からの反射音との干渉のせいか、誤差が大きくなることがある。
このような問題があることが判明したため、正確に測定する必要がある場合は距離が近いときに限定し、数回測定して平均値を使うことにした。
4輪車の車体
デフつきの四輪車を使用。バックで駐車するため、センサーは車の後部につける。
駐車場
散歩のお供で使った引っ張る車を利用。超音波の発信部分はそのまま使う。車からの超音波を反射しやすくするよう、後部の壁を左右に拡大してある。
駐車場のセンサー
超音波の発信器を1つ持つ。200ms毎に40KHzの超音波を発信する。
車のセンサー
超音波の受信器は車の後部の左右に1つずつ。
超音波の発信器は車の後部の中央に1つ。駐車場からの超音波を受信した50ms後に40KHzの超音波を発信する。
駐車場の方向測定
駐車場が発信した超音波が車の左右のセンサーに届く時間差で駐車場の方向を判定する。
駐車場との角度測定
駐車場との距離が近い場合に、車が発信した超音波の駐車場からの反射音が左右のセンサーに届く時間差を測定し、駐車場と車の角度を求める。
誤差を少なくするため、8回測定して平均値を使うようにしてある。
駐車の制御
1.車体が駐車場にまっすぐ向くよう、ハンドルを切って前進する。
2.まっすぐになったら停止し、ハンドルを直進にして後退開始。
3.後退中は駐車場からの音波の向きをみて、まっすぐなるようハンドルを切る。
4.駐車場に近付いたら停車してハンドルをまっすぐに戻す。
5.車が出した超音波の駐車場からの反射音が左右のセンサーに戻ってくる時間を測定し車の角度を求める。8回測定し平均値を使う。
6.角度にしたがい、ハンドルを切って前進し直角になるところで停止し、ハンドルをまっすぐに戻す。
7.まっすぐ後退し、駐車場に近付いたら停止。これで駐車終了。
リモコン操作
「戻る」ボタンで駐車開始。
「決定」ボタンで停止。
孫の反応
興味なし。大きくなったらまた見せることにして、もっといろいろ作っておくしかないか。
2011年4月2日土曜日
7.0 観覧車
孫のリー君とレゴで遊んでいて、観覧車を作ろうということになった。作ってみると、けっこうかわいらしくできたので、これもブログに載せることにした。
今回のものは特に難しい所とかはない。一つだけ気を使ったのは、歯車の軸が片持ちで多少ガタがあり、観覧車の回転が時々ひっかかったようになってスムーズでなかったので、軸を支えるパーツをもう一つ重ねてガタを減らしたことくらい。これでかなりスムーズに回転するようになった。
観覧車らしくゆっくり回転するよう、歯車3段で減速し、さらにモーターを駆動するPWMのデューティーを3%にしてある。
孫の反応
最初はヘリコプターを作ろうとしたが、パーツを他に使っていたため観覧車に変更したせいか、あまり興味を示さなかった、、。
登録:
投稿 (Atom)