نشانگر و کنترل کننده سطح آب عددی آردوینو

  • ۸۲ بازدید

آب منبع گرانبهایی است از این رو باید در استفاده و انتقال آن هوشیارتر باشیم. مقدار قابل توجهی از آب به دلیل استفاده نادرست هدر می رود. در این مقاله یک نشانگر عددی سطح آب و مدار کنترل کننده ساده و آسان با استفاده از آردوینو ارائه شده است.

این مدار برای نظارت بر سطح آب در مخزن زیرزمینی و مخزن ارتفاع طراحی شده است و سطح آب را در نمایشگر LCD 16×2 نمایش می دهد و همچنین بسته به سطح آبی که نیاز داریم به وسیله رله موتور را روشن یا خاموش می کند.

سازوکار مدار

برد آردوینو uno طوری برنامه ریزی شده است که سطح آب را به ترتیب سیم حسگر نشان دهد (سیم آلومینیومی کوتاهتر در هر دو مخزن وجود دارد) و زنگ را کنترل می کند و رله بستگی به سطح آب از پیش تعیین شده دارد.

پین آنالوگ A0 سطح مخزن زیرزمینی را اندازه گیری می کند و پایه های A1,A2,A3,A4 سطح آب مخزن بالای سر را اندازه گیری می کند. پین دیجیتال D7 زنگ هشدار را کنترل می کند و زمانی که مخزن پر/خالی است هشدار صوتی می دهد. پین دیجیتال D8 رله را برای روشن یا خاموش کردن موتور کنترل می کند. پین های دیجیتال D2، D3، D4، D5، D11 و D12 با نمایشگر LCD 16 X2 متصل می شوند، منبع باتری خارجی 9 ولت پس از بارگذاری و تنظیم مدار کنترل قابل اتصال است.

کد آردوینو

#include <LiquidCrystal.h>
int ugnd=A0;
int quarter=A1;
int half=A2;
int threfrth=A3;
int full=A4;
int relay=8;
int buzzer=7;
int i;     //relay status flag
int v=100; //comparison variable and give some adjustment for to get proper value
int b=0;   //buzzerzer flag
int m=0;   //relay flag
int c=0;   //ugnd flag
int s;
int q;
int h;
int t;
int f;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup()
{

pinMode(quarter,INPUT);
pinMode(half,INPUT);
pinMode(quarter,INPUT);
pinMode(full,INPUT);
pinMode(ugnd,INPUT);
pinMode(relay,OUTPUT);
pinMode(buzzer,OUTPUT);
lcd.begin(16, 2);
digitalWrite(buzzer,LOW);
}

void loop()
{

i=digitalRead(relay);
s=analogRead(ugnd);
q=analogRead(quarter);
h=analogRead(half);
t=analogRead(threfrth);
f=analogRead(full);
lcd.clear();

if(f>v && t>v && h>v && q>v ) //Statement to compare water levels from Arduino Analog pins
{
lcd.setCursor(0,0);
lcd.print(char(219));
lcd.print(char(219));
lcd.print(char(219));
lcd.print(char(219));
lcd.setCursor(5,0);
lcd.print("fullL");
m=0;
b=0;
}
else
{
if(f<v && t>v && h>v && q>v)//Statement to compare water levels from Arduino Analog pins
{
lcd.setCursor(0,0);
lcd.print(char(219));
lcd.print(char(219));
lcd.print(char(219));
lcd.print("_");
lcd.setCursor(5,0);
lcd.print("3/4th");
b=0;
}
else
{
if(f<v && t<v && h>v && q>v)//Statement to compare water levels from Arduino Analog pins
{
lcd.setCursor(0,0);
lcd.print(char(219));
lcd.print(char(219));
lcd.print("_");
lcd.print("_");
lcd.setCursor(5,0);
lcd.print("HALF");
m=1;
b=0;
}
else
if(f<v && t<v && h<v && q>v)//Statement to compare water levels from Arduino Analog pins
{
lcd.setCursor(0,0);
lcd.print(char(219));
lcd.print("_");
lcd.print("_");
lcd.print("_");
lcd.setCursor(5,0);
lcd.print("1/4th");
b=0;
}
else
{
if(f<v && t<v && h<v && q<v)//Statement to compare water levels from Arduino Analog pins
{
lcd.setCursor(0,0);
lcd.print("_");
lcd.print("_");
lcd.print("_");
lcd.print("_");
lcd.setCursor(5,0);
lcd.print("LOW");
b=0;
}
else

{
digitalWrite(relay,LOW);
lcd.setCursor(0,0);
lcd.print("ERROR!");
b=1;
}
}}}
if(i==HIGH)
{
lcd.setCursor(0,1);
lcd.print("relay ON");
}
else
{
lcd.setCursor(0,1);
lcd.print("relay OFF");
}



if(s>v && m==1)//Statement to compare water levels from Arduino Analog pins
{
digitalWrite(relay,HIGH);
}
if(s<v)
{
digitalWrite(relay,LOW);
lcd.setCursor(11,0);
lcd.print("Low");
lcd.setCursor(11,1);
lcd.print("ugnd");
c=1;
}
if(s>v)
{
c=0;
}

if(m==0)
{
digitalWrite(relay,LOW);
}

if(b==1 || c==1)//Statement to compare water levels from Arduino Analog pins
{
digitalWrite(buzzer,HIGH);
delay(500);
digitalWrite(buzzer,LOW);
}
else
{
digitalWrite(buzzer,LOW);
}
delay(100);
lcd.clear();
}

توجه

  • از سیم های آلومینیومی کوتاهتر به عنوان حسگر بالاترین سطح آب استفاده کنید.
  • سیم ها را خیلی نزدیک در آب قرار ندهید و بین سیم ها فاصله مناسب بدهید.
  • از برد آردوینو و مدار در برابر آب محافظت کنید.