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 файлы

Пайдаланушының нұсқаулығы

Басқа файлдар