【arduinoでrtc】ds3231の時刻合わせ
arduinoには時計機能がありません。
そのため、arduinoの時間関数 millis()で時計を自作するという方法もあるようですがDS3231RTCモジュールを使えば簡単にarduinoに時計機能を持たせることが出来ます。
ds3231 RTCモジュール
ds3231 rtcモジュールは安価で耐久性もあります。
既に1年以上使っていますが、問題なく動作しています。
電池はなくても構わないのですが、電源がないと時刻設定が保持出来ないので再度書き込みする場合には時刻設定もしなければならず、ちょっと面倒なところもありますね。
電池があれば時刻を保持出来るので楽です。
[amazon_link asins=’,B00YQZFMMQ,B01AXQX81I,B079HTHCZC’ template=’ProductCarousel’ tag=’toraberuko-22′ marketplace=’JP’ link_id=’1e988895-f60c-490b-a739-ae99efcdd40a’]
ds3231の回路
ds3231とarduinoの配線です。
GND → GND
VCC → 5V or 3.3V
SCL → SCL
SDA → SDA
RTC側の残り2本のピンは使いません。
たったこれだけの配線ですので簡単ですね。
RTCスケッチ
ファイル ⇒ スケッチ例 ⇒ RTClib と進みds3231を選択します。
このスケッチをarduinoに書き込むだけで動作します。
arduino rtc 時刻設定
RTCの時刻設定です。
rtc.adjust(DateTime(年, 月, 日, 時, 分, 秒));
年月日時分秒のところに、半角で入力します。
例: rtc.adjust(DateTime(2020, 2, 2, 2, 2, 2));
例では2020年,2月2日,2時2分2秒と入力しています。
書き込んだら//でコメントアウトしておくと再度書き込んでも時刻設定は変わりません。
RTCのスケッチ
サンプルスケッチを少し変更しただけです。 (^^;
[php]#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup () {
Serial.begin(115200);
delay(50);
if (! rtc.begin()) {
while (1);
}
rtc.adjust(DateTime(2020, 2, 2, 2, 2, 0)); //時刻設定
}
void loop () {
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/’);
Serial.print(now.month(), DEC);
Serial.print('/’);
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':’);
Serial.print(now.minute(), DEC);
Serial.print(':’);
Serial.print(now.second(), DEC);
Serial.println();
delay(1000);
}[/php]
RTC DS3231 まとめ
arduinoを使って水やりタイマーを作るには時間の管理が必要になってきます。
arduinoの時間関数では最大50日でリセットされるのでRTCモジュールがお勧めです。
IF関数と組み合わせることで自由に水やりプログラムを組めますね。
カズは昨年、霧吹き水やり機を自作しましたが今年は、3系統の水やりタイマーを作ってみました。
温室水やり、露地水やり、そして霧吹き水やりです。
自作タンク式水やり機おかげで、検索2位になりました。