Phase 3 - Câblage et Programmation
Phase 3 - Câblage et Programmation de la station
Objectifs
Compétences techniques:
- Compréhension du câblage d'un Arduino Nano avec un Sensor Shield et un capteur de température.
- Programmation pour stocker les valeurs de température et d'humidité dans la mémoire de l'Arduino Nano.
Déroulement de la séance
-
Introduction:
- Présentation des éléments nécessaires pour le câblage et la programmation.
- Importance du câblage et de la programmation dans le projet de station météo.
-
Câblage:
-
Programmation:
- Télécharger la librairie Arduino DHT de Adafruit https://www.arduino.cc/reference/en/libraries/dht-sensor-library/
- bien installer la dépendance Adafruit Unified Sensor
- Télécharger la librairie Arduino DHT de Adafruit https://www.arduino.cc/reference/en/libraries/dht-sensor-library/
-
- Déclaration des librairies nécessaires et des adresses de stockage dans la mémoire EEPROM.
-
#include <DHT.h> #include <EEPROM.h> #define DHTPIN 2 // La broche à laquelle le capteur DHT est connecté #define DHTTYPE DHT22 // Type de capteur DHT (DHT11 dans cet exemple) void setup(){ Serial.begin(9600); } DHT dht(DHTPIN, DHTTYPE); int adresseEEPROM = 0; // Adresse de la mémoire EEPROM pour stocker la température (partie entière) int adresseDecimaleEEPROM = 1; // Adresse suivante pour stocker la partie décimale int adresseHumiditeEEPROM = 2; // Adresse suivante pour stocker l'humidité (partie entière) int adresseDecimaleHumiditeEEPROM = 3; // Adresse suivante pour stocker la partie décimale de l'humidité
- Fonctionnement de la fonction loop pour mesurer la température et l'humidité.
- Stockage des valeurs dans la mémoire EEPROM avec gestion des adresses.
- Réinitialisation des adresses lorsque la mémoire est pleine.
-
void loop() { // Mesurer la température et l'humidité float temperature = dht.readTemperature(); float humidite = dht.readHumidity(); // Vérifier si les mesures sont valides if (!isnan(temperature) && !isnan(humidite)) { // Stocker la température en interne (partie entière à adresse, partie décimale à adresseDecimaleEEPROM) EEPROM.write(adresseEEPROM, int(temperature)); EEPROM.write(adresseDecimaleEEPROM, int((temperature - int(temperature)) * 100)); // Stocker l'humidité en interne (partie entière à adresseHumiditeEEPROM, partie décimale à adresseDecimaleHumiditeEEPROM) EEPROM.write(adresseHumiditeEEPROM, int(humidite)); EEPROM.write(adresseDecimaleHumiditeEEPROM, int((humidite - int(humidite)) * 100)); // Incrémenter les adresses pour la prochaine mesure adresseEEPROM += 4; // Incrémenter de 4 pour laisser un espace pour la prochaine paire (température et humidité) adresseDecimaleEEPROM += 4; adresseHumiditeEEPROM += 4; adresseDecimaleHumiditeEEPROM += 4; // Vérifier si nous avons atteint la fin de l'espace EEPROM if (adresseEEPROM >= EEPROM.length()) { adresseEEPROM = 0; // Revenir au début de l'espace EEPROM adresseDecimaleEEPROM = 1; // Commencer à l'adresse suivante pour la partie décimale de la température adresseHumiditeEEPROM = 2; // Commencer à l'adresse suivante pour la partie entière de l'humidité adresseDecimaleHumiditeEEPROM = 3; // Commencer à l'adresse suivante pour la partie décimale de l'humidité } } else { Serial.println("Erreur de lecture du capteur."); } // Attendre avant la prochaine mesure delay(600000); // Attendre temps de secondes entre les mesures (ajustez selon vos besoins) }0
- Maintenant il nous faut le code pour lire les valeurs stockées.
#include <EEPROM.h> int adresseEEPROM = 0; // Adresse de la mémoire EEPROM pour la lecture des données void lireDonneesEEPROM() { Serial.println("Lecture des données depuis l'EEPROM:"); while (adresseEEPROM < EEPROM.length()) { // Lire la partie entière de la température int partieEntiereTemperature = EEPROM.read(adresseEEPROM); // Lire la partie décimale de la température int partieDecimaleTemperature = EEPROM.read(adresseEEPROM + 1); // Lire la partie entière de l'humidité int partieEntiereHumidite = EEPROM.read(adresseEEPROM + 2); // Lire la partie décimale de l'humidité int partieDecimaleHumidite = EEPROM.read(adresseEEPROM + 3); // Afficher les valeurs lues Serial.print("Température: "); Serial.print(partieEntiereTemperature); Serial.print("."); Serial.print(partieDecimaleTemperature); Serial.print(" °C, Humidité: "); Serial.print(partieEntiereHumidite); Serial.print("."); Serial.print(partieDecimaleHumidite); Serial.println(" %"); // Incrémenter l'adresse pour la prochaine paire de valeurs adresseEEPROM += 4; } } void setup() { Serial.begin(9600); lireDonneesEEPROM(); } void loop() { // Votre code principal ici }
-
Validation:
- Vérification du programme pour s'assurer du bon fonctionnement.
- Test du stockage des valeurs dans la mémoire EEPROM.
-
Conclusion:
- Récapitulation des points clés de la séance.
- Réponses aux questions éventuelles.
Résolution de problèmes
- Si
dht.h
n'est pas reconnu quand vous vérifiez/compilez le fichier, essayer une librairie adaptée à la marque de votre DHT22. Par exemple pour DFRobot : - Cliquer sur Code > Télécharger ZIP https://github.com/CainZ/DHT
- Ajouter la librairie à la main dans ArduinoIDE
- Vérifier la bonne installation de la librairie, dans "contributed libraries"