Advertisement
dimitri971

automate Control aquaponie

Mar 31st, 2020
648
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #ifdef LIB_RTC
  2. #include <Wire.h>
  3. #include "RTClib.h" //librairie horloge rtc
  4. #include "DS3231.h"
  5. RTC_DS1307 rtc; // module rtc  ds1302
  6. RTClib RTC;
  7. #endif
  8.  
  9. // ================================================================================
  10. // DEFINES
  11.  
  12. #define PIN_VANNE         5
  13. #define PIN_POMPE         4
  14. #define PIN_BULLEUR       3
  15. #define PIN_VENTIL       2
  16. #define PIN_ECLVEG        8
  17. //#define PIN_ECLFLO        9
  18.  
  19. #define PIN_FLOTTEUR_BAS  53
  20. #define PIN_FLOTTEUR_HAUT 52
  21.  
  22. #define   NB_DE_CYCLE_POUR_ATTENDRE_UNE_SECONDE 100 // 100 x valeurTimer = 100x10ms = 1000ms  = 1s; //   peux-tu m'expliquer  brièvement à quoi sert cette ligne de code s'il te plaît??
  23. #define   TEMPO_MARRE_BASSE      900  //  
  24. #define   TEMPO_MARRE_HAUTE  900 //
  25.  
  26. // ================================================================================
  27. // TYPES  Ça veut dire quoi type?
  28. typedef  enum { BAC_SE_VIDE,  MAREE_BASSE, BAC_SE_REMPLIE, MAREE_HAUTE, } ENUM_ETAT_BAC ; // etat du bac culture aquaponique
  29. ENUM_ETAT_BAC eEtatBac = BAC_SE_VIDE; // on initialise au vidagen et la fonction vidage est un bon point d'entrée du processus
  30.  
  31. int duree_marre_haute = TEMPO_MARRE_HAUTE;
  32. int duree_marre_basse = TEMPO_MARRE_BASSE;
  33.  
  34. bool FLOTTEUR_BAS;
  35. bool FLOTTEUR_HAUT;
  36.  
  37. // ================================================================================
  38. // PROTOTYPAGES DES FONCTIONS
  39. void fc_bac_se_remplie(void);
  40. void fc_maree_basse(void);
  41. void fc_maree_haute(void);
  42. void fc_bac_se_vide(void);
  43.  
  44. void eclairage(void);
  45. void irrigation(void);
  46. void lectureCapteur(void);
  47.  
  48. void VANNE_ON()  {
  49.   digitalWrite(PIN_VANNE, LOW);
  50.   Serial.println("VANNE_ON");
  51. }
  52. void VANNE_OFF() {
  53.   digitalWrite(PIN_VANNE, HIGH);
  54.   Serial.println("VANNE_OFF");
  55. }
  56. void POMPE_ON()  {
  57.   digitalWrite(PIN_POMPE, LOW);
  58.   Serial.println("POMPE_ON");
  59. }
  60. void POMPE_OFF() {
  61.   digitalWrite(PIN_POMPE, HIGH);
  62.   Serial.println("POMPE_OFF");
  63. }
  64. void BULLEUR_ON()  {
  65.   digitalWrite(PIN_BULLEUR, LOW);
  66.   Serial.println("BULLEUR_ON");
  67. }
  68. void BULLEUR_OFF() {
  69.   digitalWrite(PIN_BULLEUR, HIGH);
  70.   Serial.println("BULLEUR_OFF");
  71. }
  72. void VENTIL_ON()  {
  73.   digitalWrite(PIN_VENTIL, LOW);
  74.   Serial.println("VENTIL_ON");
  75. }
  76. void VENTIL_OFF() {
  77.   digitalWrite(PIN_VENTIL, HIGH);
  78.   Serial.println("VENTIL_OFF");
  79. }
  80. void ECLAIRAGE_ON()  {
  81.   digitalWrite(PIN_ECLVEG, LOW);
  82.   Serial.println("ECLAIRAGE_ON");
  83. }
  84. void ECLAIRAGE_OFF() {
  85.   digitalWrite(PIN_ECLVEG, HIGH);
  86.   Serial.println("ECLAIRAGE_OFF");
  87. }
  88.  
  89. void setup()
  90. {
  91.   Serial.begin(9600);
  92.  
  93.   FLOTTEUR_BAS  = true;
  94.   FLOTTEUR_HAUT = true;
  95.    
  96.   pinMode( PIN_ECLVEG, OUTPUT); // eclairage led
  97.   pinMode( PIN_ECLVEG, HIGH);
  98.   pinMode(PIN_POMPE, OUTPUT); // pompe a eau
  99.   pinMode(PIN_VANNE, OUTPUT); // vanne de drainnage
  100.   pinMode(PIN_BULLEUR, OUTPUT); // pompe a aire
  101.   pinMode(PIN_VENTIL, OUTPUT); // ventilation
  102.   pinMode(PIN_FLOTTEUR_BAS, INPUT); // capteur  niveau eau flotteur bas
  103.   pinMode(PIN_FLOTTEUR_HAUT, INPUT); // capteur niveau eau flotteur  haut
  104.  
  105.   //  ================================================================================
  106.   //  PARAMETRAGE DU TIMER 1 16BIT     à quoi correspondent tous ces lignes de code est-ce que c'est la durée de la temporisation ? Où je peux rentrer la durée de la temporisation
  107.   cli(); // ??
  108.   TCCR1A = 0;
  109.   TCCR1B = ( 1 << WGM12) | (0 << CS12) | (1 << CS11) | (1 << CS10) ; // Prescaler / 64 ==> des PAS de 5ms
  110.   TCCR1C = 0;                         // ne pas forcer la comparaison de sortie
  111.   TCNT1 = 0;                          // définir la valeur initiale du compteur de la minuterie(16 bit value)
  112.   OCR1A = 2500;                       // Plus proche d'une seconde que la valeur ci-dessus, 2500 pas de 4�s ca fait 10ms
  113.   TIMSK1 = 1 << OCIE1A;                     // Activer la minuterie comparer la correspondance avec l'interruption 1A
  114.   sei(); //??
  115. }
  116.  
  117. /* ************************************************************************ */
  118. /* PROGRAMME PRINCIPALE, ON FAIT RIEN, puisque tous est gere par timer
  119.   /* ************************************************************************ */
  120. void loop()
  121. {
  122. }
  123.  
  124. /* ************************************************************************ */
  125. /* ON RENTRE DANS CE TIMER TOUTES LES 10ms   pourquoi tous les  10 micros secondes ??
  126.  
  127.   /* ************************************************************************ */
  128. ISR(TIMER1_COMPA_vect) // 16 bit timer 1 compare 1A match
  129. {
  130.   static int cmptOneSeconde = NB_DE_CYCLE_POUR_ATTENDRE_UNE_SECONDE ; // 100x10ms = 1000ms = 1s
  131.   static int etatLed = 0;
  132.   if (cmptOneSeconde-- == 0)
  133.   {
  134.  
  135.     // on fait clignoter la led  toutes les 2s ( 1s ON 1s OFF)
  136.     /*if (etatLed == 0)
  137.       { digitalWrite(LED_BUILTIN,HIGH);
  138.       }
  139.       else
  140.       { digitalWrite(LED_BUILTIN,LOW);
  141.       }
  142.       etatLed = 1- etatLed;
  143.  
  144.     */
  145.     // on rentre dans ce if toute les seconde.
  146.     lectureCapteur();
  147.     irrigation();
  148.     eclairage();
  149.     cmptOneSeconde = NB_DE_CYCLE_POUR_ATTENDRE_UNE_SECONDE ; // pour le prochain passage.
  150.   }
  151. }
  152.  
  153.  
  154. /* ******************************************************************************** */
  155. // gestion CAPTEUR
  156. /* ******************************************************************************** */
  157. void lectureCapteur(void)
  158. {
  159.   FLOTTEUR_HAUT = !digitalRead(PIN_FLOTTEUR_HAUT);
  160.   FLOTTEUR_BAS  = !digitalRead(PIN_FLOTTEUR_BAS);
  161.  
  162.   // SECURITE
  163.   if ( FLOTTEUR_HAUT && !FLOTTEUR_BAS)
  164.   {
  165.     Serial.println("ERR APP");
  166.     POMPE_OFF();
  167.     VANNE_ON();
  168.     BULLEUR_OFF();
  169.     VENTIL_OFF();
  170.     // eEtatBac = BAC_SE_VIDE;
  171.   }
  172.  
  173.   if (FLOTTEUR_BAS) {
  174.     Serial.println("FLOTTEUR_BAS");
  175.   }
  176.   if (FLOTTEUR_HAUT) {
  177.     Serial.println("FLOTTEUR_HAUT");
  178.   }
  179. }
  180.  
  181.  
  182. /* ******************************************************************************** */
  183. // gestion irrigation
  184. /* ******************************************************************************** */
  185. void irrigation() //À quoi sert cette fonction ? c'est pas doublon par rapport au ligne ci-dessus ?
  186. {
  187.  
  188.   switch (eEtatBac)
  189.   {
  190.     case  BAC_SE_VIDE:         fc_bac_se_vide();       break;
  191.     case  MAREE_BASSE :        fc_maree_basse();       break;
  192.     case  BAC_SE_REMPLIE:      fc_bac_se_remplie();    break;
  193.     case  MAREE_HAUTE:         fc_maree_haute();       break;
  194.     default:  Serial.println("ERR APP"); // break;              // Cas qui ne doit jammais arrivé, faire un RESET !
  195.   }
  196. }
  197.  
  198.  
  199. /* ******************************************************************************** */
  200. // le bac de culture est a moitier vide
  201. /* ******************************************************************************** */
  202. void fc_bac_se_vide()
  203. {
  204.   Serial.println("fc_bac_se_vide");
  205.   if (!FLOTTEUR_BAS && !FLOTTEUR_HAUT)
  206.   {
  207.     POMPE_OFF();
  208.     VANNE_OFF();
  209.     BULLEUR_OFF();
  210.     VENTIL_ON ();
  211.     eEtatBac = MAREE_BASSE; // une fois  que le bac redevient vide et que flotteur bas et le flotteur haut son declancher on passe a l'etat bac de repos
  212.  
  213.     Serial.print("fc_maree_basse");
  214.     duree_marre_basse = TEMPO_MARRE_BASSE;
  215.   }
  216.  
  217.   else
  218.   {
  219.     VANNE_ON();
  220.     POMPE_OFF();
  221.     BULLEUR_OFF();
  222.     VENTIL_OFF();
  223.   }
  224. }
  225.  
  226.  
  227. /* ******************************************************************************** */
  228. /* La marré est basse pendnat un certain temsp */
  229. /* ******************************************************************************** */
  230. void fc_maree_basse()
  231. {
  232.   Serial.print("   duree_marre_basse="); Serial.println(duree_marre_basse);
  233.   if (duree_marre_basse-- == 0)
  234.   {
  235.     // Fin de la marée basse
  236.     VANNE_OFF();
  237.     POMPE_ON();
  238.     BULLEUR_OFF();
  239.     VENTIL_OFF();
  240.    
  241.     eEtatBac = BAC_SE_REMPLIE;
  242.   }
  243.   else  {
  244.     // Toujours en marrée base. // Tempo en cours...
  245.   }
  246. }
  247.  
  248. /* ******************************************************************************** */
  249. // le bac de culture est a moitier remplis D'eau
  250. /* ******************************************************************************** */
  251. void fc_bac_se_remplie()
  252. {
  253.   Serial.println("fc_bac_se_remplie");
  254.   if (FLOTTEUR_HAUT)    // on est arrivé en haut, (pas la peine de vérifier le capteur du bas)
  255.   {
  256.     POMPE_OFF();
  257.     VANNE_OFF();
  258.     BULLEUR_ON();
  259.     VENTIL_OFF();
  260.  
  261.     eEtatBac = MAREE_HAUTE; // une fois que le flotteur bas et haut sont eclancher on passe a l'etat maree haut
  262.     Serial.println("fc_maree_haute()");
  263.     duree_marre_haute = TEMPO_MARRE_HAUTE;
  264.   }
  265.   else
  266.   {
  267.     //VANNE_OFF(); Pas util car déja fait dans fc_maree_basse()
  268.     //POMPE_ON();
  269.   }
  270. }
  271. /* ******************************************************************************** */
  272. /* La marré est haute pendnat un certain temsp                                      */
  273. /* ******************************************************************************** */
  274. void fc_maree_haute()
  275. {
  276.   Serial.print("   duree_marre_haute = "); Serial.println(duree_marre_haute);
  277.   // Pas de condition puisqu'ici on est déja a marré haute
  278.   if (duree_marre_haute-- == 0)
  279.   {
  280.     BULLEUR_OFF();
  281.     POMPE_OFF();
  282.     VANNE_ON();
  283.     VENTIL_OFF();
  284.  
  285.     eEtatBac = BAC_SE_VIDE;
  286.   }
  287.   else
  288.   {
  289.     // toujours la tempo pour la maree haute
  290.   }
  291.  
  292. }
  293.  
  294. /* ******************************************************************************** */
  295. // gestion_eclairage
  296. /* ******************************************************************************** */
  297. void eclairage(void)
  298. {
  299. #ifdef LIB_RTC
  300.  
  301.   pinMode( PIN_ECLVEG, HIGH);
  302.  
  303.   DateTime now = rtc.now();
  304.   Serial.print(") ");
  305.   Serial.print(now.hour(), DEC);
  306.   Serial.print(':');
  307.   Serial.print(now.minute(), DEC);
  308.  
  309.   if ((now.hour() > 21) && (now.hour() < 15)) //programmateur horaire pour elairage led  PROBLEME "NOW" NON RECONUE PAR LE COMPILATEUR
  310.   {
  311.     ECLAIRAGE_ON();
  312.   }
  313.   else
  314.   {
  315.     ECLAIRAGE_OFF();
  316.   }
  317.  
  318. #endif
  319. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement