その昔、ACの50Hzからクロックを得て動作する時計がありました。
高校生の時にエアーチェック(死語)用に買ったタイマーがこの方式で、表示は最近話題のVFDで、今でも現役で枕元で時を刻んでいます。
ここ10年くらい停電が無いせいか時刻合わせをしていませんが、1分程度の誤差しかありません。
昨今は電力会社が生成する50Hzの精度がかなり良くなってきているとのことで、この50Hzを時計のクロックにしてみようと思い実験してみました。
回路図です。
この回路で50Hzの方形波を得て、arduinoのデジタルピン2や3で外部割込みを発生させ、50回カウントします。
オシロで波形を見てみましたが、立ち上がりがゆっくりでデューティー比も50%からずれていました。
Tanukino用のAVRが出払っているので、Japaninoで実験しました。
AC100Vを扱うバラックの実験なのでドキドキものです。
ソフトは外部割込み(0番=D2)の立ち上がり(RISING)でblink関数を呼びます。
attachInterrupt(0, blink, RISING);
blink関数では50回数えたらstateを反転させて、loop関数でLEDを点滅させます。
高校生の時にエアーチェック(死語)用に買ったタイマーがこの方式で、表示は最近話題のVFDで、今でも現役で枕元で時を刻んでいます。
ここ10年くらい停電が無いせいか時刻合わせをしていませんが、1分程度の誤差しかありません。
昨今は電力会社が生成する50Hzの精度がかなり良くなってきているとのことで、この50Hzを時計のクロックにしてみようと思い実験してみました。
回路図です。
この回路で50Hzの方形波を得て、arduinoのデジタルピン2や3で外部割込みを発生させ、50回カウントします。
オシロで波形を見てみましたが、立ち上がりがゆっくりでデューティー比も50%からずれていました。
Tanukino用のAVRが出払っているので、Japaninoで実験しました。
AC100Vを扱うバラックの実験なのでドキドキものです。
ソフトは外部割込み(0番=D2)の立ち上がり(RISING)でblink関数を呼びます。
attachInterrupt(0, blink, RISING);
blink関数では50回数えたらstateを反転させて、loop関数でLEDを点滅させます。
void blink() { i++; if(i==50) { i=0; state = !state; } }