2014年11月21日金曜日

14.11.21 展示用振子時計


静大のテクノフェスタ展示用に振子時計を改造した。
ほっておいても動き続けるようコイルと磁石で振子を駆動し、将来教材にしやすいように制御はリモコン基板を使う。


リモコン基板で操作・コイル駆動・振子基板への信号送信を行う。コイル駆動用にリードスイッチとコイル駆動信号の2本、制御基板に送るシリアル信号で1本の信号ラインを使うので、操作用には3本しか残らない。ボリュームの駆動と信号で2本使うので、スイッチは1つしか使えないことになり、操作方法を変更した。
操作するパラメータが8つあるので、動作モードを8つにし、モード毎のパラメータの値を変更する。
パラメータの変更はボリュームで値をセットしてスイッチを1回押す。モード切替はボリュームを左端・左側・右側・右端の4つの位置にセットしてスイッチを2回連続押しするとモード0-3、3回連続押しすると4-7となる。モード設定を行うと"M0000"とモードが数字で残像表示されるようにした。


振子の駆動パラメータ設定中は、振子の一番下のLEDでコイル駆動信号、下から2番目のLEDでリードスイッチの状態を表示する。



振子基板は、20ピンのPIC18F14K22を使い、ユニバーサル基板で作成した。赤外線リモコンは使わないので、PICの他にはLEDと抵抗が8ヶずつ、それに温度センサーというシンプルな構成となっている。制御基板から電源とシリアル信号のケーブル3本がつながる。


展示用なので、電池で動かすこととし、PICは完全にスリープさせることにした。制御側は操作スイッチとリードスイッチの割り込みでPICが動作開始し、動作が完了するとスリープする。振子側は2秒以上制御側からのシリアル信号がこないとスリープし、制御信号が来ると動作再開する。動作中で割り込み待ちの間はアイドル状態になる。
表示するメッセージは、時刻+温度・温度・メッセージ1・メッセージ2の4種類。



2014年10月5日日曜日

14.10.05 教材版メロディー貯金箱


貯金箱をものづくり教室の教材用に仕上げた。ポイントは大型の圧電ブザーに変更して音量を大きくしたことと、生徒毎に好みのメロディーをPCから書き込むことができる仕組みを追加したこと。


ケースは上部と前面の板を一体にし、ここに基板やスイッチ・ブザー・LEDなどの部品を取り付ける。前面の板は生徒が好みの形にして絵をかいたりできる構造にしてある。サンプルは簡単にできる家の形にした。
圧電ブザーは秋月から直径35mmのものを調達した。音量が大きいし、低い音も500Hzくらいまで出るので非常に具合が良い。


基板は以前開発したリモコン用基板を改良した新型基板を初めて使う。今回は基板に付けるのはマイコン・抵抗・コンデンサが1つずつ、それに電池という非常にシンプルなもの。
PCからメロデイーのデータを書き込むためのシリアル信号用のピンをつけてある。


メロディーは標準で童謡が8曲入っている。生徒毎に書き込むメロディーはPICのEEPROMに書き込むので、音符数が100くらいまでとなる。
メロディーはPCのMIDIシーケンサで単音のメロディーを作り、SMF (Standard MIDI File)で保存し、それを自作のアプリで貯金箱用のフォーマットに変換する。変換したテキストファイルをTeraTerm経由で貯金箱のPICに送信し、EEPROMに書き込む。


2014年8月25日月曜日

14.08.25 PID制御でライントレース






以前三輪車で電車のシミュレータを作ったが、レールに沿って走るライントレースはもっとも単純なオンオフ制御で行ったので、ギクシャクしながら走るのが気に入らなかった。改善をめざしネットでPID制御の方法を調べ、ライントレースに適用してみた。


PID制御については、ネットで見つけた「ETロボコンではじめるシステム制御」を参考にした。
PID制御の計算は浮動小数点で行うことになるので、PICで処理できるか確認することろから始めた。いつもは8bitのPICを使っているが、比較のために16bitのPIC24FJ64GA002でテストすることにしたが、これまで使っていたMPLAB IDEでは16bitのPICのコンパイラが入手できなくなっていることが判明。あきらめて新しいMPLAB X IDEに乗り換えることにした。コンパイラも新しいものに変わったので、これまでのソースの修正も必要だが、なんとか使い慣れてきた。





