ArduinoでRTCの時刻あわせがやっとできた
おはようございます。じぇいかわさきです。
今日から夏休みが始まります。この休みの間に、出来ていなかった事や貯まっている用事を済ませていきたいと思います。
と言う事で、まずはずっとやろうとしてなかなかできていなかったArduinoでRTCを使って時刻表示をすることに挑戦しました。
時刻表示なんて別に大げさでも何でもなく、RTCモジュールを使えば簡単にできるようなんです。
RTCって言うのはリアル・タイム・クロックの頭文字を取ったもので、簡単に言えば電子デバイスが搭載する時計、あるいはその機能を実装したモジュールを言います。
今回使用したのは、一般的に売られているDS3232と言うモジュールで、これはRTCだけでなく温度センサーまで内蔵したものなのです。
今回はAmazonで簡単に安く手に入るこのモジュールを使用して実験してみました。
とりあえず、Arduino UNOに接続して実験。時刻表示をするまではネットを調べながら皆さんのスケッチを参考にして作成。
また同時に内部の温度計からも温度を取得してLCDに表示するまでをやってみました。
こんな感じで、なんとか表示はできるようになりました。
LCDの表示自体は、他の機能も取り込んで表示設定だけはしたので、こんな感じで表示されています。
昨日からずっと修正しながらなんとかここまでできました。
初めて使用するRTCは簡単のようで難しい。時刻をRTCから引き取るのは簡単にできても、特定フォーマットで表示するのが少々難しかった。
しかし、最大難関は時刻セットだ。
コンパイルしてArduinoに書き込むときに最初の時刻設定をするのだが、コンパイルして書込なので、スケッチに書いた時間よりかなり遅れてしまう。
この遅れをどのようにして補正するか?ここで大はまりしました。
一般的なデジタル時計では、セットボタンとアジャストボタンの組合せで時刻修正をすると思います。
簡単に言うと、セットボタンを長押しすると時刻セットモードに入り、以降はセットボタンを押すたびに西暦→月→日→時→分の順番で変わり、都度アジャストボタンを押すと数字が増加したり減少したりすることができるト思います。
しかし、今回はそんなセットボタンは付けていないし、ましてやボタンを長押しや短く押す事によりセットモードに入る方法、アジャストボタンで時刻設定する方法など全く分かりません。
ネットで調べて幾つか希望するような動作を実現している方がおられたので、そのスケッチを見たのですが・・・・内容が理解出来ない。
理解出来ないと、自分なりのカスタマイズもできないし動作しない場合に解決もできない。
代替え案は無いかと調べまくっていると、1件違う方法を見つけました。
それはシリアルモニターから設定する方法で、いわゆるシリアル通信を行う方法ですね。
これならArduinoにスケッチを組込、そのスケッチを動作させるとシリアルモニターに現時刻が表示されるので、シリアル通信で修正時刻を書き込むというものでした。
これは画期的です。ハードが不要になるので、複雑なスケッチを書かなくても済みます。このスケッチを動作させて時刻を修正できれば、RTCは電池でバックアップされていますから、別のスケッチを動作させても時刻は変わる事はありません。
しかも、そこで紹介されていたスケッチは違うモジュール用ですが、シリーズ品なのでそのまま使えると紹介されておりました。
早速そのスケッチを使ってコンパイルしてみますが、やたらエラーの続出です。
そのコンパイル時のエラーは”●●はスコープが対象外”という事で、includeするモジュールが違っているようなんです。
そこでエラーをネットで調べながら、対象となるモジュールを探して使用してみるも、●●部分が変わるだけで基本的に同じようなエラーでコンパイルできません。
変数名を変えたりしていろいろやってみますが、一向に修正できる兆しが見えません。
そもそもプログラム知識が乏しいと言う事も、解決できない理由の一つなんでしょうね。
ポイントはシリアル通信であることを重視しながらネット検索。
その時、ある事をひらめいたんです。このモジュールを提供している所が、参考スケッチを幾つか出しており、その中に無いかなと思ったのです。
早速調べて見ると・・・・有りました!
SetSerialと言う名前でそれらしきモノがあったので、早速開いてスケッチの内容を確認してみると、求めていたものそのものでした。
正に灯台もと暗し、探しているモノは自分のPCの中にありました。
早速このSetSerialと言うスケッチをコンパイルしてArduinoに書き込みます。
後はセット法法がスケッチの中にコメントとして書かれているので、その通りにシリアルモニターの通信窓に記述しリターンを押せば完了。
書込時間があるので、数秒の遅延は発生しますが、RTCの時刻はほぼ正しい時間になりました。
数日悩みに悩んで先に進まなかったRTCの時刻セット。手元に有ったスケッチであっという間に解決です。
自分で調べて解決したから、出来上がったときのうれしさは100倍うれしいですね。
プログラマーから見たら、なんでそんなこと出悩むのと言うようなことですが、ド素人にとっては超難関なんですよ。
でも、自力で進んでいくとものすごく楽しくなります。
今回もRTCもそうですが、I2Cと言う方式なので配線が少なくて、沢山のモジュールが接続できるので非常に便利。
今回、RTCと表示用LCDの制御で信号線は2本だけ、後は電源とグランドの計4本のみ。これも素晴らしい。
この夏休みを使って、次は電圧と電流を測定できるようにしたいと思っております。
モノを造りながら考えるって、本当に楽しいですね。動かないと悩んで調べているだけで、あっという間に1日が終わってしまう。
脳をフル活用するので、有意義な時間の使い方だと思います。
次回、また何か動いたら紹介しますね。
じぇいかわさきです。生産技術者として35年、今まで培った経験とスキルを元に、ものづくりに関わる世の出来事に対して思ったことをホンネで書いてます。ノウハウやアイデアもありますよ。 また写真も全力で撮っています、気に入った写真があればサポートや感想をぜひお寄せください。