آموزش ESP32 25/55 - اندازهگیری دما با استفاده از NTC و LCD | کیت آموزشی اینترنت اشیاء ESP32 سانفاندر
در این آموزش، یاد خواهیم گرفت که چگونه دما را با استفاده از ترمیستور دارای ضریب دما منفی (NTC) اندازهگیری کرده و قرائتها را روی صفحه نمایش LCD با استفاده از میکروکنترلر ESP32 نمایش دهیم. پروژه شامل اتصال یک ترمیستور NTC به ESP32 و استفاده از LCD برای نمایش قرائتهای دما به دو واحد سلسیوس و فارنهایت است. این یک راه عالی برای شروع کار با حسگرهای دما و تکنیکهای نمایش با استفاده از پلتفرم ESP32 است.
ما از برد توسعه ESP32 سانفاندری استفاده خواهیم کرد که قابلیتهای ESP32 را با Wi-Fi و بلوتوث داخلی افزایش میدهد. این برد میتواند به راحتی با حسگرها و نمایشگرهای مختلف یکپارچه شود و آن را برای پروژههای IoT ایدهآل میسازد. ترمیستور NTC دما را بر اساس مقاومت خود که به طور معکوس با دما تغییر میکند، فراهم خواهد کرد. برای توضیحات بیشتر در مورد راهاندازی و شِفر (کود)، حتماً ویدئو را مشاهده کنید (در ویدئو در 00:00).
توضیحاتی درباره سختافزار
اجزای اصلی مورد استفاده در این پروژه شامل میکروکنترلر ESP32، یک ترمیستور NTC، یک مقاومت و یک نمایشگر LCD است. ESP32 به عنوان واحد پردازش مرکزی عمل میکند، دادههای مربوط به ترمیستور را پردازش کرده و نمایشگر LCD را کنترل میکند. ترمیستور NTC مقاومت خود را بر اساس دما تغییر میدهد، که این امکان را به ما میدهد تا دما را بر اساس پیکربندی تقسیم ولتاژ با یک مقاومت ثابت محاسبه کنیم.
صفحه نمایش LCD دما را در هر دو مقیاس سلسیوس و فارنهایت نشان خواهد داد. ما از پروتکل I2C برای برقراری ارتباط با LCD استفاده خواهیم کرد که با کاهش تعداد پایههای مورد نیاز، کابلکشی را ساده میکند. ترمیستور NTC خصوصیتی دارد که در آن مقاومت آن با افزایش دما کاهش مییابد که برای محاسبات ما حیاتی است.
جزئیات برگه مشخصات
| تولیدکننده | سانفاندر |
|---|---|
| شماره قطعه | ترمیستور NTC |
| مقاومت اسمی | ۱۰ کیلو اهم |
| مقدار بتا | 3950 کلوین |
| محدوده دما | -40 درجه سانتیگراد تا 125 درجه سانتیگراد |
| بسته | محوری |
- اطمینان حاصل کنید که ترمیستور برای دامنه دمای مورد انتظار ارزیابی شده است.
- از یک مقاومت 10 کΩ برای تقسیم ولتاژ استفاده کنید؛ در غیر این صورت، خوانشها نادرست خواهند بود.
- اتصالات را بررسی کنید تا از ایجاد مدارهای کوتاه جلوگیری شود.
- آدرس I2C LCD را صحیح نگه دارید (معمولاً 0x27).
- از سطوح منبع تغذیه مناسب برای ESP32 و دستگاههای جانبی استفاده کنید.
- بررسی کنید که نرخ باود نمایشگر مسلسل با تنظیمات شِفر (کود) مطابقت دارد (۱۱۵۲۰۰).
دستورالعملهای سیمکشی