PID制御のサンプルコードを16bitと8bitのPICで走らせて実行時間を測ってみたところ、16bitのPIC24FJ64GA002(32MHz)で176μsec、8bitのPIC18F24K20(16MHz)で380μsecとなり、同じクロックとするとほぼ同じ実行速度という不思議な結果が得られた。
大差なければ、以前使ったハードをそのまま使うのが一番楽なので、8bitのPIC18F2431(8MHz)で処理速度を測ってみたところ、1.8msであった。古いPICなので処理が遅いと思われるが、これでやることにした。





今回はセンサはラインの片側に1ヶ取り付け、明るさの目標値に近づくように方向を制御する。三輪車なので、左に曲がるときは、左側の車輪を逆転させ、駆動力をコントロールして曲がる具合を調節する。
1回のPIDの計算に最大で3.5ms程度かかるので、制御の時間間隔は5msとしてある。





比較のために、オンオフ制御とPID制御を切り替えれるようにしておいた。PID制御にすると、ギクシャクした動きがグッと少なくなるのがわかる。

2014年8月5日火曜日

14.08.05 小型タイマー






久しぶりの実用品。秋月の商品を見ていて、8文字*2行の小型の液晶を見つけたのでこれを使って3代目のタイマーを作ることにした。温度と湿度を測れるセンサーも購入したので、これも組み込む。


液晶は8文字*2行のもので、I2Cでマイコンにつなぐ。マイコンは20pinの18F14K50を使いたかったが、デバッガを使えないと新しいデバイスを使うのは難しいので、28pinの18F24K20にした。温度・湿度センサはAM2321というものだが、使えるようになるまでえらく苦労した。
基板は小型にするため、47*72mmのICB288Gとした。2代目の半分の大きさにできた。



電源は液晶が3V以上でないと動かないことが判明したので、ステップアップレギュレータを8pinのパッケージに組み込んだモジュールを秋月から購入して使うことにした。これで3.3Vが出てくる。電池ケースは手元に単3電池2本用のものしかなかったので、これを使う。ICB288Gの基板に取り付け、タイマー基板の裏側に重ねて取り付けた。





液晶はマニュアルに従ってコーディングし、I2C経由で問題なく動くことが確認できた。次に温度・湿度センサを動かそうとしたが、マニュアルが中国語のものしか見つからない。I2Cと単線接続の2通りの方法があるらしいが、単線接続の方はマニュアルの英語の図を見てなんとかできそうなので、まずこちらをトライしてみた。オシロで見るとそれらしいデータが出力されているようなので、これをマイコンで取り込もうとしたが、データの取り込みのために80μsec毎に割り込みを処理する必要があることが判明。PICのクロックを最高の16MHzにしたがまだ追いつかない。割り込み処理で、それぞれの割り込みのイネーブルとフラグをチェックしていたが、高位の割り込みはセンサの入力だけにし、チェックなしで処理するようにしてなんとかデータを取り込むことができるようになった。
下の図の上側はセンサからの入力波形、下側は割り込みの入り口でLEDをオンにし、出口でオフにした波形。センサの信号の立ち上がりで割り込みをかけている。





次にI2C接続を調査。ネットで探して見たら「デジタル温度・湿度センサーAM2321を制御する」で丁寧に説明してくれている。この説明とPICのマニュアルを読み、I2C経由の読み込みのコーディングを行い、なんとか使えるようになった。
下の図の上側はI2Cのクロック、下側は割り込み中LEDをオンにした波形。





動作モードは温度・湿度表示、タイマー、メトロノームの3つとする。操作子はタクトスイッチ3ヶとボリューム1ヶ。Sw1はモード切替(1回押しで温度、2回押しでタイマー、3回押しでメトロノーム)、Sw2はスタート/ストップ(トグル)、Sw3は値を変更するパラメータの切り替え(トグル)、ボリュームは値の変更(右に回すと+、左に回すと-)。





温度・湿度は10秒ごとに測定し、上の行に温度、下の行に湿度をどちらも小数点付きで表示する。





タイマーは99分59秒まで設定でき、上の行に分、下の行に秒を表示する。値の変更はSw3を押すと選ばれた方の行の先頭にカーソルが表示される。Sw2を押すとスタートし、時間が来ると「ピピピッ・ピピピッ」と音で知らせる。





