Station météo⚓
Contexte : Une station météo connectée à internet permet à l'utilisateur de consulter la température et la température extérieur.
Exigences :
Plage de fonctionnement de la température : -20°C < T < 50°C, résolution : 0,1 °C
Plage de fonctionnement de l'humidité : 0 < H < 100% (résolution 1%)
Période de rafraîchissement : Tr = 1s

Matériel : L'objectif ici est de valider toute la chaîne de traitement de l'information :
Arduino : Traite l'information analogique des capteurs et envoie les information via un liaison série à l'UART.
Mini PC : Interroge la carte Arduino toutes les secondes via la liaison série (ou USB) et affiche les données sur un sit Web.
Acquérir l'info : 1 Potentiomètre
Pour gagner du temps dans la mise en oeuvre, on simulera les capteurs à l'aide de potentiomètres :
Pour la température :
0V -> -20°C
5V -> 50°C
Pour l'humidité :
0V -> 0%
5V -> 100%
Réaliser le montage mettant en œuvre les 2 potentiomètres
On pose également que :
lorsque l'humidité est à 0% la tension correspondante est à 0V
lorsque l'humidité est à 100% la tension correspondante est à 5V
Liaison UART
Dans Arduino on dispose d'une fonction qui est exécutée à chaque occurrence de la fonction loop() si un événement au terminal série s'est produit :
SerialEvent()
Nous allons donc utiliser cette fonction pour envoyer la valeur des grandeurs mesurées (température et humidité) lorsque le MiniPC en fait la demande :
Si un "H" est envoyé, la carte Arduino renvoie la valeur de l'humidité
Si un "T" est envoyé, la carte Arduino renvoie la valeur de la température
Liaison UART : Coté Arduino
Ce programme est donc prêt pour dialoguer avec un raspberry !
/* * * Affiche la temperature si on envoie "T" * Affiche l'humidite si on envoie "H" * */String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
void setup() {
Serial.begin(9600);
inputString.reserve(200);
}
void loop() {
if (stringComplete) {
if(inputString == "T\n")
{float T = ReadTemp();
Serial.println(T);
}
else if (inputString == "H\n")
{float H = ReadHum();
Serial.println(H);
}
else {Serial.println("Probleme de requete");
}
inputString = "";
stringComplete = false;
}
}
float ReadHum(void)
{int N2 = analogRead(A1);
float H = (float)N2 / 1023.0 * 100;
return H;
}
float ReadTemp(void)
{int N1 = analogRead(A0); // Acquisition de la temperature
float T = (70.0/1023.0) * (float)N1 - 20.0;
return T;
}
/* SerialEvent occurs whenever a new data comes in the hardware serial RX. This routine is run between each time loop() runs, so using delay inside loop can delay response. Multiple bytes of data may be available. */void serialEvent() {
while (Serial.available()) {
// get the new byte:char inChar = (char)Serial.read();
// add it to the inputString:inputString += inChar;
// if the incoming character is a newline, set a flag // so the main loop can do something about it:if (inChar == '\n') {
stringComplete = true;
}
}
}
Tester le programme et tenter de le comprendre à l'aide de l'algorigramme fourni. Ajouter vos commentaires.

