In acest articol vom vedea un senzor care nu returneaza informatiile care ar trebui si care ar trebui introdus in categoria "De evitat". Acesta este senzorul de nivel apa pentru Arduino si este cel in poza de mai jos:

Alimentarea se face cu +5V si iesirea acestui senzor este analogica, deci vom folosi pinul A5 de la Arduino pentru a citi informatiile returnate.

Pentru a nu alimenta in mod permanent senzorul vom alimenta pentru o perioada de 10 milisecunde montajul, vom citi valoarea senzorului apoi vom intrerupe alimentarea. Pentru a realiza acest lucru vom alimenta modulul direct din pinul digital 5 al Arduino.

Prin aceasta metoda vom prelungi durata de viata a senzorului deoarece nu va fi supus coroziunii prea curand.

Valoarea returnata de senzor ar fi trebuit sa se situeze intre 0 (senzor uscat) si 520 (senzor complet umed). Am observat ca senzorul pe care-l detin returneaza doar valori foarte mari (480-500) atat in cazul introducerii in apa cat si in cazul unor picaturi. Ceea ce face ca acest senzor sa fie complet inutil pentru detectia nivelului unui lichid.

Tinand cont de cele de mai sus am mers pe varianta folosirii acestui senzor ca si detector de umiditate. 

Pentru acest lucru am folosit urmatorul sketch, rezultatele obtinute fiind afisate pe un display LCD:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4);
int pornire = 5;
int senzor = A5;

void setup() {
  lcd.begin();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Senzor nivel");
  lcd.setCursor(5, 1);
  lcd.print("apa");
  lcd.setCursor(1, 3);
  lcd.print("electronicstore.ro");
  delay(3000);
  pinMode(pornire, OUTPUT);
  pinMode(senzor, INPUT);
  digitalWrite(pornire, LOW);
}

void loop() {
  lcd.clear();
  int nivel = citireSenzor();
  lcd.setCursor(0, 0);
  if (nivel < 20) {
    lcd.print("Senzor uscat");
  } else {
    lcd.print("Umiditate detectata!");
  }

  lcd.setCursor(0, 3);
  lcd.print("electronicstore.ro");
  delay(500);
}

int citireSenzor() {
  digitalWrite(pornire, HIGH);
  delay(10);
  int valoare = analogRead(senzor);
  digitalWrite(pornire, LOW);
  return valoare;
  }

Poze cu montajul in functiune sunt mai jos:

 

Nu sunt comentarii

Acest website foloseste cookie-uri pentru o experienta placuta in timpul navigarii.