Itt
egy valós idejű
óramodult (RTC) csatlakoztatunk Arduinonkhoz.
Az RTC-k akkumulátorokkal
vannak szerelve, így áramkimaradás esetén is tovább számlálják
a pontos időt.
Mikrokontrollerekkel összeépítve óraként, időzítőként,
adatgyűjtéshez, riasztókba használják.
Ebben a cikkben a DS1307
használjuk, ez az egyik legjobb minőségű RTC, és illeszthető 5V
rendszerekhez. Általában készletként
kapható, forraszd magad de nem kell megijedni tőle, gyorsan
összerakható.
Az Arduino is tartalmaz beépített időzítő t- a millis() paranccsal előhívható de ez csak a bekapcsolástól eltelt időt számlálja ezredmásodpercben. Ezzel szemben az RTC akkor is tovább számol ha nincs külső tápellátás, számolja a másodpercet, percet, órát, és a pontos dátumot is. Számolja a szökőéveket, a hónapokat, heteket, egyet nem kezel a nyári időszámítást, ezt azért nem mert ez helyileg változik.
Alkatrészek:
- Arduino uno
- Usb kábel
- Próbapanel
- Összekötő vezetékek
- DS1307 RTC
Építsük meg az áramkört:
S1307
lábkiosztása:
5V: ide kötjük a
tápfeszültséget
GND: a GND
SCL: az óra kimenet
i2c, Arduinon kösd az analóg 5-ös kimenethez.
SDA: adat kimenet i2c,
Arduinon kösd az analóg 4-es kimenethez.
SQW: opciónális
négyszögjel kimenet, csak speciális eseteknél használjuk.
Lássuk a kódot:
Először
is töltsük le
és telepítsük az RTClib könyvtárat.
Letölthető a :
https://github.com/adafruit/RTClib webhelyről az RTClib.zip-et a
jobb oldalt alul
található Download ZIP
gombra kattintva. Majd csomagoljuk ki az Arduino/examples mappájába,
így létrejön a Minták
között egy RTClib-master könyvtár.
// Date and time
functions using a DS1307 RTC connected via I2C and Wire lib
#include
<Wire.h>
#include "RTClib.h"//a
könyvtárunk inicializálása
RTC_DS1307 RTC;
void
setup () {
Serial.begin(57600);//soros
monitor bitsebessége
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
Serial.println("RTC
is NOT running!");// ha nem érzékeli az RTC futását
hibaüzenet jelenik meg
// először
beállítjuk a kezdő dátumot és ídőt az RTC-n
RTC.adjust(DateTime(__DATE__,
__TIME__));
}
}
void
loop () {
DateTime now =
RTC.now();
Serial.print(now.year(),
DEC);// év lekérdezése és kiíratás
Serial.print('/');
Serial.print(now.month(),
DEC);//hónap lekérdezése
Serial.print('/');
Serial.print(now.day(),
DEC);//stb....
Serial.print(' ');
Serial.print(now.hour(),
DEC);
Serial.print(':');
Serial.print(now.minute(),
DEC);
Serial.print(':');
Serial.print(now.second(),
DEC);
Serial.println();
Serial.print("
since 1970 = ");
Serial.print(now.unixtime());//
másodpercben kiirt dátum és idő
Serial.print("s =
");
Serial.print(now.unixtime()
/ 86400L);
Serial.println("d");
//
DateTime future
(now.unixtime() + 7 * 86400L + 30);//7nap ms-ben +30ms jövőidő
Serial.print("
now + 7d + 30s: ");
Serial.print(future.year(),
DEC);//jövőidő kiszámitás
Serial.print('/');
Serial.print(future.month(),
DEC);
Serial.print('/');
Serial.print(future.day(),
DEC);
Serial.print(' ');
Serial.print(future.hour(),
DEC);
Serial.print(':');
Serial.print(future.minute(),
DEC);
Serial.print(':');
Serial.print(future.second(),
DEC);
Serial.println();
Serial.println();
delay(3000);//3s
várakozás az új ciklusig
}
Az RTC modulokról most
röviden ennyit, további jó felhasználást.