Capteur de niveau d’eau avec Arduino

Capteur de niveau d'eau avec Arduino

Objectifs

  • Savoir comment faire son capteur de niveau d’eau facilement
  • Savoir comment utiliser les entrées analogiques
  • Savoir exploiter la conductivité de l’eau dans les projets
  • Se familiariser avec la programmation Arduino
  • Etc.

Exemples d’applications

  • Capteur de niveau d’un fluide conducteur à faible coût
  • Système de pompage automatique
  • Sécurité anti-débordement d’un fluide
  • Surveillance de niveau en temps réels

Fonctionnement

Le mini projet est une application simple du capteur de niveau d’eau avec Arduino. Le projet ne nécessite pas l’utilisation des transistors pour augmenter le courant. La mise en oeuvre nécessite uniquement des fils, une  carte Arduino et des résistances (10k…100k). L’astuce consiste l’utilisation de la propriété de conductivité de l’eau. En effet, nous avons utilisé une barre (ou un fil) conductrice injectée dans le réservoir de l’eau. La détection du niveau est assurée par le contact de l’eau avec la pointe (conductrice) du fil qui lui correspond. On distingue deux situations :

Configurations Capteur de niveau d'eau avec Arduino

 

Lorsque la pointe (l’extrémité du fil du niveau) n’a pas de contact avec l’eau : dans ce cas, l’entrée analogique Ax (A0… À3) vois la tenson aux bornes de résistance 10 K, elle est égale à 0V (entrée en air).

Capteur de niveau d'eau avec Arduino non connecté

Lorsque la pointe (l’extrémité du fil du niveau) est en contact avec l’eau : Dans le cas ou l’eau est considéré comme un conducteur parfait, la pointe rouge du fil dans le réservoir voit une tension égale à 5V, car l’eau est alimentée avec une tension égale à 5V. Dans le cas pratique, la valeur de la tension est inférieure à 5V. Dans notre exemple on choisit un seuil de l’ordre de 1.9V.

Capteur de niveau d'eau avec Arduino connecté

Nous utiliserons 4 LEDs rouges indiquant le niveau de l’eau. Les fils utilisés doivent être étanches et dénudés uniquement à l’extrémité (pointe rouge). Si le fil n’est pas étanche on risque d’avoir une LED allumée en permanent.

Le nombre de niveaux est égal à 4. Vous pouvez en ajouter d’autres.

Câblage de la carte

  • A0 : Entrée, Niveau 0
  • A1 : Entrée, Niveau 1
  • A2 : Entrée, Niveau 2
  • A3 : Entrée, Niveau 3
  • D2 : Sortie, Indicateur Niveau 0
  • D3: Sortie, Indicateur Niveau 1
  • D4: Sortie, Indicateur Niveau 2
  • D5: Sortie, Indicateur Niveau 3

Programme Arduino

La nouvelle fonction SetStateLevel() sera utilisée dans le programme. Elle permet d’allumer ou d’éteindre une LEDx en fonction de la valeur de l’entrée analogique Ax. La fonction dispose d’une entrée qui présente le seuil de transition. Lorsque la tension  à la borne de Ax est supérieure au seuil, la fonction mis à l’état « 1 » la LEDx. La LED reste éteinte dans le cas échéant.

void SetStateLevel(int ADCVal, int Seuil, int LED_Pin)
{
if(ADCVal > Seuil)
{
digitalWrite(LED_Pin, HIGH);
}
else
{
digitalWrite(LED_Pin, LOW);
}
}
// Entrées analogiques
const int Level0Pin = A0;
const int Level1Pin = A1;
const int Level2Pin = A2;
const int Level3Pin = A3;

// Sorties LEDs
const int Level0LED = 2;
const int Level1LED = 3;
const int Level2LED = 4;
const int Level3LED = 5;

int ADC_Val=0;
const int Seuil_0=400; // 1.9V (2.5V pour 512)

void setup()
{
//Liaison série
Serial.begin(9600);

// Indicateurs LEDs
pinMode(Level0LED,OUTPUT);
pinMode(Level1LED,OUTPUT);
pinMode(Level2LED,OUTPUT);
pinMode(Level3LED,OUTPUT);
}

void loop()
{
// Lecture et Affichage A0
ADC_Val=analogRead(Level0Pin);
Serial.print(ADC_Val); Serial.print("\t");
SetStateLevel(ADC_Val, Seuil_0, Level0LED);
delay(100);

// Lecture et Affichage A1
ADC_Val=analogRead(Level1Pin);
Serial.print(ADC_Val); Serial.print("\t");
SetStateLevel(ADC_Val, Seuil_0, Level1LED);
delay(100);

// Lecture et Affichage A2
ADC_Val=analogRead(Level2Pin);
Serial.print(ADC_Val); Serial.print("\t");
SetStateLevel(ADC_Val, Seuil_0, Level2LED);

// Lecture et Affichage A3
ADC_Val=analogRead(Level3Pin);
Serial.print(ADC_Val); Serial.print("\n");
SetStateLevel(ADC_Val, Seuil_0, Level3LED);
delay(100);
}

void SetStateLevel(int ADCVal, int Seuil, int LED_Pin)
{
if(ADCVal > Seuil)
{
digitalWrite(LED_Pin, HIGH);
}
else
{
digitalWrite(LED_Pin, LOW);
}
}

Téléchargement

Photos du projet

Photos Capteur de niveau d'eau avec Arduino (1)

Photos Capteur de niveau d'eau avec Arduino (4)

Photos Capteur de niveau d'eau avec Arduino (3)

Photos Capteur de niveau d'eau avec Arduino (2)

Tout les projets microcontrôleur