Tiny RTC DS1307 Echtzeituhr mit zusätzlichem Temperatursensor DS18B20

In dem folgenden Beitrag erweitern wir das Tiny RTC Modul um einen DS18B20-Temperatursensor, welcher entweder schon auf dem Board vorhanden ist oder den wir durch Auflöten einfach hinzufügen. Dies ist eine Erweiterung von: Uhrzeit und Kalenderfunktionen mit einem Echtzeituhrmodul auf Basis des DS1307 und einem Arduino.

Tiny RTC DS1307 Echzeituhr mit zusätzlichem Temperatursensor DS18B20 - blog.simtronyx.de

Tiny RTC DS1307 Echzeituhr mit zusätzlichem Temperatursensor DS18B20

Sollte kein DS18B20 auf dem Modul vorhanden sein, bitte auflöten (der Aufrdruck auf dem Modul sollte selbsterklärend sein, ansonsten auf obige Bild schauen!), wenn nicht vorhanden wird es nicht funktionieren!

Wir verkabeln unseren Arduino wie folgt mit dem Echtzeitmodul:

Schaltplangröße:

ATMega328P1afbgchdie1j55101015152020252530afbgchdie30j
Für weitere Informationen (z.B. Pinbelegungen von Bauteilen oder genaue Kabelverbindungen)
mit der Maus über Elemente fahren (oder im Touch-Modus: Elemente antippen)...

Arduino
(NanoUno, Pro Mini)
Arduino
(Mega, Mega 2560)
Tiny RTC-Modul
DS1307
5V (VCC) 5V (VCC) VCC
GND GND GND
A4 (SDA) D20 (SDA) SDA
A5 (SCL) D21 (SCL) SCL
D2 D2 DS
Tiny-RTC-DS1307-Echtzeituhr-Pinout-Rueckseite-blog.simtronyx.de

Tiny RTC Modul – Pinout

Sourcecode (Sketch):

Zusätzlich installieren wir noch drei zusätzliche Bibliotheken (falls nicht schon vorhanden, natürlich):

und laden danach noch folgenden Code auf den Arduino:

// Tiny RTC (DS1307)

#include <Wire.h>    // I2C-Bibliothek einbinden
#include "RTClib.h"  // RTC-Bibliothek einbinden

RTC_DS1307 RTC;      // RTC Modul

#include <OneWire.h>            // OneWire-Bibliothek einbinden
#include <DallasTemperature.h>  // DS18B20-Bibliothek einbinden

#define DS18B20_PIN 2   // Pin für DS18B20 definieren Arduino D2

OneWire oneWire(DS18B20_PIN);          // OneWire Referenz setzen
DallasTemperature sensors(&oneWire);   // DS18B20 initialisieren

void setup(void) {

  // Initialisiere I2C  
  Wire.begin();
  
  // Initialisiere RTC
  RTC.begin();

  // Serielle Ausgabe starten 
  Serial.begin(9600);

  // Begrüßungstext auf seriellem Monitor ausgeben
  Serial.println("Starte Datum, Zeit und Temperatur - blog.simtronyx.de");

  // Prüfen ob RTC läuft  
  if (! RTC.isrunning()) {
    
    // Aktuelles Datum und Zeit setzen, falls die Uhr noch nicht läuft
    RTC.adjust(DateTime(__DATE__, __TIME__));
    
    Serial.println("Echtzeituhr wurde gestartet und auf Systemzeit gesetzt.");
  }
  else Serial.println("Echtzeituhr laeuft bereits.");

  sensors.begin();  // DS18B20 starten
}

void loop(){
  
  DateTime now=RTC.now();   // aktuelle Zeit abrufen 
  show_time_and_date(now);  // Datum und Uhrzeit ausgeben
  
  sensors.requestTemperatures();                 // Temperatursensor auslesen
  show_temperature(sensors.getTempCByIndex(0));  // Temperatur ausgeben
  
  delay(30000); // 30 Sekunden warten bis zur nächsten Ausgabe
}

// Wochentag ermitteln
String get_day_of_week(uint8_t dow){ 
  
  String dows="  ";
  switch(dow){
   case 0: dows="So"; break;
   case 1: dows="Mo"; break;
   case 2: dows="Di"; break;
   case 3: dows="Mi"; break;
   case 4: dows="Do"; break;
   case 5: dows="Fr"; break;
   case 6: dows="Sa"; break;
  }
  
  return dows;
}

// Datum und Uhrzeit ausgeben
void show_time_and_date(DateTime datetime){
  
  // Wochentag, Tag.Monat.Jahr
  Serial.print(get_day_of_week(datetime.dayOfWeek()));
  Serial.print(", ");
  if(datetime.day()<10)Serial.print(0);
  Serial.print(datetime.day(),DEC);
  Serial.print(".");
  if(datetime.month()<10)Serial.print(0);
  Serial.print(datetime.month(),DEC);
  Serial.print(".");
  Serial.println(datetime.year(),DEC);
  
  // Stunde:Minute:Sekunde
  if(datetime.hour()<10)Serial.print(0);
  Serial.print(datetime.hour(),DEC);
  Serial.print(":");
  if(datetime.minute()<10)Serial.print(0);
  Serial.print(datetime.minute(),DEC);
  Serial.print(":");
  if(datetime.second()<10)Serial.print(0);
  Serial.println(datetime.second(),DEC);
}

// Temperatur ausgeben
void show_temperature(float temp){
  
  Serial.print("Temperatur: ");
  Serial.print(temp);
  Serial.print(" ");  // Hier müssen wir ein wenig tricksen
  Serial.write(176);  // um das °-Zeichen korrekt darzustellen
  Serial.println("C");
}

Download Source Code

starten den seriellen Monitor und sollten dann etwa folgende Ausgabe bekommen:

DS1307-DS18B20-Echtzeituhr-und-Temperatur-Serieller-Monitor-blog.simtronyx.de

DS1307, DS18B20-Echtzeituhr und Temperaturmessung – Serieller Monitor

und können dadurch das Echtzeitmodul auch zur Temperaturmessung verwenden.

Weiterführendes Projekt mit dem DS1307-Echtzeituhrmodul:

Einfache (Raum-)Klimaüberwachung mit einem Arduino

Bauteile (Bezugsquellen):

eBay: Arduino Uno
Breadboard
Breadboard Kabel
DS1307
DS18B20
Tiny RTC Arduino
Amazon: Arduino Uno
Breadboard
Breadboard Kabel
DS1307
DS18B20
Tiny RTC Arduino

Gut?

Facebooktwittergoogle_plusredditpinterestlinkedinmailFacebooktwittergoogle_plusredditpinterestlinkedinmail