Visualisateur de niveau d'eau

Visualisateur de niveau d'eau

Visualisateur de niveau d'eau

Le but du projet est de visualiser le niveau d'eau dans un grand pot de fleur.

Il faut

100% Complete

Principe

Le but est de savoir si le pot est rempli d'eau ou s'il faut arroser la plante, pour cela il suffi de tester l'humidité de la terre.

Chaque capteurs d'humidité va renvoyer une valeur qu'il faudra interpréter en couleur (rouge pour "c'est sec" et bleu pour "il y a de l'eau"). On allume les LED correspondantes au capteur en faisant un dégradé sur les LEDs intermédiaires.

Vue que le pot est profond (environ 50 cm de terre), j'ai prévu de mettre plusieurs sondes d'humidité :

  • Sonde 1 le plus profond possible.
  • Sonde 2 à mis-hauteur dans le pot.
  • Sonde 3 en surface.

Étanchéification des connections

Sonde d'humidité

Étanchéification des soudures à l'aide d'un pistolet à colle.

Les sondes d'humidité vont être dans la terre, qui est un milieu corrosif. Il est donc nécessaire de rendre les soudures des sondes étanches, pour cela c'est tout simple : il faut un pistolet à colle et mettre une grosse boule sur chaque soudures.

EDIT : Au bout de 1 mois dans la terre, j'ai remarqué que les sondes étaient totalement hors d'usage car la partie métallique a été complétement rongée (voir photo). J'ai donc décidé de la recouvrir d'étain pour la protéger. Pour cela, il faut se munir d'un fer à souder et de recouvrir la partie métallique d'étain, comme pour une soudure classique.

Câblage

Cablage capteur humidité

Câblage capteur humidité

Ici, j'ai représenté 4 connections possibles pour les sondes d'humidité, mais seulement 3 seront utilisée dans le code.

Code

