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é

Mettre en œuvre chacun des 2 capteurs, indépendamment dans un premier temps.

 

Réaliser le câblage des deux capteurs et faire un programme permettant les 2 mesures en même temps (il faudra bien entendu connecter les 2 capteurs sur des ports analogiques différents !).

 

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…

 

Compléter encore le montage et le programme pour la gestion du servomoteur en fonction de la température.

 

Rajouter au montage et au programme précédent la fonctionnalité de gestion de l’ouverture par le bouton poussoir (à chaque pression sur le bouton, la trappe change d’état).

 

 

Faire une vidéo du montage et l’envoyer au professeur…

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *