Search Code

ESP32 Tutorijal 25/55 - Mjerenje temperature pomoću NTC-a i LCD-a | SunFounderov ESP32 IoT komplet za učenje

ESP32 Tutorijal 25/55 - Mjerenje temperature pomoću NTC-a i LCD-a | SunFounderov ESP32 IoT komplet za učenje

U ovom tutorijalu naučit ćemo kako mjeriti temperaturu koristeći termistor s negativnim temperaturnim koeficijentom (NTC) i prikazati očitanja na LCD ekranu koristeći ESP32 mikrokontroler. Projekat će uključivati povezivanje NTC termistora na ESP32 i korištenje LCD-a za prikaz temperaturnih očitanja u Celzijusima i Farenhajtima. Ovo je odličan način da započnete s tehnikama mjerenja temperature i prikaza koristeći ESP32 platformu.

ESP32-25-NTC_thermometeLCD

Koristit ćemo SunFounder ESP32 proširujuću ploču, koja poboljšava mogućnosti ESP32-a s ugrađenim Wi-Fi i Bluetoothom. Ova ploča se može lako integrirati s različitim senzorima i ekranima, što je čini idealnom za IoT projekte. NTC termistor će pružati temperaturna očitanja na osnovu svog otpora, koji se mijenja obrnuto s temperaturom. Za dodatna pojašnjenja o postavci i kodu, svakako pogledajte video (u videu na 00:00).

Objašnjenje hardvera

Glavne komponente korištene u ovom projektu uključuju ESP32 mikrokontroler, NTC termistor, otpornik i LCD ekran. ESP32 služi kao centralna procesna jedinica, obrađujući podatke s termistora i kontrolirajući LCD ekran. NTC termistor mijenja svoj otpor prema temperaturi, omogućavajući nam da izračunamo temperaturu na osnovu konfiguracije djelitelja napona s fiksnim otpornikom.

NTC_thermistor

LCD ekran će prikazivati temperaturna očitanja u Celzijusima i Farenhajtima. Koristit ćemo I2C protokol za komunikaciju s LCD-om, što pojednostavljuje ožičenje smanjenjem broja potrebnih pinova. NTC termistor ima karakteristiku da se njegov otpor smanjuje s povećanjem temperature, što je ključno za naše proračune.

Detalji iz tehničke dokumentacije

Proizvođač SunFounder
Broj dijela NTC termistor
Nominalni otpor 10 kΩ
Beta vrijednost 3950 K
Temperaturni raspon -40°C do 125°C
Pakovanje Aksijalno

 

  • Provjerite da je termistor ocijenjen za očekivani temperaturni raspon.
  • Koristite otpornik od 10 kΩ za djelitelj napona; u suprotnom, očitanja će biti netačna.
  • Provjerite spojeve kako biste izbjegli kratke spojeve.
  • Provjerite da je I2C adresa LCD-a ispravna (obično 0x27).
  • Koristite odgovarajuće nivoe napajanja za ESP32 i periferne uređaje.
  • Provjerite da brzina prijenosa serijskog monitora odgovara postavkama koda (115200).
NTC_formula

Upute za ožičenje

ESP32-11_LCD-wiring
ESP32-25-NTC_thermometer_wiring

Za ožičenje komponenti, počnite povezivanjem NTC termistora na ESP32. Termistor nema polaritet, pa se može spojiti u bilo kojem smjeru. Spojite jedan vod termistora na pin uzemljenja (GND) na ESP32. Drugi vod se spaja na otpornik od 10 kΩ, koji se zatim spaja na pin od 3.3V na ESP32. Spoj između termistora i otpornika spojit će se na pin 35 na ESP32, koji će očitavati napon za proračune temperature.

Za LCD, spojite pin uzemljenja (obično drugi pin odozgo) na GND na ESP32. Zatim spojite VCC (često prvi pin) na pin od 5V na ESP32. SDA pin (obično treći pin) treba spojiti na pin 21 na ESP32, a SCL pin (često četvrti pin) treba spojiti na pin 22. Provjerite da su svi spojevi sigurni i dvaput provjerite brojeve pinova kako biste izbjegli greške.

Primjeri koda i objašnjenje

Kod počinje definiranjem konstanti za termistor, uključujući broj pina, referentni napon i vrijednosti otpora. Funkcija setup inicijalizira serijsku komunikaciju i postavlja pin termistora kao ulaz.

const int thermistorPin = 35; // Pin spojen na termistor
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // 'drugi' otpornik

Glavna petlja čita analognu vrijednost s pina termistora, izračunava otpor, a zatim izračunava temperaturu u Celzijusima i Farenhajtima koristeći Beta parametar jednadžbe. Izračunate vrijednosti se ispisuju na serijski monitor.

int adcValue = analogRead(thermistorPin); // Čitanje ADC vrijednosti
float voltage = (adcValue * referenceVoltage) / 4095.0; // Izračun napona
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // Izračun otpora termistora

Konačno, temperatura se prikazuje na LCD-u. Funkcija lcd.print() se koristi za prikaz temperaturnih vrijednosti, zajedno sa simbolom stepena.

lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.write(223); // Simbol stepena
lcd.print("C");

Ovaj kod efektivno ažurira LCD svakih 300 milisekundi s najnovijim temperaturnim očitanjima, omogućavajući praćenje u realnom vremenu.

Demonstracija / Šta očekivati

Nakon pokretanja koda i završetka povezivanja, trebali biste vidjeti očitanja temperature na LCD ekranu u Celzijusima i Fahrenheitima. Ako termistor držite u ruci, primijetit ćete porast temperature kako otpor opada. Budite oprezni s obrnutim polaritetom i osigurajte da su veze čvrste, jer nepravilno povezivanje može dovesti do netačnih očitanja (u videu na 04:50).

Vremenske oznake videa

  • 00:00 Početak
  • 1:50 Uvod u projekat
  • 5:32 Objašnjeno povezivanje
  • 8:20 Objašnjen Arduino NTC kod za ESP32
  • 13:38 Odabir ESP32 ploče i COM porta u Arduino IDE
  • 15:20 Demonstracija mjerenja temperature NTC-om
  • 17:34 NTC temperatura na LCD1602 sa ESP32
  • 18:42 Objašnjen Arduino NTC kod sa LCD ekranom
  • 21:15 Demonstracija temperature na LCD ekranu
  • 23:13 Zeleni LCD ili plavi LCD1601?

Images

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
Language: 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
Language: 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
}

Resources & references

Files📁

No files available.