Search Code

ESP32 บทเรียน 25/55 - การวัดอุณหภูมิโดยใช้ NTC และ LCD | ชุดเรียนรู้ IoT ESP32 ของ SunFounder

ESP32 บทเรียน 25/55 - การวัดอุณหภูมิโดยใช้ NTC และ LCD | ชุดเรียนรู้ IoT ESP32 ของ SunFounder

ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีการวัดอุณหภูมิโดยใช้เทอร์มิสเตอร์แบบค่าสัมประสิทธิ์อุณหภูมิเป็นลบ (NTC) และแสดงค่าบนหน้าจอ LCD โดยใช้ไมโครคอนโทรลเลอร์ ESP32 โปรเจกต์นี้จะเกี่ยวข้องกับการเชื่อมต่อเทอร์มิสเตอร์ NTC เข้ากับ ESP32 และใช้ LCD เพื่อแสดงค่าอุณหภูมิทั้งในหน่วยเซลเซียสและฟาเรนไฮต์ นี่เป็นวิธีที่ดีในการเริ่มต้นกับการตรวจจับอุณหภูมิและเทคนิคการแสดงผลโดยใช้แพลตฟอร์ม ESP32

ESP32-25-NTC_thermometeLCD

เราจะใช้บอร์ดขยาย ESP32 ของ SunFounder ซึ่งเพิ่มความสามารถของ ESP32 ด้วย Wi-Fi และบลูทูธในตัว บอร์ดนี้สามารถเชื่อมต่อกับเซนเซอร์และจอแสดงผลต่างๆ ได้อย่างง่ายดาย ทำให้เหมาะสำหรับโปรเจกต์ IoT เทอร์มิสเตอร์ NTC จะให้ค่าอุณหภูมิโดยอิงจากความต้านทานซึ่งแปรผกผันกับอุณหภูมิ สำหรับคำอธิบายเพิ่มเติมเกี่ยวกับการตั้งค่าและโค้ด โปรดดูวิดีโอ (ในวิดีโอที่ 00:00)

คำอธิบายฮาร์ดแวร์

ส่วนประกอบหลักที่ใช้ในโปรเจกต์นี้ประกอบด้วยไมโครคอนโทรลเลอร์ ESP32 เทอร์มิสเตอร์ NTC ตัวต้านทาน และจอแสดงผล LCD ESP32 ทำหน้าที่เป็นหน่วยประมวลผลกลาง จัดการข้อมูลจากเทอร์มิสเตอร์และควบคุมจอแสดงผล LCD เทอร์มิสเตอร์ NTC เปลี่ยนความต้านทานตามอุณหภูมิ ทำให้เราสามารถคำนวณอุณหภูมิโดยอิงจากการจัดวงจรแบ่งแรงดันไฟฟ้ากับตัวต้านทานคงที่

NTC_thermistor

จอแสดงผล LCD จะแสดงค่าอุณหภูมิทั้งในหน่วยเซลเซียสและฟาเรนไฮต์ เราจะใช้โปรโตคอล I2C เพื่อสื่อสารกับ LCD ซึ่งช่วยลดความซับซ้อนของการเดินสายโดยลดจำนวนพินที่ต้องใช้ เทอร์มิสเตอร์ NTC มีคุณสมบัติที่ความต้านทานลดลงเมื่ออุณหภูมิเพิ่มขึ้น ซึ่งสำคัญต่อการคำนวณของเรา

รายละเอียดจาก Datasheet

ผู้ผลิต SunFounder
หมายเลขชิ้นส่วน เทอร์มิสเตอร์ NTC
ความต้านทานปกติ 10 kΩ
ค่า Beta 3950 K
ช่วงอุณหภูมิ -40°C ถึง 125°C
แพ็คเกจ แกน (Axial)

 

  • ตรวจสอบให้แน่ใจว่าเทอร์มิสเตอร์มีพิกัดสำหรับช่วงอุณหภูมิที่คาดหวัง
  • ใช้ตัวต้านทาน 10 kΩ สำหรับวงจรแบ่งแรงดันไฟฟ้า มิฉะนั้นค่าที่อ่านได้จะไม่แม่นยำ
  • ตรวจสอบการเชื่อมต่อเพื่อหลีกเลี่ยงการลัดวงจร
  • ตรวจสอบที่อยู่ I2C ของ LCD ให้ถูกต้อง (โดยทั่วไปคือ 0x27)
  • ใช้ระดับแหล่งจ่ายไฟที่เหมาะสมสำหรับ ESP32 และอุปกรณ์ต่อพ่วง
  • ตรวจสอบว่าอัตราบอดของซีเรียลมอนิเตอร์ตรงกับการตั้งค่าในโค้ด (115200)
NTC_formula

