La dernière fois a essayé la conception économe en énergie de l'écran à cristaux liquides. Cette fois, nous ajouterons un thermomètre et un humidimètre pour surveiller la température et l'humidité de la pièce.
Le thermomètre a déjà été incorporé. [Python] Obtenez la température ambiante du capteur de température avec Arduino et affichez-la à l'écran (Partie 1) [Python] Obtenez la température ambiante du capteur de température avec Arduino et affichez-la à l'écran (Partie 2)
Cependant, un humidimètre indépendant était difficile. Il y avait peu de matériel et c'était un peu difficile pour moi, alors Cette fois, je vais essayer de baisser un peu le niveau de difficulté.
Il y avait un capteur de température et d'humidité populaire avec un faible degré de difficulté, alors je vais essayer de l'utiliser. Puisque le thermomètre est un ensemble, le thermomètre précédent sera stocké et nouvellement conçu.
--Module capteur de température et d'humidité DHT11 ――Une résistance 10kΩ
C'est le seul matériau. Ajoutez au circuit Arduino que vous avez utilisé la dernière fois. La conception compliquée est déjà intégrée au module, le travail est donc facile.
La page à laquelle j'ai fait référence cette fois Mesure de la température et de l'humidité avec DHT11 --Arduino --Introduction à l'IoT à partir des bases https://iot.keicode.com/arduino/temperature-dht11.php
DHT11 (parties bleu clair) dans la figure ci-dessus est à l'envers. Veuillez noter que ce sera [GND] [NC] [DATA] [VDD] à partir de la gauche.
La sortie est la même 8 broches numérique que la page de référence. Les fils orange et jaune sont 5V et GND est noir. Le schéma de circuit était simple, mais le vrai circuit est devenu un peu encombré.
Après cela, je prévois d'ajouter un manomètre, mais que va-t-il se passer?
#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);
}
La plupart du code ajouté sert à travailler avec la bibliothèque DHT11.
Je veux obtenir la température en degrés Celsius, donc j'ai mis bool isFahrenheit = false;
.
De plus, comme le traitement était compliqué, j'ai fait une boucle à 2 secondes d'intervalle. Au cas où.
Il lit le 8 broches numérique et le sort au format CSV, y compris la valeur du capteur d'éclairement précédent.
Les bibliothèques DHT peuvent être ajoutées à partir du gestionnaire de bibliothèques de l'IDE Arduino. Dans le menu, sélectionnez "Outils-> Gérer la bibliothèque".
DHT sensor library by Adafruit Dans la capture d'écran, j'ai installé la version 1.3.8.
Adafruit Unified Sensor by Adafruit C'est une bibliothèque commune. À ce stade, la version 1.1.2 est installée.
À partir de ce moment, les informations du capteur seront écrites dans la base de données.
Étant donné que plusieurs connexions série ne peuvent pas être établies en même temps (Il peut y avoir un moyen, mais comme moyen moins cher) Le programme qui écrit dans la base de données continue de s'exécuter et d'autres programmes partagent des informations en référençant la base de données.
$ 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)
article | Définir la valeur |
---|---|
Base de données | sensor |
utilisateur | sensorpi |
table | tbl_serval |
La structure de tbl_serval ressemble à ceci. NULL est autorisé pour toutes les colonnes, mais nous l'examinerons bientôt.
serval est une abréviation de SERial VALue.
Nom de colonne | Moule | NULL | La description |
---|---|---|---|
time | DATETIME | Tolérance | Temps d'enregistrement |
max_temperature | FLOAT | Tolérance | Température (maximum) |
avg_temperature | FLOAT | Tolérance | Température (moyenne) |
min_temperature | FLOAT | Tolérance | Température (minimum) |
max_humidity | FLOAT | Tolérance | Humidité (maximum) |
avg_humidity | FLOAT | Tolérance | Humidité (moyenne) |
min_humidity | FLOAT | Tolérance | Humidité (minimum) |
max_heatIndex | FLOAT | Tolérance | Expérience de la température (maximum) |
avg_heatIndex | FLOAT | Tolérance | Expérience de la température (moyenne) |
min_heatIndex | FLOAT | Tolérance | Expérience de la température (minimum) |
max_pressure | INT | Tolérance | Pression (maximum) |
avg_pressure | INT | Tolérance | Pression (moyenne) |
min_pressure | INT | Tolérance | Pression (minimum) |
max_photocell | INT | Tolérance | Éclairage (maximum) |
avg_photocell | INT | Tolérance | Illumination (moyenne) |
min_photocell | INT | Tolérance | Éclairage (minimum) |
Je l'ai corrigé ici et là, donc juste un aperçu. Si vous êtes intéressé par les modifications, GitHub (mySensor) & GitHub (Desktop Clock) Jetez un œil à DesktopClock / commit / 437884c6f55cee7693addb0726ccf4ae81c04269).
--Recevoir et diviser les informations du capteur (format CSV) toutes les 2 secondes --Calculer les valeurs maximale, moyenne et minimale en 1 minute --Écrire dans la base de données
J'avais un mécanisme pour éteindre le rétroéclairage lorsque l'éclairement était de 50 ou moins. Après ce changement, même si la pièce était obscurcie, elle n'a pas disparu immédiatement, et après un certain temps, elle s'est éteinte et la réaction a ralenti. Le redémarrage du programme Python le corrigera, mais après un court instant, il se reproduira.
Suite à la vérification d'Iloilo, il semble que la cause soit le tampon de réception.
main.py
#Vider le tampon de réception
self.ser.flushInput()
Si vous ne le faites pas, vous ne pourrez pas vous synchroniser avec la connexion série. Il semble que la plage de délai augmente avec le temps.
Je ne pense pas que ce soit une bonne idée, mais c'est probablement parce que le retard a disparu.
Recommended Posts