به نام خدا
پروژه ی ساخت اندازه گیری دبی آب دیجیتال با استفاده از آردوینو
در این مقاله قصد داریم از طریق آردوینو و نمایشگر ۱۶*۲ یک اندازه گیر دبی آب دیجیتال طراحی کنیم.با نگاهی به طراحی و عملکرد سنسور دبی آب YF-S201 و چگونگی ایجاد رابط آن با آردوینو به طراحی خواهیم پرداخت.پروژه پیشنهادی قادر به انداره گیری نرخ دبی آب بر حسب لیتر بر دقیقه و همچنین کل دبی آب بر حسب لیتر خواهد بود.
نگاهی به سنسور دبی آب YF-S201 :
این سنسور برپایه اثر هال طراحی شده است،دارای ۳ ترمینال میباشد که عبارتند از : ۵ ولت(ولتاژ کار نامی)،زمین و خروجی.
سیم قرمز : ۵ ولت
سیم مشکی:زمین
سیم زرد: خروجی
سنسور فرکانس را متناسب به دبی آب به ما میدهد.سنسور YF-S201 میتواند از ۱ تا ۳۰ لیتر بر دقیقه را اندازه گیری نماید.فشار آب بایستی کوچکتر یا مساوی ۱٫۷۵ مگاپاسکال باشد.
شکل موج دبی آب بر روی پلاتر سریال
در تصویر ذیل میتوانیم پالس های تولید شده توسط سنسور دبی آب را بر روی پلاتر سریال آردوینو IDE مشاهده کنیم(با استفاده از اسیلوسکوپ تک کانال آردوینو).
برای تست هوا را به داخل سنسور دمیدیم تا باعث چرخاندن توربین ها شود و شکل موجی که در شکل بالا مشاهده میکنید تولید شد.شکل موج متراکم تر که سمت چپ مشاهده میشود بیانگر فرکانس های بالا و چرخش سریع توربین و شکل موج کمتر متراکم سمت راست بیانگر فرکانس های پایین و چرخش کند توربین میباشند.
دبی آب ثابت ، فرکانس خروجی ثابتی تحویل میدهد.
برای محاسبه خروجی بر حسب لیتر بر دقیقه بایستی فرکانس را تبدیل کنیم که تولید کننده فرمول زیر را در اختیار گذاشته است:
نرخ دبی آب(لیتر بر دقیقع) = فرکانس / ۷٫۵
فلذا بایستی فرکانس تولیدی را اندازه گیری کرده و پس از تبدیل آن را در کد برنامه بکار ببریم.
مشخصات فنی YF-S201:
دقت:+/- ۱۰% ، برای دقت بیشتر بایستی کالیبره شود
دمای کار:-۲۵ تا ۸۰ درجه سلسیوس
رطوبت کار: ۳۵% تا ۸۰% RH
چرخه کار خروجی:۵۰% +/- ۱۰%
حداکثر فشار آب:۱٫۷۵ مگاپاسکال
تعداد پالس بر لیتر:۴۵۰
حداکثر جریان که کشیده میشود:۱۵ میلی آمپر در ۵ ولت
در شکل زیر میتوانید شماتیک را مشاهده کنید
در شکل زیر شما طرح ساخته شده ی نهایی را مشاهده می کنید.
دانلود کد برنامه ی پروژه ی ساخت اندازه گیری دبی آب دیجیتال با استفاده از آردوینو:
دانلود فایل#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); int X; int Y; float Time = 0; float frequency = 0; float waterFlow = 0; float total = 0; float LS = 0; const int input = A0; const int test = 9; void setup() { Serial.begin(9600); lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0,0); lcd.print("Water Flow Meter"); lcd.setCursor(0,1); lcd.print("****************"); delay(2000); pinMode(input,INPUT); pinMode(test, OUTPUT); analogWrite(test,100); } void loop() { X = pulseIn(input, HIGH); Y = pulseIn(input, LOW); Time = X + Y; frequency = 1000000/Time; waterFlow = frequency/7.5; LS = waterFlow/60; if(frequency >= 0) { if(isinf(frequency)) { lcd.clear(); lcd.setCursor(0,0); lcd.print("L/Min: 0.00"); lcd.setCursor(0,1); lcd.print("Total: "); lcd.print(total); lcd.print(" L"); } else { total = total + LS; Serial.println(frequency); lcd.clear(); lcd.setCursor(0,0); lcd.print("L/Min: "); lcd.print(waterFlow); lcd.setCursor(0,1); lcd.print("Total: "); lcd.print(total); lcd.print(" L"); } } delay(1000);
دیدگاهها (0)