คำแนะนำการเดินสาย

ESP32-11_LCD-wiring
ESP32-25-NTC_thermometer_wiring

ในการเดินสายส่วนประกอบ ให้เริ่มต้นโดยเชื่อมต่อเทอร์มิสเตอร์ NTC เข้ากับ ESP32 เทอร์มิสเตอร์ไม่มีขั้ว ดังนั้นจึงสามารถเชื่อมต่อในทิศทางใดก็ได้ เชื่อมต่อขาหนึ่งของเทอร์มิสเตอร์เข้ากับพินกราวด์ (GND) บน ESP32 ขาอีกข้างเชื่อมต่อกับตัวต้านทาน 10 kΩ ซึ่งจากนั้นเชื่อมต่อกับพิน 3.3V บน ESP32 จุดเชื่อมต่อระหว่างเทอร์มิสเตอร์และตัวต้านทานจะเชื่อมต่อกับพิน 35 บน ESP32 ซึ่งจะอ่านค่าแรงดันไฟฟ้าสำหรับการคำนวณอุณหภูมิ

สำหรับ LCD ให้เชื่อมต่อพินกราวด์ (โดยทั่วไปคือพินที่สองจากด้านบน) เข้ากับ GND บน ESP32 จากนั้นเชื่อมต่อ VCC (มักเป็นพินแรก) เข้ากับพิน 5V บน ESP32 พิน SDA (โดยปกติคือพินที่สาม) ควรเชื่อมต่อกับพิน 21 บน ESP32 และพิน SCL (มักเป็นพินที่สี่) ควรเชื่อมต่อกับพิน 22 ตรวจสอบให้แน่ใจว่าการเชื่อมต่อทั้งหมดแน่นหนาและตรวจสอบหมายเลขพินอีกครั้งเพื่อหลีกเลี่ยงข้อผิดพลาด

ตัวอย่างโค้ดและคำอธิบาย

โค้ดเริ่มต้นด้วยการกำหนดค่าคงที่สำหรับเทอร์มิสเตอร์ รวมถึงหมายเลขพิน แรงดันอ้างอิง และค่าความต้านทาน ฟังก์ชัน setup เริ่มต้นการสื่อสารซีเรียลและตั้งค่าพินเทอร์มิสเตอร์เป็นอินพุต

const int thermistorPin = 35; // พินที่เชื่อมต่อกับเทอร์มิสเตอร์
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // ตัวต้านทาน 'อีกตัว'

ลูปหลักอ่านค่าแอนะล็อกจากพินเทอร์มิสเตอร์ คำนวณความต้านทาน จากนั้นคำนวณอุณหภูมิทั้งในหน่วยเซลเซียสและฟาเรนไฮต์โดยใช้สมการพารามิเตอร์ Beta ค่าที่คำนวณได้จะถูกพิมพ์ไปยังซีเรียลมอนิเตอร์

int adcValue = analogRead(thermistorPin); // อ่านค่า ADC
float voltage = (adcValue * referenceVoltage) / 4095.0; // คำนวณแรงดันไฟฟ้า
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // คำนวณความต้านทานเทอร์มิสเตอร์

สุดท้าย อุณหภูมิจะถูกแสดงบน LCD ฟังก์ชัน lcd.print() ใช้เพื่อแสดงค่าอุณหภูมิ พร้อมกับสัญลักษณ์องศา

lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.write(223); // สัญลักษณ์องศา
lcd.print("C");

โค้ดนี้จะอัปเดต LCD ทุก 300 มิลลิวินาทีด้วยค่าอุณหภูมิล่าสุด ทำให้สามารถตรวจสอบได้แบบเรียลไทม์

การสาธิต / สิ่งที่คาดหวัง

เมื่อรันโค้ดและต่อสายเสร็จเรียบร้อยแล้ว คุณควรเห็นค่าอุณหภูมิแสดงบนจอ LCD ทั้งในหน่วยเซลเซียสและฟาเรนไฮต์ หากคุณถือเทอร์มิสเตอร์ไว้ในมือ คุณจะสังเกตเห็นอุณหภูมิเพิ่มขึ้นเมื่อความต้านทานลดลง ควรระมัดระวังเรื่องการต่อขั้วกลับด้านและตรวจสอบให้แน่ใจว่าการเชื่อมต่อแน่นหนา เนื่องจากการต่อสายที่ไม่ถูกต้องอาจทำให้ค่าที่อ่านได้ไม่แม่นยำ (ในวิดีโอที่เวลา 04:50)

