🌡️ سنسور دما و رطوبت DHT11 / DHT22 (DHT22 / DHT11 Temperature & Humidity Sensor)
| اسم انگلیسی | DHT22 / DHT11 Temperature & Humidity Sensor |
|---|---|
| در ووکوی (Wokwi) | wokwi-dht22 |
| دسته | 🌡️ سنسورها |
| در شبیهساز فارسی | مود آردوینو · رایگان |
سنسور دما و رطوبت DHT22 و DHT11 (DHT Temperature & Humidity Sensor) هر دو عدد را با یک سیم داده به آردوینو میدهد. نسخهی سفید DHT22 دقیقتر است و زیر صفر را هم میخواند، نسخهی آبی DHT11 ارزانتر است و برای دمای اتاق کافی است. با آن دماسنج رومیزی، کنترل فن، دستگاه جوجهکشی یا ایستگاه هواشناسی کوچک میسازی.
سنسور DHT22 در ووکوی (Wokwi)
شناسهی این سنسور در ووکوی wokwi-dht22 است و چهار پایه دارد: VCC، SDA، NC و GND. اسم SDA گولزننده است: این سنسور I2C نیست و داده را با پروتکل تکسیمهی خودش میفرستد؛ پس SDA را به یک پین دیجیتال معمولی میزنی. diagram.json کامل:
{
"version": 1,
"parts": [
{ "type": "wokwi-arduino-uno", "id": "uno", "top": 0, "left": 0, "attrs": {} },
{ "type": "wokwi-dht22", "id": "dht1", "top": -130, "left": 80, "attrs": {} }
],
"connections": [
[ "dht1:VCC", "uno:5V", "red", [] ],
[ "dht1:SDA", "uno:2", "green", [] ],
[ "dht1:GND", "uno:GND.1", "black", [] ]
]
}
| پایهی DHT22 در ووکوی | وصل به |
|---|---|
| VCC | uno:5V |
| SDA (داده) | uno:2 |
| NC | هیچجا |
| GND | uno:GND.1 |
وسط شبیهسازی روی سنسور کلیک کن تا دما و رطوبت را با لغزنده عوض کنی؛ بهترین راه برای امتحان اینکه شرطهای کدت درست کار میکنند. در تینکرکد فارسی هم سنسور DHT در حالت آردوینو رایگان است.
سیمکشی با آردوینو (مدار واقعی)
سنسور خام چهارپایه همان ترتیب ووکوی را دارد (رو به سمت مشبک، از چپ): VCC، داده، NC و GND. ماژولهای سهپایه این ترتیب را ندارند و روی برد کوچکشان علامت +، OUT و − چاپ شده است.
| پایهی سنسور | آردوینو Uno | توضیح |
|---|---|---|
| VCC یا + | 5V | ۳٫۳ ولت هم کار میکند |
| DATA یا OUT | پین 2 | روی سنسور خام یک مقاومت ۱۰ کیلواهم بین DATA و VCC بگذار |
| NC | — | فقط در سنسور خام |
| GND یا − | GND | زمین مشترک |
کد نمونه
// DHT22 heat alert: prints temperature and humidity,
// lights the on-board LED when it gets too hot.
#include <DHT.h>
#define DHT_PIN 2
#define DHT_TYPE DHT22 // DHT11 if you have the blue one
const float HOT = 30.0; // degrees Celsius
DHT dht(DHT_PIN, DHT_TYPE);
void setup() {
Serial.begin(9600);
dht.begin();
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
delay(2000); // the DHT22 needs 2 s between reads
float t = dht.readTemperature();
float h = dht.readHumidity();
if (isnan(t) || isnan(h)) {
Serial.println("no data from DHT");
return;
}
Serial.print(t, 1);
Serial.print(" C ");
Serial.print(h, 0);
Serial.println(" %");
digitalWrite(LED_BUILTIN, t > HOT ? HIGH : LOW);
}
کتابخانهی DHT sensor library از Adafruit لازم است؛ در ووکوی آن را از بخش کتابخانهها اضافه کن (راهنمای کتابخانه در ووکوی). حالا در ووکوی دما را از ۳۰ درجه بالاتر ببر و روشن شدن LED روی برد را ببین.
اشتباههای رایج
- خواندن تند: DHT22 هر دو ثانیه یک عدد تازه میدهد؛ اگر سریعتر بخوانی،
nanیا همان عدد قبلی برمیگردد. - SDA به A4: به خاطر اسم پایه در ووکوی، بعضیها آن را به پایهی I2C اونو میزنند؛ دادهی DHT به یک پین دیجیتال معمولی میرود.
- نوع اشتباه: DHT_TYPE باید با سنسوری که داری یکی باشد؛ وگرنه عددها بیمعنیاند.
- سنسور کنار گرما: سنسور چسبیده به رگولاتور یا LED پرنور، دمای خودِ مدار را میخواند؛ چند سانتیمتر دورش کن.
آموزشهای مرتبط
- سنسور DHT22 و DHT11 با آردوینو و ترموستات کوچک
- صفحهی وب دما و رطوبت با ESP32
- DHT با میکروپایتون روی پیکو
- پروژهی دما و رطوبت با DHT11 در تینکرکد فارسی
سؤالهای رایج
چرا پایهی دادهی DHT22 در ووکوی SDA نام دارد؟
فقط اسم پایه است. DHT22 از I2C استفاده نمیکند و پروتکل تکسیمهی خودش را دارد؛ پس این پایه را به یک پین دیجیتال معمولی مثل 2 بزن، نه به A4.
در ووکوی دمای سنسور را چطور عوض کنم؟
وقتی شبیهسازی در حال اجراست روی سنسور کلیک کن؛ پنجرهای باز میشود که دما و رطوبت را با لغزنده تغییر میدهی و عدد سریال مانیتور هم عوض میشود.
DHT11 بهتر است یا DHT22؟
DHT22 دقیقتر است و دمای زیر صفر را هم میخواند؛ DHT11 ارزانتر است و برای دمای اتاق کافی است. کدشان فقط در یک خط فرق دارد.