メトロノームはテンポ(60~250bpm)とコーラス数(1~32)を設定でき、上の行にテンポ、下の行にコーラス・小節が表示される。Sw2を押すとスタートし、まずイントロ1小節分「キッコッコッコー」と音が鳴り、続いて1小節目から「キッコッコッコッ」と繰り返し、4小節ごとに「キッコッコッコー」と4拍めが長く鳴る。設定したコーラス数が終わると動作が終了する。


2014年7月25日金曜日

14.07.25 温度計付の振子時計






先月、振子時計を作ったが、振子がなにもせずに行ったり来たりしてるだけなのがもったいなくなり、残像で温度を表示するように改造した。また、単2電池が1か月弱しか持たないことが判明したので、電源アダプタを取り付けた。


温度センサを秋月で探してみたところ、温度と湿度を測定してディジタルで出力するものと、温度だけを測定しアナログで出力するものを見つけた。とりあえず両方調達してみたが、今回はシンプルに温度だけでトランジスタ型のLM61CIZを使うことにした。
表示用の基板は残像表示時計のものでも良かったが、20ピンのPIC18F14K50を使ってみたくなり、新規作成した。ユニバーサル基板を使って組み立てたので、LEDが基板の中央に並ぶようにした。ところがPIC18F14K50はいつも使っているPICKit3では直接はデバッグできないことが判明。プログラムの書き込みはできるので、デバッグはLEDに状態を表示しながら行った。


表示の同期をとるための信号は、時計のLEDを点灯させる信号をそのまま温度計基板にもらうことにした。時計の駆動調整のときは、残像表示の一番下のLEDを使って駆動状態を表示する。温度の測定は1分毎に行うことにした。


温度の表示は、少数なしの「25℃」と少数付の「25.0」の2種類を切り替えできる。温度範囲は、センサーは100度まで測定できるが、PICのAD変換の精度を高めるために±40℃に抑えた。



1つのリモコンで時計と温度計の両方を調整する。動作モードを4つ用意し、0,1は温度計、2,3は時計の調整と使い分けている。
温度計の表示は、温度表示の他、「ものづくり・ダビンチ・キッズ」、「おはよう・こんにちは・こんばんは」のメッセージに切り替えできる。


ものづくり仲間の古い電気カミソリ用の5V1AのACアダプタが余っている、ということで使わせていただくことにした。3端子レギュレータのLM317Tを振子時計の基板に実装し、3Vで使っている。
時計基板から温度計基板には、電源とLED表示信号の合計4本のケーブルをつなぐ。


2014年7月24日木曜日

14.07.24 電車の運転シミュレータ


山仲間から古いHOゲージの機関車とレールを渡された。電源とコントローラはない。動かそうとしてみたが、機関車が古くモーターの動きが良くないこと、HOゲージのモーターは12V仕様で自分には扱いにくいこと、レールを広げておくスペースを確保できないこと、などの理由でHOゲージの機関車とレールは別の仲間に引き継いでもらった。


この機関車を受け取った時に、路面電車の運転と同じ作法で電車を動かすシミュレータを作る、というアイデアが出ていたので、本気の鉄道ファンが見るとあきれるようなものだが、このシミュレータをいつもの環境で作ってみた。


電車の代わりにレゴのモータで動く三輪車を使う。レールは600*450mmの板に黒いテープを長円形に貼ったもの。三輪車はフォトインタラプタでライントレースしてレールに沿って走る。少しは電車らしく見えるよう、後に飾りの車輪をつけておいた。

 PICの基板は残像表示四輪車で使ったもので、モータードライバーは古いLB1639なので、モーターをショートしてブレーキをかけることができない。ライントレースでカーブさせるとき、内側の車輪のモーターを止めるだけだと回り切れないので、内側の車輪を軽く逆回転させて曲がるようにした。センサーは迷路探索と同じ反射式のフォトインタラプタ。


運転の作法は古い路面電車の真似をする。コントローラの左側にモーターを制御するレバーがあり、右側にブレーキのエアを制御するハンドルがある。三輪車なので前進だけとした。
速度とエアの圧力をLEDで8段階で表示する。速度は右が速く、圧力は右が高い。
コントローラから赤外線を定期的(250ms毎)に発信し、三輪車はそれを受けてモーターの速度を決める。
 
 モーターのレバーを右に回すと回転が速くなり、左に回すと遅くなる。モーターの駆動を止めても電車は惰性で走るようにしてあり、徐々に速度が遅くなっていく。
