elec_maga
人間の目に残像として残るように30ms毎にLEDの表示を切り替えています。砂が落ちるイルミネーションは,パターンのデータをあらかじめプログラム中に用意しておき人の目で確認できるように30ms毎に切り替えてLEDに出力しています。時間を正確に計るために,PICマイコンに内蔵されている「タイマ回路」と「タイマ割り込み」を使って,正確に表示が切り替わるようにしています。
時間設定の切り替えはRA0のスライドスイッチです。電源をONにした時にスイッチの状態をチェックして,OFFの時は1分,ONの時は3分の時間設定になります。 プログラムの中で時間をカウントしているだけなので,1分や3分以外の時間も簡単に設定できます。
LEDの表示切替を止めるには「タイマ割込み」を止めます。
砂時計がスタートした時と,設定時間になった時はRA2の圧電スピーカから音で知らせます。圧電スピーカは中になる圧電素子を振動(周波数)させることにより音が出ます。
今回は約4KHzの周波数で振動させていますが,この周波数を変えることで好きな音階で鳴らせることができます。
ド | レ | ミ | ファ | ソ | ラ | シ | ド |
262Hz | 294Hz | 330Hz | 349Hz | 392Hz | 440Hz | 493Hz | 523Hz |
本体をひっくり返すとRA1の水銀スイッチが感知するようになっています。ガラス管の中にある水銀が上下に動くことでスイッチのON/OFFが行われ,OFFの時は上から下へ,ONの時は下から上へ砂が移動するようにイルミネーションで表現します。スタート時に今の状態を記録して,記録した状態と今の状態を比べて変化を判断します。
LEDの点灯パターンは,砂が落ちていく様子を表現する「砂の落ちるパターン」と,上の砂が減っていく様子と下の砂が増えていく様子を表現する「残量表示パターン」の2つで構成します。
砂が落ちる様子を図のような①~⑧までのパターンを用意して,パラパラ漫画のように点灯パターンを30ms毎に切替えてLEDを点灯しています。
ところが,これでLEDを点灯させてみると,ボールが落ちるようにしか見えません。そこで①~⑧まで各点灯パターンの間に消灯を入れて,20ms表示しては10msを消します。 これだけで,かなり砂が尾を引くように落ちている自然な流れに見えます・・・。
砂の落ちるパターンの点灯パターンを「0」と「1」の数値データに変換して「配列」という形でプログラムを記述します。この点灯パターンのデータはPICマイコンのメモリに格納されて,プログラムで1パターンずつ取り出してLEDに出力します。
配列から取り出したデータをそのままLEDに出力すると表示が反転するので,NOT演算子の"~"(チルダ)を使ってデータを反転します。
残量表示を図のようなパターンでLEDを点灯しています。砂が少しずつ減ったり増えたりするように見せる為にLEDの点灯の明るさを少しずつ変えています。
明るさを変化させるプログラムを簡単にする為に4つ点灯パターンを用意して,順番にLEDに出力する事で点灯時間を変えて明るさを制御しています。ハッキリと点灯させたいLEDは点灯回数を多くします。うっすらと点灯させたい時はLEDの点灯回数を少なくします。
残量表示パターンの各表示パターンを「0」と「1」の数値データに変換して「配列」という形でプログラムを記述します。この残量表示パターンのデータもPICマイコンのメモリに格納されて,プログラムで1パターンずつ取り出してLEDに出力します。
「砂の落ちるパターン」と「残量表示パターン」のパターンデータを「タイマ割り込み」の発生毎に論理演算子の"OR"を使って合成して出力しています。
今回製作した「電子砂時計」のプログラムの流れ図です。プログラムを作成するときの参考にしてください。