fc2ブログ

LED時計

7セグLEDにマイコンで時刻を表示する典型的なLED時計です。難易度も高くなく、高価な部品も使わず、実用性があるので、初心者の電子工作でよく使われると思います。実際、僕も昔他人の回路、プログラムを真似て作りました。
ただの時計では面白くないので、LEDの明るさが周りの明るさにより変化する機能を付け、少し見やすいようにしました。

時計


これを作った動機としては、安く手に入ったクリスタルを使ってみたかったからです。少し昔の話で具体的に価格は覚えていませんが、6MHzが7つ手元にありました。普段よく使うAVRマイコンはATtiny2313やATmega168Pなどで、内蔵RC発振器で8MHz動作ができるため、この6MHzのクリスタルでは「高速」動作と言う用途には向かず、「正確」な発振を生かすしかありません。時計プログラムを作ったことは無かったということもあり、これを時計に使って見ました。

しかし、普通の時計は以前作ったことがあり、またアラームやストップウォッチ、タイマーなどの機能も考えましたが既製品で足りています。そのため既製品とは違う機能として輝度調整機能を付けてみました。これはLEDの輝度が周囲が明るさに応じて変化するもので、これにより明るい場所で文字が薄くて見えづらいことや、暗い場所で文字がまぶしいことを防ぎます。
左下の写真は暗い場所で、右下は比較のためにほぼ同じ明るさで、センサ部分のみ明るくしたときの写真です。周りの明るさを変えると見え方が変わるので、センサ部分の明るさのみ変えて比較しました。
時計_暗 時計_明
周囲が暗いとき  センサが明るいとき


周囲の明るさの読み取りはCdSセルによりアナログ値で読み込みます。
ここで使用しているATtiny2313にはADコンバータ機能はありませんが、今回はCdSを通したコンデンサ充放電にかかる時間により、明るさを判定しています。CdSは周囲が暗いと抵抗値が上がる素子なので、これを通してコンデンサを充電すると、暗いほど充電に時間がかかります。
下図の回路において、PD1にHigh出力をすると同時に時間計測を開始し、コンデンサが充電され端子電圧が上がり、PD0にHigh入力が検出されたときまでの所要時間を測定します。その後PD1をLow出力し、コンデンサを放電します。この時放電を十分行うため、次の測定まで十分な時間が必要となります。またCdSは暗所での抵抗値が高すぎるためコンデンサの放電が上手くいかないので、抵抗を並列に接続し調整しています。
時計_ADC
 疑似ADC回路
(ピンは使用したものとは異なる)
このような方式をどこかで見たことがあったのですが、手元に資料が見つからず、インターネット検索しようにも何と調べればよいかわからず、結局アイデア以外は自作することとなりました。CdS自体個体差の大きいものであり、精度など要求しない為、特に計算などせず、実測から計算に使う定数等を決めています。ピン変化割り込みやタイマ/カウンタ等を使おうとも考えましたが測定に大して時間もかからず、割り込みを使うまでもないと考え、充電開始から変数を1ずつカウントアップしていき、デジタル入力ピンの閾値を超えた時点でのカウントを読む、という簡易的方法をとりました。この方法では測定中の数us~数ms他のことができませんが、単なる時計では問題ありません。また測定中に割り込み処理が入ると測定値が狂いますが、一瞬輝度を間違えられたところで気づくほどではないようなので、対策していません。

時計_裏
    基板裏
チップコンデンサの一方が明るさ読み取り用



試しに一か月ほど使ってみましたが、時間のずれは10秒以内くらいでした。しかし、電池の消耗が大きく、単四アルカリ乾電池2本ではほとんど見えない状態になってしまいました。電池二本の3Vで赤LEDの1.8V程を駆動させるので、電池一本当たり0.3Vも下がれば電流は半分です。連続使用なのですぐに電圧が落ち、時計は動いているものの読めなくなってしまいました。
そこで、プログラムを少し修正し、輝度を少し落としました。電流を測定したところ、最低輝度クラスで5mAほど、最高輝度クラスで40mAほどでした。LEDの点灯は断続的であり、これがその平均を示すのかはわかりませんが、差が大きいことだけはわかります。単四アルカリ乾電池が900mAhほどだそうなので、1/3日中輝度、2/3日低輝度とすると20mA*8 + 5mA*16h = 240mAhを一日で使い、4日もすれば使い切ることになるので測定値と実際は大分違うようです。しかし輝度による差は確かだと考えられるので、小さい電池で使うならできるだけ暗い所で、明るいところで使うならACアダプタに変えるなどすると良いかも知れません。


使用法
時間設定は一つのボタンで行います。

①ボタンを三秒以上押し続けて離すと、設定モードになり、'分'表示が点滅しだします。3秒"以上"なので、「2.8秒で無効」などとならないよう4秒間待つなどすると良いでしょう。以後同じことが言えます。

②ボタンを短く押すと'分'が上がります。現在時刻より1分後になるまで押します。この際、内部での'秒'カウントは止まっているため、ボタンを押さなければ1分経っても'分'は上がりません。

③ボタンを3秒以上押すと'分'設定を終え'時'の設定に移り、'時'表示が点滅しだします。ボタンを離した瞬間に、時計の'秒'が再設定されます。離した瞬間が0.00..秒なので正確に合わせるときは、56秒以前からボタンを押しっぱなしにし、0秒になるタイミングで離せば正確に合わせられます。

④ボタンを短く押すと'時'が上がっていきます。この際時計のカウントは動いているので、59分から00分になるタイミングで'時'が上がるので注意してください。

⑤ボタンを3秒以上押して離すと設定モードが終わり、通常表示に戻ります。


回路図
時計回路図

プログラム
clock_2313.txt
hexファイルはアップロードの都合上拡張子を変えてありますので、「.txt」を「.hex」に変更してご利用ください。

ヒューズビット
Low
High Ext
FF DB FF

スポンサーサイト



コメントの投稿

非公開コメント

プロフィール

kky.

著者:kky.
性別:男
職業:学生

最新記事
検索フォーム
カテゴリ
リンク
カウンター
現在の閲覧者