Omron Koppelrelais


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


Arduino, Real Time Clock DS3231 und LCD-Display


Die Schaltung besteht grundsätzlich aus drei Komponenten: Arduino Mega 2560, RTC Modul DS3231 und LCD-Display 1602A. DS3231 ist ein sehr präzises RTC-System (Real Time Clock), das häufig verwendet wird. Der Baustein verfügt u.a. über ein eigenes Thermometer zur Temperaturkompensation. Seine hohe Genauigkeit garantiert die maximale Abweichung der gemessenen Zeit von etwa 1 Minute pro Jahr.
Bei der Anzeige handelt es sich um ein LCD-Display mit 2 Zeilen je 16 Zeichen.

Testschaltung auf Steckbrett


Nach dem Einschalten werden auf dem Display laufend Datum und Uhrzeit angezeigt. Diese Daten werden mithilfe der Funktionen, die die Bibliothek <DS3231.h> zur Verfügung stellt, aus dem DS3231 ausgelesen und formatiert.
Der Vorgang wiederholt sich im Sekundentakt. Dafür sorgt der Befehl delay(), der das Programm für insgesamt 1 Sek. anhält. Parallel hinzu wird die Leuchtdiode D1, die am Pin 3 von Arduino angeschlossen ist, geschaltet. Sie blinkt annähernd mit einer Frequenz von 1Hz.
Zum Vergleich wurde eine zweite Leuchtdiode D2 der Schaltung hinzugefügt. Die D2 ist jedoch nicht an Arduino sondern an den Anschluss SQW des RTC-Moduls angeschlossen. Dieser Anschluss wird mit
clock.setOutput(DS3231_1HZ);
clock.enableOutput(true);
aktiviert und ebenfalls mit einer Frequenz von 1Hz ein- und ausgeschaltet. In dem kurzen Video kann man beobachten, dass die erste Leuchtdiode etwas verzögert schaltet. Bei ihr ist noch die Zeit für die Abarbeitung des Programms im Spiel.
Der Ausgang SQW des RTC-Moduls kann darüber hinaus auch für die Aktivierung von Interrupts, die zu exakt definierten Zeitpunkten aufgerufen werden sollen, genutzt werden.

Der Schaltplan

Schaltplan

Schaltplan (Arduino ohne USB-Anschluss oder Netzteil: Vin > 6 V)

Das Programm

Mit dem Schalter S4 wird auf Eingabe umgeschaltet. Das Programm springt hier in das Unterprogramm "Stunde_Setzen" und bleibt hier gefangen, bis eine neue Eingabe bestätigt wurde. Mit den Tastern S1(+) und S2(-) kann man den gewünschten Wert einstellen. Mit der Taste S3 wird der neue Wert übernommen (Hier nur in Stunden, um den Programmcode kurz zu halten).

// *************************************************************
// RTC3231 (Modul ZS-042) mit Arduino Mega 2560
// Externe Zeiteingabe (Stunde), interner Taktgeber
// Format Datum und Uhrzeit, LCD-Display 2x16 1602A
// *************************************************************

#include <DS3231.h>
#include <LiquidCrystal.h>

DS3231 clock;
RTCDateTime dt;

int LED_1 = 3;
int Schalter = 46;
int Taster_Plus = 40;
int Taster_Minus = 42;
int Taster_Setzen = 44;
String RTC_Data;

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int lcdsize[] = {16, 2};

void setup() {
  lcd.begin(lcdsize[0], lcdsize[1]);
  clock.begin();
  //clock.setDateTime(2020, 03, 9, 21, 45, 0);
  pinMode (LED_1, OUTPUT);
  pinMode (Schalter, INPUT_PULLUP);
  pinMode (Taster_Plus, INPUT_PULLUP);
  pinMode (Taster_Minus, INPUT_PULLUP);
  pinMode ( Taster_Setzen, INPUT_PULLUP);

  // Diode 2
  clock.enable32kHz(false);
  clock.setOutput(DS3231_1HZ);
  clock.enableOutput(true);
}

void lcd_ausgabe (String Zeile_1, String Zeile_2)  {
  lcd.setCursor(3, 0);
  lcd.print(Zeile_1); 
  lcd.setCursor(4, 1);
  lcd.print(Zeile_2);
  digitalWrite (LED_1, HIGH);
  delay(500);
  digitalWrite (LED_1, LOW);
  delay(500);  
  }

void Stunde_Setzen (int Stunde) {
  int Stunde_Neu = Stunde;
  Einstellen:
  RTC_Data = Stunde_Neu;
  lcd_ausgabe ("Stunde:       ", RTC_Data + "       ");
  if (digitalRead(Taster_Plus) == LOW) { 
    Stunde_Neu++; 
    delay (20); 
    goto Einstellen; }
  if (digitalRead(Taster_Minus) == LOW) { 
    Stunde_Neu--; 
    delay (20); 
    goto Einstellen; }  
  if (digitalRead(Taster_Setzen) == LOW) { 
    goto Erledigt; }
  goto Einstellen;
  Erledigt:
  clock.setDateTime(2020, 03, 13, Stunde_Neu, 45, 0);
  }

void loop() {
  if (digitalRead(Schalter) == LOW) { Stunde_Setzen (dt.hour); }
  dt = clock.getDateTime();
  RTC_Data = clock.dateFormat("d-m-Y H:i:s", dt);
  lcd_ausgabe (RTC_Data.substring(0,11), RTC_Data.substring(11,19));
  
  RTC_Data = dt.year;
  lcd_ausgabe ("Jahr:       ", RTC_Data + "    ");
  RTC_Data = dt.month;
  lcd_ausgabe ("Monat:       ", RTC_Data + "    ");
  RTC_Data = dt.day;
  lcd_ausgabe ("Tag:       ", RTC_Data + "    ");
  RTC_Data = dt.hour;
  lcd_ausgabe ("Stunde:       ", RTC_Data + "    ");
  RTC_Data = dt.minute;
  lcd_ausgabe ("Minute:       ", RTC_Data + "    ");
  RTC_Data = dt.second;
  lcd_ausgabe ("Sekunde:       ", RTC_Data + "    ");
  lcd_ausgabe ("Heute ist:", clock.dateFormat("l", dt));
}       
// *************************************************************



Kurzvideo

Kurzvideo


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz