So-net無料ブログ作成

タイマーの試作 [メカトロメイト・タイマー製作記]

みなさんお正月を満喫されていると思いますが、年末ギリギリのタイミングでメカトロメイトにタイマーを仕込んだ作品が完成していますので、製作記に残したいと思います。
メカトロメイトは、既に1体完成しておりますが、先日の千葉しぼり展示会で、なんと小林さんのお隣りに展示させて頂きました^^
その時、メイトファンの方も交えて、これならラーメンタイマーも作れるんじゃね?と盛り上がりまして、今回製作したものです。
メカトロメイトの目の部分は、デジタル表示の目(7セグメントLEDと言います)になっているので、ここに時間を表示すればタイマーになるよね!?という発想です。
目がデジタル.jpg
前回は、ニコニコとネムネム、まばたきの3種類の表現で済んだので、LEDは片目に3個仕込むだけで済みましたが、数字を表示するとなると、全てのセグメントにLEDを仕込まなくてはならないので、工作の難易度はググッと上がります^^
また、ラーメンのフタの上に乗せたいので、電池だけで単独に動く設計にしなくてはなりません。
タイムアップは音で知らせたいし、時間をセットしたり、キャンセルしたりと、プログラムも複雑になるでしょう。
軽く引き受けてしまったものの、難題が山積みで本当に実現できるのか、不安なスタートとなりました^^

さて、まずはタイマー部分の製作です。
操作の方法も含めた、タイマーとしての機能がしっかり出来ていないと、スイッチが何個必要で、どんなパーツが必要になるのか決まりませんからね^^
それに今回は、LEDをダイナミック点灯という方法で制御したいと思います。
1つの目で7個LEDがあるので、両目で14個のLEDを制御しなくてはなりませんが、少ない配線と簡単な制御で済ませるための制御方法がダイナミック点灯です。
どんな方法か説明しますが、それにはまず、7セグメントLEDがどんな構造をしているのか知っておく必要があります。
カソードコモン 7SEG.jpg
今回使用するのは、カソード・コモンという、マイナスが1本にまとまっているタイプです。
ちなみに、プラスが1本にまとまっているアノード・コモンというタイプもあります。
このマイナスが1本にまとめられているところが重要で、ここをマイナスに繋ぐか繋がないかで全体の表示をON/OFF出来る事になります。
ダイナミック点灯では、それを利用して高速にスイッチングすることで、多様な表示を可能にします。

例えば、2個の7セグメントLEDを使って、「13」と表示させたい場合、
ダイナミック点灯の仕組み.jpg
両方のLEDを並列に繋いでおいて、両方に「1」を表示させますが、10の位のLEDだけマイナスに繋げて発光させます。
1の位は点灯させません。
次に、両方に「3」を表示させ、今度は1の位だけマイナスに接続して「3」を発光させます。
これを高速に行うと、人間の目には綺麗に「13」と表示されている様に見えます。
これがダイナミック点灯の原理で、少ない配線でたくさんのLEDへ別々の数値を表示させることができるため、7セグメントLEDを使う時の常套手段となっています。
たまにテレビで、デジタル数字がチラチラして映っているのを見た事があると思いますが、ダイナミック点灯で高速にON/OFFされているために波打って見えているのです。

使用するPICですが、足の数が7本以上必要で、極小のSOPパッケージということで、「電飾しましょっ!2 PIC編」でご紹介した、PIC16F648を使用します。
PIC16F1827は、SSOPという足のピッチが非常に狭いタイプしか無いので、書籍でもSOPパッケージがあるPIC16F648をお勧めしています。
かなり古いPICですけど、電飾するのがメインならこれで十分です^^
モデラーにとっては、高機能であるより、足の数が多いほうがありがたいのです。
回路図です。
ダイナミック点灯.jpg
RBポートでLEDに表示する数字を出力して、RA0とRA1でどちらのLEDを点灯させるか制御します(赤線)。
RA6とRA7は、P73で説明しているスイッチ入力回路そのまんまです。
時間の設定やキャンセル、スタートスイッチとして使います。
RA2にBZと書かれたマークがありますが、これは圧電ブザーというもので、薄い金属板を振動させてブザー音を出すものです。
スピーカーの様に綺麗な音を再生するものではありません。
圧電ブザー.jpg
普通は一定のパルスを送って、「ブー」というブザー音として使うのですが、PICを使えばパルスの幅を自在にセットする事が可能ですので、音階を作る事が出来ます^^
音の長さと周波数を受け取って、高速にON/OFFさせる関数を作ります。
//RA2の圧電ブザーを周波数tで鳴らす
void MERODY( unsigned short L,unsigned short t){  
    unsigned short j,i;
    for(j=0;j < L;j++){
        RA2=1;
        for(i=0;i < t;i++){ __delay_us(1); }
        RA2=0;
        for(i=0;i < t;i++){ __delay_us(1); }
        
        }
    }

あとは、メインのプログラムから、長さと音程を引数にセットして呼び出せば、メロディーが鳴ってくれます。
                //チャルメラの演奏
                MERODY(60,98);  //G2
                MERODY(60,110);  //A2
                MERODY(240,123); //B2
                MERODY(60,110);  //A2
                MERODY(60,98);  //G2
                __delay_ms(200);//R
                MERODY(60,98);  //G2
                MERODY(60,110);  //A2
                MERODY(60,123);  //B2
                MERODY(60,110);  //A2
                MERODY(60,98);  //G2
                MERODY(320,110); //A2
                __delay_ms(500);
 

あんまり綺麗な音色ではありませんけど、安価でそれなりの音量で鳴ってくれるので、手軽です^^
ボタンの操作音にも使ってみました。

とりあえず、ブレッドボードに試作したラーメンタイマーの動作している様子です。
Youtubeに動画としてアップロードしました。


実用的なタイマーとして使える様に、ちゃんとプログラミングしました。
マニュアルレスでも使える様にデザインするのも、プログラマーのお仕事です^^

次回はベースの加工をご紹介したいと思います。

現在、2つのブログランキングへ参加しています。
1日1回、応援のワンクリックをぜひお願いしますm(__)m
人気ブログランキングへ にほんブログ村 その他趣味ブログ 模型へ


コメント(10)