/**
 * This sketch will display humidity level on a LEDs strip.
 * You need :
 *  - Adressable RVB LEDs strip.
 *  - Humidity sensors (type YL39-69) plugged on Analogic port (A1 to A4)
 *  
 *  Programm setting :
 *  -> NbSensors : You need to settup le number of sensors you use (4 max).
 *  -> NUMPIXELS : The number of pixels you hav in your LEDs strip.
 *  
 *  @Author : (c) Alexandre PERETJATKO 2017.
 *  -----------------------------------------------------------------------------------------------------
 */
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
// ----------------------------------------------------------------------------------
// THE NUMBER OF LEDS YOU WILL USE
#define NUMPIXELS      12
#define LEDPIN          6
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, LEDPIN, NEO_GRB + NEO_KHZ800);
// ----------------------------------------------------------------------------------
// YL-39 + YL-69 humidity sensor
// Sensor must be connected to the A1 - A4 pin (Sensor number 1 to A1, Sensor number 2 to A2, ... )
int NbSensors  = 3;
int humidityMaxValue = 1023;
byte humidity_sensor_vcc = 6;
void setup() {
  // This initializes the NeoPixel library.
  pixels.begin();
  pixels.setBrightness(30);
  // Init the humidity sensors board
  pinMode(humidity_sensor_vcc, OUTPUT);
  digitalWrite(humidity_sensor_vcc, LOW);
  // Setup Serial (for debug)
  /*
  while (!Serial);
  delay(1000);
  Serial.begin(9600);
*/
}
void loop() {
  Serial.println();
  for ( int i = 1; i <= NbSensors; i++) {
    Serial.print("Humidity du capteur ");
    Serial.print(i);
    Serial.print(" : ");
    Serial.println(read_humidity_sensor(i));
  }
  Serial.println();
  AfficheCouleurs();
  delay(500);
}
int read_humidity_sensor(int NumSensor) {
  int value = 0;
  digitalWrite(humidity_sensor_vcc, HIGH);
  delay(500);
  switch (NumSensor) {
    case 1 :
      value = analogRead(A1);
      break;
    case 2 :
      value = analogRead(A2);
      break;
    case 3 :
      value = analogRead(A3);
      break;
      
    case 4 :
      value = analogRead(A4);
      break;
  }
  digitalWrite(humidity_sensor_vcc, LOW);
  return humidityMaxValue - value;
}
void AfficheCouleurs() {
  // Calcul de la couleur
  // Pas d'eau = Rouge
  // beaucoup d'eau = bleu
  /*
    int couleur = value / 2.5;
    if( couleur > 255 ) couleur = 255;
    int R = 255 - couleur;
    int V = 0;
    int B = couleur;
    // Mise ? jour de la LED du capteur.
    pixels.setPixelColor(NumSensor - 1, pixels.Color(R, V, B));
    pixels.show(); // This sends the updated pixel color to the hardware.
  */
  int R, V, B;
  int  couleur;
  int value   = 0;
  int value2  = 0;
  int numPixel  = 0;
  int sensor;
  int interval  = (NUMPIXELS / NbSensors); // C'est le nombre de leds (entre celle des capteurs) dont il faut calculer la valeur
  Serial.print("interval=");
  Serial.println(interval);
  for ( sensor = 1; sensor < NbSensors; sensor++) {
    // Recuperation de la valeur du capteur
    value = read_humidity_sensor(sensor);
    // Calcul de la couleur
    couleur = value / 2.5;// * 255 / humidityMaxValue;
    if ( couleur > 255 ) couleur = 255;
    R = 255 - couleur;
    V = 0;
    B = couleur;
    Serial.print(" *");
    Serial.print(couleur);
    Serial.print("* ");
    // Alumage de la led du capteur
    pixels.setPixelColor(numPixel , pixels.Color(R, V, B)); numPixel++;
    // alumage des leds entre celles des capteurs
    value2  = abs( value - read_humidity_sensor(sensor + 1) ) / interval ;
    for ( int i = 1; i <= interval; i++) {
      couleur = abs(value - (value2 * i)) / 2.5;
      if ( couleur > 255 ) couleur = 255;
      R = 255 - couleur;
      V = 0;
      B = couleur;
      Serial.print(couleur);
      Serial.print(" ");
      pixels.setPixelColor(numPixel, pixels.Color(R, V, B)); numPixel++;
    }
  }
  // la derni?re led
  value = read_humidity_sensor(NbSensors);
  couleur = value / 2.5;
  if ( couleur > 255 ) couleur = 255;
  R = 255 - couleur;
  V = 0;
  B = couleur;
  Serial.print(" *");
  Serial.print(couleur);
  Serial.print("* ");
  value = read_humidity_sensor(sensor + 1);
  pixels.setPixelColor(numPixel , pixels.Color(R, V, B));
  pixels.show(); // This sends the updated pixel color to the hardware.
}

Le projet en images

Le visualisateur en place

Sur cette photo, le niveau d'eau est à son maximum (toutes les LEDs sont bleu).

Sonde d'humidité

Étanchéification des soudures à l'aide d'un pistolet à colle.

Boite pour l'arduino

Boite temporaire pour mettre tout les composants.

Bande de LEDs

Par la suite, les leds ont été glissées dans un bout de panneaux alvéolaire blanc.

Arduino-HumiditySensor

On voit ici que la terre est humide entre le bas et le milieu du pot, car les LEDs sont bleu à cet endroi.

PCB

Fabrication d'une PCB pour faciliter les connections sur l'Arduino.

Sondes rouillées

Problème de corrosion des sondes.

Au bout d'un mois les sondes ne sont plus utilisables car totalement mangées par la rouille.

Shield pour Arduino

Montage des 3 capteurs pour les sondes sur le shield Arduino.

Boite pour cacher le shield et l'Arduino

Construction d'une boite pour mettre l'Arduino et son Shield

Boite PLA

Boite en PLA faite à l'aide d'une imprimante 3D

Copyright © 2015 Alex-design.fr All rights reserved.