Arduino Với DHT11 Khống Chế Nhiệt Độ Độ Ẩm Bật Tắt Thiết Bị

DHT11 Thumb

Xem thêm

Phần cứng cần thiết

LCD Keypad Pinout

LCD keypad Pinout

Kết nối với mạch Arduino

Sơ đồ kết nối
Sơ đồ kết nối

Thư viện

Để khởi chạy cảm biến của bạn, bạn sẽ cần cài đặt thư viện "DHT.h". Thư viện này có sẵn từ trình quản lý thư viện Arduino.

Để cài đặt thư viện, hãy di chuyển đến Sketch > Include Library > Manage Libraries... Tìm kiếm và cài đặt thư viện DHT sensor library.

Thư viện cảm biến nhiệt độ độ ẩm DHT

Code

#include <LiquidCrystal.h>
#include "DHT.h"
#include <EEPROM.h>

int tempT = 0, tempH = 20;
 
const int DHTPIN = 3;
const int DHTTYPE = DHT11;
const int Q1 = 12;
const int Q2 = 13;

const int pin_RS = 8;
const int pin_EN = 9;
const int pin_d4 = 4;
const int pin_d5 = 5;
const int pin_d6 = 6;
const int pin_d7 = 7;

byte degree[8] = {
  0B01110,
  0B01010,
  0B01110,
  0B00000,
  0B00000,
  0B00000,
  0B00000,
  0B00000
};

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(pin_RS, pin_EN, pin_d4, pin_d5, pin_d6, pin_d7);

int page = 0, value;
int cd = 0;


char checkKeyPad()
{
  int x;
  x = analogRead(0);
  if (x < 60)
  {
    return 'r';
  }
  else if (x < 200)
  {
    return 'u';
  }
  else if (x < 400)
  {
    return 'd';
  }
  else if (x < 600)
  {
    return 'l';
  }
  else if (x < 800)
  {
    return 's';
  }
}

void button()
{
  if (checkKeyPad() == 'l')
  {
    page --;
    if (page > 3) page = 0;
    if (page < 0) page = 3;
    lcd.clear();
    while (checkKeyPad() == 'l');
  }
  if (checkKeyPad() == 'r')
  {
    page ++;
    if (page > 3) page = 0;
    if (page < 0) page = 3;
    lcd.clear();
    while (checkKeyPad() == 'r');
  }
}

void setup() {
  lcd.createChar(1, degree);
  pinMode(Q1, OUTPUT);
  pinMode(Q2, OUTPUT);
  lcd.begin(16, 2);
  Serial.begin(9600);
  dht.begin();
  EEPROM.write(1, tempT);
  delay(5);
}

void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  tempT = EEPROM.read(5);
  tempH = EEPROM.read(6);

  if (isnan(t) || isnan(h)) {
    Serial.println("DHT sensor error!");
    lcd.setCursor(0, 0);
    lcd.print("DHT sensor error!");
    lcd.setCursor(0, 1);
    lcd.print("                ");
    lcd.clear();
    return;
  }
  else {
     switch (page)
    {
      case 0:
        {
          lcd.setCursor(0, 0);
          lcd.print("    Thegioiic   ");
          lcd.setCursor(0, 1);
          lcd.print("<");
          lcd.setCursor(6, 1);
          lcd.print("DHT11");
          lcd.setCursor(15, 1);
          lcd.print(">");
          button();
          break;
        }
      case 1:
        {
          lcd.setCursor(0, 1);
          lcd.print("<");
          lcd.setCursor(15, 1);
          lcd.print(">");
          lcd.setCursor(2, 0);
          lcd.print(" T: ");
          lcd.print(t);
          lcd.write(1);
          lcd.print("C");

          lcd.setCursor(2, 1);
          lcd.print(" H: ");
          lcd.print(h);
          lcd.print(" %");
          button();
          delay(500);
          break;
        }
      case 2:
        {
          switch (cd)
          {
            case 0:
              {
                lcd.setCursor(0, 1);
                lcd.print("<");
                lcd.setCursor(15, 1);
                lcd.print(">");
                lcd.setCursor(5, 0);
                lcd.print("Set T,H");
                lcd.setCursor(1, 1);

                lcd.print("T = ");
                lcd.print(tempT);
                lcd.setCursor(9, 1);
                lcd.print("H = ");
                lcd.print(tempH);

                if (checkKeyPad() == 's')
                {
                  cd++;
                  if (cd > 2)cd = 0;
                  while (checkKeyPad() == 's');
                }
                button();
                break;
              }

            case 1:
              {
                setTemp();
                if (checkKeyPad() == 'u')
                {
                  tempT++;
                  if (tempT > 50)tempT = 0;
                  while (checkKeyPad() == 'u');
                }
                if (checkKeyPad() == 'd')
                {
                  tempT--;
                  if (tempT < 0)tempT = 50;
                  while (checkKeyPad() == 'd');
                }
                if (checkKeyPad() == 's')
                {
                  cd++;
                  if (cd > 2)cd = 0;
                  while (checkKeyPad() == 's');
                }
                EEPROM.write(5, tempT);
                delay(5);
                break;
              }
            case 2:
              {
                setHumi();
                if (checkKeyPad() == 'u')
                {
                  tempH++;
                  if (tempH > 95)tempH = 20;
                  while (checkKeyPad() == 'u');
                }

                if (checkKeyPad() == 'd')
                {
                  tempH--;
                  if (tempH < 20)tempH = 95;
                  while (checkKeyPad() == 'd');
                }
                if (checkKeyPad() == 's')
                {
                  cd++;
                  if (cd > 2)cd = 0;
                  while (checkKeyPad() == 's');
                }
                EEPROM.write(6, tempH);
                delay(5);
                break;
              }
          }
          break;
        }
      case 3:
        {
          lcd.setCursor(0, 0);
          lcd.print("T:");
          lcd.print(t);
          lcd.write(1);
          lcd.print("C");
          lcd.setCursor(0, 1);
          lcd.print("H:");
          lcd.print(h);
          lcd.print(" %");

          if (t > tempT) {
            lcd.setCursor(10, 0);
            lcd.print("Q1: CL");
            digitalWrite(Q1,LOW);
          } else {
            lcd.setCursor(10, 0);
            lcd.print("Q1: OP");
            digitalWrite(Q1,HIGH);
          }
          if (h > tempH) {
            lcd.setCursor(10, 1);
            lcd.print("Q2: CL");
            digitalWrite(Q2,LOW);
          } else {
            lcd.setCursor(10, 1);
            lcd.print("Q2: OP");
            digitalWrite(Q2,HIGH);
          }
          button();
          break;
        }
    }
  }
}

void setTemp()
{
  lcd.setCursor(5, 0);
  lcd.print("Set T,H");
  lcd.setCursor(1, 1);
  lcd.print("T = ");
  lcd.print(tempT);

  delay(150);

  lcd.setCursor(5, 1);
  lcd.print("  ");
  lcd.setCursor(9, 1);
  lcd.print("H = ");
  lcd.print(tempH);

  delay(150);
}


void setHumi()
{
  lcd.setCursor(5, 0);
  lcd.print("Set T,H");
  lcd.setCursor(9, 1);
  lcd.print("H = ");
  lcd.print(tempH);
  lcd.setCursor(1, 1);
  lcd.print("T = ");
  lcd.print(tempT);

  delay(150);

  lcd.setCursor(13, 1);
  lcd.print("  ");

  delay(150);
}

Video:

cam bien nhiet do do am dht11,bat tat thiet bi, tlc47 truong cong ly, trương công lý

Nhận xét

Mới hơn Cũ hơn