Search Code

ใช้ DHT11, DHT22 ร่วมกับจอแสดงผล TM1637 และรีเลย์เพื่อควบคุมโหลดไฟฟ้ากระแสสลับ

ใช้ DHT11, DHT22 ร่วมกับจอแสดงผล TM1637 และรีเลย์เพื่อควบคุมโหลดไฟฟ้ากระแสสลับ

โปรเจกต์นี้สาธิตวิธีการสร้างระบบควบคุมอุณหภูมิโดยใช้ Arduino เซนเซอร์วัดอุณหภูมิและความชื้น DHT11/DHT22 จอแสดงผล TM1637 และรีเลย์เพื่อควบคุมโหลดไฟฟ้ากระแสสลับ การตั้งค่านี้มีความยืดหยุ่นสูงและสามารถปรับใช้กับการใช้งานต่างๆ ได้ ตัวอย่างเช่น คุณสามารถสร้าง:

DHT11 Module
DHT22 sensor with PCB-1
  • เทอร์โมสตัทอัจฉริยะสำหรับเรือนกระจกขนาดเล็ก ปรับฮีตเตอร์หรือพัดลมโดยอัตโนมัติตามค่าอุณหภูมิที่อ่านได้
  • ระบบตรวจสอบและควบคุมอุณหภูมิของของเหลวในกระบวนการทางเคมี
  • ระบบควบคุมอุณหภูมิอัตโนมัติสำหรับกรงสัตว์เลื้อยคลาน
  • ระบบเตือนภัยที่ทำงานตามอุณหภูมิ กระตุ้นการแจ้งเตือนเมื่อถึงเกณฑ์ที่กำหนด

ระบบใช้เซนเซอร์ DHT11 หรือ DHT22 เพื่อวัดอุณหภูมิและความชื้น (ในวิดีโอที่ 00:11) จอแสดงผล TM1637 แสดงอุณหภูมิปัจจุบัน (ในวิดีโอที่ 00:17) และรีเลย์จะสลับโหลดไฟฟ้ากระแสสลับ (เช่น หลอดไฟ พัดลม หรือฮีตเตอร์) เปิดหรือปิดตามการตั้งค่าอุณหภูมิที่กำหนดไว้ล่วงหน้า (ในวิดีโอที่ 00:23)

ฮาร์ดแวร์/อุปกรณ์

ในการสร้างโปรเจกต์นี้ คุณจะต้องมีอุปกรณ์ดังต่อไปนี้:

  • Arduino Uno (หรือบอร์ดที่เข้ากันได้)
  • เซนเซอร์วัดอุณหภูมิและความชื้น DHT11 หรือ DHT22 (ในวิดีโอที่ 00:11)
  • โมดูลจอแสดงผล TM1637 (ในวิดีโอที่ 00:17)
  • โมดูลรีเลย์ (ในวิดีโอที่ 00:19)
  • สายจัมเปอร์
  • เบรดบอร์ด
  • โหลดไฟฟ้ากระแสสลับ (เช่น หลอดไฟขนาดเล็กหรือพัดลม)

คู่มือการเดินสายไฟ

การเดินสายไฟตรงไปตรงมาแต่สำคัญต่อการทำงานของโปรเจกต์ โปรดดูวิดีโอเพื่อเป็นแนวทางภาพ

Wiring DHT11 DHT22 with TM1637 dispaly and relay
Wiring DHT11 DHT22 with TM1637 dispaly and relay

คำแนะนำการเดินสายไฟโดยละเอียดและแผนผังสามารถดูได้ในวิดีโอ (ในวิดีโอที่ 02:03 ถึง 05:18) โปรดใส่ใจเป็นพิเศษกับการเชื่อมต่อของเซนเซอร์ DHT (ในวิดีโอที่ 01:44) จอแสดงผล TM1637 (ในวิดีโอที่ 02:25) และโมดูลรีเลย์ (ในวิดีโอที่ 03:37)

คำอธิบายโค้ด

โค้ด Arduino ใช้ไลบรารีสองตัว: TM1637Display และไลบรารีเซนเซอร์ DHT คุณจะต้องติดตั้งไลบรารีเหล่านี้ใน Arduino IDE ส่วนที่สำคัญที่สุดที่สามารถกำหนดค่าได้ในโค้ดคือ:


// พินการเชื่อมต่อโมดูล (ดิจิทัลพิน)
#define CLK 2
#define DIO 3
// ระยะเวลา (เป็นมิลลิวินาที) ระหว่างการทดสอบ
#define TEST_DELAY   1000
// ****** สิ้นสุดโค้ดจอแสดงผล TM1637

#define DHTPIN 9     // ดิจิทัลพินที่เราเชื่อมต่อ
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
#define RELAY 7 // พินที่เชื่อมต่อกับรีเลย์

คำสั่ง #define ช่วยให้คุณสามารถเปลี่ยนการกำหนดพินสำหรับจอแสดงผล TM1637 (CLK และ DIO) เซนเซอร์ DHT (DHTPIN) และรีเลย์ (RELAY) ได้อย่างง่ายดายเพื่อให้ตรงกับการเดินสายไฟของคุณ DHTTYPE กำหนดว่าเซนเซอร์ DHT ตัวใดที่คุณใช้ (DHT11 หรือ DHT22) ตัวแปร TEST_DELAY ควบคุมเวลาระหว่างการอ่านค่า

ฟังก์ชัน getTemp() เป็นฟังก์ชันที่กำหนดเองที่ใช้ในการอ่านข้อมูลอุณหภูมิและความชื้นจากเซนเซอร์ DHT ฟังก์ชันนี้ช่วยให้คุณสามารถขอข้อมูลประเภทต่างๆ (เซลเซียส ฟาเรนไฮต์ ความชื้น ดัชนีความร้อน) โดยการส่งอาร์กิวเมนต์สตริง (ในวิดีโอที่ 09:01 ถึง 10:34) ตัวอย่างเช่น: getTemp("c") คืนค่าอุณหภูมิเป็นเซลเซียส และ getTemp("h") คืนค่าความชื้น


if(temp >50 )
 {
  digitalWrite(RELAY, LOW);
 }else{
  digitalWrite(RELAY, HIGH);
 }

ส่วนโค้ดนี้ควบคุมรีเลย์ตามอุณหภูมิ แก้ไขค่าเกณฑ์ (50 ในตัวอย่างนี้) เพื่อปรับจุดกระตุ้น (ในวิดีโอที่ 09:44 ถึง 10:11)

โปรเจกต์สด/การสาธิต

การสาธิตโปรเจกต์ทั้งหมดมีอยู่ในวิดีโอ (ในวิดีโอที่ 00:51 ถึง 01:07) วิดีโอแสดงระบบทำงานจริง แสดงอุณหภูมิบนจอแสดงผล TM1637 และควบคุมโหลดไฟฟ้ากระแสสลับตามค่าอุณหภูมิที่อ่านได้

บทต่างๆ

  • [00:06] บทนำและภาพรวมโปรเจกต์
  • [01:12] ความพร้อมใช้งานของโค้ดและแหล่งข้อมูลเพิ่มเติม
  • [01:44] การเดินสายไฟเซนเซอร์ DHT
  • [02:25] การเดินสายไฟจอแสดงผล TM1637
  • [02:50] การเดินสายไฟโหลดไฟฟ้ากระแสสลับและรีเลย์
  • [04:33] พินรีเลย์และการเชื่อมต่อไฟ
  • [05:29] การติดตั้งไลบรารี
  • [05:52] คำอธิบายโค้ด: ส่วน TM1637
  • [06:47] คำอธิบายโค้ด: ส่วน DHT
  • [07:50] คำอธิบายโค้ด: รีเลย์และการตั้งค่า
  • [08:26] คำอธิบายโค้ด: ลูปและการควบคุมอุณหภูมิ
  • [10:12] คำอธิบายฟังก์ชัน getTemp()

