Search Code

Koristeći DHT11, DHT22 sa TM1637 displejom i relejem za kontrolu AC opterećenja

Koristeći DHT11, DHT22 sa TM1637 displejom i relejem za kontrolu AC opterećenja

Ovaj projekat demonstrira kako napraviti sistem s kontrolom temperature koristeći Arduino, DHT11/DHT22 senzor temperature i vlažnosti, TM1637 displej i relej za upravljanje AC opterećenjem. Ova postavka je izuzetno svestrana i može se prilagoditi različitim primjenama. Na primjer, možete napraviti:

DHT11 Module
DHT22 sensor with PCB-1
  • Pametni termostat za mali staklenik, koji automatski podešava grijač ili ventilator na osnovu očitanja temperature.
  • Sistem za praćenje i kontrolu temperature tečnosti u hemijskom procesu.
  • Automatizovani sistem kontrole temperature za terarijum s gmizavcima.
  • Sistem alarma aktiviranog temperaturom, koji pokreće upozorenje kada se dostigne određeni prag.

Sistem koristi DHT11 ili DHT22 senzor za mjerenje temperature i vlažnosti (u videu na 00:11). TM1637 displej prikazuje trenutnu temperaturu (u videu na 00:17), a relej uključuje ili isključuje AC opterećenje (poput sijalice, ventilatora ili grijača) na osnovu unaprijed definisanih postavki temperature (u videu na 00:23).

Hardver/Komponente

Za izradu ovog projekta trebat će vam sljedeće komponente:

  • Arduino Uno (ili kompatibilna ploča)
  • DHT11 ili DHT22 senzor temperature i vlažnosti (u videu na 00:11)
  • TM1637 displej modul (u videu na 00:17)
  • Relej modul (u videu na 00:19)
  • Konektorski kablovi
  • Breadboard
  • AC opterećenje (npr. mala sijalica ili ventilator)

Vodič za povezivanje

Povezivanje je jednostavno, ali ključno za funkcionalnost projekta. Pogledajte video za vizuelni vodič.

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

Detaljna uputstva za povezivanje i dijagrami mogu se pronaći u videu (u videu od 02:03 do 05:18). Obratite posebnu pažnju na veze za DHT senzor (u videu na 01:44), TM1637 displej (u videu na 02:25) i relej modul (u videu na 03:37).

Objašnjenje koda

Arduino kod koristi dvije biblioteke: TM1637Display i DHT senzor biblioteku. Ove biblioteke morate instalirati u Arduino IDE. Najvažniji dijelovi koda koji se mogu konfigurisati su:


// Pinovi za povezivanje modula (digitalni pinovi)
#define CLK 2
#define DIO 3
// Vrijeme (u milisekundama) između testova
#define TEST_DELAY   1000
// ****** kraj TM1637 displej koda 

#define DHTPIN 9     // na koji digitalni pin smo povezani
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
#define RELAY 7 // pin povezan na relej

#define naredbe vam omogućavaju da lako promijenite dodjele pinova za TM1637 displej (CLK i DIO), DHT senzor (DHTPIN) i relej (RELAY) kako biste ih uskladili sa svojim povezivanjem. DHTTYPE definiše koji DHT senzor koristite (DHT11 ili DHT22). TEST_DELAY varijabla kontroliše vrijeme između očitavanja.

getTemp() funkcija je prilagođena funkcija koja se koristi za čitanje podataka o temperaturi i vlažnosti s DHT senzora. Omogućava vam da zatražite različite tipove podataka (Celzijus, Fahrenheit, vlažnost, toplotni indeks) prosljeđivanjem string argumenta (u videu od 09:01 do 10:34). Na primjer: getTemp("c") vraća temperaturu u Celzijusima, a getTemp("h") vraća vlažnost.


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

Ovaj dio koda kontroliše relej na osnovu temperature. Promijenite graničnu vrijednost (50 u ovom primjeru) da biste podesili tačku okidanja (u videu od 09:44 do 10:11).

Živi projekat/Demonstracija

Potpuna demonstracija projekta dostupna je u videu (u videu od 00:51 do 01:07). Video prikazuje sistem u radu, s prikazom temperature na TM1637 displeju i kontrolom AC opterećenja na osnovu očitanja temperature.

Poglavlja

  • [00:06] Uvod i pregled projekta
  • [01:12] Dostupnost koda i dodatni resursi
  • [01:44] Povezivanje DHT senzora
  • [02:25] Povezivanje TM1637 displeja
  • [02:50] Povezivanje AC opterećenja i releja
  • [04:33] Relej pin i priključci napajanja
  • [05:29] Instalacija biblioteka
  • [05:52] Objašnjenje koda: TM1637 sekcija
  • [06:47] Objašnjenje koda: DHT sekcija
  • [07:50] Objašnjenje koda: Relej i podešavanje
  • [08:26] Objašnjenje koda: Petlja i kontrola temperature
  • [10:12] Objašnjenje getTemp() funkcije

Images

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.
Language: 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
  }
 
}

Things you might need

Resources & references

Files📁

Arduino Libraries (zip)

Fritzing File

User’s Manual

Other files