Wetterstation Bauvorschlag 3

Bauvorschlag 3:

In dieser Schaltung wird beim DHT11 die Umgebungstemperatur und die Luftfeuchtigkeit gemessen. Sobald der Taster gedrückt wird, werden die Messwerte jeweils abwechselnd drei Mal für 3 Sekunden auf einem 7-Segmentdisplay mit 4 Digits angezeigt. In unserem Beispiel wird die Anzeige mit der Herstellernummer 3641BS verwendet.

Damit das Programmieren einfacher geht, wurden auch hier wieder Libraries verwendet.

Der Programmcode kann nach Belieben verändert werden. Lass dich inspirieren!

 

///////////////////////////////////*DEFINITIONEN*///////////////////////////////////
  /*4x7 i2c*/
#include "TM1637.h" //TM1637-Bibliothek wird eingebunden

#define CLK 3 //CLK wird am Pin3 angeschlossen       
#define DIO 4 //DIO wird am Pin4 angeschlossen

TM1637 tm1637(CLK,DIO); //Das 4-Digit Display wird initialisiert

  /*DHT 11*/
#include <DHT.h> //DHT11-Bibliothek wird eingebunden

#define DHTPIN 13 //Der DHT11 wird am Pin13 angeschlossen
#define DHTTYPE DHT11 //Hier wird angegeben, dass der verwendete DHT ein DHT11 ist

DHT dht(DHTPIN, DHTTYPE); //Der DHT wird initialisiert

int hum = 0; //Zu Beginn wird die Variable hum auf 0 gesetzt
int temp = 0; //Zu Beginn wird die Variable temp auf 0 gesetzt

/*TASTER-DEFINITIONEN*/
#define TASTER A1 //Der Begriff TASTER hat den Wert A1

///////////////////////////////////*SETUP*///////////////////////////////////
void setup() {
  /*4x7 i2c*/
  tm1637.init(); //Startet das 4-Digit Display
  tm1637.set(BRIGHT_TYPICAL); //Lichtstärke der Segmente wird eingestellt (BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7)

  delay(1500); //Pause, damit sich das Programm booten kann

  /*DHT11*/
  dht.begin(); //Startet den DHT

  /*TASTER*/
  pinMode(TASTER, INPUT_PULLUP); //Definiert den Pin A1 als Input, wo Daten gelesen werden
}

///////////////////////////////////*LOOP*///////////////////////////////////
void loop() {
  /*DHT 11*/
  hum = dht.readHumidity(); //Hier wird die Luftfeuchtigkeit aus der Datenmatrix in die Variable hum abgespeichert
  temp = dht.readTemperature(); //Hier wird die Temperatur aus der Datenmatrix in die Variable temp abgespeichert
  
  /*Taster*/
  AnzeigeDerMesswerte(); //Startet eine Funktion, in der die Anzeige der Messwerte ausgeführt wird
}

///////////////////////////////////*WEITERE FUNKTIONEN*///////////////////////////////////
void AnzeigeDerMesswerte(){
  /*In dieser Funktion wird geprüft, ob der Taster gedrückt wurde. Ist das der Fall, wird eine for-Schlafe 3x durchlaufen. In dieser wird 3sec lang die Temperatur und 3sec lang die Luftfeuchtigkeit angezeigt.*/
  if (digitalRead(TASTER) == LOW){
    for (int i = 0; i < 3; i++){ 
        
      int digitoneT = temp / 10; //Division ermöglicht die Speicherung der ersten Ziffer des Werts
      int digittwoT = temp % 10; //Modulorechnung ermöglicht die Speicherung der zweiten Ziffer des Werts
 
      int digitoneH = hum / 10; //Division ermöglicht die Speicherung der ersten Ziffer des Werts
      int digittwoH = hum % 10; //Modulorechnung ermöglicht die Speicherung der zweiten Ziffer des Werts
  
      tm1637.display(1,digitoneT); //Digit Nr1 zeigt den Hexwert, der als digitoneT gespeicht ist
      tm1637.display(2,digittwoT); //Digit Nr2 zeigt den Hexwert, der als digittwoT gespeicht ist
      tm1637.display(3,12); //Digit Nr3 zeigt den Hexwert C (soll für Celsius stehen)
    
      delay (3000); //3 Sekunden Pause
    
      tm1637.display(1,16); //Digit Nr1 zeigt keinen Hexwert (16 und 23 sind typische Leerstellen)
      tm1637.display(2,digitoneH); //Digit Nr2 zeigt den Hexwert, der als digitoneH gespeicht ist
      tm1637.display(3,digittwoH); //Digit Nr3 zeigt den Hexwert, der als digittwoH gespeicht ist

      delay(3000); //3 Sekunden Pause
    }
  }
  /*Nach dem Anzeigen der Messwerte werden alle Digits auf leer gestellt.*/
  tm1637.display(0,16); //Digit Nr0 zeigt keinen Hexwert (16 und 23 sind typische Leerstellen)
  tm1637.display(1,16); //Digit Nr1 zeigt keinen Hexwert (16 und 23 sind typische Leerstellen)
  tm1637.display(2,16); //Digit Nr2 zeigt keinen Hexwert (16 und 23 sind typische Leerstellen)
  tm1637.display(3,16); //Digit Nr3 zeigt keinen Hexwert (16 und 23 sind typische Leerstellen)
}