Phase 3 - Programmation
Phase 3 - Programmation de la station
Objectifs
Compétences techniques:
- 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 la programmation.
- Importance de la programmation dans le projet de station météo.
-
Programmation:
- Commençons par la programmation sur Mblock.
- N'oubliez pas d'installer l'extension pour le capteur en cliquant sur ce bouton,puis taper dans la barre de recherche "DHT22" et ensuite juste besoin de l'ajouter.
-
-
Avant de téléverser le code n'oubliez pas de décocher ces 2 cases ci-dessous qui se situe dans le moniteur série.
-
Lecode fini vous pouvez constater que le code vous renvoi la température en hexadécimale donc à vous de traduire cette température grâce à internet. - Pour la suite nous allons passer sur le logiciel "Arduino IDE" car il nous offre plus de possibilités.
- Dans un premier temps 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
#include <SoftwareSerial.h>
#include <DHT.h>
#include <EEPROM.h>
#define DHTPIN 9
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const int EEPROM_SIZE = 512; // Taille de l'EEPROM en octets
const int ENTRY_SIZE = sizeof(float); * 2; // Taille d'une entrée (température + humidité) en octets
const int NUM_ENTRIES = EEPROM_SIZE / ENTRY_SIZE; // Nombre d'entrées que l'on peut stocker
int currentAddress = 0; // Adresse actuelle pour stocker
void setup() {
Serial.begin(9600);
dht.begin();
Serial.println("Démarrage du système...");
// Stocker des données dans l'EEPROM en mode circulaire
for (int i = 0; i < NUM_ENTRIES; i++) {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (!isnan(temperature) && !isnan(humidity)) {
EEPROM.put(currentAddress, temperature);
currentAddress += ENTRY_SIZE;sizeof(float);
EEPROM.put(currentAddress, humidity);
currentAddress += sizeof(float);
if (currentAddress >= EEPROM_SIZE) {
currentAddress = 0; // Revenir au début si on dépasse la taille de l'EEPROM
}
}
delay(3600000)60000); // Attendre 1 heure entre chaque mesure
}
}
void loop() {
// Pas besoin de code dans loop pour cette démonstration
}
-
- Ce code va nous permettre de stocker la température et l'humidité dans la mémoire de notre Arduino nano et tous ca toute les heures.
- après avoir stocker les température et l'humidité il faut les récupérer, voici le code :
#include <EEPROM.h> const int EEPROM_SIZE = 512; const int ENTRY_SIZE = sizeof(float); const int NUM_ENTRIES = EEPROM_SIZE / ENTRY_SIZE; void setup() { Serial.begin(9600); Serial.println("Démarrage du système..."); // Lire et afficher toutes les données stockées for (int i = 0; i < NUM_ENTRIES; i++) { int address = i * ENTRY_SIZE; float storedTemperature; EEPROM.get(address, storedTemperature); Serial.print("Température stockée à l'adresse "); Serial.print(address); Serial.print(": "); Serial.print(storedTemperature); Serial.println(" °C"); } } void loop() { // Pas besoin de code dans loop pour cette démonstration }
3. Validation:
-
- Vérification du programme pour s'assurer du bon fonctionnement.
- Test du stockage des valeurs dans la mémoire EEPROM.
4. 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"