سنسور دما رطوبت DHT11
ماژول دما و رطوبت DHT11 از سنسورهای پرکاربرد جهت تشخیص دما میباشد. سنسور DHT11 کالیبره شده و دارای خروجی دیجیتال است. محدوده اندازه گیری رطوبت بین ۲۰ تا ۹۰% RH و محدودهی دما از ۰ تا ۵۰ درجه سانتی گراد میباشد. ولتاژ کاری ماژول DHT بین ۳٫۳ تا ۵ ولت DC است. فاصله انتقال سیگنال در ماژول DHT11 تا ۲۰ متر میباشد. ماژول دما و رطوبت DHT11 بسیار مقرون به صرفه، دارای کیفیت عالی و واکنش سریع نسبت به تغییر دمای محیط است. ماژول DHT11 به ترتیب دارای ۳ پایه GND, VCC, Signal میباشد. سنسور دما و رطوبت DHT11 سنسوری ارزان قیمت جهت اندازه گیری دما و رطوبت هوا است. اندازه، مصرف کم انرژی آن را به یکی از بهترین گزینهها جهت استفاده در پروژههای مختلف، تبدیل شده است. با توجه به خروجی دیجیتال این سنسور، به راحتی می تواند به pyboard و یا سایر میکروکنترلر ها متصل گردد. سنسور DHT11 یک سنسور دیجیتال دما و رطوبت است که میتواند دما و رطوبت محیط را اندازه گیری کند. این سنسور دارای یک سیم دیجیتال است که به طور مستقیم به میکروکنترلر متصل میشود و نیازی به تبدیل آنالوگ به دیجیتال نیست.
۱. کنترل دمای داخلی و رطوبت در سیستمهای خنک کننده هوا و گرمایشی
۲. کنترل دمای آب و رطوبت در گلخانه ها و سیستم های آبیاری
۳. کنترل دما و رطوبت در سیستمهای خودرویی
۴. کنترل دما و رطوبت در سیستم های تهویه مطبوع
۵. کنترل دما و رطوبت در سیستم های سرمایشی و گرمایشی
پایه های سنسور دما رطوبت DHT11
سنسور DHT11 دارای سه پایه می باشد.
- VCC: ولتاژ تغذیه 3 تا 5 ولت
- Data: پین داده
- GND: زمین (GND)
راه اندازی سنسور DHT11 با برد آردوینو
جهت راه اندازی سنسور دما رطوبت DHT11 با آردوینو بایستی در ابتدا کتابخانه را نصب کنید. برای نصب نرم افزار از منو آردوینو بر روی Sketch / Include libraries کلیک کرده و سپس Manage libraries را انتخاب کنید. در صفحه ی باز شده برای یافتن کتابخانه عبارت dht را فیلتر کنید. پس از نصب کتابخانه کد را کپی و اجرا کنید.
#include <DHT.h>
#define DHTPIN 2 // پین داده DHT11 به پین دیجیتال 2 متصل میشود
#define DHTTYPE DHT11 // انتخاب نوع سنسور (اینجا DHT11)
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
delay(2000); // تاخیر 2 ثانیه برای خواندن دما و رطوبت
float humidity = dht.readHumidity(); // خواندن رطوبت
float temperature = dht.readTemperature(); // خواندن دما به درجه سانتیگراد
// نمایش دما و رطوبت در کنسول سریال
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print("% Temperature: ");
Serial.print(temperature);
Serial.println("C");
}
راه اندازی سنسور DHT11 با میکروپایتون و ESP32
برای راه اندازی سنسور دما رطوبت DHT11 از میکروپایتون میتوانیم استفاده کنیم. در ادامه نمونه کد میکروپایتون با برد وای فای ESP32 قرار گرفته شده است که برای راه اندازی از نرم افزار Thonny IDE استفاده شده است.
import machine
import dht
# Define the GPIO pin number that the DHT11 sensor is connected to
dht_pin = 4
# Create a DHT object with the specified GPIO pin number
d = dht.DHT11(machine.Pin(dht_pin))
# Call the "measure" method of the DHT object to read the temperature and humidity values from the sensor
d.measure()
temperature = d.temperature()
humidity = d.humidity()
# Print the temperature and humidity values
print("Temperature: {} C".format(temperature))
print("Humidity: {} %".format(humidity))
راه اندازی سنسور DHT11 با میکروپایتون و PICO RP2040
برای انجام اتصالات فقط به سه پایه نیاز داریم. پایه دیتا OUT، پایه تغذیه VCC و پایه GND که در Pinout رزبری پای پیکو مشخص است که هر پایه میتوانید چه ماهیتی داشته باشد. در اجرای این پروژه به صورت دلخواه برای اتصال پایه دیتا OUT از هر کدام از پایه های GP که با رنگ سبز مشخص شده است میتوانید استفاده کنید ( در این پروژه از پایه GP16 استفاده شده است) سپس پایه تغذیه VCC را ۳٫۳ ولت و یکی از پایه های GND را انتخاب کنید. در قدم اول دو روش برای فراخوانی کتابخانه و معرفی آن به نرم افزار THONNY وجود دارد. یکی از طریق مسیر View/ Files که در در ستون سمت چپ در ابتدا فایل کتابخانه دانلودی را وارد میکنید. سپس در منو پایین Raspberry Pi PICO کتابخانه را اضافه ADD میکنید. روش دوم اضافه کردن دستی کتابخانه به برنامه است. به این طریق که فایل کتابخانه را در یک تب جدید در نرم افزار وارد کرده و با نام خودش در برد رزبری پای پیکو ذخیره میکنید. در ابتدا کتابخانه را وارد نرم افزار کنید.
import array
import micropython
import utime
from machine import Pin
from micropython import const
class InvalidChecksum(Exception):
pass
class InvalidPulseCount(Exception):
pass
MAX_UNCHANGED = const(100)
MIN_INTERVAL_US = const(200000)
HIGH_LEVEL = const(50)
EXPECTED_PULSES = const(84)
class DHT11:
_temperature: float
_humidity: float
def __init__(self, pin):
self._pin = pin
self._last_measure = utime.ticks_us()
self._temperature = -1
self._humidity = -1
def measure(self):
current_ticks = utime.ticks_us()
if utime.ticks_diff(current_ticks, self._last_measure) < MIN_INTERVAL_US and (
self._temperature > -1 or self._humidity > -1
):
# Less than a second since last read, which is too soon according
# to the datasheet
return
self._send_init_signal()
pulses = self._capture_pulses()
buffer = self._convert_pulses_to_buffer(pulses)
self._verify_checksum(buffer)
self._humidity = buffer[0] + buffer[1] / 10
self._temperature = buffer[2] + buffer[3] / 10
self._last_measure = utime.ticks_us()
@property
def humidity(self):
self.measure()
return self._humidity
@property
def temperature(self):
self.measure()
return self._temperature
def _send_init_signal(self):
self._pin.init(Pin.OUT, Pin.PULL_DOWN)
self._pin.value(1)
utime.sleep_ms(50)
self._pin.value(0)
utime.sleep_ms(18)
@micropython.native
def _capture_pulses(self):
pin = self._pin
pin.init(Pin.IN, Pin.PULL_UP)
val = 1
idx = 0
transitions = bytearray(EXPECTED_PULSES)
unchanged = 0
timestamp = utime.ticks_us()
while unchanged < MAX_UNCHANGED:
if val != pin.value():
if idx >= EXPECTED_PULSES:
raise InvalidPulseCount(
"Got more than {} pulses".format(EXPECTED_PULSES)
)
now = utime.ticks_us()
transitions[idx] = now - timestamp
timestamp = now
idx += 1
val = 1 - val
unchanged = 0
else:
unchanged += 1
pin.init(Pin.OUT, Pin.PULL_DOWN)
if idx != EXPECTED_PULSES:
raise InvalidPulseCount(
"Expected {} but got {} pulses".format(EXPECTED_PULSES, idx)
)
return transitions[4:]
def _convert_pulses_to_buffer(self, pulses):
"""Convert a list of 80 pulses into a 5 byte buffer
The resulting 5 bytes in the buffer will be:
۰: Integral relative humidity data
۱: Decimal relative humidity data
۲: Integral temperature data
۳: Decimal temperature data
۴: Checksum
"""
# Convert the pulses to 40 bits
binary = 0
for idx in range(0, len(pulses), 2):
binary = binary << 1 | int(pulses[idx] > HIGH_LEVEL)
# Split into 5 bytes
buffer = array.array("B")
for shift in range(4, -1, -1):
buffer.append(binary >> shift * 8 & 0xFF)
return buffer
def _verify_checksum(self, buffer):
# Calculate checksum
checksum = 0
for buf in buffer[0:4]:
checksum += buf
if checksum & 0xFF != buffer[4]:
raise InvalidChecksum()
تا این مرحله فقط کتابخانه dht را در برد رزبری پای پیکو با نام dht.py ذخیره کردیم. حالا میتوانیم یک کد راحت برای نمایش دما رطوبت در کنسول نرم افزار نمایش دهیم. یک تب جدید باز کنید. کد زیر را کپی و انتقال دهید. برنامه را با نام دلخواه dht11test.py در سیستم ذخیره کنید.
from machine import Pin
import time
from dht import DHT11, InvalidChecksum
sensor = DHT11(Pin(16, Pin.OUT, Pin.PULL_DOWN))
while True:
temp = sensor.temperature
humidity = sensor.humidity
print("Temperature: {}°C Humidity: {:.0f}% ".format(temp, humidity))
time.sleep(2)
مشخصات
- کاربری
- مناسب برای استفاده شخصی
- نوع ماژول
- دماسنج - Thermometer
- سطح تجربه مورد نیاز
- پیشرفته
- ولتاژ مورد نياز
- 3.3 ولت یا 5 ولت DC
- محدوده دمایی
- 0 تا 50 درجه سانتی گراد برای دما
- دمای نگهداری
- 20- تا 85+ درجه سانتی گراد
- ظرفیت
- سنجش دما و رطوبت
- رنگ بندی
- آبی
- تعداد پایه ها
- 3 پایه
- اقلام همراه محصول
- ندارد
- کشور سازنده
- چین
- سنسور
- DHT11
- دقت اندازه گیری
- + - 2 درجه سانتی گراد
- محدوده اندازه گیری
- محدود اندازه گیری رطوبت 20 تا 90%
- سایر توضیحات
- قابلیت اندازه گیری دما و رطوبت
- سایر قابلیتها
- رنج تست رطوبت : 0~100%RH
- کد تجاری ماژول و برد
- DHT
- نوع سنسور
- دما رطوبت
این برد یک ترموستات دمایی است. برای درخواست مورد نظرتان قابل استفاده است. ولتاژ AC همان برق 220 است.
اتصال 25 سنسور DHT به یک Arduino به طور همزمان کار چالشبرانگیزی است. این کار به دلایلی از جمله محدودیتهای منابع میتواند مشکل باشد. اما در صورتی که نیاز به انجام این کار دارید، میتوانید از چندین روش برای انجام آن استفاده کنید. برای اتصال تعداد زیادی از سنسور DHT به Arduino، میتوانید از مبدلهای I2C مانند "MCP23017" یا "PCF8574" استفاده کنید. این مبدلها به شما این امکان را میدهند که بیش از 25 سنسور DHT را به Arduino وصل کنید.ابتدا مبدل I2C را به Arduino وصل کنید و سپس تعداد زیادی از سنسورهای DHT را به مبدل I2C متصل کنید. سپس با استفاده از کتابخانههای مناسب برای مبدل I2C و سنسور DHT، اطلاعات حسگرها را بخوانید.
از میکروکنترلرها میتوانید برای مدیریت تعداد زیادی از سنسورهای DHT استفاده کنید. این میکروکنترلرها به شما امکان مدیریت و کنترل بیشتری را ارائه میدهند. به عنوان مثال، میتوانید از Arduinoها، Raspberry Piها یا میکروکنترلرهای ARM مانند STM32 استفاده کنید.در این روش، شما باید زمان خواندن اطلاعات از هر سنسور را تقسیم کنید. به عنوان مثال، هر 1 ثانیه از 25 سنسور DHT به ترتیب خوانده شود. این روش نیازمند برنامهنویسی دقیق و مدیریت زمانی دقیق است.
امکان راه اندازی چند سنسور DHT با ESP8266 با استفاده از MicroPython وجود دارد. سنسورهای DHT با پروتکل دیجیتال و از طریق پایههای GPIO قابل اتصال به میکروکنترلرها هستند.
برای ساخت یک سیستم کنترل دما با برد میکروکنترلر ESP32، به موارد زیر نیاز دارید:
یک برد میکروکنترلر ESP32
یک سنسور دما مثل DHT DS18B20
یک المان سرد کننده
با استفاده از کتابخانه DHT.h، میتوانید از سنسور دما برای خواندن دمای محیط استفاده کنید. سپس، میتوانید از این دما برای کنترل المان گرمایشی یا سرمایشی استفاده کنید.
در خصوص برنامه نویسی از کتابخانه DHT و در صورت نیاز کتابخانه وای فای برای ارسال دادهها به پلتفرم IoT باید استفاده کنید.