BOX.ino 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. #include <OneWire.h>
  2. #include <DS18B20.h> //temp DS18B20_RT by rob tillaart
  3. #include <DS3231.h> //RTC DS3231 by andrew wickert
  4. #include <DHT.h> //Adafruit
  5. #include <Wire.h>
  6. /*****************************************************************
  7. Déclaration des Capteurs
  8. *****************************************************************/
  9. //relay Lumiere
  10. const int FloBas = 2;
  11. const int FullBas = 3;
  12. const int CroBas = 4;
  13. const int FloHaut = 5;
  14. const int FullHaut = 6;
  15. const int CroHaut = 7;
  16. int PuissanceMax = 210;
  17. //relay Ventilation
  18. const int DehumPin = 44;
  19. const int Extracteur = 46;
  20. const int VentilHaut = 48;
  21. const int VentilBas = 50;
  22. //relay Arrosage
  23. const int Arro1 = 10; // Bas
  24. const int Arro2 = 11; //Haut
  25. const int Evacuation = 12;
  26. const int Melange = 13;
  27. //Capteur niveau eau
  28. const int NiveauEauRecup = 14;
  29. const int NiveauEauAqua = 15;
  30. //Capteur Temp
  31. #define ONE_WIRE_TEMP 16
  32. OneWire oneWireTemp(ONE_WIRE_TEMP);
  33. DS18B20 Temp(&oneWireTemp);
  34. //capteur Hum air
  35. #define DHTTYPE DHT22
  36. #define DHTPIN 17
  37. DHT dht(DHTPIN, DHTTYPE);
  38. //Capteur hum sol
  39. const int HumidSolHaut = 18;
  40. const int HumidSolBas = 19;
  41. //interupteur
  42. const int interType = 22;
  43. const int interLum = 24;
  44. const int interONExt = 26;
  45. const int interONVentil = 28;
  46. const int interOFFExt = 30;
  47. const int interONAro = 32;
  48. const int interONVid = 34;
  49. const int interOFFAro = 36;
  50. const int inter9 = 38;
  51. const int inter10 = 40;
  52. //RTC
  53. DS3231 Clock;
  54. /*****************************************************************
  55. Déclaration des Variables globals
  56. *****************************************************************/
  57. //Variable lumiere
  58. int newDay = 1; // Variable pour savoir si nouveau jour.
  59. int HA; //heure allumage en minute
  60. int HE; //heure extinction en minute (Ha +12Hou18H +/-15min)
  61. //Variable Extraction
  62. int tmpExtract = 0, humExtract;
  63. int extract;
  64. //Variabe Arrosage
  65. int SolBas, SolHaut;
  66. int HeuArrosageMatin = 540;// 9H * 60min
  67. int HeuArrosagesoir = 1260;// 21H *60min
  68. int recup;
  69. int timerecup;
  70. /***********************************************************************
  71. Setup
  72. **********************************************************************/
  73. void setup() {
  74. Serial.begin(9600);
  75. /***********************************************************************
  76. init des pins
  77. * *********************************************************************/
  78. //Pin ventilation
  79. pinMode(DehumPin, OUTPUT);
  80. pinMode(Extracteur, OUTPUT);
  81. pinMode(VentilHaut, OUTPUT);
  82. pinMode(VentilBas, OUTPUT);
  83. digitalWrite(DehumPin, HIGH);
  84. digitalWrite(Extracteur, HIGH);
  85. digitalWrite(VentilHaut, HIGH);
  86. digitalWrite(VentilBas, HIGH);
  87. //Pin Arrosage
  88. pinMode(Arro1, OUTPUT);
  89. pinMode(Arro2, OUTPUT);
  90. pinMode(Melange, OUTPUT);
  91. pinMode(Evacuation, OUTPUT);
  92. digitalWrite(Arro1, HIGH);
  93. digitalWrite(Arro2, HIGH);
  94. digitalWrite(Melange, HIGH);
  95. digitalWrite(Evacuation, HIGH);
  96. //interupteur
  97. pinMode(interType, INPUT);
  98. pinMode(interLum, INPUT);
  99. pinMode(interONExt, INPUT);
  100. pinMode(interONVentil, INPUT);
  101. pinMode(interOFFExt, INPUT);
  102. pinMode(interONAro, INPUT);
  103. pinMode(interONVid, INPUT);
  104. pinMode(interOFFAro, INPUT);
  105. pinMode(inter9, INPUT);
  106. pinMode(inter10, INPUT);
  107. pinMode(NiveauEauRecup, INPUT);
  108. pinMode(NiveauEauAqua, INPUT);
  109. /***********************************************************************
  110. init des capteurs
  111. * *********************************************************************/
  112. //Capteur Temp
  113. Temp.begin();
  114. Temp.setResolution(12);
  115. //capteur Hum air
  116. dht.begin();
  117. //Capteur hum sol
  118. pinMode(HumidSolBas, INPUT);
  119. pinMode(HumidSolHaut, INPUT);
  120. //RTC
  121. Wire.begin();
  122. }
  123. void loop() {
  124. /***********************************************************************
  125. Gestion des capteurs
  126. * **********************************************************************/
  127. //Capteur Temp
  128. Temp.requestTemperatures();
  129. while (!Temp.isConversionComplete());
  130. float Temper = Temp.getTempC();
  131. //capteur Hum air
  132. float hum = dht.readHumidity();
  133. //Capteur hum sol
  134. SolBas = !digitalRead(HumidSolBas);
  135. SolHaut = !digitalRead(HumidSolHaut);
  136. /*Serial.println(digitalRead(interType));
  137. Serial.println(digitalRead(interLum));
  138. Serial.println(digitalRead(interONExt));
  139. Serial.println(digitalRead(interONVentil));
  140. Serial.println(digitalRead(interOFFExt));
  141. Serial.println(digitalRead(interONAro));
  142. Serial.println(digitalRead(interONVid));
  143. Serial.println(digitalRead(interOFFAro));
  144. Serial.println(digitalRead(inter9));
  145. Serial.println(digitalRead(inter10));*/
  146. //RTC
  147. bool h24, am;
  148. int heure = Clock.getHour(h24, am );
  149. int minu = Clock.getMinute();
  150. int sec = Clock.getSecond();
  151. int HMin = heure * 60 + minu; // heure en minute
  152. long Hsec = HMin * 60 + sec;
  153. Serial.print("H:");
  154. Serial.print(HMin / 60);
  155. Serial.print(":");
  156. Serial.print(HMin % 60);
  157. Serial.print(" T:");
  158. Serial.print(Temper);
  159. Serial.print(" Hum:");
  160. Serial.println(hum);
  161. /***********************************************************************
  162. Gestion de la lumiere
  163. * *********************************************************************
  164. */
  165. if (newDay == 1) {
  166. newDay = 0;
  167. if (digitalRead(interType)) { //SI intertype ==1 alors Flo
  168. Serial.println("Floraison");
  169. HA = random (585, 615);
  170. HE = HA + 705 + random(15);
  171. }
  172. else {
  173. Serial.println("Croissance");
  174. HA = random (285, 315);
  175. HE = HA + 1065 + random(15);
  176. }
  177. }
  178. if (HMin == 0) {
  179. newDay = 1;
  180. recup = 0;
  181. digitalWrite(Evacuation, HIGH);
  182. }
  183. if ((HMin >= HA & HMin < HE) & digitalRead(interLum)) {
  184. Serial.print("Allumage ");
  185. analogWrite(FullBas, PuissanceMax);
  186. analogWrite(FullHaut, PuissanceMax);
  187. if (1) { //SI flo
  188. Serial.println("Flo");
  189. analogWrite(FloHaut, PuissanceMax);
  190. analogWrite(FloBas, PuissanceMax);
  191. analogWrite(CroHaut, 0);
  192. analogWrite(CroBas, 0);
  193. }
  194. else {
  195. Serial.println("Cro");
  196. analogWrite(CroHaut, PuissanceMax);
  197. analogWrite(CroBas, PuissanceMax);
  198. analogWrite(FloBas, 0);
  199. analogWrite(FloHaut, 0);
  200. }
  201. }
  202. else {
  203. Serial.println("Extinxtion");
  204. analogWrite(FullBas, 0);
  205. analogWrite(FloBas, 0);
  206. analogWrite(CroBas, 0);
  207. analogWrite(FullHaut, 0);
  208. analogWrite(FloHaut, 0);
  209. analogWrite(CroHaut, 0);
  210. }
  211. /***********************************************************************
  212. Gestion de l'extraction
  213. * *********************************************************************/
  214. if (Temper >= 26) {
  215. Serial.println("tmp >= 26 °C");
  216. tmpExtract = 1 ;
  217. }
  218. if (Temper < 25) {
  219. Serial.println("tmp <25 °C");
  220. tmpExtract = 0;
  221. }
  222. /*if (digitalRead(interType) == 0 & hum > 75) {
  223. Serial.println("interType est en croi et plus de 75% d'hum");
  224. humExtract = 1;
  225. }
  226. else if ( digitalRead(interType) == 1 & hum > 60) {
  227. Serial.println("interType est en flo et plus de 60 % d'hum");
  228. humExtract = 1;
  229. }
  230. else if ( digitalRead(interType) == 0 & hum < 73) {
  231. humExtract = 0;
  232. }
  233. else if ( hum < 58) {
  234. humExtract = 0;
  235. }*/
  236. if ((minu == 0 | minu == 1 | tmpExtract | humExtract | digitalRead(interONExt)) & digitalRead(interOFFExt)) {
  237. Serial.println("Extracteur ON");
  238. digitalWrite(Extracteur, LOW);
  239. }
  240. else {
  241. Serial.println("Extracteur OFF");
  242. digitalWrite(Extracteur, HIGH);
  243. }
  244. /***********************************************************************
  245. Gestion de la ventilation
  246. * *********************************************************************/
  247. if (minu >= 55 | digitalRead(interONVentil) | tmpExtract | humExtract ) {
  248. Serial.println("Ventilation ON");
  249. digitalWrite(VentilHaut, LOW);
  250. digitalWrite(VentilBas, LOW);
  251. }
  252. else {
  253. Serial.println("Ventilation OFF");
  254. digitalWrite(VentilHaut, HIGH);
  255. digitalWrite(VentilBas, HIGH);
  256. }
  257. /***********************************************************************
  258. Gestion de l'arrosage
  259. * *********************************************************************/
  260. if (digitalRead(inter9) ){//|| (HMin == HeuArrosageMatin || HMin == HeuArrosagesoir)) { //On arrose 1min en bas
  261. Serial.println("Arrosage1");
  262. digitalWrite(Arro1, LOW);
  263. }
  264. else {
  265. digitalWrite(Arro1, HIGH);
  266. }
  267. if (digitalRead(inter10) ){//|| (HMin == HeuArrosageMatin + 1 || HMin == HeuArrosagesoir + 1)) { // puis 1 min en haut
  268. Serial.println("Arrosage2");
  269. digitalWrite(Arro2, LOW);
  270. }
  271. else {
  272. digitalWrite(Arro2, HIGH);
  273. }
  274. //Melange // On mélange 20 sec toute les heures
  275. if (minu == 30 & sec <= 20) {
  276. Serial.println("Melange");
  277. digitalWrite(Melange, LOW);
  278. }
  279. else {
  280. digitalWrite(Melange, HIGH);
  281. }
  282. /***********************************************************************
  283. Gestion de l'extraction
  284. * *********************************************************************/
  285. if (digitalRead(NiveauEauRecup) & recup == 0) {
  286. Serial.println("HAUT");
  287. recup = 1;
  288. timerecup = Hsec;
  289. }
  290. if (digitalRead(NiveauEauRecup) == 0 & recup == 1) {
  291. recup = 0;
  292. timerecup = Hsec;
  293. }
  294. if (recup & Hsec >= timerecup + 40) {
  295. Serial.println("Evacuation");
  296. digitalWrite(Evacuation, LOW);
  297. }
  298. if ((recup == 0 & Hsec >= timerecup + 5 ) & digitalRead(interONVid) == 0) {
  299. Serial.println("Evacuation off");
  300. digitalWrite(Evacuation, HIGH);
  301. }
  302. if (digitalRead(interONVid)) {
  303. Serial.println("Evacuation manu");
  304. digitalWrite(Evacuation, LOW);
  305. timerecup = Hsec;
  306. }
  307. /***********************************************************************
  308. FIN
  309. * *********************************************************************/
  310. Serial.println("");
  311. Serial.println("");
  312. delay(500);
  313. }