Udělej si (3) – skutečné hodiny RTC

Tak to vám jednou se probudím, a ono tma. Že bych si nastavil budík? To raději jako správný kutil si ho musím udělat. Opravdový kutil začne přesýpačkami, ale nenašel jsem správné skleničky, tak mi zbylo zas jen Arduino.

Co budete potřebovat:

  • 1x Arduino (Uno, Duemilanova, Due, Leonardo)
  • 1x nepájivé pole
  • dráty jako propojovací vodiče
  • 1x integrovaný obvod DS1307
  • 1x krystal 32,768 kHz
  • 2x rezistor 2k2
  • 1x baterii 3 až 3,6V

Součástky a  materiál koupíte např. zde: Stavebnice.com/eshop

Jak zapojit:

RTC - i2c - DS1307

Jak vidíte, zapojení je velmi jednoduché.
Rezistory (= odpory) mohou být 1k5 – 10k.
Zde zobrazená baterie může být nahrazena jakoukoliv nenabíjecí, jen si ohlídejte napětí a polaritu.
Komunikace mezi Arduinem a DS1307 je přes AnalogIn piny A4 a A5.

Pro spuštění ještě musíte nahrát knihovnu RTC s DS1307 a „Sketch -> Import Library“

Knihovnu stáhněte zde: RTClib-ds1307

a rozbalte do adresáře ..arduino-0018libraries

Vyzkoušeno ve verzi 0018, 0022 a 1.0

Ukázka programu 4.1 – hodiny reálného času RTC:

// Funkce data a času DS1307 RTC zapojenému přes I2C a knihovnu Wire
#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

void setup () {

 Serial.begin(57600);
 Wire.begin();
 RTC.begin();

 if (! RTC.isrunning()) {
 Serial.println("RTC is NOT running!");
 // následující řádka nastaví RTC datum a čas po zkompilování podle počítače
 RTC.adjust(DateTime(__DATE__, __TIME__ ));
 }
}

void loop () {
 DateTime now = RTC.now();

 // příkaz Serial.print() pošle data přes USB do počítače,
 // kde je zobrazíme v terminálu - Ctrl+Shift+M.

 Serial.print(now.year(), DEC);
 Serial.print('/');
 Serial.print(now.month(), DEC);
 Serial.print('/');
 Serial.print(now.day(), DEC);
 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 midnight 1/1/1970 = ");
 Serial.print(now.unixtime());
 Serial.print("s = ");
 Serial.print(now.unixtime() / 86400);
 Serial.println("d");

 // chceme-li přičíst ke stávajícímu datu a času 7 dní a 30 sekund
 DateTime future (now.unixtime() + 7 * 86400L + 30);

 Serial.print(" now + 7d + 30s: ");
 Serial.print(future.year(), DEC);
 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(1000);

} //------ konec ------------

Příště si povíme, jak připojit LCD display a hodiny budou svítit do tmy 🙂

Napsat komentář