TP Arduino : Serre automatisée
Le but est de réaliser un programme permettant la gestion automatisée d’une serre.
Il s’agira de surveiller la température et ouvrir une trappe si cette température est trop importante (>25°C). Il faudra pouvoir également ouvrir la trappe manuellement soit avec un bouton ou une télécommande. La nuit la trappe devra être fermée pour ne pas trop descendre en température.
Vous utiliserez une Breadboard (voir les bases du câblage sur platine d’expérimentation) placée sur le shield de prototypage, un capteur de température LM35, un servomoteur pour piloter l’ouverture de la trappe, un bouton poussoir (ou bien une télécommande et un capteur IR receiver) et enfin une résistance LDR pour détecter la luminosité. Il faudra également quelques résistances (220Ω, 4,7kΩ et 10kΩ).
Montage du capteur de température LM35
//Capteur de température à LM35 const int LM35 = A0; //pin LM35 float temperature; void setup() { Serial.begin(9600); } void loop() { //CAN sur 10 bits soit 1 bit représente 5/1023 Volt et pour le LM35 10mV=1°C (cf http://www.ti.com/lit/ds/symlink/lm35.pdf) temperature = (float(analogRead(LM35))*5/(1023))/0.01; Serial.print("Temperature: "); Serial.println(temperature); delay(1000); }
Montage du capteur de luminosité LDR
//Capteur de luminosité const int LDR = A0; //pin LDR float luminosite; void setup() { Serial.begin(9600); } void loop() { luminosite = analogRead(LDR); Serial.print("Luminosité : "); Serial.println(luminosite); delay(1000); }
Montage du bouton
//Bouton poussoir et LED int bp = 2; int led = 11; int bp_test = 0; void setup() { pinMode(bp, INPUT); pinMode(led, OUTPUT); } void loop() { bp_test = digitalRead(bp); if (bp_test == HIGH) { digitalWrite(led, HIGH); } else { digitalWrite(led, LOW); } }
Montage de récepteur de télécommande
#include <IRremote.h> const unsigned short int telecommande_pin=4; //capteur IR sur pin 4 IRrecv telecommande(telecommande_pin); //objet telecommande decode_results code; //code de la telecommande void setup(){ Serial.begin(9600); telecommande.enableIRIn(); //Activer le capteur IR } void loop(){ if(telecommande.decode(&code)){ //Un code a été reçu ? Serial.println(code.value,HEX); //Afficher le code sur le port serie delay(30); //Ajout d'un delai pour éviter les erreurs de lecture telecommande.resume(); //reception du code suivant } }
Montage du servomoteur
#include <Servo.h> #define pinServo 9 Servo trappe; void setup() { trappe.attach(pinServo); Serial.begin(9600); trappe.write(0); delay(2000); } void loop() { trappe.write(47); delay(500); trappe.write(0); delay(500); }
Travail demandé
La gestion de l’ouverture/fermeture de la trappe doit se faire par une commande en hystérésis :
- l’ouverture se produit lorsque la température dépasse un certain seuil
- la fermeture se produit lorsque la température passe en dessous d’un certain seuil, plus petit !
Cette technique permet d’éviter que le système commute trop fréquemment lorsque la température est proche du seuil…
Faire une vidéo du montage et l’envoyer au professeur…