Construire sa sonde d’humidité du sol

Une sonde n’est qu’un circuit qui laisse passer du courant selon le capteur utilisé (son, température, champ magnétique, etc).

Pour avoir une idée de l’humidité du sol (pot de fleur par exemple), on peut utiliser tout simplement la propriété électrolytique d’une solution (ici eau + terre). Si le sol est sec, le courant passera moins bien que si le sol est humide.

Inspiration : Ici et .

PFEQ

Mots-clés : électrolyte, circuit, mesure DDP, isolant, résistance, oxydation, univers vivant (besoins d’une plante).

Voici un montage pour mesurer cette conductibilité :

Capteur humidité - clous

À noter que nous utilisons ici 2 clous (galvaniser de préférence pour éviter une oxydation trop rapide), séparer d’environ 2 cm par un matériau isolant, sur lesquels nous avons ajouter un isolant afin d’aller prendre la mesure à une certaine profondeur dans la terre (l’humidité du sol varie en fonction de la profondeur). Voici une photo de notre sonde (au lieu du ruban, utiliser du silicone comme isolant pour une sonde plus durable) :

sonde_hum

Le code pour lire la valeur prise à la broche A0 et l’envoyer dans le port série est le suivant (version xml) :

humidite_sol

 

void setup()
{
  Serial.begin(9600);

  pinMode(A0, INPUT);
}


void loop()
{
  Serial.print("Valeur humidité : ");
  Serial.println(analogRead(A0));

}

Le traitement de cette donnée (que nous aurons à «calibrer» pour trouver les valeurs «trop sec» et «adéquat») peut se faire de différente façon, mais dans l’exemple ci-dessous nous allumons une DEL de couleur différente selon le taux d’humidité du sol. On peut facilement modifier le tout pour faire démarrer une pompe à une valeur précise (voir ce défi).

Montage

montage_sonde_humidite

Schéma électrique

schema_sonde_humidite

Programmation

Fichier XML (à importer dans Blockly@rduino).

sonde_humidite_sol_del

Le code Arduino :

{
  Serial.begin(9600);

  pinMode(A0, INPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
}


void loop()
{
  Serial.print("Humidité : ");
  Serial.println(analogRead(A0));
  delay(2000);
  if (analogRead(A0) < 500) {
    digitalWrite(7, HIGH);
    digitalWrite(6, LOW);
    digitalWrite(5, LOW);

  } else if (analogRead(A0) >= 500 && analogRead(A0) <= 700) {
    digitalWrite(7, LOW);
    digitalWrite(6, HIGH);
    digitalWrite(5, LOW);
  } else if (analogRead(A0) > 700) {
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
    digitalWrite(5, HIGH);
  }

}

Photos du montage

IMG_20160223_102130.resized

IMG_20160223_110201.resized