2010年3月末で仕事が終わりになり時間ができたので、3才の孫(男の子)が遊べるおもちゃを作ることにした。動くものに限ると思いあれこれ検討した結果、以前息子用に買ってあったレゴのマインドストームを使うことに決めた。制御は自作することにしてネットでCPUの調査を行い、昔ながらのDIPのパッケージが自作向きなのでPICを使うことにした。 いくつかおもちゃを作成し、自分用のメモを作っておくことにしたがついでなのでブログを作成して公開することにした。 写真と動画を見て笑っていただきたい。 なお、1ページで表示できなくなってきたので、以前のものを見る場合は、このページの最後の「前の投稿」をクリックしてください。
2014年4月13日日曜日
14.04.13 残像表示振子時計
教材用に作った残像表示時計は、時計を見たい時には振子を手で動かしてやる必要があった。
いつでも時計を見れるようにするため、永久ごまで使った電磁石で振子を駆動し、時間も振子の周期で決めるようにした残像表示振子時計を作成した。
電磁石を駆動するため、基板にトランジスタを追加した。最初は振子側と固定側と両方とも電磁石でやってみたが、うまく動かない。調べてみたところ、電磁石2ヶを単2電池でドライブするのは苦しいようで、電圧がかなり下がることが判明。電流を減らすため、振子側は電磁石、固定側は永久磁石とした。
駆動と表示の制御はどちらも振子に取り付けたリードスイッチで行う。振子の往復両方で駆動できるよう、振子の振幅の中央でリードスイッチがオンになるようにしておく。
電磁石と永久磁石が反発することで駆動するよう、振子に取り付けた電磁石が永久磁石を通り過ぎた時に電磁石に電流を流す。
リードスイッチがオンに変化→タイマーで時間待ち→電磁石オン→タイマーで時間待ち→電磁石オフ、の制御を振子の往復両方で行う。
テストモードにすると、中央のLEDがリードスイッチのオン・オフを示し、一番下のLEDが電磁石のオン・オフを示すようになる。待ち時間と駆動時間はリモコンで調整できるので、LEDの付き具合を見ながら調整する。
表示の制御は、振子が右から左に動いてリードスイッチがオフになったときに、タイマーを起動して表示開始までの時間待ちをする。次に文字の左側の列から順にLEDに表示していく。
表示までの待ち時間、文字の幅、文字の明るさをリモコンで調整できる。
電磁石とLEDを使っているので、長時間使えるよう電池を単2に変更した。教材用の時計はタイマーで時間を管理していて、常にタイマーが動いていたので、PICを完全にスリープさせることはできなかったが、今回はタイマーが動いていない時はスリープするようにして消費電力の低減を狙った。
電池の耐久テストはこれからであるが、以前作ったモーターを使った振子時計よりも静かに動くので部屋においても邪魔になりにくくなった。
2014年4月1日火曜日
14.04.01 2代目迷路探索
2代目ライントレーサーで迷路探索をやる。初代のものは、ライントレースの安定度が十分でなく壁に当たることが多かったこと、かなりの高さの壁が必要なため壁の作成に手間がかかることが気になっていたので、この2点を改善するのが狙い。
レゴのモーターを使い歯車で駆動することで、走るスピードは遅くなったものの、安定度はかなり改善されたことは前回の「2代目ライントレーサー」で確認できた。
壁の高さを低くするため、壁検出のセンサーを低い位置に取り付ける方法を検討した結果、ライントレースに使っているフォトインタラプタを使うことにした。センサーが小型なので、車体の下部に取り付けることができる。
実験してみたところ、壁の高さは15mmで良いことがわかった。15*10mmの木の棒を85mmの長さに切り取ったものを壁として使うことにした。初代の壁に比べると圧倒的に簡単に作成できる。
初代で使った超音波センサは、オペアンプを使ったアンプが必要であったが、フォトインタラプタならアンプは不要で、ハードもシンプルになった。
また、測定にかかる時間も超音波だと数msかかっていたのが、μsのオーダーに短縮でき、ソフトもシンプルになった。
迷路探索のコードは初代のときに作ったものをほとんどそのまま使っている。スペースがなくてブザーをつけなかったので、探索の成功・失敗はLEDのブリンク回数で表示することにした。探索が成功したときは2回ブリンク、失敗したときは1回ブリンクとする。
2014年3月27日木曜日
14.03.27 2代目ライントレーサー
昨年、タミヤのミニモーターを使ってライントレースして走る2輪車を作ったが、レゴのモーターで同じコースを走る2輪車ができないかやってみた。
高さ方向はモーターのサイズがもろに効き、初代のほうが圧倒的に低いが、上からの投影面積はどちらも同じサイズでレゴの6*10のプレートに収まった。
タミヤのものは小さいモーターが車軸の後に左右に並んでおり、モーターの軸で車輪の外周を直接駆動する。一方レゴのものは、車軸の上部にモーターが前後に並び、歯車で駆動する。
PICとモーター駆動ICは、初代は8pinのPIC12F1822とDRV8830、2代目は18pinのPIC18F1320とLB1639を使った。
12F1822は8pinで小さくて使いやすいが、プログラム領域が2Kwrods、RAMが128bytesと小さいのが難点。ライントレーサーのコードはギリギリで収まっている。レゴのほうはDRV8830の手持ちがなかったので、LB1639を使うこととし、IOのピンが多い18F1320を使うことにした。こちらはプログラム領域が4Kwords、RAMが256bytesでコードは余裕があるが、RAMがあふれそうになり、リンクのスクリプトを一部修正して使った。
トレース用のセンサーは反射型のフォトインタラプタRohmのRPR220。太陽光や白熱電球の赤外線に反応するのが難点であるが、小型で外付け抵抗2ヶだけで使えるので重宝している。
初代のものはモーターを輪ゴムで取り付けて摩擦で駆動しているが、この部分はかなり調整が必要である。レゴのほうは歯車で駆動するので駆動系の調整は必要ない。ただし、サイズを最優先したので走るスピードは初代よりもかなり遅い。
同じコースを走らせてみると、初代は走るのは速いが安定度はイマイチでふらふらしながら走ることが多い。レゴのほうはゆっくりではあるが、安定して走っていく。
2014年3月9日日曜日
14.03.09 またもや逆立ち三輪車
ライントレースに使った反射型のフォトインタラプタの出力がアナログ値であることに気が付き、これで逆立ちができないかトライしてみた。
三輪車のボディは以前作ったものをほぼそのまま使う。PICのシステムは、往復運動で残像表示したときに作った基板を使う。電源は単4電池3本。
センサーは車体の前部、モーターの上に取り付けた。センサーと床の距離が小さくなると出力値が大きくなり、距離が大きくなると出力値が小さくなる。これで床までの距離を測定し、傾きを減らすように車輪を駆動する。
電源電圧が4.5Vなので、古いPIC18F2431を使う。モータードライバーはLB1639。残像表示用にLEDが8ヶついているので、センサーの測定値を7段階でLEDに表示する。
車輪の駆動は、モーター側24歯、車輪側40歯の歯車とした。
制御は、前回の測定値と今回の測定値を使ったいきあたりばったりの制御だが、動作間隔、駆動の強さをリモコンで調整できるようにした。
これで何度か調整してみたが、うまく逆立ちできるときと全くできないときがあり、ハードが悪いのかソフトのバグか電源が弱いのか、などあれこれ調べているうちに、昼間太陽光が明るい時とか、夜白熱電球をつけているとうまく動かないことに気が付いた。センサーは赤外線のLEDを光らせ、その反射光をフォトトランジスタで受けるようになっており、太陽光や白熱電球などで赤外線が光っているとそちらに反応してしまい、測定ができなくなってしまうことが判明。このおもちゃは太陽光が届かない部屋とか、夜蛍光灯の明かりの下、などでしか遊べないことがわかった。
2014年2月2日日曜日
14.02.02 PCリモコン
以前、声で動かす偽バイク用にPCから送信する赤外線リモコンを作成したが、残像表示時計用に新しいバージョンを作成した。
PCから操作する赤外線リモコンで、残像表示時計に表示するメッセージを書き換える。
また、各種の赤外線リモコンが送信する信号をPCの画面に表示することもできる。
ハードウエアはPCのUSBにつなぐシリアルポートを使う。初代はマルツで購入したものを使ったが、今回は秋月から購入した。どちらも24pinのICソケットに合うサイズ。電源はPCの5Vを使うので、PICは古いPIC12F683を使う。
初代はPICKit3をつなぐコネクタも実装してあったが、PICをソケットから外して書き込むようにしたので、コネクタはつけていない。その代り、以前はモジュールの下に隠れていたのを外側に移し、いつでも取り外せるようにした。赤外線LEDをドライブするトランジスタもつけたが、初代よりもかなり小さくできた。レゴの車輪もつけてある。
PCのアプリはTeraTermを使う。
送信はPCのキーボードで文字を入力しEnterを押す。残像表示時計は、全角のひらがな・カタカナ、全角・半角のアルファベット・数字・記号などを表示できる。
受信は、テレビなどのリモコンのボタンを押すと、PCの画面にデータがヘキサデシマルで表示される。NECフォーマット・家製協フォーマット・ソニーフォーマットに対応している。
2014年1月26日日曜日
14.01.26 残像表示時計
残像表示の教材版の仕上げを行った。
ポイントは2つで、時計を表示するようにしたことと、振り子の振幅が変わっても表示する文字の位置が変わらないようにしたこと。
時計表示は、曜日などの表示もやってみたが、表示が煩雑で見にくくなるので、シンプルに時刻だけを表示することにした。
振り子があるので、一見振り子時計のように見えるが、時間はマイコンのタイマーで数えている。
時計として使うため、電源は常に入った状態となるため、消費電力を抑えるよう表示をしていない時は時計のタイマーだけを動かし、その他はスリープさせるようにした。
表示位置の管理は、振子の周期とリードスイッチがオンになっている時間で行う。
振子が左端に近づくとリードスイッチがオンになり、右側に動き始めるとオフになる。振子の振幅が大きいとオンの時間が長くなり、振幅が小さいとオンの時間は短くなる。
周期から「リードスイッチがオンの区間」の2倍を引き算すると、「文字を表示する区間」と「リードスイッチオフからのディレイ」の合計の2倍の時間が得られる。この半分の時間をディレイ区間と表示区間に分配することで、ディレイの時間が決まる。正確には振子の速度は変化しているが、速度一定として計算している。時計表示は5文字で、1文字は8列で表示するので、文字の1列を表示する時間は、表示区間の時間/(5*8)で決まる。
リードスイッチの位置を変えると文字の幅が変化する。
回路は、必要最低限に絞り込んだ。PICマイコンPIC18F24K20、LED8ヶと抵抗8ヶ、赤外線センサー、電源用のケミコンだけ。電源は単4電池2ヶで電源スイッチはつけていない。
振子の軸受け部分は、木工で試作してみたが、工作精度や材料の摩擦などで、スムーズに回転させるのはむつかしいことが判明し、結局レゴで作ることにした。
軸受け部分とプリント基板の間をつなぐ材料は、作りやすさとコストで幅10mmの木の板に決めた。
表示の制御は赤外線リモコンで行う。
動作モードは、通常表示・時刻合わせ・明るさ調整の3つ。通常表示では時計表示と、3種類のメッセージの切り替えができる。時刻合わせでは、時・分・進度調整ができる。クロックはクリスタルでなくPIC内部のオシレータを使っているので、1日で数十秒の誤差はヨシとする。
2013年12月15日日曜日
13.12.15 往復して残像表示する車
以前振り子で残像表示したが、文字が円周上に並ぶのが気に入らないという話があり、文字が直線上に並ぶようにしてみた。
車を往復運動させる。駆動は久しぶりにレゴのモーターを使うことにした。駆動力を少しでも強くするため、電池は単4を3本使う。
以前は28ピンのPIC18F24K20を使ったが、念のために確認してみたところ、電源電圧は3.6Vまでしか使えないことが判明。古いタイプのPIC18F2431を使うことにした。
モータードライバーはLB1639とする。
一番小さいユニバーサル基板に組み込むことにする。電池3ヶとPICをそれぞれ別の基板に組み、重ねて使うことにした。
前後の車輪に1ヶずつモーターをつける。今回は直線運動だけなので、左右の車輪は同じ軸で駆動する。
これで往復運動をさせてみたが、タイヤのバランスなどが完全に左右対称でないためか、往復しているうちに方向が変わってしまうことが発覚。板の上に平行に棒を取り付け、レールを作った。車輪とレールの摩擦のために多少スピードが落ちるが、直線上を走ることを優先する。
往復運動のため反転するときは、無理やりモーターを逆回転させている。車の重心が高いと進行方向に転がってしまうことがあるので、できるだけ重心が低くなるよう、また前後の車軸の間隔を長くするようにした。
表示の位置を毎回同じにするため、レール上に磁石を置き、車の側部にリードスイッチをつけ、左から右に移動中にリードスイッチがオンになった時点で表示を開始する。折り返しの制御は、表示開始からの時間で行う。
これで文字は一直線に並んで表示できるようになった。ただし、車のスピードが遅いため、表示にかかる時間が長くなり、文字を読みづらくなったようなので、駆動用のギアの組み合わせをいくつか試してみた。結局40:16のギアで増速するのが一番具合が良かったのでこの設定にしてある。
登録:
投稿 (Atom)