Caută cod

Lecția 28: Senzor de temperatură DHT11 cu afișaj TM1637 | Curs Arduino Pas cu Pas

Lecția 28: Senzor de temperatură DHT11 cu afișaj TM1637 | Curs Arduino Pas cu Pas

În această lecție din cadrul Cursului Arduino Pas cu Pas, explorăm cum să creăm un afișaj compact și autonom de temperatură, combinând un senzor de temperatură și umiditate DHT11 cu un afișaj cu 7 segmente și 4 cifre TM1637. În loc să ne bazăm pe un monitor serial pentru a vizualiza citirile, acest proiect construiește o unitate mică și independentă care raportează vizual temperatura ambientală atât în grade Celsius, cât și în Fahrenheit. Aceasta este o abilitate fundamentală pentru crearea de interfețe ușor de utilizat pentru proiectele tale electronice, mutând datele din lumea digitală către un afișaj fizic.

Acest proiect este o componentă practică pentru o varietate de aplicații în care este necesară o citire rapidă a temperaturii dintr-o privire. Iată câteva idei pentru a te inspira:

  • Stație meteo de birou: Construiește un afișaj mic, mereu pornit, pentru a monitoriza temperatura din biroul tău sau din camera de hobby.
  • Monitor pentru termostat: Creează un afișaj dedicat pentru a verifica temperatura lângă termostatul casei tale sau aerisirea HVAC.
  • Indicator pentru incubator sau terariu: Monitorizează temperatura din interiorul unui terariu pentru reptile, al unei camere de înmulțire a plantelor sau al unui incubator DIY, fără a fi nevoie să-l deschizi.
  • Termometru pentru atelier sau garaj: Un afișaj clar și luminos este perfect pentru a verifica temperatura într-un atelier posibil prăfuit sau slab iluminat.
  • Kit educațional: Un proiect excelent pentru începători, pentru a învăța cum să interfațezi diferite tipuri de senzori și module de ieșire cu un Arduino.

Hardware necesar

Pentru a urma acest proiect, vei avea nevoie de următoarele componente:

  • Arduino Uno (sau orice placă compatibilă)
  • Senzor de temperatură și umiditate DHT11 (sunt prezentate atât versiunile cu 3 pini, cât și cu 4 pini pe PCB)
  • Modul de afișaj cu 7 segmente și 4 cifre TM1637
  • Breadboard
  • Fire de legătură (jumper wires)

Ghid de cablare

Cablarea pentru acest proiect este simplă, necesitând conexiuni atât pentru senzor, cât și pentru afișaj. Videoclipul demonstrează configurarea cu două versiuni diferite ale senzorului DHT11 și două dimensiuni ale afișajului TM1637, dar conexiunile de bază rămân aceleași.

Iată cablarea pentru senzorul DHT11 și afișajul TM1637, așa cum este descrisă în videoclip (în videoclip la 05:06).

Arduino wriing DHT11 PCB module  module with TM1637
Arduino wriing DHT11 PCB module module with TM1637
Arduino wriing DHT11 bare module  module with TM1637
Arduino wriing DHT11 bare module module with TM1637
Arduino wriing DHT11 bare module  module with TM1637
Arduino wriing DHT11 bare module module with TM1637

Pentru modulul de afișaj TM1637, conexiunile sunt următoarele:

  • VCC la 5V pe Arduino.
  • GND la GND pe Arduino.
  • CLK (Clock) la un pin digital, de exemplu, D2.
  • DIO (Data Input/Output) la un alt pin digital, de exemplu, D3.

Pentru senzorul DHT11, conexiunile sunt:

  • VCC (sau pinul +) la 5V.
  • GND (sau pinul -) la GND.
  • Data (sau pinul S) la un pin digital, de exemplu, D2. (Notă: În videoclip, pinul de date al senzorului este conectat la pinul 2, dar fragmentul de cod arată, de asemenea, că este pe pinul 2. Pinii CLK și DIO pentru afișaj sunt pe pinii 2 și 3 în fragmentul de cod, ceea ce este un conflict. Transcrierea videoclipului menționează pinii 5 și 6 pentru afișaj, așa că vom folosi aceștia pentru a evita orice suprapunere.)

Te rugăm să reții: Transcrierea și fragmentul de cod arată un posibil conflict de pini. Codul definește atât pinul de date DHT11, cât și pinul CLK al TM1637 pe pinul digital 2. Pentru a evita acest lucru, este recomandat să folosești pini separați, cum ar fi conectarea DHT11 la pinul 2 și a CLK al TM1637 la pinul 5 și DIO la pinul 6, așa cum este menționat în videoclip.

Explicația codului

Codul pentru acest proiect combină bibliotecile atât pentru senzorul DHT11, cât și pentru afișajul TM1637. Părțile cheie configurabile de utilizator sunt definițiile pinilor și setarea luminozității afișajului. Le poți ajusta pentru a se potrivi cablării și preferințelor tale specifice.

În primul rând, este definit pinul de date al senzorului DHT11. Poți schimba acest număr dacă ai conectat senzorul la un alt pin digital pe Arduino-ul tău.

#define dhtpin 2 // setează pinul pentru conectarea DHT11

Apoi, sunt definiți pinii pentru modulul de afișaj TM1637. Pinul CLK este pentru semnalul de ceas, iar pinul DIO este pentru date. Aceștia trebuie să corespundă cablării tale fizice.

// Pinii de conectare ai modulului (Pini digitali)
#define CLK 5
#define DIO 6

Apoi, este creat un obiect al clasei TM1637Display, care primește ca argumente numerele pinilor CLK și DIO. Acest obiect oferă toate funcțiile necesare pentru a controla afișajul.

