قطعات مورد نیاز:
1 عدد | ||
ماژول سنسور دما و رطوبت DHT11 | 1 عدد | |
ماژول سنسور دما و رطوبت DHT22 | 1 عدد | |
سنسور رطوبت خاک | 1 عدد | |
سنسور دما LM35 | 1 عدد | |
ترمیستور 10kΩ | 1 عدد | |
مقاومت 10kΩ | 1 عدد | |
بردبورد | 1 عدد | |
سیم جامپر | 1 بسته |
معرفی و راه اندازی سنسور DHT11 و DHT22
به دلیل قیمت بسیار پائین، سنسورهای سری DHT از محبوبترین سنسورهای دما و رطوبت هستند. درون این سنسورها سه بخش کلی وجود دارد: ترمیستور که یک مقاومت حساس به دما است، یک بخش حساس به رطوبت و یک مدار الکترونیکی کوچک که وظیفه تبدیل سیگنال آنالوگ به دیجیتال را بر عهده دارد. این مدار کوچک باعث شده است تا کار کردن با این سنسور خیلی ساده باشد. دو مدل اصلی از این سنسور به نام DHT11 و DHT22 وجود دارد. این دو مدل کاملا مشابه هستند با این تفاوت که DHT22 دارای محدوده دمای کاری بیشتر و دقت بالاتری است. در تصویر زیر ابتدا DHT11 و سپس DHT22 را مشاهده میکنید.
هر کدام از سنسورهای DHT در دو نوع موجود است. نوع اول که به صورت ماژول بوده و یک برد الکترونیکی کوچک دارد که سنسور بر روی آن قرار داده شده است. ماژول DHT سه پایه دارد. در نوع دوم سنسور به صورت مجزا و بدون برد است و چهار پایه دارد. در ماژول DHT، یک مقاومت Pull-up درون ماژول قرار داده شده تا سیم سیگنال را در حالت عادی در وضعیت HIGH نگه دارد؛ اما در نوع سنسور مجزا (چهار پایه) این مقاومت وجود ندارد و خودتان باید مقاومت Pull-up را در مدارتان در نظر بگیرید. برای اینکه کار با انواع سنسورهای DHT را یاد بگیرید، ابتدا نحوه کار با DHT11 سه پایه و سپس نحوه کار با DHT22 چهار پایه را توضیح خواهیم داد.
ابتدا باید کتابخانه مربوط به ماژول DHT را به آردوینو اضافه کنید. برای این کار کتابخانه DHT را دانلود کنید.
نرمافزار آردوینو را باز کنید و از مسیر Sketch → Include Library → Add .ZIP Library فایل فشردهای که دانلود کردهاید را انتخاب کنید و منتظر بمانید تا نصب کتابخانه تمام شود.
در اینجا ما از یک ماژول سه پایه DHT11 استفاده کردهایم. ماژول را به بردبورد وصل کنید. پایههای مثبت و منفی ماژول را به ترتیب به 5V و GND آردوینو وصل کنید. پایه out که در وسط قرار دارد، سیگنال داده سنسور است. این پایه را به پین ٧ دیجیتال آردوینو متصل کنید.
برای اتصال قطعات مختلف به برد معمولا از وسیلهای به نام بردبورد استفاده میشود. بر روی بردبورد تعداد زیادی پین قرار دارد. پینهای وسط بردبورد به صورت عرضی و پینهای کناری آن (که معمولا با یک نوار قرمز یا آبی مشخص شدهاند) به صورت طولی با هم اتصال دارند. بنابراین اگر قطب مثبت و منفی مدار را به دو نوار کناری بردبورد وصل کنید، تعداد زیادی پین مثبت و منفی خواهید داشت و برای استفاده از چند ماژول به صورت همزمان، دچار مشکل نمیشوید. بردبورد باعث میشود تا بتوانید مدار دلخواهتان را بدون نیاز به لحیمکاری بسازید.
کد زیر را در نرمافزار کپی کرده و برنامه را در محلی ذخیره کنید.
/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com
*/
#include <dht.h>
dht DHT;
#define DHT11_PIN 7
void setup(){
Serial.begin(9600);
}
void loop()
{
int t = DHT.read11(DHT11_PIN);
Serial.print("Temperature = ");
Serial.print(DHT.temperature);
Serial.print(" C");
Serial.print(" ---- ");
Serial.print("Humidity = ");
Serial.print(DHT.humidity);
Serial.println(" %");
delay(2000);
}
برد و پورتی که آردوینو را به آن وصل کردهاید را از مسیر Tools → Board و Tools → Port انتخاب کنید. حالا برنامه را بر روی آردوینو آپلود کنید. سریال مانیتور را باز کنید و دما و رطوبت بدست آمده توسط سنسور را مشاهده کنید.
در این برنامه برای خواندن اطلاعات سنسور از دستور زیر استفاده شده است:
int t = DHT.read11(DHT11_PIN)
همچنین فراخوانی متغیرهای DHT.temperature و DHT.humidity مقادیر دما و رطوبت را در اختیارتان میگذارد.
یکی از پرکاربردترین دستورهای آردوینو، دستور print است. با استفاده از این دستور میتوانید دادههای یک سنسور، یک عبارت انگلیسی یا هر مقدار دیگری را در سریال مانیتور نمایش دهید. نحوه استفاده از print در سریال مانیتور به صورت زیر است:
Serial.print(Something)
در صورتی که بخواهید پس از نمایش مقدار خواسته شده، نشانگر به سطر بعدی برود از دستور زیر استفاده کنید:
Serial.println(Something)
برای نوشتن یک عبارت در سریال مانیتور باید آنرا درون دابل کوتیشن “ “ بنویسید. به این صورت، کامپایلر آردوینو متوجه میشود که شما یک متن را تایپ کردهاید.
در ادامه نحوه استفاده از ماژول چهار پین DHT22 را توضیح خواهیم داد. استفاده از این ماژول هم با در نظر گرفتن چند تغییر کوچک مانند سنسور قبل است. اولین تفاوت این است که در این سنسور پایه سوم از سمت چپ، به جایی وصل نمیشود و آزاد است.
برای کار با این سنسور باید پایه داده (پایه وسط) را از طرفی به پین ٧ دیجیتال آردوینو و از طرفی با یک مقاومت KΩ ١٠ به سر مثبت مدار وصل کنید. این کار باعث میشود زمانی که سنسور در حال ارسال اطلاعات نیست، پین ٧ دیجیتال آردوینو در حالت HIGH بماند و از ورود خطا جلوگیری میکند.
تفاوت دیگر در برنامه آردوینو است. در قسمتی که دستور خواندن اطلاعات سنسور را وارد میکنید باید بجای read11 عبارت read را جایگزین کنید تا کامپایلر متوجه شود که شما از DHT22 (و نه DHT11) استفاده کردهاید؛ در غیر این صورت اطلاعات به دست آمده درست نخواهد بود. حالا میتوانید برنامه زیر را بر روی آردوینو آپلود کنید و نتایج را در سریال مانیتور ببینید.
/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com
*/
#include <dht.h>
dht DHT;
#define DHT22_PIN 7
void setup(){
Serial.begin(9600);
}
void loop()
{
int t = DHT.read(DHT22_PIN);
Serial.print("Temperature = ");
Serial.print(DHT.temperature);
Serial.print(" C");
Serial.print(" ---- ");
Serial.print("Humidity = ");
Serial.print(DHT.humidity);
Serial.println(" %");
delay(2000);
}
معرفی و راهاندازی سنسور LM35
شاید به جرئت بتوان گفت که سنسور LM35 معروفترین سنسور دما در کاربردهای معمولی است. این سنسور بسیار ارزانقیمت، کم حجم و کم مصرف است. پاسخ خطی، محدوده دمایی وسیع ٥٥- تا ١٥٠ درجه سانتیگرادی، دقت قابل قبول ٠.٥ درجه سانتیگراد و قابلیت کارکرد با ولتاژ ٤ تا ٣٠ ولت از LM35 یک سنسور محبوب ساخته است.
LM35 در شکلهای مختلفی تولید شده است اما مدل دایروی آن در دسترستر است. در این مدل، سنسور سه پایه دارد که اگر سطح صاف آنرا روبروی خود بگیرید، پایههای آن از سمت راست زمین، سیگنال و ولتاژ تغذیه است.
برای وصل کردن LM35 به آردوینو کافیست که پایه های زمین، تغذیه و سیگنال آنرا به ترتیب به GND، 5V و یکی از پایههای آنالوگ آردوینو (در اینجا A0) متصل کنید.
برنامه زیر را در نرمافزار کپی کنید و آنرا اجرا کنید. سریال مانیتور را باز کرده و دمای اندازهگیری شده را ببینید. میتوانید سنسور را در دست خود بگیرید یا آن را جلوی دهان خود قرار دهید و تغییرات مقدار دما و رطوبت را مشاهده کنید.
/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com
*/
void setup() {
Serial.begin(9600);
}
void loop() {
int temp = analogRead(A0);
Serial.print("Temperature= ");
Serial.print(temp);
Serial.println(" C");
delay(1000);
}
معرفی و راه اندازی سنسور رطوبت خاک
سنسور YL-69 یک سنسور حساس به رطوبت ارزان قیمت و در دسترس است. یک کاربرد جالب این سنسور، کنترل آبیاری گیاهان است. این ماژول از دو بخش تشکیل شده است. بخش سنسور که دو پایه دارد و درون خاک قرار میگیرد و بخش الکترونیکی.
بر روی بخش الکترونیکی ماژول یک پتانسیومتر قرار دارد که میزان حساسیت خروجی دیجیتال را تنظیم میکند؛ همچنین یک LED که روشن بودن سنسور را نشان میدهد، یک LED که وضعیت خروجی دیجیتال را نشان میدهد و پایههای اتصال به میکروکنترلر و سنسور وجود دارد.
سنسور YL-69 رطوبت را به دو صورت دیجیتال و آنالوگ خروجی میدهد. اگر بخواهید از خروجی آنالوگ ماژول استفاده کنید، باید پایه A0 را به یکی از پینهای آنالوگ آردوینو وصل کنید. ورودی آنالوگ آردوینو یک عدد ١٠ بیتی است؛ این یعنی مقدار رطوبت را به صورت یک عدد از ٠ تا ١٠٢٣ خواهید داشت. اگر از خروجی دیجیتال ماژول استفاده میکنید باید پیچ پتانسیومتر روی ماژول را تنظیم کنید. مقدار تنظیم شده، مقداری است که اگر ولتاژ سنسور از آن بیشتر شود، خروجی HIGH و اگر از آن کمتر شود، خروجی LOW را به آردوینو میفرستد. نحوه کار سنسور رطوبت به این صورت است که هر چه رطوبت موجود بر روی آن کمتر شود، ولتاژ خروجی بیشتر میشود و برعکس.
اتصال سنسور رطوبت به آردوینو ساده است. ابتدا دو پایه سنسور را به دو پایه مثبت و منفی برد الکترونیکی آن وصل کنید. دقت کنید که این ماژول با ولتاژ 3.3V کار میکند، بنابراین آن را به ولتاژهای بالاتر وصل نکنید. سمت دیگر برد ماژول، چهار پایه قرار دارد. پایه VCC و GND سنسور را به ترتیب به پین 3.3V و GND آردوینو وصل کنید. اگر قصد استفاده از خروجی آنالوگ را دارید پایه AO را به یکی از پینهای آنالوگ آردوینو (در اینجا A0) وصل کنید؛ در غیر این صورت پایه DO را به یکی از پایههای دیجیتال (در اینجا پین ١٣) متصل کنید. شکل اول نحوه اتصالات به صورت دیجیتال و شکل دوم به صورت آنالوگ را نشان میدهد.
توابع شرطی بخش مهمی از زبانهای برنامهنویسی از جمله در آردوینو هستند. یکی از این توابع، if است که در صورتی که یک شرط مشخص برقرار شود، یک عمل مشخص را انجام میدهد. در مثال زیر در صورتی که شرط A برقرار باشد، عمل X انجام خواهد شد.
if (A){
X
}
تابع if میتواند به صورت چندشرطی هم استفاده شود. در مثال زیر اگر شرط A برقرار باشد، عمل X، اگر شرط B برقرار باشد عمل Y و در غیر این صورت عمل Z انجام خواهد شد.
if (A){
X
}
else if (B){
Y
}
else {
Z
}
در برنامههای مربوط به سنسور رطوبت خاک میتوانید نمونه استفاده از تابع شرطی if را مشاهده کنید. نحوه نوشتن تابع if را به خاطر بسپارید چون زیاد به کارتان خواهد آمد!
یک دستور کاربردی دیگر، دستور map یا تبدیل کردن مقیاس اعداد است. در برنامهنویسی ممکن است با اعدادی سر و کار داشته باشید که بازه تغییرات آنها متفاوت باشد. مثلا بازه ٠ تا 1023 برای ورودی آنالوگ، 0 تا ٢٥٥ برای خروجی PWM و ٠ و ١ برای مقادیر دیجیتال. اگر دو مقدار با مقیاسهای متفاوت داشته باشید، مقایسه کردن آنها مشکل است. پس خوب است که اعداد را در صورت نیاز به یک مقیاس واحد مثلا ٠ تا ١٠٠ درصد تبدیل کنید. همانطور که گفته شد دستور map این کار را انجام میدهد. ورودیهای این دستور به ترتیب مقدار متغیر، حد پائین و بالای مقیاس اولیه و حد پائین و بالای مقیاس نهایی است. برای مثال دستور زیر، مقدار Value که بین ٠ تا ١٠٢٣ است را به عددی بین ٠ تا ١٠٠ تصویر میکند.
map(Value, 0, 1023, 0, 100)
حالا آردوینو را به رایانه وصل کنید و یکی از کدهای زیر را در نرمافزار وارد کرده و اجرا کنید. کد اول مربوط به حالت دیجیتال و کد دوم مربوط به حالت آنالوگ است. برنامه دیجیتال بسیار ساده است. اگر ولتاژ سیگنال از حدی که با پتانسیومتر سنسور مشخص کردهاید کمتر باشد، پیغام سلامت گیاه و در غیر این صورت پیغام نیاز به آبیاری مشاهده میشود. در برنامه آنالوگ، رطوبت خاک اندازهگیری شده و به مقیاس ٠ تا ١٠٠ درصد تبدیل میشود. میزان رطوبت در سریال مانیتور نمایش داده شده و در صورتی که رطوبت کمتر از ١٠ درصد باشد، پیغام نیاز به آبیاری مشاهده میشود.
کد دیجیتال:
/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com
*/
byte soil = 13;
void setup() {
pinMode(soil, INPUT);
Serial.begin(9600);
}
void loop() {
if (digitalRead(soil) == LOW) {
Serial.println("Your plant is OK");
}
else {
Serial.println("Your plant needs water");
}
delay(1000);
}
کد آنالوگ:
/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com
*/
#define soilPin A0
void setup()
{
Serial.begin(9600);
}
void loop()
{
int dryThreshold = 10;
int moistureValue = analogRead(soilPin);
moistureValue = map(moistureValue, 0, 1023, 100, 0);
Serial.print("Soil Moisture is= ");
Serial.print(moistureValue);
Serial.print(" %");
if (moistureValue > dryThreshold)
{
Serial.println(", Your plant is OK");
}
else
{
Serial.println(", Your plant needs water");
}
delay(1000);
}
معرفی و راه اندازی ترمیستور
ترمیستورها تراشه هایی ساده، ارزان قیمت و کاربردی می باشند که امکان اندازه گیری دما را در محدوده وسیعی از دما، در پروژه شما به سادگی فراهم می کنند. ترمیستور علاوه بر کاربرد آن به صورت یک قطعه مجزا، به عنوان بخشی از قطعات دیگر نیز استفاده میشود. مثلا بسیاری از سنسورهای دما مانندDHT درون خود یک ترمیستور برای اندازهگیری دما دارند.
ترمیستور یک مقاومت حساس به دما است. نحوه کار ترمیستور به این صورت است که با تغییر دمای محیط، مقاومتش تغییر میکند. بنابراین اگر بتوانید مقاومت آنرا اندازه بگیرید، میتوانید دما را اندازه بگیرید. ترمیستورها با توجه به نحوه تغییرات مقاومتشان نسبت به تغییرات دما به دو دسته تقسیم می شوند: ترمیستورهای ضریب دمایی منفی، Negative Temperature Coefficient یا NTC که مقاومت آنها با افزایش دما کاهش می یابد و ترمیستورهای ضریب دمایی مثبت، Positive Temperature Coefficient یا PTC که مقاومتشان با افزایش دما افزایش می یابد. نحوه تغییرات مقاومت ترمیستور را در شکل زیر مشاهده می کنید.
ترمیستورهای NTC متداولتر بوده و در اینجا از آن استفاده شده است. همانطور که اشاره شد، برای اندازهگیری دما باید مقاومت ترمیستور را اندازه بگیریم. آردوینو نمیتواند مقاومت را مستقیما اندازه بگیرد؛ با این وجود میتوان مقاومت ترمیستور را به طور غیرمستقیم از روی ولتاژ اندازه گرفت. برای این کار باید از یک مقاومت دیگر برای تقسیم ولتاژ استفاده کنید. مقدار این مقاومت را به اندازه مقاومت ترمیستور (kΩ ١٠) انتخاب کنید. یک سر ترمیستور را به 5V و سر دیگر آنرا به مقاومت وصل کنید. سر دیگر مقاومت را نیز به GND متصل کنید. محل اتصال ترمیستور و مقاومت را به یکی از پایههای آنالوگ آردوینو وصل کنید.
با استفاده از قانون اهم مقاومت ترمیستور به صورت زیر به دست میآید (Rt مقاومت ترمیستور، R مقاومت خارجی و Vt ولتاژ محل اتصال ترمیستور و مقاومت است که به ورودی آنالوگ وصل شده است).
جریان عبوری از دو مقاومت یکسان است:
پس طبق قانون اهم خواهیم داشت:
یا
یک مرحله دیگر تا محاسبه دما وجود دارد و آن ارتباط دادن مقاومت ترمیستور به دمای آن است. روشهای مختلفی برای این کار وجود دارد که یکی از معروفترین آنها، استفاده از معادله استین-هارت است. در این روش از یک چندجملهای لگاریتمی برای تخمین دما استفاده میشود و دقت خوبی دارد. معادله استین-هارت به صورت زیر است:
این معادله دما را بر حسب درجه کلوین میدهد. بنابراین به راحتی با کم کردن مقدار ٢٧٣.١٥ دما بر حسب درجه سانتیگراد به دست میآید. از آنجا که در این معادله از لگاریتم استفاده شده است، باید کتابخانه math آردوینو را فراخوانی کنید. نرمافزار آردوینو را باز کنید؛ کد زیر را در آن کپی کرده و اجرا کنید. پنجره سریال مانیتور را باز کرده و مقدار دما را مشاهده کنید.
/*
SanatBazar
Arduino Tutorial Series
Author: Davood Dorostkar
Website: www.sanatbazar.com
*/
#include <math.h>
float A = 0.001125308852122;
float B = 0.000234711863267;
float C = 0.000000085663516;
void setup() {
Serial.begin(9600);
}
void loop() {
float volt = analogRead(A0);
volt = map(volt, 0, 1023, 0, 5);
float thermistorR = 10000 * (5.0 / volt - 1); //Voltage to resistance conversion
float ln_R = log(thermistorR);
float temp = 1 / (A + B * ln_R + C * pow(ln_R, 3) ); //Steinhart–Hart equation
temp-=273.15;
Serial.print("Temperature= ");
Serial.println(temp);
delay(1000);
}
نتیجهگیری
در این آموزش با انواع مختلفی از سنسورهای دما و رطوبت آشنا شدید، نحوه کارکرد آنها را یاد گرفتید و هر کدام را راهاندازی کردید. هرچند که تنوع زیادی از سنسورهای دما و رطوبت وجود دارد اما مواردی که در این آموزش مطرح شد، مجموعهای از محبوبترین آنهاست. اگر سنسور دیگری در اختیار دارید، اصول کارکرد آن چندان متفاوت از این موارد نخواهد بود، پس نگران نباشید و دست به کار شوید.
در آموزش بعدی، نحوه راهاندازی و کار با پتانسیومتر، انکودر و سروو موتور را خواهید آموخت.
نظرات شما باعث بهبود محتوای آموزشی ما میشود. اگر این آموزش را دوست داشتید، همینطور اگر سوالی در مورد آن دارید، از شنیدن نظراتتان خوشحال خواهیم شد.
نظرات (19)