شناخت و راه اندازی DHT با آردوینو – { پروژه های آردوینو }
مقدمه
با سلام خدمت همه شما دوستان. در این جلسه قصد داریم در مورد نحوه راه اندازی سنسور دما و رطوبت DHT با همدیگه صحبت کنیم. مثل همیشه پینهاد میکنم اگه چیزی از آردوینو نمیدونید ، ابتدا به دوره آموزشی مقدماتی آردوینو نگاهی بیندازید:
مقدمه رو بیشتر از این طولانی نمیکنیم و وارد اصل مطلب میشیم.
آشنایی با سنسور DHT :
سنسور DHT یک سنسور دما و رطوبت ارزان قیمت و کند هست که برای کارهای مقدماتی میشه ازش استفاده کرد. این سنسور از دو بخش تشکیل شده. یک سنسور رطوبت خازنی و یک ترمیستور . داخل این سسنور یک چیپ مرکزی هم وجود داره که مقادیر آنالوگ رو به دیجیتال تبدیل میکنه و نتیجه دیجیتال شده رو به خروجی انتقال میده و خوندن این مقدار دیجیتال با استفاده از میکروکنترلر بسیار آسون هست.در شکل زیر نمایی از سنسور DHT که در دو مدل DHT11 و DHT22 وجود داره رو میبینید:
مقایسه DHT11 و DHT22 :
همونطور که گفتیم ، دو نوع سنسور DHT وجود داره که این دو نوع مشابه همدیگه هستند و پایه های خروجی اون ها هم یکسان هست ، اما مشخصات متفاوتی رو دارند. در زیر مشخصات این دو مدل با یکدیگه مقایسه شده :
مدل DHT11 :
- فوق العاده ارزان قیمت
- تغذیه 3 تا 5 ولت
- ماکزیمم جریان مصرفی 2.5 میلی آمپر ( در حالتی که عمل تبدیل آنالوگ به دیجیتال را انجام میدهد و ما هم از آن میخواهیم دما را ارسال کند)
- رنج اندازه گیری (مناسب) رطوبت از 20 تا 80 درصد با دقت 5 درصد
- رنج دمایی از 0 تا 50 درجه با دقت 2 درجه سانتیگراد
- حداکثر نرخ نمونه برداری 1Hz ( یک ثانیه در هر بار)
- اندازه : 15.5mm در 12mm در 5.5mm
- دارای 4 پین خروجی با فاصله 0.1 اینچ
مدل DHT22 :
- ارزان قیمت
- تغذیه 3 تا 5 ولت
- ماکزیم جریان مصرفی 2.5 میلی آمپر ( در حالتی که عمل تبدیل آنالوگ به دیجیتال را انجام میدهد و ما هم از آن میخواهیم دما را ارسال کند)
- مناسب برای رنج اندازه گیری رطوبت از 0 تا 100 درصد با دفت 2 تا 5 درصد
- قابلیت اندازه گیری دما از 40- درجه تا 125 درجه با دقت 0.5 درصد
- حداکثر نرخ نمونه برداری 0.5 هرتز ( هر ثانیه دوبار)
- اندازه 15.1mm در 25mm در 7.7mm
- دارای 4 پین خروجی با فاصله 0.1 اینچ
همونطور که از مقایسه بالا هم مشخص هست DHT22 یه مقدار دقتش بالاتره و رنج های اندازه گیری بیشتری هم داره. هر دوتاشون برای انتقال داده ها از یک پایه دیجیتال استفاده میکنند و یه خورده هم کند هست. ( DHT11 هر 1 ثانیه یک بار و DHT22 هر 1 ثانیه 2 بار دما رو ارسال میکنه). در شکل زیر پایه های خروجی این دو سنسور رو مشاهده میکنید :
بخش سخت افزاری :
اتصال سنسور به آردوینو:
اتصال این سنسور به آردوینو بسیار ساده هست و چون فاصله پین هاشون با همدیگه 01 اینچ هست ، پس میتونیم اون رو روی بردبرد قرار بدیم و سیم های مورد نظرمون رو بهش وصل کنیم.
همونطور که در شکل بالا دیدم این سنسور 4 تا پایه داره که ما با یکی از پایه هاش (NC) اصلا کاری نداریم. در ضمن بین پایه های VCC و Data باید یک مقاومت Pull up قرار بدیم ( مقاومت 10K مناسب هست). البته خود آردوینو هم یک Pullup داخلی در رنج 20 تا 50 کیلو داره که البته بسیار ضعیف هست. ( در صورتی که نمیدونید مقاومت Pull up چیست هست میتونید از این لینک ، آموزش مربوط به اون رو بخونید)
در شکل زیر نحوه اتصال این سنسور به برد آردوینو نشان داده شده است :
البته پایه Data میتونه به هر کدوم از پایه های دیجیتال وصل بشه و هیچ محدودتی وجود نداره. ( البته بهتر هست که به پایه های شماره 0 و 1 دیجیتال متصل نشه ، چون اون پایه ها برای پروگرم کردن میکروکنترلر هستند. )
بخش نرم افزاری:
قبل از هر چیزی ، مثل سایر سنسورها در آردوینو ما نیاز داریم تا کتابخانه مربوط به این سنسور رو نصب کنیم.از این لینک میتونید این کتابخانه و چندین کتابخانه دیگر را دانلود و نصب کنید. ( ما نحوه دانلود و نصب کتابخانه ها رو در این لینک آموزش داده ایم. اگه مشکلی دارید میتونید مراجعه کنید. ) . پس از دانلود این مجموعه کتابخانه ها ، باید کتابخانه DHTlib را جدا کرده و آن را جداگانه نصب کنید.
پس از دانلود و نصب میتونید از کد زیر برای راه اندازی DHT استفاده کنید. در ادامه این کد رو به صورت خط به خط آموزش میدیم:
#include <dht.h> #define dataPin 2 // Defines pin number to which the sensor is connected dht DHT; // Creats a DHT object void setup() { Serial.begin(9600); } void loop() { int readData = DHT.read11(dataPin); // Reads the data from the sensor float t = DHT.temperature; // Gets the values of the temperature float h = DHT.humidity; // Gets the values of the humidity // Printing the results on the serial monitor Serial.print("Temperature = "); Serial.print(t); Serial.print(" *C "); Serial.print(" Humidity = "); Serial.print(h); Serial.println(" % "); delay(2000); // Delays 2 secods, as the DHT22 sampling rate is 0.5Hz }
توضیح خط به خط کد:
- خط شماره 1 و 2: تعریف هدر این کتابخانه و مشخص کردن پایه ی دیجیتالی که میخواهیم سنسور DHT ما به آن وصل شود.
- خط 3: تعریف یک آبجکت از کلاس dht با نام DHT
- خط 5: راه اندازی ارتباط سریال برای نشان داده دما و رطوبت بر روی پنجره سریال با بادریت 9600
- خط 8 : خواندن دیتا از سنسور و ریختن آن در متغیر readData ( اگر از DHT22 استفاده میکنید باید از دستور read22 به جای read11 استفاده کنید.)
- خط 9 و 10 : خواندن مقادیر رطوبت و دما و ریختن آن در متغیرهای t و h
- خطوط 13 تا 18 : نمایش این داده ها بر روی پنجره سریال
- خطوط 19 : 2 ثانیه تاخیر فاصله خواندن های متوالی از سنسور
18 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام
من الان با اردوینو کار میکنم و مشکلی که برام پیش اومده اینه که وقتی dht11 رو با سیم بلند به اردوینو متصل میکنم رطوبت و دما رو صفر نشون میده. با سیم کوتاه این مشکل وجود نداره . در ضمن با سیم بلند هم وقتی از کابل سه سیمه استفاده میکنم این مشکل دیده میشه یعنی وقتی دیتا رو با سیم دیگه ای و جدا از تغذیه وصل میکنم مقدارها رو درست نمایش میده.
سیم هم حدود 5 متره. درصورتیکه در دیتا شیت گفته تا 20 متر جواب میده. خازن 100 نانو هم به تغذیه ش وصل کردم.
ممنون میشم راهنماییم کنید
با سلام.
لطفا تصویری از پروژه خود ارسال کنید تا توضیحات لازم ارایه شود.
موفق باشید.
الان راست کلیک سایت رو بستین چطوری 2 تا تب باید باز کنیم 😐
خیلی رو اعصابه !
با سلام. لطفا دویاره تست بفرمایید. الان میتونید چند تب رو همزمان باز کنید.
ضمنا برای باز کردن چند تب همزمان میتوان کلید ctrl نگه دارید و روی لینک مورد نظر کلیک کنید.
شما چطوری کتابخونه ی https://github.com/RobTillaart/Arduino/tree/master/libraries/DHTlib رو دانلود میکنین؟ این لینک که داخلش Download zip نداره 🙁
با سلام. لینکی که قرار داده شده ، لینک مربوط به کتابخانه مخصوص DHT می باشد. این مجموعه شامل چندین کتابخانه مختلف است. برای دانلود کتابخانه به دو گام عقب تر برگردید و همه کتابخانه ها را دانلود کنید و سپس کتابخانه DHTlib را جدا کرده و آن را در پوشه library نرم افزار کپی کنید.
پیروز باشید.
با سلام و تشکر از سایت خوبتون.
من وقتی کد فوق رو نوشتم با این خطا مواجه شدم:
Arduino: 1.8.1 (Windows 8.1), Board: “Arduino/Genuino Uno”
In file included from C:\Users\markazi.co\Documents\Arduino\libraries\DHT_sensor_library\DHT_U.cpp:22:0:
C:\Users\markazi.co\Documents\Arduino\libraries\DHT_sensor_library\DHT_U.h:25:29: fatal error: Adafruit_Sensor.h: No such file or directory
#include
^
compilation terminated.
exit status 1
Error compiling for board Arduino/Genuino Uno.
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
میشه بگید مشکلش چیه؟
با سلام خدمت شما.
مشکل از نصب کتابخانه می باشد. لطفا به صورت دقیق بفرمایید کتابخونه رو چگونه نصب کردید؟
ما در این لینک نحوه نصب کتابخانه رو توضیح دادیم.
موفق باشید.
سلام، با تشکر از مطالب خوبتون، یک سوال در مورد این جمله داشتم :
“البته خود آردوینو هم یک Pullup داخلی در رنج 20 تا 50 کیلو داره که البته بسیار ضعیف هست”
میخواستم ببینیم منظورتون از ضعیف چی هست؟ و امکانش نیست بجای مقاومت گذاشتن برای Pullup، همون پایه را داخل آردوینوpullup تعریف کنیم که کارمون راحت بشه ؟
سلام و درود بر شما.
بذارید یک تعریف رو اینجا انجام بدیم :
به مقاومت های پول اپ با مقادیر پایین ، پول آپ قوی و به مقاومت های پول آپ با مقادیر بالا ، پول آب ضعیف گفته میشود. علت این موضوع هم این هست که در یک مقاومت پایین ، جریان بیشتری میتونی جاری بشه و در مقاومت بالا ، جریان کمتری جاری میشه.
در مورد این که میشه از یک پول آب استفاده کرد یا خیر هم باید بگم که میشه استفاده کرد. ولی شاید حرفه ای تر باشه تا ما مقاومت خودمون رو در خارج از میکروکنترلر قرار بدیم و از یک مقاومت پول اپ قوی استفاده کنیم تا از جاری شدن جریان مطمین تر باشیم و هیچوقت نگران نویز نباشیم. البته همونطور که خودتون هم میدونید در مقاومت پول آپ ضعیف چون جریان زیادی این مقاومت مصرف نمیکنه پس طول عمری باتری بیشتر هست و این خاصیت یک مقاومت پول اپ ضعیف هست.
موفق باشید.