Лекција 28: DHT11 температурен сензор со TM1637 дисплеј | Arduino чекор-по-чекор курс
Во оваа лекција од курсот „Arduino чекор по чекор“, истражуваме како да создадеме компактен, самостоен приказ на температура со комбинирање на DHT11 сензор за температура и влажност со TM1637 4-цифрен седумсегментен дисплеј. Наместо да се потпираме на сериски монитор за гледање на отчитувањата, овој проект гради мала, самостојна единица која визуелно ја пријавува амбиенталната температура и во Целзиусови и во Фаренхајтови степени. Ова е основна вештина за создавање кориснички интерфејси за вашите електронски проекти, пренесувајќи податоци од дигиталниот свет до физички дисплеј. Овој проект е практичен градежен блок за различни апликации каде што е потребно брзо, на прв поглед отчитување на температурата. Еве неколку идеи за да ве инспирираат: - Десктоп временска станица: Направете мал, секогаш вклучен дисплеј за следење на температурата во вашата канцеларија или хоби-соба. - Монитор за термостат: Создадете посветен дисплеј за проверка на температурата во близина на термостатот или HVAC отворот во вашиот дом. - Мерач за инкубатор или терариум: Следете ја температурата внатре во терариум за влекачи, комора за размножување на растенија или DIY инкубатор без да треба да го отворите. - Термометар за работилница или гаража: Јасен, светол дисплеј е совршен за проверка на температурата во потенцијално правлива или слабо осветлена работилница. - Едукативен комплет: Одличен почетен проект за учење како да поврзете различни типови сензори и излезни модули со Arduino.Потребен хардвер
За да го следите овој проект, ќе ви требаат следниве компоненти:
- Arduino Uno (или било која компатибилна плоча)
- DHT11 сензор за температура и влажност (прикажани се и 3-пински и 4-пински PCB верзии)
- TM1637 4-цифрен седумсегментен дисплеј модул
- Прототипна плоча (breadboard)
- Поврзувачки жици (jumper wires)
Водич за поврзување
Поврзувањето за овој проект е едноставно, барајќи врски и за сензорот и за дисплејот. Видеото ја демонстрира поставката со две различни верзии на DHT11 сензорот и две големини на TM1637 дисплејот, но основните врски остануваат исти.
Еве го поврзувањето за DHT11 сензорот и TM1637 дисплејот, како што е опишано во видеото (во видеото на 05:06).



