2011年1月21日金曜日

4.1 秒針がカチカチ動くキッチンタイマー





前回作ったタイマーは秒針をモーターで回しているだけなので、動きにシャープさがないのが不満であった。時計のテンプのように歯車をストッパーで止める仕組みを作り、秒針がカチッカチッと動くようにしてみることにした。

ストッパー
歯車の形に合うようにレゴの軸を削り、アームに取り付けて具合を試してみたところ、微妙な位置関係のせいで、秒針が右回りになるように歯車を回すとストッパーが自然に持ちあがって回るが、逆方向だとストッパーが強く効いてストッパーを外さないと歯車が回らないことがわかった。
秒針右回りのバージョンと、カムでストッパーを持ちあげる仕掛けを入れた左回りのバージョンの2つを作ってみる。

秒針を動かす歯車
1秒毎に秒針を動かしたいが、レゴの歯車の歯数の関係で1秒毎はできず、1秒に2回ずつ秒針を動かすことにした。
秒針は40歯の歯車に取り付け、これを8歯の歯車で回す。8歯の歯車と同じ軸に24歯の歯車をつけ、これをストッパーで止める。こうすることで、24歯の歯車が1歯動くと、秒針の40歯の歯車が1/3歯動く。24歯の歯車が120歯動くと、秒針の歯車が40歯動き、ちょうど一回りすることになる。
それぞれの軸の歯車の歯数は、
モーター軸:8
1軸目:24->8
2軸目:24->8 ストッパー
3軸目:40   秒針
モーターは500ms毎に起動し、一定時間(90ms)で停止するようにした。

カムを動かす歯車
カムはストッパーのアームを持ちあげるため、500ms毎に1回転させる。
秒針を動かすモーターと同じモーターでカムを動かしたかったが、簡単にできるメカを思いつけず、カム専用のモーターを使うことにした。モーターを減速せずカムの軸を回す。こちらのモーターも一定時間で停止するようにしてみたが、電池の残量が変わると止まる位置が変化することが判明したため、カムの軸に40歯の歯車を着け、これをフォトインタラプタでカウントして、30カウントになったところで駆動を停止するようにした。

結果
カムなしのほうがガチッガチッと大きな音がする。カムありのほうはカチッカチッと軽い音で動き、秒針の動きにシャープさがあるが、カムを動かすモーターの音がうるさい。
メカがシンプルで電池の使用量も少ないカムなしのほうが省エネで良さそうである。

孫の反応
これには興味を示さないだろうと思ったが、スイッチの操作を覚え、父親に動かして見せたりしている。クネクネ動かないので気持ち悪くないのか。

2011年1月16日日曜日

5.3 転びにくくなった逆立ち三輪車


先日、ジタバタ動く逆立ち三輪車をアップしたが、歩かせようとするとジタバタ動くだけですぐに転んでしまい、とても歩いたとは言えない状態であった。
どうにも悔しくて、しつこく調整をやってみたところ、少しは転びにくくなったので再度アップすることにした。

修正点
歩くときにボディを傾けるのをやめた、これで転びにくくなった。
センサーと床の距離(x)からモーターを駆動するPWMのデューティー(y)を計算するところをいくつか試してみた。y=ax, y=(ax)*(ax)の2つの式で係数aを数種類試してみたところ、y=1.75xが一番転びにくく、少しは歩いている風に見えるのでこれを採用した。
歩く時の前後の駆動の強さの比は1:(1/8)とした。

結果
前回よりは転びにくくなり、ゆっくりではあるが歩こうとしているように見える。ただし、前に歩かせようとしても、前に行ったり後ろに戻ったりするので、どちらに進んでいるのかわかりにくい、、、。

2011年1月13日木曜日

5.2 逆立ちしてジタバタ動く三輪車






以前、逆立ち2輪車を歩かせようとしたが、制御がいいかげんなため立ち上がるのがやっとで歩かせることはできなかった。久しぶりに逆立ち歩きに再挑戦することにした。
前回は2輪車のボディを作ったが、三輪車のボディが斜めに逆立ちできることに気がついたので、ボディは三輪車をそのまま使うことにした。
制御は前回と同じ方式とし、センサーも前回と同じ超音波の送・受信器を使う。
前回はセンサーを2セット使ったが、ボディの角度がわかれば良いのでセンサーは1セットあれば良いことに気がつき、ボディの前方に1セットだけセンサーを取り付けた。受信の感度を高くするため、また転んだときにセンサーが外れにくくするため、センサーの取り付け角度が変わるようにしてある。

