Cerca codice

Codice Arduino e video per il sensore di temperatura e umidità DHT22 con display TM1637 e relè

Codice Arduino e video per il sensore di temperatura e umidità DHT22 con display TM1637 e relè

In questo tutorial esploreremo come utilizzare un sensore di temperatura e umidità DHT22 in combinazione con un display TM1637 e un relè per controllare un carico in corrente alternata, come un riscaldatore o una ventola. L'obiettivo è accendere il carico quando la temperatura raggiunge i 50 gradi Celsius e spegnerlo quando scende al di sotto di tale soglia. Questa configurazione è ideale per mantenere i livelli di temperatura desiderati in un ambiente controllato.

DHT22 sensor with PCB-1

Per ottenere questo, scriveremo un programma Arduino che legge i dati di temperatura e umidità dal sensore DHT22, visualizza la temperatura sul display TM1637 e controlla il relè in base alle letture della temperatura. Per maggiore chiarezza, puoi consultare il video (nel video al 10:00).

Hardware spiegato

Le componenti principali di questo progetto includono il sensore DHT22, il display TM1637, il modulo relè e una scheda Arduino. Il sensore DHT22 è responsabile della misurazione della temperatura e dell'umidità, fornendo un'uscita digitale che l'Arduino può leggere facilmente. Il display TM1637 viene utilizzato per mostrare le letture della temperatura in un formato intuitivo, mentre il modulo relè ci permette di controllare in modo sicuro dispositivi ad alta tensione come riscaldatori e ventilatori.

Il sensore DHT22 ha tre pin: VCC (alimentazione), GND (massa) e DATA (uscita). Il display TM1637 utilizza quattro pin per alimentazione, massa, clock e comunicazione dei dati. Il modulo relè si collega all'Arduino e funge da interruttore per il carico in corrente alternata, garantendo un funzionamento sicuro quando si controllano dispositivi che richiedono tensioni più elevate.

Dettagli della scheda tecnica

ProduttoreAdafruit
Numero di parteDHT22
Tensione logica/IO3.3 V - 5.5 V
Tensione di alimentazione3,3 V - 6 V
Corrente di uscita (per canale)0.5 mA
Corrente di picco (per canale)2,5 mA
Linee guida sulla frequenza PWMNon applicabile
Soglie logiche di ingresso0.3 V - 0.7 V
Caduta di tensione / RDS(on)/ saturazioneNon applicabile
Limiti termici-40°C a 80°C
Pacchettoinvolucro a 3 pin
Note / variantiNoto anche come AM2302

  • Assicurarsi di fornire un'alimentazione adeguata (3,3 V - 6 V) al DHT22.
  • Usare resistenze di pull-up sulla linea dati se necessario.
  • Lasciare che le letture del sensore si stabilizzino per ottenere dati accurati.
  • Ricontrollare i collegamenti dei pin per evitare errori di comunicazione.
  • Fai attenzione ai carichi in corrente alternata (AC); assicurati di avere un adeguato isolamento e di rispettare le norme di sicurezza.
  • Prevedere un dissipatore di calore per il relè se si controllano carichi elevati.
  • Utilizzare tecniche di debounce, se necessario, durante la lettura dei dati del sensore.
  • Proteggi il sensore DHT22 dalla luce solare diretta per misurazioni accurate.

Istruzioni di cablaggio

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

Per collegare i componenti, inizia collegando il sensore DHT22. Collega il pin VCC al pin 5V dell'Arduino, il pin GND alla massa (GND) e il pin DATA al pin digitale 9 dell'Arduino.

Successivamente, collegare il display TM1637. Collegare il pin VCC al pin 5V dell'Arduino, il pin GND a massa, il pin CLK (clock) al pin digitale 2 e il pin DIO (data) al pin digitale 3. Per il modulo relè, collegare il pin VCC al pin 5V, il pin GND a massa e il pin di controllo (segnale) al pin digitale 7. Infine, assicurarsi che il carico in corrente alternata sia collegato in modo sicuro al modulo relè seguendo le indicazioni del produttore.

Esempi di codice e guida passo-passo

Il codice seguente inizializza il sensore DHT22 e il display TM1637. Configura i pin necessari e si prepara a leggere i dati di temperatura.


#include 
#define CLK 2
#define DIO 3
#define DHTPIN 9
DHT dht(DHTPIN, DHTTYPE);
void setup() {
  Serial.begin(9600);
  pinMode(RELAY, OUTPUT);
  dht.begin();
}

In questo frammento di codice includiamo le librerie necessarie e definiamo i pin per il display TM1637 e il sensore DHT22. La funzione setup inizializza la comunicazione seriale e imposta il pin del relè come uscita.

Wirig relay module to AC load

La funzione loop recupera la temperatura e controlla il relè in base alla lettura della temperatura. Se la temperatura supera i 50 gradi, il relè viene attivato.


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

Questo frammento di codice dimostra come leggere la temperatura, visualizzarla e controllare il relè. La temperatura viene arrotondata e visualizzata sul TM1637, e il relè viene acceso o spento in base alla soglia di temperatura.

Per una comprensione più approfondita, si prega di consultare il codice completo caricato sotto l'articolo.

Dimostrazione / Cosa aspettarsi

Quando esegui il programma, dovresti vedere la temperatura visualizzata sul TM1637. Quando la temperatura supera i 50 gradi Celsius, il relè si attiverà, accendendo il carico AC collegato. Viceversa, quando la temperatura scende sotto i 50 gradi, il relè si disattiverà, spegnendo il carico. Fai attenzione alla polarità invertita e assicurati che i collegamenti siano corretti per evitare danni ai componenti (nel video a 12:30).

Marcatori temporali del video

  • 00:00- Introduzione
  • 02:15- Spiegazione del cablaggio
  • 05:00- Analisi guidata del codice
  • 10:00- Dimostrazione
  • 12:30- Problemi comuni

Immagini

DHT11 Module
DHT11 Module
DHT22 sensor with PCB-1
DHT22 sensor with PCB-1
DHT22 sensor no PCB
DHT22 sensor no PCB
Wirig relay module to AC load
Wirig relay module to AC load
Wiring DHT11 DHT22 with TM1637 dispaly and relay
Wiring DHT11 DHT22 with TM1637 dispaly and relay
57-Arduino code for a DHT11 DHT22 temperature and humidity sensor with a TM1637 display.
Lingua: 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
  }
 
}

Cose di cui potresti avere bisogno

Risorse e riferimenti

File📁

Librerie Arduino (zip)

File Fritzing

Manuale dell'utente