ภาพ

DHT11 Sensor
DHT11 Sensor
DHT11 Module
DHT11 Module
DHT11 Module
DHT11 Module
DHT22 sensor with PCB-1
DHT22 sensor with PCB-1
DHT22 sensor no PCB
DHT22 sensor no PCB
Wiring DHT11 DHT22 with TM1637 dispaly and relay
Wiring DHT11 DHT22 with TM1637 dispaly and relay
DHT22_red-6
DHT22_red-6
57-Arduino code for a DHT11 DHT22 temperature and humidity sensor with a TM1637 display.
ภาษา: C++
/*
 * Original code from TM1637 https://github.com/avishorp/TM1637
 * Original code and library for DHT22 https://github.com/adafruit/DHT-sensor-library
 * Watch the video for this code https://youtu.be/xD8wHXDzLkQ 
 * Other Arduino library and videos https://robojax.com
 */
 /*

 * Modified for Robojax video on January 10, 2018
 * by Ahmad Nejrabi, in Ajax, Ontario, Canada
 */
 
// ****** Start of TM1637 Display code 
#include <Arduino.h>
#include <TM1637Display.h>
// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3
// The amount of time (in milliseconds) between tests
#define TEST_DELAY   1000
TM1637Display display(CLK, DIO);
// ****** end of TM1637 Display code 

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
// updated by Ahmad for Robojax.com videos.
// on January 10, 2018 in Ajax, Ontario, Canada

// ****** Start of DHT code 
#include "DHT.h"
#define DHTPIN 9     // what digital pin we're connected to
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
// ********** end of DHT22 code

#define RELAY 7 // the pin connected to relay
void setup()
{
  Serial.begin(9600);
  Serial.println("DHT22 Robojax Test with Display");
  pinMode(RELAY,OUTPUT);// set RELAY pin as output

  dht.begin();  
}

void loop()
{
  delay(TEST_DELAY);// wait
  // **** TM1637 code start
  display.setBrightness(0x0f);// set brightness
  uint8_t data[] = { 0x0, 0x0, 0x0, 0x0 };// clear display values
  display.setSegments(data);//clear display
  // **** TM1637 code end
  

  // Robojax.com test video
  Serial.println(getTemp("c"));

  int temp = round(getTemp("c"));
  
  display.showNumberDec(temp, false, 3,1);
 if(temp >50 )
 {
  digitalWrite(RELAY, LOW);
 }else{
  digitalWrite(RELAY, HIGH);
 }


}// loop end


/*
 * getTemp(String req)
 * returns the temperature related parameters
 * req is string request
 * getTemp("c") will return temperature in Celsius
 * getTemp("hic") will return heat index in Celsius
 * getTemp("f") will return temperature in Fahrenheit
 * getTemp("hif") will return temperature in Fahrenheit
  * getTemp("h") will return humidity
 */
float getTemp(String req)
{

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return 0.0;
  }
  // Compute heat index in Kelvin 
  float k = t + 273.15;
  if(req =="c"){
    return t;//return Celsius
  }else if(req =="f"){
    return f;// return Fahrenheit
  }else if(req =="h"){
    return h;// return humidity
  }else if(req =="hif"){
    return hif;// return heat index in Fahrenheit
  }else if(req =="hic"){
    return hic;// return heat index in Celsius
  }else if(req =="k"){
    return k;// return temperature in Kelvin
  }else{
    return 0.000;// if no request found, return 0.000
  }
 
}

สิ่งที่คุณอาจต้องการ

แหล่งข้อมูลและเอกสารอ้างอิง

ไฟล์📁

ไลบรารี Arduino (zip)

ไฟล์ Fritzing

คู่มือผู้ใช้

ไฟล์อื่น ๆ