Search Code

Używając DHT11, DHT22 z wyświetlaczem TM1637 i przekaźnikiem do sterowania obciążeniem AC

Używając DHT11, DHT22 z wyświetlaczem TM1637 i przekaźnikiem do sterowania obciążeniem AC

Ten projekt pokazuje, jak zbudować system regulacji temperatury z użyciem Arduino, czujnika temperatury i wilgotności DHT11/DHT22, wyświetlacza TM1637 oraz przekaźnika do sterowania obciążeniem AC. To rozwiązanie jest niezwykle wszechstronne i można je dostosować do różnych zastosowań. Na przykład możesz zbudować:

DHT11 Module
DHT22 sensor with PCB-1
  • Inteligentny termostat do małej szklarni, automatycznie regulujący grzejnik lub wentylator na podstawie odczytów temperatury.
  • System do monitorowania i kontroli temperatury cieczy w procesie chemicznym.
  • Automatyczny system kontroli temperatury dla terrarium z gadami.
  • System alarmowy aktywowany temperaturą, wyzwalający alert po przekroczeniu określonego progu.

System wykorzystuje czujnik DHT11 lub DHT22 do pomiaru temperatury i wilgotności (na filmie w 00:11). Wyświetlacz TM1637 pokazuje aktualną temperaturę (na filmie w 00:17), a przekaźnik włącza lub wyłącza obciążenie AC (takie jak światło, wentylator lub grzejnik) na podstawie wcześniej zdefiniowanych ustawień temperatury (na filmie w 00:23).

Sprzęt/Komponenty

Aby zbudować ten projekt, będziesz potrzebować następujących komponentów:

  • Arduino Uno (lub kompatybilna płyta)
  • Czujnik temperatury i wilgotności DHT11 lub DHT22 (na filmie w 00:11)
  • Moduł wyświetlacza TM1637 (na filmie w 00:17)
  • Moduł przekaźnika (na filmie w 00:19)
  • Przewody połączeniowe
  • Płytka stykowa
  • Obciążenie AC (np. mała żarówka lub wentylator)

Instrukcja podłączenia

Podłączenie jest proste, ale kluczowe dla działania projektu. Zapoznaj się z filmem, aby uzyskać wizualny przewodnik.

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

Szczegółowe instrukcje podłączenia i schematy można znaleźć na filmie (na filmie od 02:03 do 05:18). Zwróć szczególną uwagę na połączenia czujnika DHT (na filmie w 01:44), wyświetlacza TM1637 (na filmie w 02:25) i modułu przekaźnika (na filmie w 03:37).

Wyjaśnienie kodu

Kod Arduino używa dwóch bibliotek: TM1637Display i biblioteki czujnika DHT. Musisz zainstalować te biblioteki w Arduino IDE. Najważniejsze konfigurowalne części kodu to:


// Piny połączeń modułu (piny cyfrowe)
#define CLK 2
#define DIO 3
// Czas (w milisekundach) między testami
#define TEST_DELAY   1000
// ****** koniec kodu wyświetlacza TM1637

#define DHTPIN 9     // do którego pinu cyfrowego jesteśmy podłączeni
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
#define RELAY 7 // pin podłączony do przekaźnika

Instrukcje #define pozwalają łatwo zmienić przypisania pinów dla wyświetlacza TM1637 (CLK i DIO), czujnika DHT (DHTPIN) i przekaźnika (RELAY), aby dopasować je do Twojego podłączenia. DHTTYPE określa, którego czujnika DHT używasz (DHT11 lub DHT22). Zmienna TEST_DELAY kontroluje czas między odczytami.

Funkcja getTemp() to niestandardowa funkcja używana do odczytu danych temperatury i wilgotności z czujnika DHT. Umożliwia żądanie różnych typów danych (Celsjusz, Fahrenheit, wilgotność, indeks cieplny) poprzez przekazanie argumentu tekstowego (na filmie od 09:01 do 10:34). Na przykład: getTemp("c") zwraca temperaturę w stopniach Celsjusza, a getTemp("h") zwraca wilgotność.


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

Ta sekcja kodu steruje przekaźnikiem na podstawie temperatury. Zmodyfikuj wartość progową (50 w tym przykładzie), aby dostosować punkt wyzwalania (na filmie od 09:44 do 10:11).

Projekt na żywo/Demonstracja

Pełna demonstracja projektu jest dostępna na filmie (na filmie od 00:51 do 01:07). Film pokazuje system w działaniu, wyświetlający temperaturę na wyświetlaczu TM1637 i sterujący obciążeniem AC na podstawie odczytów temperatury.

Rozdziały

  • [00:06] Wprowadzenie i przegląd projektu
  • [01:12] Dostępność kodu i dodatkowe zasoby
  • [01:44] Podłączenie czujnika DHT
  • [02:25] Podłączenie wyświetlacza TM1637
  • [02:50] Podłączenie obciążenia AC i przekaźnika
  • [04:33] Pin przekaźnika i połączenia zasilania
  • [05:29] Instalacja bibliotek
  • [05:52] Wyjaśnienie kodu: sekcja TM1637
  • [06:47] Wyjaśnienie kodu: sekcja DHT
  • [07:50] Wyjaśnienie kodu: przekaźnik i konfiguracja
  • [08:26] Wyjaśnienie kodu: pętla i kontrola temperatury
  • [10:12] Wyjaśnienie funkcji getTemp()

Obrazy

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.
Język: 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
  }
 
}

Rzeczy, których możesz potrzebować

Zasoby i odniesienia

Pliki📁

Biblioteki Arduino (zip)

Plik Fritzing

Instrukcja obsługi

Inne pliki