Code zoeken

Gebruik DHT11, DHT22 met TM1637-display en relais om AC-belasting te regelen

Gebruik DHT11, DHT22 met TM1637-display en relais om AC-belasting te regelen

Dit project demonstreert hoe je een temperatuurgestuurd systeem bouwt met een Arduino, DHT11/DHT22 temperatuur- en luchtvochtigheidssensor, een TM1637-display en een relais om een AC-belasting te regelen. Deze opstelling is ongelooflijk veelzijdig en kan worden aangepast voor verschillende toepassingen. Je zou bijvoorbeeld kunnen bouwen:

DHT11 Module
DHT22 sensor with PCB-1
  • Een slimme thermostaat voor een kleine kas, die automatisch een verwarming of ventilator aanpast op basis van temperatuurmetingen.
  • Een systeem om de temperatuur van een vloeistof in een chemisch proces te bewaken en regelen.
  • Een geautomatiseerd temperatuurregelsysteem voor een reptielenverblijf.
  • Een temperatuurgeactiveerd alarmsysteem dat een melding geeft wanneer een bepaalde drempelwaarde wordt bereikt.

Het systeem gebruikt een DHT11- of DHT22-sensor om temperatuur en luchtvochtigheid te meten (in video op 00:11). Het TM1637-display toont de huidige temperatuur (in video op 00:17), en een relais schakelt een AC-belasting (zoals een lamp, ventilator of verwarming) aan of uit op basis van vooraf ingestelde temperatuurwaarden (in video op 00:23).

Hardware/Componenten

Om dit project te bouwen heb je de volgende componenten nodig:

  • Arduino Uno (of compatibel bord)
  • DHT11- of DHT22-temperatuur- en luchtvochtigheidssensor (in video op 00:11)
  • TM1637-displaymodule (in video op 00:17)
  • Relaismodule (in video op 00:19)
  • Jumperdraden
  • Breadboard
  • AC-belasting (bijv. een kleine gloeilamp of ventilator)

Bedradingsgids

De bedrading is eenvoudig maar cruciaal voor de functionaliteit van het project. Raadpleeg de video voor een visuele gids.

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

Gedetailleerde bedradingsinstructies en schema's vind je in de video (in video op 02:03 tot 05:18). Let goed op de aansluitingen voor de DHT-sensor (in video op 01:44), het TM1637-display (in video op 02:25) en de relaismodule (in video op 03:37).

Uitleg van de code

De Arduino-code gebruikt twee bibliotheken: TM1637Display en de DHT-sensorbibliotheek. Je moet deze bibliotheken installeren in de Arduino IDE. De belangrijkste configureerbare delen van de code zijn:


// Module aansluitpinnen (digitale pinnen)
#define CLK 2
#define DIO 3
// De tijd (in milliseconden) tussen tests
#define TEST_DELAY   1000
// ****** einde van TM1637 Display-code

#define DHTPIN 9     // op welke digitale pin we zijn aangesloten
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
#define RELAY 7 // de pin die is aangesloten op het relais

De #define-instructies stellen je in staat om eenvoudig de pintoewijzingen voor het TM1637-display (CLK en DIO), de DHT-sensor (DHTPIN) en het relais (RELAY) te wijzigen zodat ze overeenkomen met jouw bedrading. De DHTTYPE definieert welke DHT-sensor je gebruikt (DHT11 of DHT22). De variabele TEST_DELAY regelt de tijd tussen metingen.

De functie getTemp() is een aangepaste functie die wordt gebruikt om temperatuur- en luchtvochtigheidsgegevens van de DHT-sensor te lezen. Hiermee kun je verschillende gegevenstypen opvragen (Celsius, Fahrenheit, luchtvochtigheid, hitte-index) door een stringargument door te geven (in video op 09:01 tot 10:34). Bijvoorbeeld: getTemp("c") retourneert de temperatuur in Celsius, en getTemp("h") retourneert de luchtvochtigheid.


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

Dit codegedeelte regelt het relais op basis van de temperatuur. Wijzig de drempelwaarde (50 in dit voorbeeld) om het triggerpunt aan te passen (in video op 09:44 tot 10:11).

Live project/demonstratie

Een volledige demonstratie van het project is beschikbaar in de video (in video op 00:51 tot 01:07). De video toont het systeem in actie, met weergave van de temperatuur op het TM1637-display en het regelen van de AC-belasting op basis van de temperatuurmetingen.

Hoofdstukken

  • [00:06] Introductie en projectoverzicht
  • [01:12] Beschikbaarheid van code en aanvullende bronnen
  • [01:44] Bedrading van de DHT-sensor
  • [02:25] Bedrading van het TM1637-display
  • [02:50] Bedrading van AC-belasting en relais
  • [04:33] Relaispin en voedingsaansluitingen
  • [05:29] Installatie van bibliotheken
  • [05:52] Uitleg van code: TM1637-gedeelte
  • [06:47] Uitleg van code: DHT-gedeelte
  • [07:50] Uitleg van code: Relais en setup
  • [08:26] Uitleg van code: Loop en temperatuurregeling
  • [10:12] Uitleg van de functie getTemp()

Afbeeldingen

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

Dingen die je misschien nodig hebt

Hulpmiddelen en referenties

Bestanden📁

Arduino-bibliotheken (zip)

Fritzing-bestand

Gebruikershandleiding

Andere bestanden