За TM1637 дисплеј модулот, врските се следниве:
- VCC на 5V на Arduino.
- GND на GND на Arduino.
- CLK (Clock) на дигитален пин, на пример, D2.
- DIO (Data Input/Output) на друг дигитален пин, на пример, D3.
За DHT11 сензорот, врските се:
- VCC (или + пинот) на 5V.
- GND (или - пинот) на GND.
- Data (или S пинот) на дигитален пин, на пример, D2. (Забелешка: Во видеото, пинот за податоци на сензорот е поврзан на пин 2, но кодот исто така го покажува на пин 2. CLK и DIO пиновите за дисплејот се на пинови 2 и 3 во кодот, што е конфликт. Транскриптот од видеото спомнува пинови 5 и 6 за дисплејот, па затоа ќе ги користиме тие за да избегнеме преклопување.)
Ве молиме запомнете: Транскриптот и кодот покажуваат потенцијален конфликт на пинови. Кодот го дефинира DHT11 пинот за податоци и TM1637 CLK пинот и двата на дигитален пин 2. За да го избегнете ова, се препорачува да користите одделни пинови, како што е поврзување на DHT11 на пин 2 и TM1637 CLK на пин 5 и DIO на пин 6, како што е споменато во видеото.
Објаснување на кодот
Кодот за овој проект ги комбинира библиотеките и за DHT11 сензорот и за TM1637 дисплејот. Клучните делови што корисникот може да ги прилагоди се дефинициите на пиновите и поставката за осветленост на дисплејот. Можете да ги прилагодите овие за да одговараат на вашето специфично поврзување и преференции.
Прво, се дефинира пинот за податоци на DHT11 сензорот. Можете да го промените овој број ако сте го поврзале сензорот на различен дигитален пин на вашиот Arduino.
#define dhtpin 2 // поставете го пинот за поврзување на DHT11
Потоа, се дефинираат пиновите за TM1637 дисплеј модулот. CLK пинот е за часовничкиот сигнал, а DIO пинот е за податоци. Овие мора да одговараат на вашето физичко поврзување.
// Пинови за поврзување на модулот (дигитални пинови)
#define CLK 5
#define DIO 6
Потоа се создава објект од класата TM1637Display, кој ги прима броевите на CLK и DIO пиновите како аргументи. Овој објект ги обезбедува сите функции потребни за контрола на дисплејот.
TM1637Display display(CLK, DIO);
Осветленоста на дисплејот се поставува во функцијата setup(). Вредноста 0x0f ја претставува максималната осветленост. Можете да користите вредност од 0x00 (исклучено) до 0x0f (максимално) за да ја прилагодите јачината на дисплејот според вашата околина.
display.setBrightness(0x0f);
Главната логика во функцијата loop() ја чита температурата од DHT11 сензорот и ја прикажува. Функцијата showNumberDec() се користи за испраќање на вредноста на температурата до дисплејот. Нејзините параметри ви овозможуваат да контролирате како се прикажува бројот. На пример, следната линија ја прикажува температурата во Целзиусови степени, почнувајќи од втората цифра (позиција 1).
display.showNumberDec(23, false, 2, 1);
Во овој пример, 23 е бројот што треба да се прикаже, false значи без водечки нули, 2 е бројот на цифри што треба да се користат, а 1 е почетната позиција (индексирана од 0) на дисплејот.
Демонстрација на проектот во живо
Во видеото, проектот се демонстрира во живо. Презентерот ги покажува отчитувањата на температурата на поголемиот и помалиот TM1637 дисплеј. За да се докаже дека сензорот работи, се применува топлина на DHT11 со помош на топлински пиштол.
Првично, дисплејот ја покажува собната температура и во Целзиусови и во Фаренхајтови степени. Како што топлинскиот пиштол го загрева сензорот, може да се види како отчитувањата на температурата брзо се зголемуваат. Демонстрацијата покажува како температурата расте од нормална собна температура до над 50°C (123°F), потврдувајќи дека сензорот точно ја чита промената на температурата и дека дисплејот правилно ги прикажува податоците. Овој тест е одличен начин да се потврди дека сите ваши врски и код функционираат правилно.
Поглавја од видеото
- [00:00] Вовед во проектот
- [00:28] Разбирање на кодот за TM1637 дисплејот
- [03:04] Прикажување на температурата во Целзиусови и Фаренхајтови степени
- [05:06] Поврзување на DHT11 со TM1637 дисплејот
- [06:42] Демонстрација во живо на температурниот дисплеј
- [08:23] Тестирање со помал дисплеј модул
- [08:35] Заклучок и резиме на проектот
/*
* 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);
}
}
Работи што можеби ќе ви требаат
-
eBay
-
AliExpressTM1637 4-digit 7-segment display on AliExpresss.click.aliexpress.com
Ресурси и референци
-
НадворешноDHT11 library on GitHubgithub.com
-
НадворешноDHT11 Manual (PDF)robojax.com
-
Внатрешно
-
Внатрешно
Датотеки📁
Arduino библиотеки (zip)
-
TM1637 Arduino Library
TM1637_library.zip1.36 MB
Fritzing датотека
-
TM1637 Seven Segment module
TM1637.fzpz0.01 MB -
TM1637 4 digit seven segment display
TM1637-1.fzpz0.01 MB
Други датотеки
-
XY-T01 Relay Timer: DC load wiring
/download/datasheet/robojax_TM1637_datasheet.pdf