ไทม์สแตมป์ในวิดีโอ

  • 00:00 เริ่มต้น
  • 1:50 แนะนำโปรเจกต์
  • 5:32 อธิบายการต่อสาย
  • 8:20 อธิบายโค้ด Arduino NTC สำหรับ ESP32
  • 13:38 การเลือกบอร์ด ESP32 และพอร์ต COM ใน Arduino IDE
  • 15:20 สาธิตการวัดอุณหภูมิด้วย NTC
  • 17:34 อุณหภูมิ NTC บน LCD1602 พร้อม ESP32
  • 18:42 อธิบายโค้ด Arduino NTC พร้อม LCD
  • 21:15 สาธิตการแสดงอุณหภูมิบน LCD
  • 23:13 จอ LCD สีเขียวหรือสีน้ำเงิน LCD1601?

ภาพ

ESP32-11_LCD-wiring
ESP32-11_LCD-wiring
ESP32-11_LCD-wiring-schematic
ESP32-11_LCD-wiring-schematic
NTC_thermistor
NTC_thermistor
ESP32-25-NTC_thermometer_schematic
ESP32-25-NTC_thermometer_schematic
ESP32-25-NTC_thermometer_wiring
ESP32-25-NTC_thermometer_wiring
NTC_formula
NTC_formula
ESP32-25-NTC_thermometeLCD
ESP32-25-NTC_thermometeLCD
824-ESP32 Tutorial 25/55- SunFounder doc page NTC Thermometer
ภาษา: C++
// Define constants
const int thermistorPin = 35; // Pin connected to the thermistor
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // the 'other' resistor
const float beta = 3950; // Beta value (Typical Value)
const float nominalTemperature = 25; // Nominal temperature for calculating the temperature coefficient
const float nominalResistance = 10000; // Resistance value at nominal temperature

void setup() {
  Serial.begin(115200); // Initialize serial communication
  pinMode(thermistorPin, INPUT); // Set pin as input
}

void loop() {
  int adcValue = analogRead(thermistorPin); // Read ADC value
  float voltage = (adcValue * referenceVoltage) / 4095.0; // Calculate voltage
  float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // Calculate thermistor resistance with updated configuration

  // Calculate temperature using the Beta parameter equation
  float tempK = 1 / (((log(resistance / nominalResistance)) / beta) + (1 / (nominalTemperature + 273.15)));
  
  float tempC = tempK - 273.15; // Get temperature in Celsius
  float tempF = 1.8 * tempC + 32.0; // Get temperature in Fahrenheit

  //Print temperature
  printf("TempC: %.2f C\n", tempC);
  printf("TempF: %.2f F\n", tempF);

  delay(300); // Wait 1 second
}
825-ESP32 Tutorial 25/55- Arduino code for LCD with NTC thermistor
ภาษา: C++
/*
This is Lesson 25/55 of SunFounder's ESP32 IoT Learning kit code
displays temperature from NTC on LCD screen
written by Ahmad Shamshiri for SunFounder's ESP32 IoT Learnign kit
watch full video https://youtu.be/zJh-gWY0DmE
download this code, wiring diagram and other resources from https://robojax.com/RJT707

*/

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

//SDA->21,SCL->22 
LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display


// Define constants
const int thermistorPin = 35; // Pin connected to the thermistor
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // Resistance value (10k)
const float beta = 3950; // Beta value (Typical Value)
const float nominalTemperature = 25; // Nominal temperature for calculating the temperature coefficient
const float nominalResistance = 10000; // Resistance value at nominal temperature

void setup() {

  lcd.clear(); 
  lcd.init();// initialize the lcd 
  lcd.backlight(); // Turns on the LCD backlight.

  //Serial.begin(115200); // Initialize serial communication
  pinMode(thermistorPin, INPUT); // Set pin as input
}

void loop() {
  int adcValue = analogRead(thermistorPin); // Read ADC value
  float voltage = (adcValue * referenceVoltage) / 4095.0; // Calculate voltage
  float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // Calculate thermistor resistance with updated configuration

  // Calculate temperature using the Beta parameter equation
  float tempK = 1 / (((log(resistance / nominalResistance)) / beta) + (1 / (nominalTemperature + 273.15)));
  
  float tempC = tempK - 273.15; // Get temperature in Celsius
  float tempF = 1.8 * tempC + 32.0; // Get temperature in Fahrenheit

  //Print temperature
  //printf("TempC: %.2f C\n", tempC);
  //printf("TempF: %.2f F\n", tempF);

  // Display temperature on LCD
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(tempC, 1);
  lcd.write(223); // Degree symbol
  lcd.print("C");

  lcd.setCursor(0, 1);
  lcd.print("Temp: ");
  lcd.print(tempF, 1);
  lcd.write(223); // Degree symbol
  lcd.print("F");

  delay(300); // Wait 1 second
}

แหล่งข้อมูลและเอกสารอ้างอิง

ไฟล์📁

ไม่มีไฟล์ที่พร้อมใช้งาน