در این مطلب با ماژول KY-015 آشنا می شویم که از ترکیب دو سنسور رطوبت و دما استفاده گردیده است که باعث کاهش سایز مدار گردیده ولی از طرفی نقطه ضعف آن میزان نمونه برداری پایین از اندازه گیری است که فقط می توان هر 2 ثانیه، یک نتیجه جدید کسب کرد بنابراین بهتر است که برای بازه اندازه گیری های طولانی از این ماژول استفاده شود. این سنسور داده های اندازه گیری آنالوگ را ارسال نمی کند. بلکه داده های اندازه گیری شده به صورت دیجیتال منتقل می شوند. در صورتی که قصد خرید دارید روی لینک قیمت سنسور رطوبت و دما کلیک کنید.
فهرست مطالب
مشخصات فنی ماژول دما و رطوبت KY-015
ماژول سنسور دما و رطوبت KY-015 از تراشه DHT11 و پروتکل ارتباطی تک سیم که رطوبت را در بازه 20-90 RH اندازه گیری می کند و یک مقاومت 1KΩ تشکیل شده است.
تراشه DHT11 برای تعیین شرایط محیط از یک ترمیستور داخلی و یک سنسور رطوبت خازنی استفاده می کند، یک تراشه داخلی وظیفه تبدیل اطلاعات خوانده شده به یک سیگنال دیجیتال را بر عهده دارد. مشخصات در جدول زیر آمده است:
پایه های سنسور DHT11
اتصال پایه های ماژول در برد Arduino و Raspberry Pi در جدول های زیر آورده شده است:
دیاگرام اتصالات سنسور دما و رطوبت
پایه های مختلف ماژول را مطابق جدول بالا و به صورت آنچه در تصویر زیر مشاهده میشود به برد آردوینو متصل کنید.
کدهای آردوینو مربوط به ماژول دما و رطوبت KY-015 و سنسور DHT11
کد زیر از پین 8 در Arduino برای ارسال و دریافت اطلاعات از سنسور KY-015 استفاده می کند. داده های دما و رطوبت بیت بیت خوانده می شود و به عنوان آرایه ای از بایت ها برگردانده می شود.
int DHpin = 8; // input/output pin byte dat[5]; byte read_data() { byte i = 0; byte result = 0; for (i = 0; i < 8; i++) { while (digitalRead(DHpin) == LOW); // wait 50us delayMicroseconds(30); //The duration of the high level is judged to determine whether the data is '0' or '1' if (digitalRead(DHpin) == HIGH) result |= (1 << (8 - i)); //High in the former, low in the post while (digitalRead(DHpin) == HIGH); //Data '1', waiting for the next bit of reception } return result; } void start_test() { digitalWrite(DHpin, LOW); //Pull down the bus to send the start signal delay(30); //The delay is greater than 18 ms so that DHT 11 can detect the start signal digitalWrite(DHpin, HIGH); delayMicroseconds(40); //Wait for DHT11 to respond pinMode(DHpin, INPUT); while(digitalRead(DHpin) == HIGH); delayMicroseconds(80); //The DHT11 responds by pulling the bus low for 80us; if(digitalRead(DHpin) == LOW) delayMicroseconds(80); //DHT11 pulled up after the bus 80us to start sending data; for(int i = 0; i < 5; i++) //Receiving temperature and humidity data, check bits are not considered; dat[i] = read_data(); pinMode(DHpin, OUTPUT); digitalWrite(DHpin, HIGH); //After the completion of a release of data bus, waiting for the host to start the next signal } void setup() { Serial.begin(9600); pinMode(DHpin, OUTPUT); } void loop() { start_test(); Serial.print("Humdity = "); Serial.print(dat[0], DEC); //Displays the integer bits of humidity; Serial.print('.'); Serial.print(dat[1], DEC); //Displays the decimal places of the humidity; Serial.println('%'); Serial.print("Temperature = "); Serial.print(dat[2], DEC); //Displays the integer bits of temperature; Serial.print('.'); Serial.print(dat[3], DEC); //Displays the decimal places of the temperature; Serial.println('C'); byte checksum = dat[0] + dat[1] + dat[2] + dat[3]; if (dat[4] != checksum) Serial.println("-- Checksum Error!"); else Serial.println("-- OK"); delay(1000); }
کدهای رزبری پای مربوط به ماژول دما و رطوبت KY-015 و سنسور DHT11
کد رزبری پای زیر برای ارسال و دریافت اطلاعات از سنسور KY-015 استفاده می کند.
#!/usr/bin/python # coding=utf-8 # Needed modules will be imported import RPi.GPIO as GPIO import Adafruit_DHT import time # The break of 2 seconds will be configured here sleeptime = 2 # Sensor should be set to Adafruit_DHT.DHT11, # Adafruit_DHT.DHT22, or Adafruit_DHT.AM2302. DHTSensor = Adafruit_DHT.DHT11 # The pin which is connected with the sensor will be declared here GPIO_Pin = 23 print('KY-015 sensortest - temperature and humidity') try: while(1): # Measurement will be started and the result will be written into the variables humid, temper = Adafruit_DHT.read_retry(DHTSensor, GPIO_Pin) print("-----------------------------------------------------------------") if humid is not None and temper is not None: # The result will be shown at the console print('temperature = {0:0.1f}°C | rel. humidity = {1:0.1f}%'.format(temper, humid)) # Because of the linux OS, the Raspberry Pi has problems with realtime measurements. # It is possible that, because of timing problems, the communication fails. # In that case, an error message will be displayed - the result should be shown at the next try. else: print('Error while reading - please wait for the next try!') print("-----------------------------------------------------------------") print("") time.sleep(sleeptime) # Scavenging work after the end of the program except KeyboardInterrupt: GPIO.cleanup()