逆立ち
ボディの角度をセンサーと床までの距離で測定する。ちょうど逆立ちになる位置にボディを置き、スイッチを押すとそのときのセンサーから床までの距離を測定し、これをゼロ点の値とする。測定の間隔は数ms程度で、リモコンで調整できるようにしてある。
2回連続して前方または後方に傾いたら、反対側にボディを動かすため、そのときの測定値とゼロ点の値の差をもとにして車輪の駆動のPWMのパルス幅を決めて駆動する。
ゼロ点の設定が難しいので、設定した後リモコンでゼロ点の値を調整できるようにした。逆立ちした状態でゼロ点の値を増やしたり減らしたりしながら、安定して逆立ちするよう調整する。

歩かせる
歩く方向にボディを傾けるようにしてみた。歩き始めるとすぐに速度が上がり、制御できなくなって転んでしまう。
次は歩く方向と逆方向に駆動する時の駆動力を弱くしてみた。4分の1くらいにすると転ばずにジタバタ動こうとする。ただし、2つのモーターの特性の違いのせいか、まっすぐに動かずに曲がってしまう。片方の車輪だけ駆動力の制御をしてみたところ、転びにくくなったので、この方法で歩かせることにした。
これだけだとあまり動かないので、歩き初めに少しだけボディを傾け、徐々に傾きをなくすようにしてある。
歩く方向はリモコンで指示する。前・後・右前・左前・右後・左後・停止。

結果
歩きたがっているのはわかるが、ちょっと動いたと思っても、しばらくすると元の場所に戻っていたりして、とても歩いたとは言えない。いいかげんな制御ではこのあたりが限界か。

孫の反応
逆立ちしているのを見て「へー」という顔をしていたが、歩いていると認識できないようで、それ以上の興味は示さなかった。

2010年12月9日木曜日

5.1 つっつくと動く三輪車




車体をつっつくと動くしかけを作ることにした。車体は前回と同じ三輪車。
センサーは3軸の加速度センサーを使う。車体に直接取り付けようかと思ったが、目立ちやすいように棒を立ててその先にセンサーを取り付けた。
センサーの出力をオシロで見たところ、棒の先につけたので動きが大きくなっており、つっつくと出力が最大値・最小値になることが判明。突っついた方向に向かって動いていくことにし、X軸とY軸の出力の組み合わせで以下のように動きを決めた。
X軸 Y軸 動作
最小 -  前進
最小 最大 右前
最小 最小 左前
最大 -  後退
最大 最大 右後
最大 最小 左後
-  最大 右回転
-  最小 左回転

ソフトウエア
メインループで1ms毎にセンサーの値をAD変換してチェックする。4回連続してX・Yどちらかが最大値または最小値となったらつつかれたと判断し、モーターを1秒間駆動する。駆動中はセンサーはチェックしない。

つっつきの反応
前進・後退・右回転・左回転はうまく反応するが、右前・左前・右後・左後はたまにしか反応しない。X・Y両方が最大値・最小値という組み合わせが起きにくいということだが、調整するほどでもないのでこのままにしておく。

孫の反応
残念ながらあまり興味を持った様子はない。ちょっと突っついてはみたがそれよりもレゴテクニックのバイクやフォークリフトで遊んだり、ブロックで車を作ったりするほうが面白いようである。

2010年12月3日金曜日

5.0 リモコンで動く三輪車




三輪車が偽バイクと同じようにリモコンで動く仕組みを組み込んだ。
また、リモコンの操作イベントをタイムスタンプつきで記録し、それを再生することで記録時と同じ動きを再現できるようにした。
PICにはEEPROMがあるので、操作イベントを4セットEEPROMに記録しておき、それを呼びだして動作を再現する仕組みも組み込んだ。

イベントの時間管理
最初のイベント発生からの絶対時間で管理する。時間の精度は40msとした。時間管理のタイマーは8ビットなので、タイマーが255(約10秒)になったらタイマーオーバーフローを示すイベントを記録し、タイマーを0にリセットする。

