در این مطلب با ماژول KY-015 آشنا می شویم که از ترکیب دو سنسور رطوبت و دما استفاده گردیده است که باعث کاهش سایز مدار گردیده ولی از طرفی نقطه ضعف آن میزان نمونه برداری پایین از اندازه گیری است که فقط می توان هر 2 ثانیه، یک نتیجه جدید کسب کرد بنابراین بهتر است که برای بازه اندازه گیری های طولانی از این ماژول استفاده شود. این سنسور داده های اندازه گیری آنالوگ را ارسال نمی کند. بلکه داده های اندازه گیری شده به صورت دیجیتال منتقل می شوند. در صورتی که قصد خرید دارید روی لینک قیمت سنسور رطوبت و دما کلیک کنید.

مشخصات فنی ماژول دما و رطوبت KY-015

ماژول سنسور دما و رطوبت KY-015 از تراشه DHT11 و پروتکل ارتباطی تک سیم که رطوبت را در بازه 20-90 RH اندازه گیری می کند و یک مقاومت 1KΩ تشکیل شده است.

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

ky-015

پایه های سنسور DHT11

پایه های ماژول ky-015

اتصال پایه های ماژول در برد Arduino و Raspberry Pi در جدول های زیر آورده شده است:

ky-015

دیاگرام اتصالات سنسور دما و رطوبت

پایه های مختلف ماژول را مطابق جدول بالا و به صورت آنچه در تصویر زیر مشاهده می‌شود به برد آردوینو متصل کنید.

ky-015

کدهای آردوینو مربوط به ماژول دما و رطوبت 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()