Letztes Mal hat versucht, Energie für die Flüssigkristallanzeige zu sparen. Dieses Mal werden wir ein Thermometer und ein Feuchtigkeitsmessgerät hinzufügen, um die Temperatur und Luftfeuchtigkeit des Raums zu überwachen.
Das Thermometer wurde bereits eingebaut. [Python] Ermitteln Sie die Raumtemperatur mit Arduino vom Temperatursensor und zeigen Sie sie auf dem Bildschirm an (Teil 1) [Python] Ermitteln Sie die Raumtemperatur mit Arduino vom Temperatursensor und zeigen Sie sie auf dem Bildschirm an (Teil 2)
Ein unabhängiges Feuchtigkeitsmessgerät war jedoch schwierig. Es gab nur wenige Materialien und es war ein bisschen schwierig für mich, also Dieses Mal werde ich versuchen, den Schwierigkeitsgrad ein wenig zu senken.
Es gab einen beliebten Temperatur- und Feuchtigkeitssensor mit einem geringen Schwierigkeitsgrad, daher werde ich versuchen, ihn zu verwenden. Da das Thermometer ein Set ist, wird das vorherige Thermometer gespeichert und neu entworfen.
Dies ist das einzige Material. Fügen Sie der Arduino-Schaltung hinzu, die Sie zuletzt verwendet haben. Das komplizierte Design ist bereits in das Modul integriert, sodass die Arbeit einfach ist.
Die Seite, auf die ich mich diesmal bezog Temperatur- und Feuchtigkeitsmessung mit DHT11 --Arduino - Einführung in das Internet der Dinge von Grund auf https://iot.keicode.com/arduino/temperature-dht11.php
DHT11 (hellblaue Teile) in der obigen Abbildung steht auf dem Kopf. Bitte beachten Sie, dass es von links [GND] [NC] [DATA] [VDD] ist.
Der Ausgang ist der gleiche digitale 8-Pin wie die Referenzseite. Die orangefarbenen und gelben Drähte sind 5 V und GND ist schwarz. Der Schaltplan war einfach, aber die reale Schaltung wurde ein wenig überfüllt.
Danach habe ich vor, ein Manometer hinzuzufügen, aber was wird passieren?
#include <DHT.h>
// Initializing DHT11 sensor
const int PIN_DHT = 8;
DHT dht(PIN_DHT, DHT11);
void setup() {
//start serial connection
Serial.begin(9600);
//configure pin A3 as an input and enable the internal resistor
pinMode(A3, INPUT);
// start DHT11 sensor
dht.begin();
}
void loop() {
// Whether to display in Fahrenheit
bool isFahrenheit = false;
// Get humidity and temperature
float percentHumidity = dht.readHumidity();
float temperature = dht.readTemperature(isFahrenheit);
// Do nothing if not available
if (isnan(percentHumidity) || isnan(temperature)) {
return;
}
// Get heat index
float heatIndex = dht.computeHeatIndex(
temperature,
percentHumidity,
isFahrenheit
);
//read the photocell value into a variable
int photocell = analogRead(A3);
//print out the sensor value in csv format
String s = "";
s += String(temperature, 1) + ",";
s += String(percentHumidity, 1) + ",";
s += String(heatIndex, 1) + ",";
s += String(photocell);
Serial.println(s);
//delay 2000 ms
delay(2000);
}
Der größte Teil des hinzugefügten Codes ist für die Arbeit mit der DHT11-Bibliothek vorgesehen. Ich möchte die Temperatur in Grad Celsius erhalten, also setze ich "bool isFahrenheit = false;".
Da die Verarbeitung kompliziert war, habe ich auch eine Schleife mit Intervallen von 2 Sekunden erstellt. Nur für den Fall.
Es liest vom digitalen 8-Pin und gibt ihn im CSV-Format einschließlich des Werts des vorherigen Beleuchtungsstärkesensors aus.
DHT-Bibliotheken können über den Library Manager der Arduino IDE hinzugefügt werden. Wählen Sie im Menü "Extras-> Bibliothek verwalten".
DHT sensor library by Adafruit Im Screenshot habe ich Ver.1.3.8 installiert.
Adafruit Unified Sensor by Adafruit Es ist eine gemeinsame Bibliothek. Zu diesem Zeitpunkt ist Ver.1.1.2 installiert.
Ab diesem Zeitpunkt werden die Sensorinformationen in die Datenbank geschrieben.
Da nicht mehrere serielle Verbindungen gleichzeitig hergestellt werden können (Es mag einen Weg geben, aber einen billigeren Weg) Das Programm, das in die Datenbank schreibt, wird weiterhin ausgeführt, und andere Programme teilen Informationen, indem sie auf die Datenbank verweisen.
$ mysql -u root -praspberry
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.1.38-MariaDB-0+deb9u1 Raspbian 9.0
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> CREATE DATABASE sensor;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> CREATE USER 'sensorpi'@'localhost' IDENTIFIED BY 'raspberry';
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON sensor.* TO 'sensorpi'@'localhost';
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> USE mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [mysql]> SELECT user, password, plugin FROM user;
+------------+-------------------------------------------+--------+
| user | password | plugin |
+------------+-------------------------------------------+--------+
| root | ***************************************** | |
| phpmyadmin | ***************************************** | |
| fxpi | ***************************************** | |
| sensorpi | ***************************************** | |
+------------+-------------------------------------------+--------+
4 rows in set (0.01 sec)
MariaDB [mysql]> QUIT;
Bye
pi@raspberrypi:~ $ mysql -u sensorpi -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 34
Server version: 10.1.38-MariaDB-0+deb9u1 Raspbian 9.0
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> USE sensor;
Database changed
MariaDB [sensor]> CREATE TABLE tbl_serval (time DATETIME,
-> max_temperature FLOAT, avg_temperature FLOAT, min_temperature FLOAT,
-> max_humidity FLOAT, avg_humidity FLOAT, min_humidity FLOAT,
-> max_heatIndex FLOAT, avg_heatIndex FLOAT, min_heatIndex FLOAT,
-> max_pressure INT, avg_pressure INT, min_pressure INT,
-> max_photocell INT, avg_photocell INT, min_photocell INT);
Query OK, 0 rows affected (0.05 sec)
Artikel | Wert einstellen |
---|---|
Datenbank | sensor |
Nutzer | sensorpi |
Tabelle | tbl_serval |
Die Struktur von tbl_serval sieht folgendermaßen aus. NULL ist für alle Spalten zulässig, wir werden es jedoch bald überprüfen.
serval ist eine Abkürzung für SERial VALue.
Spaltenname | Schimmel | NULL | Erläuterung |
---|---|---|---|
time | DATETIME | Toleranz | Aufnahmezeit |
max_temperature | FLOAT | Toleranz | Temperatur (maximal) |
avg_temperature | FLOAT | Toleranz | Temperatur (Durchschnitt) |
min_temperature | FLOAT | Toleranz | Temperatur (Minimum) |
max_humidity | FLOAT | Toleranz | Luftfeuchtigkeit (maximal) |
avg_humidity | FLOAT | Toleranz | Luftfeuchtigkeit (Durchschnitt) |
min_humidity | FLOAT | Toleranz | Luftfeuchtigkeit (Minimum) |
max_heatIndex | FLOAT | Toleranz | Temperatur erleben (maximal) |
avg_heatIndex | FLOAT | Toleranz | Temperatur erleben (Durchschnitt) |
min_heatIndex | FLOAT | Toleranz | Temperatur erleben (Minimum) |
max_pressure | INT | Toleranz | Druck (maximal) |
avg_pressure | INT | Toleranz | Druck (Durchschnitt) |
min_pressure | INT | Toleranz | Druck (Minimum) |
max_photocell | INT | Toleranz | Beleuchtung (maximal) |
avg_photocell | INT | Toleranz | Beleuchtung (Durchschnitt) |
min_photocell | INT | Toleranz | Beleuchtung (Minimum) |
Ich habe es hier und da behoben, also nur eine Übersicht. Wenn Sie an den Änderungen interessiert sind, GitHub (mySensor) & [GitHub (Desktop Clock)](https://github.com/km Schauen Sie sich DesktopClock / commit / 437884c6f55cee7693addb0726ccf4ae81c04269 an.
Ich hatte einen Mechanismus zum Ausschalten der Hintergrundbeleuchtung, wenn die Beleuchtungsstärke 50 oder weniger betrug. Nach dieser Änderung verschwand der Raum, selbst wenn er abgedunkelt war, nicht sofort, und nach einer Weile schaltete er sich aus und die Reaktion verlangsamte sich. Durch einen Neustart des Python-Programms wird das Problem behoben, aber nach kurzer Zeit tritt es erneut auf.
Als Ergebnis der Überprüfung von Iloilo scheint die Ursache der Empfangspuffer zu sein.
main.py
#Leeren Sie den Empfangspuffer
self.ser.flushInput()
Wenn Sie dies nicht tun, können Sie keine Synchronisierung mit der seriellen Verbindung durchführen. Es scheint, dass der Verzögerungsbereich mit der Zeit zunimmt.
Ich denke nicht, dass es eine gute Idee ist, aber es liegt wahrscheinlich daran, dass die Verzögerung verschwunden ist.