برای اتصال قطعات، ابتدا ترمیستور NTC را به ESP32 متصل کنید. ترمیستور قطبیت ندارد، بنابراین میتوان آن را در هر دو جهت متصل کرد. یکی از سربهای ترمیستور را به پایه زمین (GND) روی ESP32 متصل کنید. سرب دیگر به یک مقاومت 10 کیلو اهم متصل میشود که سپس به پایه 3.3 ولت روی ESP32 متصل میشود. نقطه اتصال بین ترمیستور و مقاومت به پایه متصل خواهد شد.35در ESP32 که ولتاژ را برای محاسبات دما میخواند.
برای LCD، پایه زمین (معمولاً دومین پایه از بالا) را به GND روی ESP32 وصل کنید. سپس، VCC (اغلب اولین پایه) را به پایه 5V روی ESP32 وصل کنید. پایه SDA (معمولاً سومین پایه) باید به پایه وصل شود.21بر روی ESP32، و پایه SCL (اغلب چهارمین پایه) باید به پایه متصل شود.22اطمینان حاصل کنید که تمام اتصالات ایمن هستند و شمارههای پایه را دوباره بررسی کنید تا از هر گونه اشتباهی جلوگیری شود.
نمونههای شِفر (کود) و راهنمایی
شِفر (کود) با تعریف ثوابت برای ترمیستور آغاز میشود، از جمله شماره پایه، ولتاژ مرجع و مقادیر مقاومت. تابع راهاندازی ارتباط سریال را مقداردهی اولیه کرده و پایه ترمیستور را به عنوان ورودی تنظیم میکند.
const int thermistorPin = 35; // Pin connected to the thermistor
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // the 'other' resistor
حلقه اصلی مقدار آنالوگ را از پایه ترمیستور میخواند، مقدار مقاومت را محاسبه میکند و سپس دما را به هر دو درجه سانتیگراد و فارنهایت با استفاده از معادله پارامتر بتا محاسبه میکند. مقادیر محاسبه شده در مانیتور سری چاپ میشوند.
int adcValue = analogRead(thermistorPin); // Read ADC value
float voltage = (adcValue * referenceVoltage) / 4095.0; // Calculate voltage
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // Calculate thermistor resistance
در نهایت، دما بر روی LCD نمایش داده میشود.lcd.print()عملکرد برای نمایش مقادیر دما همراه با نماد درجه استفاده میشود.
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.write(223); // Degree symbol
lcd.print("C");
این شِفر (کود) به طور مؤثری هر 300 میلیثانیه یک بار با جدیدترین خوانشهای دما، LCD را بهروزرسانی میکند و امکان نظارت در زمان واقعی را فراهم میکند.
نمایشگاه / چه انتظاری داشته باشیم
پس از اجرای شِفر (کود) و تکمیل سیمکشی، باید خوانشهای دما را که بر روی LCD به صورت درجه سلسیوس و فارنهایت نمایش داده میشود، مشاهده کنید. اگر ترمیستور را در دستان خود نگه دارید، باید متوجه افزایش دما شوید در حالی که مقاومت کاهش مییابد. مراقب قطبیت معکوس باشید و از ایمن بودن اتصالات اطمینان حاصل کنید، زیرا سیمکشی نادرست میتواند منجر به خوانشهای نادرست شود (در ویدیو در ساعت ۰۴:۵۰).
زمانبندی ویدیو
- ۰۰:۰۰ آغاز
- ۱:۵۰ مقدمهای بر پروژه
- ۵:۳۲ سیمکشی توضیح داده شده
- شِفر (کود) NTC آردوینو برای ESP32 توضیح داده شد ساعت ۸:۲۰
- انتخاب برد ESP32 و پورت COM در Arduino IDE 13:38
- ۱۵:۲۰ نمایش دما با استفاده از NTC
- دمای ۱۷:۳۴ NTC بر روی LCD1602 با ESP32
- شِفر (کود) آردوینو NTC 18:42 با صفحه نمایش LCD توضیح داده شده است
- نمایش دما بر روی LCD ساعت 21:15
- 23:13 LCD سبز یا LCD آبی1601؟
/*
* // تعیین ثابتها
*/
const int thermistorPin = 35; // پایه متصل به ترمیستور
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // مقاومت 'دیگر'
const float beta = 3950; // مقدار بتا (مقدار معمولی)
const float nominalTemperature = 25; // دمای اسمی برای محاسبه ضریب دما
const float nominalResistance = 10000; // مقدار مقاومت در دمای نامی
void setup() {
Serial.begin(115200); // راهاندازی ارتباط سریال
pinMode(thermistorPin, INPUT); // پایه را به عنوان ورودی تنظیم کنید
}
void loop() {
int adcValue = analogRead(thermistorPin); // خواندن مقدار ADC
float voltage = (adcValue * referenceVoltage) / 4095.0; // محاسبه ولتاژ
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // مقاومت ترمیستور را با پیکربندی بهروز شده محاسبه کنید
// دمای محیط را با استفاده از معادله پارامتر بتا محاسبه کنید
float tempK = 1 / (((log(resistance / nominalResistance)) / beta) + (1 / (nominalTemperature + 273.15)));
float tempC = tempK - 273.15; // دما را به درجه سلسیوس بگیرید
float tempF = 1.8 * tempC + 32.0; // دما را به فارنهایت بگیرید
// چاپ دما
printf("TempC: %.2f C\n", tempC);
printf("TempF: %.2f F\n", tempF);
delay(300); // 1 ثانیه صبر کنید
}
/*
* این درس 25/55 از کیت آموزشی اینترنت اشیا ESP32 سنفاندر است که دما را از NTC بر روی صفحه نمایش LCD نمایش میدهد. این متن توسط احمد شمشیری برای کیت آموزشی اینترنت اشیا ESP32 سنفاندر نوشته شده است. ویدیوی کامل را مشاهده کنید https://youtu.be/zJh-gWY0DmE این شِفر (کود)، دیاگرام سیمکشی و سایر منابع را از https://robojax.com/RJT707 دانلود کنید.
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// SDA->21,SCL->22
LiquidCrystal_I2C lcd(0x27,16,2); // آدرس LCD را برای یک نمایشگر ۱۶ کاراکتری و ۲ خطی به ۰x27 تنظیم کنید.
// ثابتها را تعریف کنید
const int thermistorPin = 35; // پایه متصل به ترمیستور
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // مقدار مقاومت (۱۰ کیلو اهم)
const float beta = 3950; // مقدار بتا (مقدار معمولی)
const float nominalTemperature = 25; // دمای اسمی برای محاسبه ضریب دما
const float nominalResistance = 10000; // مقدار مقاومت در دمای نامی
void setup() {
lcd.clear();
lcd.init(); // السی دی را راهاندازی کنید
lcd.backlight(); // نور پسزمینه LCD را روشن میکند.
// سریال.begin(115200); // ارتباط سریال را 초기 سازی کنید
pinMode(thermistorPin, INPUT); // پایه را به عنوان ورودی تنظیم کنید
}
void loop() {
int adcValue = analogRead(thermistorPin); // خواندن مقدار ADC
float voltage = (adcValue * referenceVoltage) / 4095.0; // محاسبه ولتاژ
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // مقاومت ترمیستور را با پیکربندی بهروز محاسبه کنید
// دمای را با استفاده از معادله پارامتر بتا محاسبه کنید
float tempK = 1 / (((log(resistance / nominalResistance)) / beta) + (1 / (nominalTemperature + 273.15)));
float tempC = tempK - 273.15; // دما را به درجه سلسیوس بگیرید
float tempF = 1.8 * tempC + 32.0; // دما را به درجه فارنهاییت بگیرید
// چاپ دما
// printf("دمایC: %.2f C\n", tempC);
// دماF: %.2f F
// دمای نمایش را روی LCD نمایش دهید
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.write(223); // علامت درجه
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(tempF, 1);
lcd.write(223); // علامت درجه
lcd.print("F");
delay(300); // یک ثانیه صبر کن
}
Common Course Links
Common Course Files
منابع و مراجع
-
مستنداتدرباره ترمیستور NTC بیاموزیدdocs.sunfounder.com
-
مستنداتراهنمای ESP32 25/55- صفحه سند SunFounder برای ترمومتر NTSdocs.sunfounder.com
فایلها📁
هیچ فایلی موجود نیست.