Der Prototyp wächst weiter und als nächstes erfolgt die Messung von Temperatur und Luftfeuchtigkeit mit dem DHT11.
Da ich noch etlich DHT11 Sensoren hier habe, nutze ich diesen. Für den Hausgebrauch ist der genau genug. Die Anzeige soll nur eine Größenordnung wiedergeben. Wer es genauer möchte, kann auch z.B. den DHT22 verwenden.
Den Sensor habe ich schon in einem alten Projekt eingesetzt.
Für das Auslesen des Sensors verwende ich die SimpleDHT11 Bibliothek, die leicht über die Arduinoumgebung eingebunden werden kann.
Der Sensor selber hat vier Pins. Von links nach rechts:
(1) Spannungsversorgung
(2) Data
(3) ungenutzt
(4) Masse
Der Datenpin (2) wird bei mir an den Pin 16 des ProMini angeschlossen und zusätzlich mit einem Pullup Widerstand an die Spannungsversorgung ansgeschlossen. Ich habe 10k Ohm genommen. Im Netz finden sich Anleitungen, in denen auch 1k oder 5k Ohm Widerstände genommen werden. Ich verweise da an das Datenblatt, des Hersteller des verwendeten DHT11.
Da noch kein Display angeschlossen ist, gebe ich vorläufig die Messwerte mit Serial.print() aus. Zunächst nur, wenn die Taste gedrückt wird, später werde ich in einem Rhytmus von 30 Sekunden oder einer Minute Werte erfassen.
Das Steckbrett sieht jetzt so aus:
/* Projekt WinLock / Teil Tastenabfrage und DHT11 Sperren des PC via Hotbutton 2022 by Alexander Jungchen GNU GPL-3 */ /* Damit wird gesteuert, ob über die Seriele Schnittstelle ausgaben erfolgen. Hier wird der Präprozessor genutzt. Die vor das #define // setzten, dann wird die Ausgabe via Serial ausgeschaltet. Eingeschaltet verbraucht dieses Flash und RAM und ist später in der fertigen Version nicht mehr nötig. */ #define AUSGABE // Notwendige Bibliotheken einbinden #include <SimpleDHT.h> // der DHT11 // Der Pin für den DHT11 #define DHT11_PIN 16 // Anschlüsse für die Status LED und den Taster #define LED_PIN 10 #define BUTTON_PIN 7 // Zum Abfragen der Taste volatile boolean drueckStatus = LOW; volatile unsigned long letzterInterruptTimer = 0; volatile unsigned long interruptTimer; // Die LED soll bei jedem Tastendruck ihren Status (an/aus) wechseln. // LOW, damit beim ersten Tastendruck die LED angeht. boolean ledStatus = LOW; // Sensor "starten" SimpleDHT11 DHTSensor(DHT11_PIN); void setup() { pinMode(LED_PIN, OUTPUT); pinMode(BUTTON_PIN, INPUT_PULLUP); // INPUT_PULLUP, um den externen Widerstand zu sparen. digitalWrite(LED_PIN, drueckStatus); // Interrupt zum Entprellen der Taste deklarieren. attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), HotButton, RISING ); #ifdef AUSGABE Serial.begin(9600); #endif } void loop() { byte temperatur = 11; byte luftfeuchte = 11; /* Jeder Tastendruck "dreht" die Anzeige um. Aus an wird aus und umgekehrt. Gleichzeitig wird auch der Temperatursensor abgefragt. */ if (drueckStatus == HIGH) { ledStatus = !ledStatus; digitalWrite(LED_PIN, ledStatus); drueckStatus = LOW; DHTSensor.read(&temperatur, &luftfeuchte, NULL); #ifdef AUSGABE Serial.print(temperatur); Serial.print(" *C, "); Serial.print(luftfeuchte); Serial.println(" H"); #endif } } void HotButton() { interruptTimer = millis(); // Den LED Status ändern, wenn Taste ausgeprellt hat. 150ms sollten reichen if (interruptTimer - letzterInterruptTimer > 150) { drueckStatus = HIGH; } letzterInterruptTimer = interruptTimer; }