عوال محیطی برای پروژههای مختلفی اهمیت دارند. یکی از این عوامل رطوبت محیط از پارامترهای قابل اندازه گیری توسط بردهای امبدد و سنسورهای رطوبتی است. سنسورهای رطوبت در انواع مختلف با ظاهر و ویژگی های متفاوت ارائه شده است و با توجه به نیاز پروژه از هر یک میتوانید استفاده کنید. در این آموزش از سنسور مقاومتی رطوبت HR202 استفاده میکنیم. این سنسور در کیت دما رطوبت آردوینو قرار گرفته شده است و مصرف آموزشی دارد. در ادامه با مرجع تخصصی آردوینو، به زبان فارسی دیجی اسپارک همراه باشید.
سنسور رطوبت HR202
سنسور مقاومتی HR202 جهت اندازه گیری رطوبت است. جهت خواندن دیتا از سنسور از پایه آنالوگ استفاده میکنیم. در حال حاضر این ماژول با دو مدل ۳ پایه و ۴ پایه معرفی شده است. درمدل ۳ پایه به ترتیب پایه ها VCC, GND, D0 و پایه ها در سنسور ۴ پایه VCC, GND, Analog, Digital است. بر روی ماژول یک مولتی ترن جهت تنظیم حساسیت سنسور قرار گرفته شده است. به محض اعمال ولتاژ به سنسور رطوبت اندازه گیری شده و قابل مشاهده است. مقادیر دریافتی سنسور با توجه به اینکه از ADC استفاده میکنیم، با توجه به نوع میکروکنترلر مورد استفاده متفاوت است و در صورتیکه از برد آردوینو UNO استفاده کنیم این عدد بین ۰ تا ۱۰۲۳ تغییر خواهد کرد. با تغییر حساسیت سنسور عدد اندازه گیری شده بین ۰ تا ۱۰۲۳ میباشد. ولتاژ ورودی سنسور ۳ تا ۵ ولت و رنج اندازه گیری رطوبت ۲۰ تا ۹۵ درصد است. دمای اندازه گیری شده بین ۰ تا ۶۰ درجه میباشد. بر روی ماژول دو ال ای دی قرار دارد که یکی برای نمایش ولتاژ اعمالی به سنسور و دیگری خروجی دیجیتال است که با رسیدن به بالاترین میزان خود سبز رنگ شده و روشن میشود. خروجی سنسور به صورت دیجیتال و آنالوگ توسط تراشه LM393 در دسترس است. با توجه به اینکه عملکرد سنسورهای رطوبت به صورت خطی است، جهت اندازه گیری رطوبت از فرمول زیر استفاده میشود.
Voltage = ((Arduino Value) / 1023) * 5 %RH = (Voltage – Zero Offset) / Slope
در این آموزش با توجه به اینکه از برد آردوینو UNO و پایه آنالوگ استفاده میشود، ولتاژی که روی پایه آنالوگ می افتد برابر با ۴٫۹۹ ولت است که با تغییر پتانسیومتر قرار گرفته شده بر روی ماژول ولتاژ به صفر خواهد رسید. مقدار ولتاژ Zero offset و Slope در دیتاشیت سنسورهای رطوبت خاک نوشته شده است. جهت اعمال دقیق اعداد بایستی بتوانید اعداد دقیق را از دیتاشیت بخوانید. سپس در فرمول جایگذاری کنید.
برد آردوینو Arduino
برد آردوینو میکروکنترلر با قابلیت دسترسی به پورت های دیجیتال و آنالوگ و پروتکلهای I2C و SPI است. در این آموزش از آردوینو Arduino مدل UNO استفاده شده است. برد آردوینو Arduino دارای تراشه Atmega328P است و با در اختیار داشتن پایههای کنترلی آنالوگ و دیجیتال I/O میتوان با سنسورهای مختلف ارتباط برقرار کرد. با در نظر گرفتن پروتکل ارتباطی، آنها را راه اندازی و کدنویسی کرد. محیط برنامه نویسی IDE Arduino است که نباز به دانش برنامه نویسی C++ خواهد داشت. با انتقال کد به محیط برنامه نویسی و کامپایل کد پروژه آماده اجرا خواهد بود. مراحل نصب نرم افزار آردوینو Arduino در آموزش زیر نوشته و منتشر شده است. در صورتیکه تا به حال با برد آردوینو کار نکرده اید، ابتدا آموزش زیر را مطالعه و سپس مراحل بعدی را اجرا کنید. آموزش کار با برد آردوینو Arduino و نصب نرم افزار Arduino IDE همچنین به صورت مستقیم میتوانید نرم افزار آردوینو را از طریق لینک زیر دانلود کنید. مراحل نصب نرم افزار دقیقا مشابه دیگر نرم افزارهای کامپیوتری است.
اتصال سنسور HR202 به آردوینو
سنسور رطوبت HR202 دارای دو مدل است. سنسور سفید رنگ در صورتیکه از مدل ۳ پایه استفاده میکنید اتصالات همانند زیر است.
- پایه VCC سنسور HR202 را به پایه ۵ ولت آردوینو اتصال دهید.
- پایه GND سنسور HR202 را به پایه GND اتصال دهید.
- پایه D سنسور HR202 را به پایه آنالوگ A0 آردوینو اتصال دهید.
همچنین در صورتیکه از سنسور رطوبت hr202 آبی رنگ استفاده میکنید دارای ۴ پایه است و تصالات به صورت زیر است.
- پایه VCC سنسور HR202 را به پایه ۵ ولت آردوینو اتصال دهید.
- پایه GND سنسور HR202 را به پایه GND اتصال دهید.
- پایه A سنسور HR202 را به پایه A0 آنالوگ آردوینو اتصال دهید.
- پایه D سنسور HR202 را به پایه ۲ آردوینو اتصال دهید.
خواندن ولتاژ آنالوگ Analog Voltage
در این بخش جهت یادگیری عمیق خواندن مقادیر ADC از پایه های آنالوگ آردوینو کد زیر را اجرا میکنیم. این کد به صورت اتوماتیک در کد اول محاسبه شده و مقدار نهایی در فرمول محاسبه رطوبت ذخیره و نمایش داده میشود. جهت محاسبه مقدار رطوبت خاک به صورت خطی در ابتدا به مقدار ولتاژ ADC نیاز داریم که توسط کد زیر پس از اتصال سنسور به پایه آنالوگ A0 قابل خواندن است. با اتصال پایه D سنسور رطوبت به پایه A0 آنالوگ آردوینو مقدار Voltage در سریال مانیتور نمایش داده میشود که این عدد بین ۰ تا ۴٫۹۹ متغیر است و با چرخاندن پتانسیومتر قرار گرفته شده بر روی ماژول مقدار قابل تغییر و مشاهده است.
void setup() { Serial.begin(9600); } void loop() { int sensorValue = analogRead(A0); float voltage = sensorValue * (5.0 / 1023.0); Serial.println(voltage); }
کد آردوینو رطوبت سنج HR202
نرم افزار آردوینو را باز کرده و یک تب جدید ایجاد کنید. سپس برنامه سنسور رطوبت hr202 را کپی و به نرم افزار آردوینو انتقال دهید.
#include <LiquidCrystal.h> #define Analog A0 #define Digital 2 #define LED 13 float adcValue = 0; float voltage = 0; float percentRH = 0; LiquidCrystal lcd(12, 11, 5, 4,3, 2); //Global variable void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); pinMode(Digital, INPUT); pinMode(Analog, INPUT); digitalWrite(LED, LOW); lcd.begin(20, 2); lcd.print("Light"); lcd.setCursor(0,1); lcd.print("Sensor"); delay(1000); lcd.clear(); lcd.print("Data:"); lcd.setCursor(0,1); lcd.print("Digital:"); } void loop() { adcValue = analogRead(0); // Read voltage coming from sensor (adcValue will be between 0-1023) voltage = (adcValue/1023.0)*5.0; // Translate ADC value into a voltage value percentRH = (voltage-0.958)/0.0307; // Translate voltage into percent relative humidity // Print value Serial.print("%RH = "); Serial.println(percentRH,DEC); lcd.setCursor(3, 0); lcd.print(percentRH); //lcd.print( adcValue); lcd.print(" "); //display digital status lcd.setCursor(3, 1); if(digitalRead(Digital) == 1) { lcd.print("HIGH"); digitalWrite(LED,HIGH); } else { lcd.print("LOW "); digitalWrite(LED,LOW); } delay(300); }
نمایش رطوبت در ال سی دی کاراکتری
نمایشگر ال سی دی کاراکتری جهت نمایش دیتا برای انواع میکروکنترلرها طراحی شده است. ال سی دی کاراکتری در ابعاد مختلف ارائه شده است که در این آموزش از مدل ۲۰×۲ استفاده میکنیم. WH2002A یک نمابشگر ال سی دی کاراکتری ۲۰X2 میباشد که از آی سی داخلی ST7066 در ساختار آن بهره میبرد. رابط پیش فرض ال سی دی ۸۰۰ ۴/۸-bit موازی است. همچنین این مدل با آی سی RW1063 controller IC با پروتکل I2C و SPI در بازار موجود است و اتصالات و سیم کشی آن محدوتر خواهد شد. برعکس تمامی ال سی دی های گرافیکی در این مدل دو ردیف ۸ تایی در سمت راست ال سی دی برای لحیم کاری پایه ها در نظر گرفته شده است. آموزش استفاده از ال سی دی کاراکتری ۲۰×۲ در لینک زیر قرار گرفته شده است. قبل از شروع اتصالات را بررسی کنید.
آموزش راه اندازی ال سی دی کاراکتری ۲۰X2
طبق جدول زیر اتصالات ال سی دی کاراکتری به برد آردوینو را انجام دهید.
نصب کتابخانه LiquidCrystal
کتابخانه مورد استفاده برای ال سی همان Liquidcrystal است که در بخش اول آموزش روش نصب آن نوشته و آموزش داده شده است. آخرین ورژن معرفی شده برای کتابخانه liquidCrystal ورژن ۱٫۰٫۷ است:
تحلیل کد آردینو HR202
پس از انجام اتصالات و نصب کتابخانه liquidcrystal کد را Verify و سپس آپلود کنید. رطوبت بین بازه ۰ تا ۱۰۲۳ بر روی نمایشگر ال سی دی کاراکتری نمایش داده میشود و مقدار ولتاژ خروجی دیجیتال با حالت LOW , High نمایش داده میشود. در صورتیکه سنسور به بالاترین میزان خود در ولتاژ خروجی برسد، مقدار دیجیتال HIGH خواهد شد. در این برنامه با توجه به فرمولی که جهت محاسبه خطی رطوبت نوشته شده است، رطوبت اندازه گیری شده نمایش داده میشود. کد زیر کد نهایی پروژه است و با آپلود این کد رطوبت سنسور محاسبه شده و بر روی سریال مانیتور و ال سی دی کاراکتری نمایش داده میشود. تعریف مقادیر اولیه و ورودی ها به صورت زیر است.
#include <LiquidCrystal.h> #define Analog A0 #define Digital 2 #define LED 13 float adcValue = 0; float voltage = 0; float percentRH = 0; LiquidCrystal lcd(12, 11, 5, 4,3, 2);
سپس در حلقه Loop دستور خواندن مقادیر از پایه آنالوگ و دریافت دیتا از فرمول خطی را خواهیم نوشت.
// Print value Serial.print("%RH = "); Serial.println(percentRH,DEC); lcd.setCursor(3, 0); lcd.print(percentRH); //lcd.print( adcValue); lcd.print(" "); //display digital status lcd.setCursor(3, 1); if(digitalRead(Digital) == 1) { lcd.print("HIGH"); digitalWrite(LED,HIGH); } else { lcd.print("LOW "); digitalWrite(LED,LOW); } delay(300); }
جهت نمایش دیتا در سریال مانیتور از دستور زیر استفاده شده است.
void setup() { Serial.begin(9600); { void loop() { Serial.println(percentRH,DEC); {
جهت نمایش دیتا در ال سی دی از دستور زیر استفاده شده است.
void setup() { lcd.begin(20, 2); lcd.print("Light"); lcd.setCursor(0,1); lcd.print("Sensor"); delay(1000); lcd.clear(); lcd.print("Data:"); lcd.setCursor(0,1); lcd.print("Digital:"); } void loop() { lcd.setCursor(3, 0); lcd.print(percentRH); //lcd.print( adcValue); lcd.print(" "); {
به همین صورت دیتا از دو روش قابل مشاهده است. در ابتدا ولتاژی که روی پایه آنالوگ آردوینو میافتد توسط آردوینو خوانده میشود. کد را آپلود کرده و سپس دیتا را رصد کنید.
وسایل مورد نیاز
کیت دما و رطوبت بر پایه آردوینو Arduino
برد آردوینو Arduino Uno R3 با تراشه R3 اورجینال
ماژول LCD نمایشگر ال سی دی ۲X20 کاراکتری آبی و سبز LCD 2×20 character
کیت برد بورد رنگی و ۶۰ رشته کابل نری به نری
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
پروژه و دریافت بن ارسال رایگان
برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکههای اجتماعی از جمله آپارات و اینستگرام، با هشتگهای دیجی_اسپارک دانشجوکیت digispark daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام خانم مهندس من کیت آردوینو دمای رطوبت دانشجوکیت خریدم و سنسورم دقیقا مانند شماست اما آب رنگه تفاوتی که در نوع برنامه نویسی و اتصاالاتش وجود نداره؟
با سلام
خیر تفاوتی در راه اندازی و نوع کالا وجود ندارد. دیتا را از پایه آنالوگ دریافت کنید.
سلام این سنسور را برای رزبری پای هم میتوان استفاده کرد؟
با سلام
بله اما بایستی از مبدل های آنالوگ به دیجیتال استفاده کنید.
سلام
led دیتا روی سنسور ها به چه معنی است؟
روشن بودن همیشگی آن مشکل حساب میشود؟
با سلام
در ساختار بسیاری از ماژول ها از ال ای دی برای نمایش وضعیت سنسور و تنظیم شدت حساسیت استفاده میشود.
سلام
ممنون از آموزش خوبتون
سنسورهایی که هم میتوانند با ۳.۳ کار کنند هم با ۵ ولت , بهتر است از کدام استفاده کنند ؟
با سلام
بهترین ولتاژ مصرفی در هر دیتاشیت سنسور نوشته شده است و موردی نیست که بتوان بدون بررس دیتاشیت به آن اشاره کرد.
سلام وقت بخیر
عدد نمایشی تستی خودم روی ۵ ولت چیزی حدود ۱۲۰ هست که اصلا همچین رطوبتی وجود نداره و روی ۳٫۳ ولت چیزی حدود ۷۳ درصده
این مورد رو در کنار رطوبت سنج دقیق تری آزمایش کردید ببینید خروجی درستی میده یا نه؟
با سلام
بله تست شده است و رطوبت ۲۰ درصد نمایش داده شده است.
سلام
من هم دقیقا همین مشکلو دارم
روی ۳ ولت رنج ۷۶ هست و روی ۵ ولت رنج ۱۳۰ هرچی رطوبت رو بیشتر میکنم کم تر میشه!
با سلام
پیشنهاد میشود از سنسور hr202 آبی رنگ استفاده کنید. این مورد برای کاربران دیگر هم پیش امده است که راه حل ان هنوز بررسی نشده است.
ماژول بنده دقیقا HR202 4 پایه آبی رنگ هست!
https://daneshjookit.com/module/sensor/%D8%AF%D9%85%D8%A7-%D8%B1%D8%B7%D9%88%D8%A8%D8%AA-%D8%AF%D9%85%D8%A7%D8%B3%D9%86%D8%AC-%DA%A9%D9%86%D8%AA%D8%B1%D9%84%D8%B1-%D8%AF%D9%85%D8%A7/2813-hr202-humidity-sensor-module.html
سلام
طبق آموزش در ابتدا بایستی ولتاژ پایه ی آنالوگ را محاسبه کنید و سپس در کد اصلی جایگذاری کنید. این کد قبلا برای یک پروژه با سنسور آبی رنگ تست شده است و عدد صحیحی دریافت شده است.
percentRH = (voltage-0.958)/0.0307;
عذرخواهی میکنم شما در کامنت های بالاتر فرمودید تست شده و ۲۰% نمایش داده اما من توی همین مقاله میبینم شما عدد ۱۳۰% رو دریافت کردید.
لطفا واضح تر توضیح بدید چطور میتونیم درصد رطوبت رو از این سنسور بگیریم؟
سنسور من HR202 آبی رنگ چهار پایه هست.
با سلام
در تست های بعدی همانطور که اعلام شد، این سنسور عدد صحیح ارسال نکرده است اما سنسور hr202 بی رنگ تست شده است و طبق فرمول درج شده در آموزش عدد کاملا صحیحی ارسال میکند.
سلام من ال سی دی ندارم و میخوام رطوبت رو توی مانیتور نشون بده چی رو باید پرینت کنم
سلام
از دستور Serial.println() استفاده کنید.