Components and supplies
Potentiometer, 10k Ohms
Catheter
Grove - Temperature & Humidity Sensor
Arduino UNO R3 - Made in italy
PC fan
Heating resistance
Lamp (LED)
LCD screen 20x4
buton
Wooden plate 90*60 9mm
Balsa Wooden sticks (for enclosure)
Arduino Cable kit
Tools and machines
Hand saw
File (various)
File
drill
Jigsaw
Screwdrivers
Apps and platforms
Arduino IDE 2.0 (beta)
Project description
Code
Green house code
cpp
First code, trouble shooting is not fully done
1#include <SD.h> 2#include <SPI.h> 3#include <LiquidCrystal.h> 4#include <Servo.h> 5 6//variables fonctionnement carte SD ==> branchement sur les pins 10, 11, 12 et 13 7#define pinCS 10 8#define nomFichier "Histo.txt" 9File historique; 10 11//setup fonctionnement écran LCD ==> branchement sur les pins 2, 3, 4, 5, 8 et 9 12const int rs = 9, en = 8, d4 = 5, d5 = 4, d6 = 3, d7 = 2; 13LiquidCrystal lcd(rs, en, d4, d5, d6, d7); 14 15//variables et pins capteurs 16#define pinHumAir A0 17#define pinHumSol A1 18#define pinTemp A2 19int HumAir; 20int HumSol; 21int Temp; 22 23//variables de suivi des actions réalisées pour le journal de bord 24int horo; 25bool arro = false; 26bool rechaud = false; 27bool refroid = false; //variables marqueur fin de cycle 28bool aera = false; 29bool Darro = false; 30bool Drechaud = false; 31bool Drefroid = false;//variables marqueur début cycle 32bool Daera = false; 33//variables de consignes 34int consTemp; 35int consHumAir; 36int consHumSol; 37 38//pins et varaiables commandes de selection des paramètres 39#define pinPot A5 40#define pinNewSelec A4 41 42int tempS; 43int humAS; 44int humSS; 45 46//pin bouton de commande d'affichage 47#define pinBouton A3 48 49 50//relais de controle vetilo et résistance chauffante (pin 1 et 0 donc plus moniteur série possible) 51#define pinVentilo 1 52#define pinChauffage 0 53 54//relais de contôle de la pompe 55#define pinPompe 6 56 57//variable timer non bloquant* 58 59unsigned long dateLast = 0; 60unsigned long dateCurrent = 0; 61unsigned long intervalle = 0; 62 63//fonction de timer non bloquant 64int attente(int duree) { 65 dateCurrent = millis(); 66 intervalle = dateCurrent - dateLast; 67 if (intervalle > duree) { 68 lcd.clear(); 69 } 70 dateLast = dateCurrent; 71} 72 73//fonction arrosage 74int arrosage() { 75 digitalWrite(pinPompe,HIGH); 76 delay(20000); 77 digitalWrite(pinPompe,LOW); 78} 79 80//fonction refroidissement 81int aeration() { 82 digitalWrite(pinVentilo,HIGH); 83 delay(20000); 84 digitalWrite(pinVentilo,LOW); 85} 86 87//fonction chauffage 88int chauffage() { 89 digitalWrite(pinVentilo,HIGH); 90 digitalWrite(pinChauffage,HIGH); 91 delay(50000); 92 digitalWrite(pinVentilo,LOW); 93 digitalWrite(pinChauffage,LOW); 94} 95 96void setup(){ 97 98 //paramétrage des pins 99 pinMode(pinNewSelec,INPUT); 100 pinMode(pinVentilo,OUTPUT); 101 pinMode(pinChauffage,OUTPUT); 102 pinMode(pinBouton,INPUT); 103 104 //allumage du LCD 105 lcd.begin(16, 2); 106 lcd.print("Initialisation"); 107 108 //Vérification de présence de la carte (diagnostiquée au préalable avec l'autre programme) 109 /* if (!SD.begin(pinCS)) { 110 lcd.print("Echec initialisation"); 111 while (1); // Boucle infinie (stoppage du programme) 112 } 113 */ 114 115 //création et initialisation du fichier d'historique 116 historique = SD.open(nomFichier, FILE_WRITE); 117 historique.println("Début d'enregistrement des actions de la serre :"); 118 historique.println(" "); 119 historique.println("Etat initial des capteurs :"); 120 historique.println("Humidité Air : "); 121 historique.print(analogRead(pinHumAir)); 122 historique.println("Humidité Sol : "); 123 historique.print(analogRead(pinHumSol)); //valeurs revoyées à étalonner en fonction des capteurs avec map() 124 historique.println("Température : "); 125 historique.print(analogRead(pinTemp)); 126 historique.close(); //enregistrement des modifications 127 128 lcd.print("Initialisation"); 129 lcd.setCursor(0,1); 130 lcd.print("terminée"); 131 delay(1000); 132 133 lcd.noDisplay();//eteint l'écran par souci de consommation en énergie 134} 135 136void loop(){ 137 138 //initialisation de l'horodateur 139 horo = millis(); 140 141 //lecture des valeurs des capteurs 142 HumAir = map(analogRead(pinHumAir),0,1023,0,150); //valeurs map à changer 143 HumSol = map(analogRead(pinHumSol),0,1023,0,150); //valeurs map à changer 144 Temp = map(analogRead(pinTemp),0,1023,10,40); 145 146 //réguation température 147 if (consTemp > Temp) { 148 Drechaud = true; 149 chauffage(); 150 rechaud = true; 151 } 152 if (consTemp < Temp) { 153 Drefroid = true; 154 aeration(); 155 refroid = true; 156 } 157 158 //régulation humidité 159 if (consHumSol > HumSol) { 160 Darro = true; 161 arrosage(); 162 arro = true; 163 } 164 165 //régulation air 166 if (consHumAir < HumAir) { 167 Daera = true; 168 aeration(); 169 aera = true; 170 } 171 172 //Boucle d'écriture des opérations dans le fichier, utilise les booléens pour voir quelles actions ont été menées avant de reset les booléens correspondants 173 if (rechaud == true){ 174 historique.println(); 175 } 176 177 178 //affichage des données des capteurs quand bouton appuyé 179 if (digitalRead(pinBouton) == HIGH) { 180 lcd.display(); 181 lcd.print("Temp : "); 182 lcd.print(analogRead(pinTemp)); 183 attente(1000); 184 lcd.print("Hum Air : "); 185 lcd.print(analogRead(pinHumAir)); 186 attente(1000); 187 lcd.print("Hum Sol : "); 188 lcd.print(analogRead(pinHumSol)); 189 attente(1000); 190 lcd.noDisplay(); 191 } 192 193 //sélection de nouveaux paramètres 194 if (digitalRead(pinNewSelec) == HIGH) { 195 lcd.display(); 196 for (int i=0;i<=3;i++){ 197 if (i == 1){ 198 while (digitalRead(pinBouton) == LOW){ 199 tempS = map(analogRead(pinPot),0,1023,10,40); //valeurs à étalloner avec les valeurs propres aux capteurs 200 lcd.print("Temp : "); 201 lcd.print(tempS); 202 consTemp = tempS; 203 } 204 } 205 if (i == 2){ 206 while (digitalRead(pinBouton) == LOW){ 207 humAS = map(analogRead(pinPot),0,1023,10,40); 208 lcd.print("humAir :"); 209 lcd.print(humAS); 210 consHumAir = humAS; 211 } 212 } 213 if (i == 3){ 214 while (digitalRead(pinBouton) == LOW){ 215 humSS = map(analogRead(pinPot),0,1023,10,40); 216 lcd.print("humSOL : "); 217 lcd.print(humSS); 218 consHumSol = humSS; 219 } 220 } 221 } 222 223 lcd.print("Consignes OK"); 224 attente(2000); 225 lcd.noDisplay();//éteindre l'écran 226 } 227}
Documentation
Front
image0 (2).jpeg
Top View
image0 (3).jpeg
Back view
image0 (4).jpeg
Side
image0 (5).jpeg
Overall view
serre.jpg
Comments
Only logged in users can leave comments