2020-07-09
東京小金井市前原小学校でも活躍しているIchigoJam、手軽に実用マシンにできるのもウリのひとつ。 時計付き温度計はんだづけなし版)に、ネコゴハンマシンに活躍している、そこそこ正確な時刻を提供してくれる部品、リアルタイムクロック(RTC)。 アラーム機能を使って1時間に1回起動する省エネマシンを作りました。

10 BEEP 20 WAIT 60*60*60 30 GOTO 10

まずは、IchigoJamだけでできること。WAITは60で1秒なので、60倍して1分、さらに60倍して1時間。これで1時間おきにBEEPが鳴る?実はそうはなりません。なぜでしょう。

60*60は3600、もう10倍もするとIchigoJamの変数で扱える最大値32767を超えてしまいます。5分は収まるので12回繰り返して、1時間待ってもらいましょう。

20 FOR I=1 TO 12:WAIT 60*60*5:NEXT

WAITコマンドは指定の数だけ待ちますが、CPUは全力で動いています。これを休ませて、省エネにするのが、WAITの二番目のパラメーター。

20 FOR I=1 TO 12:WAIT 60*60*5,0:NEXT

コンマ0を付けると、画面が停止し、5分後に復帰し、また続きを実行して、また停止を繰り返します。停止している間、メモリなど極僅かに電気を使う状態になるのでぐっと省エネ、電池の持ちが良くなります。

ただ問題は、CPU付属のタイマーの精度が高くないことです。ぴったり1時間にはならず、ちょっとずつずれていきます。ずれる時間を計測して調整するのもありですが、個体差があるので、たくさん作る時には一工夫必要です。

そこで登場、RTC(リアルタイムクロック)モジュール!
(245円 at aitendo, 3コで960円 at Amazon)

IchigoJamとRTC、VCC/GND/SCL/SDA(IN3)を接続。SQWピンはアラーム割り込みピンとしても設定でき、BTN端子に接続して、1時間毎に起動と設定して、SLEEPコマンドを使っておくと、もっと省エネ。もっと正確に1時間置き実行が実現できます。 (SLEEPコマンドからの復帰は、RESETしてFILE0の自動起動となるので、ピンのI/O設定や、実行中の変数の値は消えることに注意!)

DS3231のデータシートを見て、アラーム設定。指定時間になったらSQW(INT)ピンが0になります。もう一度アラームがくるように、アラームフラグを0に戻しておく必要ありです。

100 POKE#700,0,0,#80,#80:?I2CW(#68,#7,#700,4) 110 POKE#700,`101:?I2CW(#68,#E,#700,1) GOTO 100 10 BEEP 20 POKE#700,0:?I2CW(#68,#F,#700,1) 30 SLEEP SAVE0 SLEEP

100行、110行が初期設定。一度実行すれば、RTCにアラーム設定が書き込まれます。 1時間置きをテストするのは時間がかかるので、1分置きにする場合は、100行を下記のように設定します。

100 POKE#700,0,#80,#80,#80:?I2CW(#68,#7,#700,4)

保存しSLEEPコマンド実行で眠ります。うまく設定できていれば、アラームで起動し、BEEPを鳴らし、20行でアラームフラグをリセットしてて再びSLEEPで眠ります。

100行のアラーム設定には、秒、分、時間、日時や曜日の設定できるので、現在時刻を設定して、オリジナルなスケジュールアラームづくりもいいですね! 非常ベルをつなげば、気づく確率アップ!
この2032電池を接続できるRTCモジュール、充電回路がついているとのことで、充電電池ではない電池を使う場合、この抵抗をニッパーでカットするなど、充電回路を遮断しておく方が安全そうです。(3.3Vで使う分にはリスクは低いらしい?)

links
- 「IchigoJamBASIC」「Lチカ」「カムロボ」「ドローン」……前原小学校が実践したプログラミング授業の全容公開! - バレッドプレス(VALED PRESS)

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS