آموزش آردوینوپروژه های آردوینو

آموزش راه اندازی سنسور DHT22 با برد آردوینو

سنسور دما و رطوبت DHT22 یک سنسور همه کاره و مقرون به صرفه است که برای اندازه گیری دما و رطوبت محیط برای طیف وسیعی از کاربردها استفاده می شود. دریافت داده های این سنسور بر اساس یک سیگنال خروجی دیجیتال است و می تواند اندازه گیری هایی با دقت بالا با وضوح 0.1 درجه سانتیگراد برای دما و 0.1٪ برای رطوبت ارائه دهد. این سنسور از یک عنصر حسگر رطوبت خازنی و یک ترمیستور برای اندازه گیری رطوبت و دما به ترتیب استفاده می کند. سنسور DHT22 همچنین دارای توان نسبتا کم است و می تواند در محدوده ولتاژ 3.3 ولت تا 5 ولت کار کند و برای پروژه های با باتری مناسب است. علاوه بر این، این سنسور با پایداری طولانی مدت و قابلیت اطمینان بالا ارائه می شود، که آن را به گزینه ای عالی برای کاربردهای مختلف مانند HVAC، ایستگاه های هواشناسی و سیستم های نظارت بر کیفیت هوای داخلی تبدیل می کند. بنابراین، در این آموزش تصمیم گرفتیم DHT22 را با آردوینو UNO راه اندازی کنیم.

سنسور DHT11 بسیار شبیه DHT22 است و فقط نسبت به DHT11 دقت و محدوده اندازه گیری کمتری دارد. در حقیقت DHT11 نسخه ارزان تر است و در صورت نیاز میتوانید آموزش اتصال DHT11 به آردوینو را نیز مطالعه کنید.

سنسور دما و رطوبت DHT22

سنسور DHT22 در مجموع دارای 4 پین است و ماژول DHT22 دارای 3 پین است. این دو هیچ تفاوت عملکردی ندارند و فقط یک پایه اضافی که سنسور دارد در ماژول حذف شده است. نمودار پین ماژول و سنسور در زیر نشان داده شده است.

پایه سنسور دما و رطوبت DHT22

  • پین داده DATA برای ارتباط 1 سیم
  • پین GND، به پایه GND آردوینو متصل می شود
  • پین تامین تغذیه VCC
  • در سنسور، این پایه به چیزی متصل نمیشود

سوالا ت متداول در مورد ماژول سنسور DHT22

 DHT22 چیست؟

DHT22 نسخه گران‌تر سنسور DHT11 است که مشخصات بهتری دارد. محدوده اندازه گیری دمای آن از 40- تا 125+ درجه سانتیگراد با دقت 0.5-+ درجه سانتیگراد است، در حالی که محدوده دمایی DHT11 از 0 تا 50 درجه سانتیگراد با دقت +2 درجه است.

DHT22 آنالوگ است یا دیجیتال؟

DHT-22 (همچنین AM2302 نامیده می شود) یک سنسور رطوبت نسبی و دما با خروجی دیجیتال است.

آیا DHT22 ضد آب است؟

نه. ضد آب نیست.

نرخ نمونه برداری حسگر DHT11 چقدر است؟

نرخ نمونه برداری DHT22 حدودا 1 هرتز است.

DHT22 از چه پروتکلی استفاده می کند؟

سنسور DHT22 از یک پروتکل ارتباطی اختصاصی تک باس استفاده می کند که می تواند داده ها را با پالس های زمان بندی محاسبه شده ارسال و دریافت کند.

DHT22 چگونه کار می کند؟

اگر از سنسور اصلی DHT22 استفاده می کنید، یک ترمیستور NTC و ماژول سنسور داخل آن خواهد بود، اما اکثر سنسورهایی که در بازار می توانید پیدا کنید، اکثرا قطعات غیر اصلی هستند و در داخل آن یک سنسور کوچک پیدا خواهید کرد که می توانید در تصویر زیر ببینید.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

DHT22 چگونه کار می کند؟

حسگر رطوبت از یک بستر نگهدارنده رطوبت تشکیل شده است که بین دو الکترود قرار گرفته است. هنگامی که آب را جذب می کند، مقاومت بین دو الکترود کاهش می یابد. تغییر مقاومت بین دو الکترود متناسب با رطوبت نسبی است. رطوبت نسبی بیشتر باعث کاهش مقاومت بین الکترودها می شود، در حالی که رطوبت نسبی کمتر باعث افزایش مقاومت بین الکترودها می شود. این تغییر مقاومت با ADC میکروکنترلر روی برد اندازه گیری می شود و رطوبت نسبی محاسبه می شود.

هر DHT22 به شدت در آزمایشگاه کالیبره شده است که به همین دلیل در اندازه گیری رطوبت بسیار دقیق است. ضرایب کالیبراسیون به عنوان برنامه در حافظه OTP ذخیره می شود که توسط فرآیند تشخیص سیگنال داخلی سنسور استفاده می شود.

مدار اتصال DHT22 به آردوینو

اکنون که کاملاً متوجه شده ایم که سنسور DHT22 چگونه کار می کند، می توانیم تمام سیم های مورد نیاز را به آردوینو متصل کرده و کدی را بنویسیم تا داده ها از سنسور خارج شود. تصویر زیر شماتیک مدار ارتباط ماژول سنسور DHT22 با آردوینو را نشان می دهد.

مدار اتصال DHT22 به آردوینو

اتصالات ساده هستند و فقط به سه سیم نیاز دارند. VCC و GND ماژول را به پایه های 5 ولت و GND آردوینو وصل کنید. سپس پین DATA را به پین دیجیتال 2 آردوینو وصل کنید. ما از طریق این پین با DHT22 ارتباط برقرار می کنیم.

کد آردوینو برای سنسور DHT22

کد کامل در انتهای مطلب در فایل دانلودی قرار داده شده است در اینجا قسمت های مهم کد را بررسی میکنیم.

حالا بیایید به کد راه اندازی سنسور DHT22 نگاه کنیم. برای این کار ابتدا کتابخانه حسگر DHT Adafruit و درایور سنسور یکپارچه Adafruit را از طریق library manager نصب کنید. سپس یک طرح خالی ایجاد کنید و کد انتهای این مقاله را در آن قرار دهید.

#include <Wire.h>
#include "DHT.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

در ابتدا، تمام کتابخانه‌های لازم را گنجانده‌ایم و نوع سنسور را DHT22 و پین سنسور را به‌عنوان پین دیجیتال 2 تعریف کردیم. و سپس یک نمونه برای کتابخانه DHT ایجاد کردیم.

#define DHTTYPE DHT22
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);
unsigned long delayTime;
uint8_t DHTPin = 2;
DHT dht(DHTPin, DHTTYPE);
float Temperature;
float Humidity;
float Temp_Fahrenheit;

بعد، تابع setup() خود را داریم، در تابع setup سریال مانیتور را برای اشکال زدایی مقداردهی اولیه می کنیم، DHT را مقداردهی اولیه می کنیم و نمایشگر را نیز مقداردهی اولیه می کنیم. همچنین اندازه متن را تنظیم کرده و رنگ نمایشگر را سفید می کنیم.

void setup() {
  Serial.begin(115200);
  pinMode(DHTPin, INPUT);
  dht.begin();
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(100);
  display.clearDisplay();
  display.display();
  display.setTextSize(1.75);
  display.setTextColor(WHITE);
}

بعد، تابع loop خود را داریم، در تابع loop رطوبت را می گیریم، دما را می گیریم و سپس دما را بر حسب سانتیگراد و فارنهایت می گیریم.

void loop(){
  Humidity = dht.readHumidity();
  // خواندن دما در حسب سانتی گراد
  Temperature = dht.readTemperature();
  // خواندن دما بر حسب فارنهایت
  Temp_Fahrenheit = dht.readTemperature(true);
  // بررسی میکنیم آیا داده ها سالم است
  if (isnan(Humidity) || isnan(Temperature) || isnan(Temp_Fahrenheit)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }
}

سپس داده ها را روی سریال مانیتور و نمایشگر OLED چاپ می کنیم

Serial.print(F("Humidity: "));
  Serial.print(Humidity);
  Serial.print(F("%  Temperature: "));
  Serial.print(Temperature);
  Serial.print(F("°C "));
  Serial.print(Temp_Fahrenheit);
  Serial.println(F("°F "));
  display.setCursor(0, 0);
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("Temperature: ");
  display.setTextSize(2);
  display.setCursor(0, 10);
  display.print(Temperature);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("C");
  display.setTextSize(1);
  display.setCursor(0, 35);
  display.print("Humidity: ");
  display.setTextSize(2);
  display.setCursor(0, 45);
  display.print(Humidity);
  display.print(" %");
  display.display();
  delay(1000);
}

موارد موجود در فایل : سورس کامل

5 (1 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

2 نظر

  1. اگر به جای Dht22 از dht11 استفاده کنیم لازم است که برنامه تغییر کنه؟

    1. سلام عزیز
      کد مربوط به DHT11 در مطالب دیگر سایت قرار گرفته. نیاز به تغییر جزئی در کد هست.

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *