درس ۲۸: حساس(حس کننده) دما DHT11 با نمایشگر TM1637 | دوره گامبهگام آردوینو
در این درس از دوره گامبهگام آردوینو، بررسی میکنیم که چگونه با ترکیب حساس(حس کننده) دما و رطوبت DHT11 با نمایشگر هفتبخشی چهاررقمی TM1637، یک نمایشگر دمای جمعوجور و مستقل بسازیم. بهجای اتکا به نمایشگر مسلسل برای مشاهده读数، این پروژه یک واحد کوچک و خودکفا میسازد که دمای محیط را بهصورت بصری در هر دو واحد سلسیوس و فارنهایت گزارش میدهد. این یک مهارت اساسی برای ایجاد رابطهای کاربرپسند در پروژههای الکترونیکی شماست و دادهها را از دنیای دیجیتال به یک نمایشگر فیزیکی منتقل میکند.این پروژه یک بلوک ساختمانی عملی برای انواع کاربردهایی است که در آنها به خواندن سریع و در یک نگاه دما نیاز است. در اینجا چند ایده برای الهامگرفتن شما آورده شده است:
- ایستگاه آبوهوای رومیزی: یک نمایشگر کوچک و همیشهروشن برای نظارت بر دمای دفتر کار یا اتاق سرگرمی خود بسازید.
- مانیتور ترموستات: یک نمایشگر اختصاصی برای تأیید دمای نزدیک ترموستات یا دریچه تهویه مطبوع خانه خود ایجاد کنید.
- گیج انکوباتور یا تراریوم: دمای داخل تراریوم خزندگان، محفظه تکثیر گیاهان یا انکوباتور DIY را بدون نیاز به باز کردن آن نظارت کنید.
- دماسنج کارگاه یا گاراژ: یک نمایشگر واضح و روشن برای بررسی دما در یک کارگاه احتمالی گردوغباری یا کمنور عالی است.
- کیت آموزشی: یک پروژه شروع عالی برای یادگیری نحوه اتصال انواع مختلف سنسورها و ماجیولهای خروجی به آردوینو.
سختافزار مورد نیاز
برای دنبال کردن این پروژه، به اجزای زیر نیاز دارید:
- آردوینو Uno (یا هر برد سازگار)
- حساس(حس کننده) دما و رطوبت DHT11 (هر دو نسخه PCB سهپایه و چهارپایه نشان داده شده است)
- ماجیول نمایشگر هفتبخشی چهاررقمی TM1637
- بردبورد
- سیم جامپر
راهنمای سیمکشی
سیمکشی این پروژه ساده است و نیاز به اتصالات برای هر دو حساس(حس کننده) و نمایشگر دارد. ویدیو راهاندازی را با دو نسخه مختلف حساس(حس کننده) DHT11 و دو اندازه نمایشگر TM1637 نشان میدهد، اما اتصالات اصلی یکسان باقی میمانند.
در اینجا سیمکشی حساس(حس کننده) DHT11 و نمایشگر TM1637، همانطور که در ویدیو توضیح داده شده است (در ویدیو در 05:06)، آورده شده است.



برای ماجیول نمایشگر TM1637، اتصالات به شرح زیر است:
- VCC به 5V روی آردوینو.
- GND به GND روی آردوینو.
- CLK (کلاک) به یک پایه دیجیتال، بهعنوان مثال، D2.
- DIO (ورودی/خروجی داده) به یک پایه دیجیتال دیگر، بهعنوان مثال، D3.
برای حساس(حس کننده) DHT11، اتصالات عبارتند از:
- VCC (یا پایه +) به 5V.
- GND (یا پایه -) به GND.
- Data (یا پایه S) به یک پایه دیجیتال، بهعنوان مثال، D2. (توجه: در ویدیو، پایه داده حساس(حس کننده) به پایه 2 متصل است، اما قطعه شِفر (کود) نیز آن را روی پایه 2 نشان میدهد. پایههای CLK و DIO برای نمایشگر در قطعه شِفر (کود) روی پایههای 2 و 3 هستند که یک تداخل است. رونوشت ویدیو به پایههای 5 و 6 برای نمایشگر اشاره میکند، بنابراین ما از آنها برای جلوگیری از هرگونه همپوشانی استفاده خواهیم کرد.)
لطفاً توجه کنید: رونوشت و قطعه شِفر (کود) یک تداخل احتمالی پایه را نشان میدهند. شِفر (کود) پایه داده DHT11 و پایه CLK TM1637 را هر دو روی پایه دیجیتال 2 تعریف میکند. برای جلوگیری از این، توصیه میشود از پایههای جداگانه استفاده کنید، مانند اتصال DHT11 به پایه 2 و CLK TM1637 به پایه 5 و DIO به پایه 6، همانطور که در ویدیو ذکر شده است.
توضیح شِفر (کود)
شِفر (کود) این پروژه کتابخانههای هر دو حساس(حس کننده) DHT11 و نمایشگر TM1637 را ترکیب میکند. بخشهای کلیدی قابل تنظیم توسط کاربر، تعریف پایهها و تنظیم روشنایی نمایشگر هستند. میتوانید اینها را برای مطابقت با سیمکشی و ترجیحات خاص خود تنظیم کنید.
ابتدا، پایه داده حساس(حس کننده) DHT11 تعریف میشود. اگر حساس(حس کننده) را به یک پایه دیجیتال متفاوت روی آردوینو خود متصل کردهاید، میتوانید این عدد را تغییر دهید.
#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 گرما اعمال میشود.
در ابتدا، نمایشگر دمای اتاق را به هر دو واحد سلسیوس و فارنهایت نشان میدهد. با گرم شدن حساس(حس کننده) توسط تفنگ حرارتی، میتوانید مشاهده کنید که خوانشهای دما به سرعت افزایش مییابند. این نمایش افزایش دما را از دمای معمولی اتاق تا بیش از ۵۰ درجه سلسیوس (۱۲۳ درجه فارنهایت) نشان میدهد و تأیید میکند که حساس(حس کننده) به طور دقیق تغییر دما را خوانده و نمایشگر دادهها را به درستی نشان میدهد. این آزمایش راهی عالی برای اطمینان از عملکرد صحیح تمام اتصالات و شِفر (کود) شماست.
بخشهای ویدیو
- [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);
}
}
مواردی که ممکن است به آنها نیاز داشته باشید
-
ایبی
-
علیاکسپرسTM1637 4-digit 7-segment display on AliExpresss.click.aliexpress.com
منابع و مراجع
-
خارجیراهنمای DHT11 (PDF)robojax.com
-
خارجیکتابخانه DHT11 در گیتهابgithub.com
فایلها📁
کتابخانههای آردوینو (zip)
-
کتابخانه آردوینو TM1637
TM1637_library.zip1.36 MB
فایل فریزینگ
-
ماجیول هفتسگی TM1637
TM1637.fzpz0.01 MB -
نمایشگر هفتمقداری ۴ رقمی TM1637
TM1637-1.fzpz0.01 MB
سایر فایلها
-
XY-T01 زمان سنج ریلی: سیم کشی بار DC
/download/datasheet/robojax_TM1637_datasheet.pdf