نمایش دما و رطوبت حساس(حس کننده) DHT22 روی نمایشگر 7-Segment با آردوینو RJT43
این پروژه نشان میدهد چگونه میتوان یک سیستم ساده اما مؤثر برای نمایش مقادیر دما و رطوبت روی یک نمایشگر 7-سگمنتی با استفاده از آردوینو ساخت. این تنظیم برای کاربردهای مختلفی که در آنها پایش شرایط محیطی اهمیت دارد مفید است. پروژه حساس(حس کننده) دما و رطوبت DHT22 را با نمایشگر 7-سگمنتی TM1637 ترکیب میکند و خروجیای واضح و بهراحتی قابلخواندن فراهم میآورد.


ایدههای پروژه:
- نظارت بر محیط خانه برای آسایش بهینه.
- پایش شرایط در گلخانه یا تراریوم
- ساخت یک ایستگاه هواشناسی ساده.
- نمایش دما و رطوبت در یک پروژه ثبت دادهها.
سختافزار/قطعات
برای ساخت این پروژه، به اجزای زیر نیاز خواهید داشت:
- آردوینو اونو (یا برد سازگار)
- حساس(حس کننده) دما و رطوبت DHT22
- نمایشگر 7 سگمنت TM1637
- سیمهای رابط
- بردبورد (اختیاری، اما توصیهشده)
راهنمای سیمکشی



سیمکشی ساده است. برای راهنمای تصویری به ویدئو مراجعه کنید (در ویدئو در 01:51). اتصالات کلیدی عبارتند از:
- نمایشگر TM1637:VCC به 5V، GND به GND، CLK به پایه 2 آردوینو، DIO به پایه 3 آردوینو (در ویدئو در 02:00).
- حساس(حس کننده) DHT22:VCC را به 5V، GND را به GND، DATA را به پایه 9 آردوینو وصل کنید (در ویدئو در 02:20). توجه کنید که ویدئو از پایه 8 آردوینو برای تأمین 5V برای حساس(حس کننده) استفاده میکند (در ویدئو در 02:41).
توضیح شِفر (کود)
شِفر (کود) آردوینو از دو کتابخانه استفاده میکند: TM1637Display برای نمایشگر 7-بخشی و DHT برای حساس(حس کننده) DHT22. پارامترهای قابل پیکربندی شِفر (کود) عمدتاً در ابتدای برنامه قرار دارند:
// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3
#define DHTPIN 9 // DHT22 data pin
#define DHTTYPE DHT22 // DHT sensor type
این خطوط پایههای آردوینو متصل به نمایشگر و حساس(حس کننده) DHT22 را تعریف میکنند. ممکن است لازم باشد آنها را در صورت استفاده از پایههای متفاوت تنظیم کنید. اینgetTemp()تابع (در ویدیو در 07:03) حیاتی است. این تابع به شما امکان میدهد مقادیر مختلف را از حساس(حس کننده) DHT22 با ارسال یک آرگومان رشتهای بازیابی کنید:
float getTemp(String req) {
// ... (Sensor reading code) ...
if(req =="c"){ return t; } // Celsius
else if(req =="f"){ return f; } // Fahrenheit
// ... (Other options for Kelvin, humidity, heat index) ...
}
این تابع خواندن دادههای مختلف از حساس(حس کننده) (سانتیگراد، فارنهایت، رطوبت، شاخص حرارتی) را ساده میکند. حلقهٔ اصلی از این تابع برای دریافت دادهها و نمایش آنها روی نمایشگر 7-سگمنت استفاده میکند و مقادیر اعشاری را برای نمایش به اعداد صحیح گرد میکند (در ویدیو در 07:14).
پروژه/نمایش زنده
ویدئو (در ویدئو در 00:32) یک نمایش زنده از پروژه را نشان میدهد. نمایشگر 7-سگمنتی بهوضوح دما را بر حسب فارنهایت نشان میدهد. ویدئو همچنین نشان میدهد چگونه میتوان شِفر (کود) را تغییر داد تا مقادیر سلسیوس، کلوین، رطوبت و شاخص گرما را نمایش دهد (در ویدئو در 08:21).
فصلها
- [00:06] مقدمه و نمای کلی پروژه
- [00:53] شروع به کار و مروری بر مولفهها
- [01:51] سیمکشی نمایشگر TM1637
- [02:20] سیمکشی حساس(حس کننده) DHT22
- [03:14] شرح شِفر (کود): راهاندازی TM1637
- [04:00] توضیح شِفر (کود): راهاندازی DHT22
- [05:54] توضیح شِفر (کود): حلقهٔ اصلی و تابع نمایش
- [07:03] توضیح شِفر (کود): تابع getTemp()
- [08:21] نمایش و گزینههای خروجی متفاوت
/*
* Original code from TM1637 https://github.com/avishorp/TM1637
* Original code and library for DHT22 https://github.com/adafruit/DHT-sensor-library
* Modified for Robojax video on January 7, 2018
* by Ahmad Shamshiri, in Ajax, Ontario, Canada
* Watch the video for this code https://youtu.be/z_FvRm6Te78
* Other Arduino library and videos https://robojax.com
* Get this code and other Arduino codes from Robojax.com
Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
all in one place.
If you found this tutorial helpful, please support me so I can continue creating
content like this.
or make a donation using PayPal http://robojax.com/L/?id=64
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// ****** 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
// ****** 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
void setup()
{
Serial.begin(9600);
Serial.println("DHT22 Robojax Test with Display");
pinMode(8,OUTPUT);
digitalWrite(8,HIGH);// gives 5v for DHT22
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("h"));
int temp = round(getTemp("h"));
display.showNumberDec(temp, false, 3,1);
}// loop end
/*
* getTemp(String req)
* returns the temperature related parameters
* req is string request
* This code can display temperature in:
* getTemp("c") is used to get Celsius
* getTemp("f") is used to get Fahrenheit
* getTemp("k") is used for Kelvin
* getTemp("hif") is used to get Fahrenheit
* getTemp("hic") is used to get Celsius
* getTemp("h") is used to get humidity
* written by Ahmad Shamshiri for Robojax.com on January 7, 2018
* in Ajax, Ontario, Canada
*/
float getTemp(String req)
{
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (it's 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; //return 0.0 instead of nothing.
}
// 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
}
}
منابع و مراجع
هنوز هیچ منبعی موجود نیست.
فایلها📁
کتابخانههای آردوینو (zip)
-
ماجیول PCB DHT22 قرمز
DHT22-module-red.fzpz0.01 MB
فایل فریزینگ
-
حساس(حس کننده) رطوبت و دما DHT22
DHT22 Humidity and Temperature Sensor.fzpz0.01 MB -
ماجیول PCB DHT22 قرمز
DHT22-module-red.fzpz0.01 MB -
ماجیول DHT22 سفید
DHT22-module-white.fzpz0.01 MB -
ماجیول هفتسگی TM1637
TM1637.fzpz0.01 MB -
حساس(حس کننده) رطوبت و دما DHT11 (۳ پایه)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB
راهنمای کاربر
-
دفترچه راهنمای کاربر حساس(حس کننده) دما و رطوبت DHT22
robojax-DHT22_manual.pdf0.36 MB