Bauvorschlag 2:
Beim Bauvorschlag 2 werden zwei Arduinos benötigt. Ein Arduino liest den DHT11 aus und rechnet die Messwerte zusammen zu einem Paket ((Luftfeuchtigkeit * 100) + Temperatur). Die nun vierstellige Zahl wird mit Hilfe eines 433 MHz Senders versendet.
Ein 433 MHz Empfänger liest das Signal und gibt es an den Arduino weiter. Dieser Teil das Datenpaket mit Hilfe einer Division und einer Modulorechnung wieder in Temperatur und Luftfeuchtigkeit und gibt die Messwerte an ein LCD weiter, wo sie schlussendlich angezeigt werden.
///////////////////////////////////*DEFINITIONEN*/////////////////////////////////// /*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 Messwerte = 0; //Mit Hilfe dieser Variable werden anschliessend die Messwerte versendet. /*FUNK*/ #include <RCSwitch.h> //RCSwitch-Bibliothek wird eingebunden #define SENDING_PIN 3 RCSwitch mySwitch = RCSwitch(); //Startet und initialisiert den RCSwitch ///////////////////////////////////*SETUP*/////////////////////////////////// void setup() { /*DHT 11*/ dht.begin(); //Startet den DHT /*FUNK*/ mySwitch.enableTransmit(SENDING_PIN); //Sender an Pin3 am Arduino anschliessen } ///////////////////////////////////*LOOP*/////////////////////////////////// void loop() { /*DHT 11*/ /*Hier werden die Luftfeuchtigkeit und die Umgebungstemperatur zu einer Zahl zusammengerechnet.*/ Messwerte = ((dht.readHumidity() * 100) + dht.readTemperature()); /*FUNK*/ mySwitch.send(Messwerte, 24); //Der 433MHz Sender versendet die Messwerte delay(1000); //Pause für 1 Sekunde }
///////////////////////////////////*DEFINITIONEN*/////////////////////////////////// /*FUNK*/ #include <RCSwitch.h> //RCSwitch-Bibliothek wird eingebunden RCSwitch mySwitch = RCSwitch(); //Startet und initialisiert den RCSwitch /*LCD*/ #include <Wire.h> //Wire Bibliothek wird eingebunden #include <LiquidCrystal_I2C.h> //LiquidCrystal_I2C Bibliothek wird eingebunden LiquidCrystal_I2C lcd(0x3F, 16, 2); //Display wird definiert. lcd(HEX-Adresse, Zeichen, Zeilen). (0x3F und 0x27 sind die häufigsten Adressen) ///////////////////////////////////*SETUP*/////////////////////////////////// void setup() { /*FUNK*/ Serial.begin(9600); mySwitch.enableReceive(0); //Empfänger ist an Interrupt-Pin "0" - Das ist am UNO und Nano der Pin2. Obwohl hier der Pin0 angegeben ist, wird also der Pin2 verwendet! /*LCD*/ lcd.init(); //LCD starten lcd.backlight(); //Hier wird die Hintergrundbeleuchtung eingeschalten (lcd.noBacklight(); schaltet die Beleuchtung aus) } ///////////////////////////////////*LOOP*/////////////////////////////////// void loop() { /*FUNK*/ if (mySwitch.available()){ /*Wird ausgeführt, wenn ein Code Empfangen wird*/ int ReceivedValue = mySwitch.getReceivedValue(); //Empfangene Daten werden unter der Variable "ReceivedValue" gespeichert. if (ReceivedValue == 0){ /*Wenn die Empfangenen Daten "0" sind, wird "Unbekannter Code" angezeigt.*/ Serial.println("Unbekannter Code"); } else { seriellerMonitor(); //Funktion für die serielle Anzeige LCDAnzeige(); //Funktion für die Anzeige der Messwerte am LCD } mySwitch.resetAvailable(); //Reset vom Empfänger } } ///////////////////////////////////*WEITERE FUNKTIONEN*/////////////////////////////////// /*Serielle Kommunikation*/ void seriellerMonitor() { /*Wenn der empfangene Code brauchbar ist, wird er hier an den Serial Monitor gesendet und angezeigt.*/ int Messwerte = mySwitch.getReceivedValue(); Serial.print("Empfangen: Temperatur von "); Serial.print(Messwerte%100); Serial.print(" °C und "); Serial.print(Messwerte/100); Serial.println(" % Luftfeuchtigkeit"); } /*LCD*/ void LCDAnzeige() { /*In dieser Funktion wird der Empfangene Messwert am LCD angezeigt und nach Bedarf umgerechnet.*/ int Messwerte = mySwitch.getReceivedValue(); lcd.setCursor(0, 0); lcd.print("Temp = "); lcd.print(Messwerte%100); lcd.print(" 'C"); lcd.setCursor(0, 1); lcd.print("Humidity = "); lcd.print(Messwerte/100); lcd.print(" %"); }