index
1

Arduino, activer une pompe avec une sonde d’humidité et niveau d’eau

Bonjour, Je vous présente ici Un petit tuto pour pouvoir activer a l’aide d’un arduino une pompe .

Mon système active une pompe de 1.5kw et irrigue 1000m2 de potager.
Le panneau de commande a un inter 3 positions, avec une position manuelle et automatique(arduino)
Un arret d »urgence et les leds qui indiquent le fonctionnement.

Elle s’allume quand le programmateur mécanique allume l’arduino et vérifie les capteurs.
Elle s’éteint quand l’humidité de la terre est atteinte ou bien que le programmateur arrête l’arduino ou bien quand le niveau d’eau du canal est trop bas ( car le débit d’eau du canal varie parfois au long de la journée)

 

 

const int canal = 10; // niveau d'eau canal
const int pompe = 9; // relais pompe
const int capthumidite = 8; // détecteur d'humidité numéro 1
int ledhumide = 7;
int ledsec = 6;
int ledniveaucanalbas = 5;
int ledniveaucanalhaut = 4;
const int ledprogramateur = 3;
int pumpLEDPin = 2; // Led  pompe verte

// Time periods  in milliseconds (1000 to a second).
const unsigned long canalinterval = 3000;
const unsigned long capthumiditeinterval = 180000;

// Variable holding the timer value so far. One for each "Timer"
unsigned long canaltimer;
unsigned long capthumiditetimer;

int niveaucanal; // état du du niveau d'eau canal
int humidite; // état du détecteur 1

void setup ()
{
  // Configure la broche avec la résistance de tirage
  Serial.begin(9600);
  pinMode (canal, INPUT); // entrée capteur niveau canal
  pinMode (capthumidite, INPUT); // entrée capteur sol humidité
  pinMode(pompe, OUTPUT); // pompe est une broche de sortie
  pinMode(ledhumide, OUTPUT);
  pinMode(ledsec, OUTPUT);
  pinMode(ledniveaucanalbas, OUTPUT);
  pinMode(ledniveaucanalhaut, OUTPUT);
  pinMode(ledprogramateur, OUTPUT);
  pinMode(pumpLEDPin, OUTPUT);

  int humidite = digitalRead(capthumidite); // Lecture de l etat du détecteur 1
  int niveaucanal = digitalRead(canal); // Lecture de l etat du du niveau d'eau canal

  canaltimer = millis ();
  capthumiditetimer = millis ();

}  // end of setup

void togglecanal ()
{

  niveaucanal = digitalRead(canal); // Lecture de l etat du du niveau d'eau canal

  // remember when we toggled it
  canaltimer = millis ();

  Serial.print(millis());
}  // end of togglecanal

void togglecapthumidite ()
{

  humidite = digitalRead(capthumidite); // Lecture de l etat du détecteur 1

  // remember when we toggled it
  capthumiditetimer = millis ();

  Serial.print(millis());
}  // end of togglecapthumidite

void loop ()
{

  // Handling the blink of one sensor
  if ( (millis () - canaltimer) >= canalinterval)
    togglecanal ();

  // The other sensor is controlled the same way. Repeat for more sensors
  if ( (millis () - capthumiditetimer) >= capthumiditeinterval)
    togglecapthumidite ();

  /* Other code that needs to execute goes here.
     It will be called many thousand times per second because the above code
     does not wait for the sensor blink interval to finish. */

  digitalWrite(ledprogramateur, HIGH); // Allumer Led programateur

  if  (humidite == LOW) {
    digitalWrite(ledhumide, HIGH); // Allumer LED humide
    digitalWrite(ledsec, LOW); // Eteindre Led sec
  }

  if  (humidite == HIGH) {
    digitalWrite(ledsec, HIGH); // Allumer Led sec
    digitalWrite(ledhumide, LOW); // Eteindre LED humide
  }

  if  ((niveaucanal) == HIGH) {
    digitalWrite(ledniveaucanalbas, HIGH); // Allumer LED niveau canal bas
    digitalWrite(ledniveaucanalhaut, LOW); // Eteindre Led niveau canal haut
  }

  if  ((niveaucanal) == LOW) {
    digitalWrite(ledniveaucanalbas, LOW); // Eteindre Led niveau canal bas
    digitalWrite(ledniveaucanalhaut, HIGH); // Allumer LED niveau canal haut
  }

  // Agir en fonction de l'état des parametres
  if ((humidite == HIGH) && (niveaucanal == LOW))
  {
    digitalWrite(pompe, LOW);
    digitalWrite(pumpLEDPin, HIGH); // Allumer Led pompe
  }
  else
  {
    digitalWrite(pompe, HIGH);
    digitalWrite(pumpLEDPin, LOW); // Eteindre Led pompe
  }

  delay(3000); // Attendre 3 seconde (prendre des mesures toutes les 3 secondes)

}  // end of loop

 

Voici le module du capteur d’humidite (cela peut être remplacé par deux tiges d’aluminium plantés dans le sol)Capteur humidité

On utilise deux intérupteurs pour simuler les deux contacts (1 pour le niveau d’eau et l’autre pour le contact d’un programmateur mécanique)

Le code que j’ai écris fonctionne comme suit :

On utilise un programmateur mécanique :

https://www.amazon.fr/Legrand-LEG095860-Programmateur-journalier-m%C3%A9canique/dp/B0090HKM16

Avec un transformateur et un relais, qui vas dire a l’arduino que le programmateur est en marche (contact fermé)

Un second contact, celui du niveau d’eau dans le ruisseau vas nous dire si il y a de l’eau ou pas.

Ainsi qu’un capteur d’humidité du sol qui vas nous dire si le sol est humide ou non

 

Donc si les 3 conditions sont réunis( le contact du programmateur + contact niveau d’eau ruisseau + capteur humidité du sol) Alors le relais de la pompe se met en marche.

Si une des 3 conditions est intérompue, alors la pompe s’arrete.

Ce qui fait que :

Si on programme chaque jours une plage de 2h avec le programmateur, chaque jour l’arduino va regarder si il y a de l’eau dans le canal, si le sol est sec ou non  SI ces deux conditions sont réunis a l’heure ou le programmateur est en marche, alors on allume la pompe dans la limite des 2 heures et si l’humidité du sol est a nouveau convenable pour les plantes.

 

Nouveau code arduino : Maintenant les capteurs de niveau d’eau canal et le capteur d’humidité du sol vont simultanément controlés a un intervalle définit.

 

Ici le topic du tuto sur arduino.cc

 

One thought on “Arduino, activer une pompe avec une sonde d’humidité et niveau d’eau

Laisser un commentaire

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

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Current day month ye@r *