記録データフォーマット
1つのイベントを2バイトで記録する。1バイト目は時間を示すタイマー値、2バイト目はコマンドコード。
タイマーオーバーフローのイベントは、0xff, 0xffとする。
イベントの終了を示すため、0xff, 0xfeを最後に記録しておく。

孫の反応
最初はテーブル歩きの車体で動かしてみたところ、あまり気に入らない様子であった。次回は超音波センサーを取り外して多少スッキリした車体にしてみたところ、リモコンを離さず動かして遊んでいた。車体の形で好き嫌いにかなり差があるらしい。

1.2 テーブル歩き修正版




久しぶりに最初に作った三輪車に戻ることにした。
テーブル歩きは角が丸いテーブルなら上手に歩けるが、角がシャープな四角いテーブルだと落ちてしまうことがあったので、まず四角いテーブルでも落ちないように制御を修正することにした。

バージョン2
テーブルの端に来た時、車体の向きがテーブルの端と直角になる方向に後退し、反対方向に回転するようにした。これでほとんど落ちることはなくなったがたまに落ちる。

バージョン3
テーブルの端に来た時、テーブルの端に対してできるだけ直角の角度で後退するよう、回転しながらの後退と前進を繰り返すようにした。落ちることはなくなったが、無駄な動きが多く同じところを行ったり来たりするので美しさは劣る。

孫の反応
動かして見せたところ、ちょっと見た後「もういい」と言って自分でスイッチを切って止めてしまった。どうもこのボディの動きは気にいらないらしい、、、。

2010年11月12日金曜日

4.0 キッチンタイマー




今回は実用品を作ることにした。
レゴの歯車で秒針を作り、1秒毎にモーターで動かす。分と秒の数字表示も欲しいので、7セグメントのLED表示器を載せた基板を新しく作成した。PICはこれまでと同じPIC18F2431。

秒針
モーターを1秒毎に回転させ、歯車で減速して秒針を1分間で1回転させる。
歯車の歯数は8、24、40のものがあったので、3段階で減速することにした。
それぞれの歯数は、
モーター軸:8
1軸目:24->8
2軸目:40->8
3軸目:40
とした。
3軸目が1秒間に40/60歯回転するとき、1軸目の24歯の歯車の動く歯数は、
40/60 * 40/8 * 24/8 = 10
24歯の歯車の動きをフォトインタラプタで測定し、1秒毎に10歯ずつ動かすようにする。

PIC基板
数字表示は3桁の7セグメントLEDを使うことにした。これに合わせて操作用のスイッチを3ヶ実装。音を出すため小型の圧電ブザーも取り付けた。
他はこれまでと同様に電源部、モーター駆動ICなどがある。

時間設定、動作
秒の設定は歯車を回転させて行う。分は一番左のスイッチを1回押すと1分増加する。
60分まで設定できる。表示は3桁なので、10分以内の場合は分1桁と秒2桁を表示し、10分以上の場合は分2桁と秒1桁(10秒の位)を表示する。
一番右のスイッチを押すと動作開始。1秒毎に秒針が動き「ピッピッ」と音が鳴る。カウントが終了すると「ピピピッ、ピピピッ」と音が鳴る、まん中のスイッチを押すと音が止まる。

ソフトウエア
時間管理はTimer0の割り込み(1ms毎)で行う。
フォトインタラプタの測定はメインループで入力をチェックし、入力が1から0に変化したら1カウントする。回転方向はわからないので、歯車を左右どちらに回転させても同じようにカウントする。
歯車の駆動はモーターの駆動をオンにし、フォトインタラプタが8カウントしたら駆動をオフする、モーターは惰性で少し動くのでこれでほぼ10歯ずつ動く。
1秒経過したら、フォトインタラプタのカウント数を-10し、モーターを駆動する。

実用的な使い方
実用上は秒針の動きは必要ない。PIC基板だけでタイマーとして使うのが一番実用的である。分単位の設定で実用上は問題ないが、まん中のリセットスイッチを押したまま左のスイッチを押すと10秒ずつ時間が増える仕組みもいれてある。