エアのハンドルは中央の位置で現在の圧力を保持し、ハンドルを左側に動かすとエアが抜けて圧力が下がり、右に動かすとエアが補充されて圧力が高くなる。


シミュレータから音は出ないので、モーターのレバーを動かすときの「ガチャガチャ」という音やエアを抜くときの「プシュー」という音などは口真似でやるしかない。
かなり手抜きのシミュレータなので、きちんと停車位置に停めるのはけっこう難しく、何度も練習してやっと狙ったところに停まった。

2014年6月16日月曜日

14.06.16 静かに動く振子時計


以前、ガンギ車つきの振子時計を作ったが、ガンギ車のカチカチいう音と、駆動用のモーターの回り続ける音がけっこう大きかったので、静かに動く振子時計を作ってみた。電磁石で振子を駆動する仕組みを使い、1分毎にモーターで歯車を回し、長針と短針で時刻を表示する。


振子は残像表示時計で使った電磁石による駆動の仕組みを使う。今回は振子側に永久磁石を取り付け、台に電磁石と位置検出用のリードスイッチを取り付けた。駆動のタイミングを表示するため、振子にLEDを取り付けてある。



歯車と針はレゴのパーツで以前の振子時計と同じものを作る。長針と短針を同じ軸に取り付けるため、今回もものづくり仲間にレゴのパーツの加工をお願いした。



1分毎にモーターで歯車を駆動する。モーターはタミヤのミニモーターを使い、モーターの軸でレゴのプーリーの外周を直接駆動する。プーリーが1回転したことを検出するため、ボールペンから取ったスプリングとメッキ線を巻いたものでスイッチを作った。



操作はリモコンで行う。リモコン用の赤外線センサーの電源がmAのオーダーで流れることがわかったので、操作しない時は電源を切るためのピンを取り付けた。
PICの入力は赤外線センサ・リードスイッチ・モータースイッチの3本で出力は電磁石駆動・モーター駆動・LEDの3本なので、8ピンのPIC12F1822にぴったり収まった。


台は木製のものを作成した。接着剤は得意でないので、木ネジで固定してある。
振子にレゴの軸の錘をつけ、取り付ける位置で時間調整する。


2014年5月16日金曜日

14.05.16 メロディー貯金箱


ものづくりダビンチキッズの仲間から、コインを入れるとメロディーが鳴る貯金箱、の試作品が出てきた。電池が長持ちする工夫が必要ということだったので、PICを使って試作してみた。


基板はいつものリモコン基板。スイッチはメカニカルなスイッチとする。出力はメロディーを鳴らす圧電ブザーとLED。最初の試作品は赤のLEDを使ったが、次の試作品は3色のLEDを使い、色が変化するようにしてみた。待機時はPICはスリープさせるので、電流はほとんど流れないはず。


メロディーは単音なので、音を鳴らす部分はシンプルにできる。PIC12F1822は4KBytesのプログラムメモリを持っていて、コードで半分くらい使うので、残りをメロディーのデータに使うことにする。曲作りをやりやすいよう、MIDIのシーケンサーでSMF(Standard MIDI File)のデータを作り、これをVisualStudioExpressで作成したソフトでPIC用のフォーマットに変換することにした。単音なので、最初にテンポの値をBeatPerMinuteで入れ、後は音程と音符の長さを並べることにした。休符は音程の値を0とする。
とりあえず童謡のメロディーを8曲いれてある。コインを入れるとランダムに選曲された曲が鳴る。


音と同期してLEDが光るようにした。音の出初めで強く光り、徐々に明るさが減っていく。3色のLEDのほうは、音程で色を決めることにした。
最初の試作は動作チェックがしやすいよう箱は作らなかった。コインの受け皿はレゴで作ってある。
2回目の3色LEDのほうは箱も作ってみた。箱に入れると圧電ブザーの音量が小さくなることが判明した。


スイッチはプリント基板にメッキ線を平行に並べたもの。この上を滑り台のようにコインが滑っていくようにしておく。メッキ線は4本並べてある。中央の2本は0.6mmのメッキ線でこれがメインのスイッチになる。両端の2本は1.0mmのメッキ線で、外側にこぼれないためのストッパー兼スイッチ。隣同士がスイッチとして働くようにしてあるので、右端・中央・左端の3か所で検出できる。


2歳の孫が気に入って遊んでいる。