Search Code

Samouczek ESP32 25/55 - Pomiar temperatury za pomocą NTC i LCD | Zestaw do nauki IoT ESP32 od SunFounder

Samouczek ESP32 25/55 - Pomiar temperatury za pomocą NTC i LCD | Zestaw do nauki IoT ESP32 od SunFounder

W tym samouczku nauczymy się, jak mierzyć temperaturę za pomocą termistora o ujemnym współczynniku temperaturowym (NTC) i wyświetlać odczyty na ekranie LCD przy użyciu mikrokontrolera ESP32. Projekt będzie obejmował podłączenie termistora NTC do ESP32 oraz użycie wyświetlacza LCD do pokazywania odczytów temperatury zarówno w stopniach Celsjusza, jak i Fahrenheita. To świetny sposób na rozpoczęcie pracy z technikami pomiaru temperatury i wyświetlania wyników na platformie ESP32.

ESP32-25-NTC_thermometeLCD

Będziemy używać płytki rozszerzającej SunFounder ESP32, która zwiększa możliwości ESP32 o wbudowane Wi-Fi i Bluetooth. Płytka ta może być łatwo zintegrowana z różnymi czujnikami i wyświetlaczami, co czyni ją idealną do projektów IoT. Termistor NTC będzie dostarczał odczyty temperatury na podstawie swojej rezystancji, która zmienia się odwrotnie proporcjonalnie do temperatury. Aby uzyskać dalsze wyjaśnienia dotyczące konfiguracji i kodu, koniecznie obejrzyj wideo (na wideo o 00:00).

Objaśnienie sprzętu

Główne komponenty użyte w tym projekcie obejmują mikrokontroler ESP32, termistor NTC, rezystor oraz wyświetlacz LCD. ESP32 służy jako centralna jednostka przetwarzająca, obsługująca dane z termistora i sterująca wyświetlaczem LCD. Termistor NTC zmienia swoją rezystancję w zależności od temperatury, co pozwala nam obliczyć temperaturę na podstawie konfiguracji dzielnika napięcia ze stałym rezystorem.

NTC_thermistor

Wyświetlacz LCD będzie pokazywał odczyty temperatury zarówno w stopniach Celsjusza, jak i Fahrenheita. Do komunikacji z wyświetlaczem LCD użyjemy protokołu I2C, który upraszcza okablowanie poprzez zmniejszenie liczby potrzebnych pinów. Termistor NTC ma charakterystykę, w której jego rezystancja maleje wraz ze wzrostem temperatury, co jest kluczowe dla naszych obliczeń.

Szczegóły z karty katalogowej

Producent SunFounder
Numer części Termistor NTC
Rezystancja nominalna 10 kΩ
Wartość Beta 3950 K
Zakres temperatur -40°C do 125°C
Obudowa Osiowa

 

  • Upewnij się, że termistor jest przystosowany do oczekiwanego zakresu temperatur.
  • Użyj rezystora 10 kΩ do dzielnika napięcia; w przeciwnym razie odczyty będą niedokładne.
  • Sprawdź połączenia, aby uniknąć zwarć.
  • Upewnij się, że adres I2C wyświetlacza LCD jest poprawny (zazwyczaj 0x27).
  • Użyj odpowiednich poziomów zasilania dla ESP32 i urządzeń peryferyjnych.
  • Sprawdź, czy prędkość transmisji monitora szeregowego odpowiada ustawieniom w kodzie (115200).
NTC_formula

Instrukcje okablowania

ESP32-11_LCD-wiring
ESP32-25-NTC_thermometer_wiring

Aby podłączyć komponenty, zacznij od połączenia termistora NTC z ESP32. Termistor nie ma polaryzacji, więc można go podłączyć w dowolnym kierunku. Podłącz jedną końcówkę termistora do pinu masy (GND) na ESP32. Druga końcówka łączy się z rezystorem 10 kΩ, który następnie łączy się z pinem 3.3V na ESP32. Połączenie między termistorem a rezystorem zostanie podłączone do pinu 35 na ESP32, który będzie odczytywał napięcie do obliczeń temperatury.

W przypadku wyświetlacza LCD podłącz pin masy (zazwyczaj drugi pin od góry) do GND na ESP32. Następnie podłącz VCC (często pierwszy pin) do pinu 5V na ESP32. Pin SDA (zwykle trzeci pin) powinien być podłączony do pinu 21 na ESP32, a pin SCL (często czwarty pin) do pinu 22. Upewnij się, że wszystkie połączenia są pewne i dokładnie sprawdź numery pinów, aby uniknąć błędów.

Przykłady kodu i omówienie

Kod zaczyna się od zdefiniowania stałych dla termistora, w tym numeru pinu, napięcia odniesienia i wartości rezystancji. Funkcja setup inicjalizuje komunikację szeregową i ustawia pin termistora jako wejście.

const int thermistorPin = 35; // Pin podłączony do termistora
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // 'drugi' rezystor

Główna pętla odczytuje wartość analogową z pinu termistora, oblicza rezystancję, a następnie oblicza temperaturę zarówno w stopniach Celsjusza, jak i Fahrenheita, używając równania z parametrem Beta. Obliczone wartości są drukowane w monitorze szeregowym.

int adcValue = analogRead(thermistorPin); // Odczyt wartości ADC
float voltage = (adcValue * referenceVoltage) / 4095.0; // Obliczenie napięcia
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // Obliczenie rezystancji termistora

Na koniec temperatura jest wyświetlana na wyświetlaczu LCD. Funkcja lcd.print() służy do pokazywania wartości temperatury wraz ze znakiem stopnia.

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

Ten kod skutecznie aktualizuje wyświetlacz LCD co 300 milisekund z najnowszymi odczytami temperatury, umożliwiając monitorowanie w czasie rzeczywistym.

Demonstracja / Czego się spodziewać

Po uruchomieniu kodu i zakończeniu podłączania, powinieneś zobaczyć odczyty temperatury wyświetlane na LCD zarówno w stopniach Celsjusza, jak i Fahrenheita. Jeśli przytrzymasz termistor w dłoni, zauważysz wzrost temperatury wraz ze spadkiem rezystancji. Zachowaj ostrożność w przypadku odwrotnej polaryzacji i upewnij się, że połączenia są pewne, ponieważ nieprawidłowe okablowanie może prowadzić do niedokładnych odczytów (na wideo w 04:50).

Znaczniki czasowe wideo

  • 00:00 Start
  • 1:50 wprowadzenie do projektu
  • 5:32 wyjaśnienie okablowania
  • 8:20 wyjaśnienie kodu Arduino NTC dla ESP32
  • 13:38 Wybór płytki ESP32 i portu COM w Arduino IDE
  • 15:20 Demonstracja pomiaru temperatury NTC
  • 17:34 Temperatura NTC na LCD1602 z ESP32
  • 18:42 Wyjaśnienie kodu Arduino NTC z LCD
  • 21:15 Demonstracja temperatury na LCD
  • 23:13 Zielony LCD czy niebieski LCD1601?

Obrazy

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
Język: 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
Język: 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
}

Zasoby i odniesienia

Pliki📁

Brak dostępnych plików.