Search Code

Hướng dẫn ESP32 25/55 - Đo nhiệt độ bằng NTC & LCD | Bộ kit học IoT ESP32 của SunFounder

Hướng dẫn ESP32 25/55 - Đo nhiệt độ bằng NTC & LCD | Bộ kit học IoT ESP32 của SunFounder

Trong hướng dẫn này, chúng ta sẽ học cách đo nhiệt độ bằng nhiệt điện trở Hệ số Nhiệt độ Âm (NTC) và hiển thị số đo trên màn hình LCD bằng vi điều khiển ESP32. Dự án sẽ bao gồm việc kết nối nhiệt điện trở NTC với ESP32 và sử dụng LCD để hiển thị số đo nhiệt độ theo cả độ C và độ F. Đây là cách tuyệt vời để bắt đầu với các kỹ thuật cảm biến nhiệt độ và hiển thị bằng nền tảng ESP32.

ESP32-25-NTC_thermometeLCD

Chúng ta sẽ sử dụng bảng mở rộng ESP32 của SunFounder, giúp tăng cường khả năng của ESP32 với Wi-Fi và Bluetooth tích hợp. Bảng này có thể dễ dàng tích hợp với nhiều cảm biến và màn hình khác nhau, khiến nó trở nên lý tưởng cho các dự án IoT. Nhiệt điện trở NTC sẽ cung cấp số đo nhiệt độ dựa trên điện trở của nó, thay đổi tỷ lệ nghịch với nhiệt độ. Để làm rõ hơn về cách thiết lập và mã, hãy xem video (trong video tại 00:00).

Phần cứng được giải thích

Các thành phần chính được sử dụng trong dự án này bao gồm vi điều khiển ESP32, nhiệt điện trở NTC, một điện trở và màn hình LCD. ESP32 đóng vai trò là bộ xử lý trung tâm, xử lý dữ liệu từ nhiệt điện trở và điều khiển màn hình LCD. Nhiệt điện trở NTC thay đổi điện trở của nó theo nhiệt độ, cho phép chúng ta tính toán nhiệt độ dựa trên cấu hình chia điện áp với một điện trở cố định.

NTC_thermistor

Màn hình LCD sẽ hiển thị số đo nhiệt độ theo cả độ C và độ F. Chúng ta sẽ sử dụng giao thức I2C để giao tiếp với LCD, giúp đơn giản hóa việc nối dây bằng cách giảm số chân cần thiết. Nhiệt điện trở NTC có đặc tính là điện trở của nó giảm khi nhiệt độ tăng, điều này rất quan trọng cho các phép tính của chúng ta.

Chi tiết bảng dữ liệu

Nhà sản xuất SunFounder
Số bộ phận Nhiệt điện trở NTC
Điện trở danh định 10 kΩ
Giá trị Beta 3950 K
Phạm vi nhiệt độ -40°C đến 125°C
Kiểu đóng gói Dọc trục

 

  • Đảm bảo nhiệt điện trở được định mức cho phạm vi nhiệt độ dự kiến.
  • Sử dụng điện trở 10 kΩ cho bộ chia điện áp; nếu không, số đo sẽ không chính xác.
  • Kiểm tra các kết nối để tránh đoản mạch.
  • Giữ địa chỉ I2C của LCD chính xác (thường là 0x27).
  • Sử dụng mức nguồn điện phù hợp cho ESP32 và các thiết bị ngoại vi.
  • Kiểm tra tốc độ truyền của màn hình nối tiếp khớp với cài đặt mã (115200).
NTC_formula

Hướng dẫn nối dây

ESP32-11_LCD-wiring
ESP32-25-NTC_thermometer_wiring

Để nối dây các thành phần, hãy bắt đầu bằng cách kết nối nhiệt điện trở NTC với ESP32. Nhiệt điện trở không có cực tính, vì vậy nó có thể được kết nối theo bất kỳ hướng nào. Kết nối một đầu của nhiệt điện trở với chân nối đất (GND) trên ESP32. Đầu còn lại kết nối với điện trở 10 kΩ, sau đó kết nối với chân 3.3V trên ESP32. Điểm nối giữa nhiệt điện trở và điện trở sẽ kết nối với chân 35 trên ESP32, chân này sẽ đọc điện áp để tính toán nhiệt độ.

Đối với LCD, kết nối chân nối đất (thường là chân thứ hai từ trên xuống) với GND trên ESP32. Sau đó, kết nối VCC (thường là chân đầu tiên) với chân 5V trên ESP32. Chân SDA (thường là chân thứ ba) nên kết nối với chân 21 trên ESP32, và chân SCL (thường là chân thứ tư) nên kết nối với chân 22. Đảm bảo tất cả các kết nối đều chắc chắn và kiểm tra lại số chân để tránh sai sót.

Ví dụ mã & hướng dẫn chi tiết

Mã bắt đầu bằng việc định nghĩa các hằng số cho nhiệt điện trở, bao gồm số chân, điện áp tham chiếu và giá trị điện trở. Hàm thiết lập khởi tạo giao tiếp nối tiếp và đặt chân nhiệt điện trở làm đầu vào.

const int thermistorPin = 35; // Chân kết nối với nhiệt điện trở
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // điện trở 'khác'

Vòng lặp chính đọc giá trị analog từ chân nhiệt điện trở, tính toán điện trở, và sau đó tính toán nhiệt độ theo cả độ C và độ F bằng phương trình tham số Beta. Các giá trị tính toán được in ra màn hình nối tiếp.

int adcValue = analogRead(thermistorPin); // Đọc giá trị ADC
float voltage = (adcValue * referenceVoltage) / 4095.0; // Tính điện áp
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // Tính điện trở của nhiệt điện trở

Cuối cùng, nhiệt độ được hiển thị trên LCD. Hàm lcd.print() được sử dụng để hiển thị các giá trị nhiệt độ, cùng với ký hiệu độ.

lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.write(223); // Ký hiệu độ
lcd.print("C");

Mã này cập nhật LCD mỗi 300 mili giây với các số đo nhiệt độ mới nhất, cho phép giám sát theo thời gian thực.

Trình diễn / Điều gì sẽ xảy ra

Sau khi chạy mã và hoàn tất việc nối dây, bạn sẽ thấy các chỉ số nhiệt độ hiển thị trên màn hình LCD ở cả độ C và độ F. Nếu bạn cầm nhiệt điện trở (thermistor) trong tay, bạn sẽ nhận thấy nhiệt độ tăng lên khi điện trở giảm. Hãy cẩn thận với việc đảo cực và đảm bảo các kết nối chắc chắn, vì nối dây không đúng có thể dẫn đến các chỉ số không chính xác (trong video tại 04:50).

Mốc thời gian trong video

  • 00:00 Bắt đầu
  • 1:50 Giới thiệu về dự án
  • 5:32 Giải thích cách nối dây
  • 8:20 Giải thích mã Arduino NTC cho ESP32
  • 13:38 Chọn bo mạch ESP32 và cổng COM trong Arduino IDE
  • 15:20 Trình diễn đo nhiệt độ bằng NTC
  • 17:34 Nhiệt độ NTC trên LCD1602 với ESP32
  • 18:42 Giải thích mã Arduino NTC với LCD
  • 21:15 Trình diễn nhiệt độ trên LCD
  • 23:13 LCD xanh lá hay LCD xanh dương 1601?

Hình ảnh

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
Ngôn ngữ: 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
Ngôn ngữ: 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
}

Tài nguyên & tài liệu tham khảo

Tập tin📁

Không có tệp nào khả dụng.