TM1637Display display(CLK, DIO);

Luminozitatea afișajului este setată în funcția setup(). Valoarea 0x0f reprezintă luminozitatea maximă. Poți folosi o valoare de la 0x00 (oprit) la 0x0f (maxim) pentru a ajusta intensitatea afișajului în funcție de mediul tău.

display.setBrightness(0x0f);

Logica principală din funcția loop() citește temperatura de la senzorul DHT11 și o afișează. Funcția showNumberDec() este folosită pentru a trimite valoarea temperaturii către afișaj. Parametrii săi îți permit să controlezi modul în care este afișat numărul. De exemplu, următoarea linie afișează temperatura în grade Celsius, începând de la a doua cifră (poziția 1).

display.showNumberDec(23, false, 2, 1);

În acest exemplu, 23 este numărul de afișat, false înseamnă fără zerouri de început, 2 este numărul de cifre de folosit, iar 1 este poziția de start (indexată de la 0) pe afișaj.

Demonstrație live a proiectului

În videoclip, proiectul este demonstrat live. Prezentatorul arată citirile de temperatură atât pe afișajele TM1637 mai mari, cât și pe cele mai mici. Pentru a dovedi că senzorul funcționează, se aplică căldură asupra DHT11 folosind un pistol de aer cald.

Inițial, afișajul arată temperatura camerei atât în Celsius, cât și în Fahrenheit. Pe măsură ce pistolul de aer cald încălzește senzorul, puteți vedea citirile de temperatură crescând rapid. Demonstrația arată temperatura urcând de la o temperatură normală a camerei la peste 50°C (123°F), confirmând că senzorul citește cu precizie schimbarea temperaturii, iar afișajul afișează corect datele. Acest test este o modalitate excelentă de a verifica dacă toate conexiunile și codul funcționează corect.

Capitolele videoclipului

  • [00:00] Introducere în proiect
  • [00:28] Înțelegerea codului pentru afișajul TM1637
  • [03:04] Afișarea temperaturii în Celsius și Fahrenheit
  • [05:06] Conectarea DHT11 la afișajul TM1637
  • [06:42] Demonstrație live a afișajului de temperatură
  • [08:23] Testare cu un modul de afișaj mai mic
  • [08:35] Concluzie și rezumat al proiectului

Imagini

TM1637 4 digit display module
TM1637 4 digit display module
DHT11 Module
DHT11 Module
Arduino wriing DHT11 PCB module  module with TM1637
Arduino wriing DHT11 PCB module module with TM1637
Arduino wriing DHT11 PCB module  module with TM1637
Arduino wriing DHT11 PCB module module with TM1637
Arduino wriing DHT11 bare module  module with TM1637
Arduino wriing DHT11 bare module module with TM1637
Arduino wriing DHT11 bare module  module with TM1637
Arduino wriing DHT11 bare module module with TM1637
520-Lesson 28: DHT11 Temperature Sensor with TM1637 Display | Arduino Step-by-Step Course
Limba: C++
/*
 * Robojax Arduino Step-by-Step Course
 * Lesson 28: DHT11 with TM1637
 * This is the Arduino code for TM1637 4-digit display.
 * 
 * Please watch video instructions here: https://youtu.be/C-1iaCPzNtU
 * This code is available at: http://robojax.com/course1/?vid=lecture11
 * 
 * With over 100 lectures free on YouTube. Watch it here: http://robojax.com/L/?id=338
 * Get the code for the course: http://robojax.com/L/?id=339
 * 
 * Date: December 6, 2017, in Ajax, Ontario, Canada
 * 
 * Original code from: https://github.com/avishorp/TM1637
 * Modified for Robojax video on December 6, 2017
 */
#include <dht11.h>

dht11 DHT11; // create object of DHT11
#define dhtpin 2 // set the pin to connect to DHT11

 // start of settings of TM1637 LED display
#include <Arduino.h>
#include <TM1637Display.h>

// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3

TM1637Display display(CLK, DIO);
uint8_t blank[] = { 0x0, 0x0, 0x0, 0x0 };// blank value for all digits
 
// The amount of time (in milliseconds) between tests
#define TEST_DELAY   2000
// start of settings of TM1637 LED display



void setup()
{
	//Robojax Step-by-Step Arduino Course YouTube Watch it here: http://robojax.com/L/?id=338
 Serial.begin(9600);// setting up serial monitor
   display.setBrightness(0x0f); 
   
}

void loop()
{
	//Robojax Step-by-Step Arduino Course YouTube Watch it here: http://robojax.com/L/?id=338
DHT11.read(dhtpin);// initialize the reading
  int humidity = DHT11.humidity;// get humidity
//code for Robojax.com video
   Serial.print(getTemp('C'));
   Serial.print("C ");
   Serial.print(getTemp('F'));
   Serial.print("F ");
   Serial.print(getTemp('K'));
   Serial.print("K ");
   Serial.print(" humidity:");
   Serial.print (humidity);
   Serial.print("% ");
   Serial.println();
 delay(500);  


  display.setSegments(blank);
  display.showNumberDec(23, false, 2,1);
  delay(TEST_DELAY);
  
  display.setSegments(data);
  display.showNumberDec(153, false, 3, 1);
  delay(TEST_DELAY);

  display.setSegments(data);
  for(int i=0; i<=500; i++)
  {
    display.showNumberDec(i);
  }

}

Lucruri de care ai putea avea nevoie

Resurse și referințe

Fișiere📁

Biblioteci Arduino (zip)

Fișier Fritzing

Alte fișiere