一昔前に商用電源の周波数をクロック源に使う時計がありまして、当方も作ってみたくなりました。
ただし、7セグLEDやLCDに時刻を表示するものだと目新しさがないので、電子マスカットさんの音声告知クロックの機能を入れてみました。
本時計の完成後からしばらく動かして観察してみました。
NTPで正確に同期したPCの時計と比較して、あるときは2秒ほど進んでいて、またあるときは2秒ほど遅れ、さらにピッタリ正確の場合もあります。
どうやら±2秒ほどの範囲内でふらふらしている感じで、一方的に進んでいったり、あるいは遅れていくことはありません。長い目で見て平均するとかなり正確のようです。
時刻の表示も欲しい方は、下の7セグメントLEDによる表示モジュールもどうぞ。
この7セグ表示部はオプションですので、必要が無ければ作らなくても構いません。
本家マスカットさんの作品と違って、本作はトランス分のコストがUPしてしまうため、その分マイコンは安いPIC16F87を選んでみました。このPICは秋月さんですと2017年12月の時点で\140とお安いです。
今回は18ピンのマイコンを選択したため、音声出力のD/A変換はR-2RラダーではなくPWMで行っています。実際に耳で聞いた感じでは問題なく音声が再生できました。
電源はトランスで降圧したのち、ブリッジダイオードで整流します。
これを7805で安定化させてマイコンやスピーカアンプの電源とします。
AC周波数はトランス直後からフォトカプラを介してPICに入力し、時計の計時はこのパルスを使います。回路図と異なるトランスやフォトカプラを使う場合はLED側の抵抗を調整する必要があるかと思います。
ヒューズは必ず入れてください。
ただし、当然ではありますがヒューズを入れたからといって絶対的に安全とは言えませんので、製作の際はは細心の注意を払ってください。
時刻の設定はSW1で時調整、SW2で分調整します。SW3は現在時刻を発声します。
回路図中の Option circuit とある部分は、外部との通信用です。
PCのシリアルポートと接続し、後述の時刻同期ソフトでPCから時刻を同期できます。
本機はAC100Vを扱っていますので、シリアルポート用の回路はフォトカプラで絶縁します。
Time String とある部分は時刻の文字列を 12:34:56 形式で外部に送信しています。
時刻を7セグLEDなどでも表示したい場合はこの信号を使ってください。
スピーカアンプのTA7368Pは本家の東芝製が製造中止になっています。
秋月さんでは2017年12月時点でまだ在庫があるようですが、もし手に入らなかった場合、セカンドソースのUTC製TA7368でも問題ないかと思います。
単純に音声告知クロック本体から送られたデータを7セグメントLEDに表示するだけのものです。
カソードコモンLEDを駆動するありふれた回路ですので、特に難しい部分はないと思います。
当方はNPNトランジスタに2SC1815を使いましたが、製造中止になっているので一般的な小信号用なら他のものでもOKです。
タイマ0がオーバーフローするごとに秒数カウント用の変数をインクリメントし、この秒数が時計としての時刻データになります。
EEPROMに書き込む音声データは マスカットさん の作品と同じものを使います。
マスカットさんの解説ページから vck_pro.zip をダウンロードし、その中の vck_eeprom.hex を書き込んでください。
EEPROMの書き込みは、以前作成した シリアルポートからI2Cに変換するアダプタ でも書き込むことができます。
本機は電池ではなくAC電源を使用しているため、特にマイコンのスリープ機能は使用せず常に通常動作させています。
ただしスピーカアンプは常時ONにしておくと、電子機器や蛍光灯の点灯時などノイズを拾った際に「ポツポツ」と耳障りな音が鳴るため、これを防ぐよう発声時のみ電源をONにしています。
ソースファイルとHexファイル
音声告知クロック本体 voiceclock.zip(10KB)
7セグメントLED表示部 voiceclock7seg.zip(4KB)
本機を接続したシリアルポートを選択し、「PCの時刻で同期」ボタンを押下するとPCの時刻で本機と同期します。
「任意の時刻を設定」ボタンは主にデバッグ用です。
自動発声のテストを行う際に使用しました。
「時刻読み上げ」ボタンは本機の時刻発声スイッチを押したのと同じ動作です。
WindowsXPと8.1で動作確認済み。
最新版
TimeSync_r2.zip(7KB)
過去のバージョン
TimeSync.zip(7KB)
最終同期日時を記録するよう変更しました。
「PCの時刻で同期」機能を使った際にプログラムと同じフォルダへ SyncLog.txt というファイルが作られます。
次回の起動時には自動でこのファイルのデータが読み込まれ、ウインドウへ最終同期日時を表示します。
60Hzではテストしていませんが、おそらく問題ないかと思います。
時設定スイッチを押すと1時間分増えます。
分設定スイッチを押すと1分増え、このときのみ秒数がクリアされます。
10時10分に設定したいときは、時設定スイッチで10時まで進め、分設定で9分まで進めておきます。
次に分設定スイッチを押したままにして、10分になった瞬間にスイッチを離すと10分に設定されます。
毎時0分と30分は自動的に時刻を発声します。
また、時刻発声スイッチを押すと現在の時刻を発声します。