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%にしてある。

孫の反応
最初はヘリコプターを作ろうとしたが、パーツを他に使っていたため観覧車に変更したせいか、あまり興味を示さなかった、、。

2011年3月26日土曜日

6.1 デフあり・なしの比較








ブログを見た友人から「市販のリモコンカーより凄いところがわからない」とか「動画を撮るときは三脚を使うべし」という指摘を受けたので、デフのあり・なしの違いを動画で見えるようにしてみた。
なお、今回の四輪車の最大のポイントはレゴのパーツだけでディファレンシャルギアを作ったことである。

まず、作者が2,000円程度で購入してあったデフなしの市販のラジコンカーのハンドルをいっぱいに切ったときの車輪の角度を測定して見たところ、およそ20度であった。一方、今回作成したデフ付きの車のハンドルをいっぱいに切り車輪の角度を測定したところ、およそ40度であった。

デフ付きの車なら40度までハンドルを切ってもスムーズに動くことは確認できているので、この車のデフを取り外し、左右の車輪を同じ軸で駆動するようにしたものを動かしてみた。まず手で動かしてみたところ、ハンドルを40度程度切った状態だと抵抗が非常に大きく、前輪はスリップすることもある。ハンドルを20度くらいにすると、抵抗は少なくなるがまだかなりの抵抗感を感じる。10度くらいでやっとほとんど抵抗を感じなくなった。
次にモーターで動かしてみたところ、40度だと前進できない、後退はできるが非常に遅い。20度でも前進できない。10度くらいにしてようやく前進できるようになったが直進に比べるとスピードはかなり遅い。
ディファレンシャルギアの効果は絶大である。

写真は上から、市販のラジコン車のハンドル角度測定、今回の四輪車のハンドル角度測定、差動ギア、駆動ギア、差動ギア+駆動ギア、実装状態のデフ、デフ付きの四輪車。
動画は上から、デフの動き、デフ付きの車の走行、デフなしの車を手で動かす、デフなしの車の走行、となっている。

2011年3月21日月曜日

6.0 ディファレンシャルギアつきの四輪車






これまでは三輪車を動かしていたが、四輪車のボディを作ることにした。
普通の自動車と同様、前輪にステアリングをつけ、後輪を駆動する。最初のものは左右の後輪を同じ軸で駆動したが、これだとハンドルを大きく切るとまがりにくい。これを改善するため、ディファレンシャルギア(デフ)を組み込むことにした。全てレゴのパーツで作成したので少し大きくなったが、機能的には問題なく、大きくハンドルを切ってもスムーズに曲がるようになった。
このボディで、駐車場に自分でキチッと停めることに挑戦しているが、まだうまくできていない。しばらく書き込んでいなかったので、デフつきの四輪車だけでも紹介をすることにした。

ディファレンシャルギア
差動ギアは、小さめのかさ歯車を3つ組み合わせて作成した。歯車を固定する枠がけっこう大きくなってしまった。
駆動ギアは車輪の軸と同じ軸上にあるが、別々の回転をさせるため、歯車の軸を通す部分をニッパーでパチパチッと切り取った。この歯車を軸に取り付けるためのパーツを歯車に固定する。
駆動ギアと差動ギアの枠をつなぐ。しっかり固定する仕組みを考えてみたが、簡単にはできそうもないので、駆動ギア側に作動ギアの枠を挟み込むストッパーを付けることにした。これで多少ガタはあるものの、コンパクトにつなぐことができた。

駆動と車輪
差動ギアの枠がかなり大きくなり、駆動ギアも差動ギアの隣に置く必要があるため、駆動用のモーターは離れた位置にしかおけないことが判明した。バイク用のチエーンがあったので、これを使って駆動する。
車輪もデフが地面をこすらないよう、大きなものを使う必要が生じ、やはりバイク用の車輪を使うことにした。
最初のものは駆動用モーターの歯車は一番小さいものを使っていたが、チエーン駆動だと小さい歯車では回りにくいので、一回り大きい歯車を使った。車輪も最初のものより大きくなったので、走るスピードが速くなった。
チエーン駆動にしたため、走行音はかなり静かになっている。

ステアリング
角度が変わる平行四辺形を作成し、2か所の頂点に軸を通して車輪を取り付ける。片方の軸に歯車を取り付け、これをウオームギアで回転させてハンドルを切る。
ステアリングの現在値を知るため、またハンドルを切る最大値を設定するため、ウオームギアの軸の歯車にフォトインタラプタを取り付け、回転角度(歯車の歯数)を計測する。
リモコン
いつものDVDレコーダ用のリモコンを使用する。駆動は前進・後退・停止、ステアリングは右・左・直進のボタンでコントロールする。