آردوینو پروژه های آردوینو

YF-S201 سنسور جریان آب آردوینو بخش دوم

سنسور اندازه گری جریان آب yf-s201 همراه با آردوینو arduino-بخش دوم
نوشته شده توسط علیرضا قربانی

در قسمت قبلی از آموزش راه‌ اندازی سنسور اندازه‌گیری جریان آب YF-S201 به طریقه‌ی اتصال آن به آردوینو و همچنین برنامه نویسی آن پرداختیم. در این قسمت قصد داریم فرمول ریاضی که به وسیله‌ی آن می‌توان مقدار آب گذرنده از سنسور را محاسبه نمود را بررسی  کنیم. در ادامه‌ی آموزش با مرجع تخصصی آردوینو  ، دیجی اسپارک همراه باشید.

بخش اول آموزش راه  اندازی سنسور اندازه‌ گیری جریان آب yf s201

‌‌


حل فرمول ریاضی YF-S201


‌‌اکنون نگاهی داریم به ریاضیات پشت پرده این پروژه‌ی آردوینو .در عملیات آزمایشگاهی ما از یک سنسور جریان آب YF-S201 استفاده کردیم و مشاهدات و مقادیر مختلف اندازه‌گیری شده را یادداشت کردیم ( با دقت +-۱۰). نرخ جریان میتواند بصورت استنباطی براساس شیوه های مختلفی از جمله تغییر در سرعت و انرژی جنبشی تعیین گردد. در اینجا ما نرخ جریان را براساس تغیر در سرعت جریان آب تعریف کرده ایم. سرعت بسته به فشاری است که داخل خط لوله قرار دارد و به سنسور وارد می‌شود. از آنجا که ناحیه سطح مقطع لوله‌ها شناخته شده  و ثابت است ؛سرعت متوسط  ، نشان دهنده سرعت جریان آب است. رابطه‌‌ی پایه‌ای برای تعیین نرخ جریان مایعات در چنین مواردی وجود دارد که برابر است با :

q=va

که در رابطه‌ی فوق  :

  • Q: نرخ کل جریان آب گذرنده از داخل لوله
  • V : سرعت متوسط جریان
  • A : سطح مقطع لوله است

YF-S201 1

*نکته : گرانروی  چگالی  و  اصطکاک مایع در تماس با لوله نیز در نرخ جریان تاثیر گذار است.

 

 

به  بیان دیگر:

 

YF-S201 2

 

اکنون با فرمول های این ماژول آشنا  شدید پس می توانید کد زیر را به درستی درک کنید.

 

volatile int flow_frequency; // اندازه گیری تعداد پالس ها
unsigned int l_hour; // محاسبه‌ی لیتر بر ساعت
unsigned char flowsensor = 2; // Sensor Input
unsigned long currentTime;
unsigned long cloopTime;
void flow() // تابع وقفه
{
	flow_frequency++;
}
void setup()
{
	pinMode(flowsensor, INPUT);
	digitalWrite(flowsensor, HIGH); // پین شماره ۲ به و وضعیت پول آپ تعریف می‌شود
	Serial.begin(9600);
	attachInterrupt(0, flow, RISING); // تنظیم وقفه و نسبت دادن تابع وقفه
	sei(); //فعال کردن وقفع
	currentTime = millis();
	cloopTime = currentTime;
}
void loop()
{
	currentTime = millis();
	// در هر ثانیه مقدار آب گذرنده از سنسور بر حسب لیتر بر ساعت محاسبه می شود
	if (currentTime >= (cloopTime + 1000))
	{
		cloopTime = currentTime; // Updates cloopTime
								 // Pulse frequency (Hz) = 7.5Q, Q is flow rate in L/min.
		l_hour = (flow_frequency * 60 / 7.5); // (Pulse frequency x 60 min) / 7.5Q = flowrate in L/hour
		flow_frequency = 0; // Reset Counter
		Serial.print(l_hour, DEC); // Print litres/hour
		Serial.println(" L/hour");
	}
}

 


تحلیل کد آردوینو


این کد برای اندازه‌گیری جریان آب با استفاده از سنسور جریان آب YF-S201 و محاسبه میزان جریان آب به واحد لیتر بر ساعت (L/hour) نوشته شده است. کد به طور خلاصه به صورت زیر عمل می‌کند:

ابتدا متغیرها و پین‌های مورد نیاز تعریف می‌شوند:

volatile int flow_frequency: تعداد پالس‌ها (اندازه‌گیری‌ها) که توسط سنسور جریان آب ایجاد می‌شود و برای محاسبه جریان آب استفاده می‌شود.
unsigned int l_hour: مقدار لیتر بر ساعت که بر اساس تعداد پالس‌ها محاسبه می‌شود و نشان دهنده جریان آب است.
unsigned char flowsensor = 2: شماره پین متصل به سنسور جریان آب.
unsigned long currentTime: زمان فعلی به میلی‌ثانیه.
unsigned long cloopTime: زمان آخرین بروزرسانی محاسبات.

تابع flow():

این تابع به عنوان تابع وقفه (interrupt) استفاده می‌شود.
هنگامی که سنسور جریان آب یک پالس تشخیص می‌دهد، تابع flow() فراخوانی می‌شود و مقدار flow_frequency یک واحد افزایش می‌یابد.

تابع setup():

تنظیمات اولیه میکروکنترلر و سنسور انجام می‌شود.
پین شماره ۲ به عنوان ورودی (INPUT) تعریف می‌شود و به حالت HIGH تنظیم می‌شود.
تابع flow() با اتصال به وقفه در نازل RISING به پین ۰ ارتباط داده می‌شود.
قابلیت فعال شدن وقفه با دستور sei() تنظیم می‌شود.

تابع loop():

این تابع به صورت مداوم اجرا می‌شود و جریان آب را اندازه‌گیری و محاسبه می‌کند.
مقدار زمان فعلی با استفاده از millis() در متغیر currentTime ذخیره می‌شود.
در هر ثانیه (با فاصله زمانی ۱۰۰۰ میلی‌ثانیه)، محاسبات انجام می‌شود:
مقدار جریان آب بر حسب لیتر بر ساعت (l_hour) بر اساس تعداد پالس‌ها (flow_frequency) محاسبه می‌شود.
مقدار l_hour نمایش داده می‌شود و با واحد “L/hour” به کامپیوتر ارسال می‌شود.
تعداد پالس‌ها (flow_frequency) به صفر بازنشانی می‌شود تا برای محاسبه جریان آب در دوره‌های بعدی آماده باشد.

از این کد می‌توان برای نمایش مقدار جریان آب بر حسب لیتر بر ساعت در یک پروژه‌ی کنترل و اندازه‌گیری مصرف آب استفاده کرد. این کد به صورت مداوم جریان آب را اندازه‌گیری می‌کند و نتایج را به کامپیوتر یا واحد نمایش دیگر ارسال می‌کند.

 

درباره نویسنده

علیرضا قربانی

علیرضا قربانی هستم دانشجوی مهندسی پزشکی. چیزهای خیلی زیادی رو در دنیا دوست دارم. یک گیک هستم و یشه گفت یک هکر. نه به معنی دزدی پسورد و ایمیل مردم. به معنی عشق به دونستن و عشق به تحقیق درباره خیلی از چیزهایی که می بینم و می‌شنوم. اگر بخوام علاقه‌مندی‌ درجه یکم رو نام ببرم میتونم بگم برنامه نویسی و بعد از اون امبدد سیستم ها.

تبادل نظر و رفع عیب با ثبت دیدگاه

۳ دیدگاه