Code zoeken

ESP32 Tutorial 25/55 - Temperatuur meten met NTC & LCD | SunFounder's ESP32 IoT-leerkit

ESP32 Tutorial 25/55 - Temperatuur meten met NTC & LCD | SunFounder's ESP32 IoT-leerkit

In deze tutorial leren we hoe we temperatuur kunnen meten met een NTC-thermistor (Negative Temperature Coefficient) en de metingen kunnen weergeven op een LCD-scherm met behulp van de ESP32-microcontroller. Het project omvat het aansluiten van een NTC-thermistor op de ESP32 en het gebruik van een LCD om temperatuurmetingen weer te geven in zowel Celsius als Fahrenheit. Dit is een uitstekende manier om te beginnen met temperatuursensing en weergavetechnieken op het ESP32-platform.

ESP32-25-NTC_thermometeLCD

We zullen gebruikmaken van SunFounder's ESP32-uitbreidingsbord, dat de mogelijkheden van de ESP32 verbetert met ingebouwde Wi-Fi en Bluetooth. Dit bord kan eenvoudig worden geïntegreerd met verschillende sensoren en displays, waardoor het ideaal is voor IoT-projecten. De NTC-thermistor zal temperatuurmetingen leveren op basis van zijn weerstand, die omgekeerd evenredig varieert met de temperatuur. Voor verdere verduidelijking over de opstelling en code, bekijk zeker de video (in video op 00:00).

Hardware uitgelegd

De belangrijkste componenten die in dit project worden gebruikt, zijn de ESP32-microcontroller, een NTC-thermistor, een weerstand en een LCD-display. De ESP32 fungeert als de centrale verwerkingseenheid, die gegevens van de thermistor verwerkt en het LCD-display aanstuurt. De NTC-thermistor verandert zijn weerstand afhankelijk van de temperatuur, waardoor we de temperatuur kunnen berekenen op basis van de spanningsdelerconfiguratie met een vaste weerstand.

NTC_thermistor

Het LCD-display toont de temperatuurmetingen in zowel Celsius als Fahrenheit. We gebruiken het I2C-protocol om met het LCD te communiceren, wat de bedrading vereenvoudigt door het aantal benodigde pinnen te verminderen. De NTC-thermistor heeft de eigenschap dat zijn weerstand afneemt bij een temperatuurstijging, wat cruciaal is voor onze berekeningen.

Datasheetdetails

Fabrikant SunFounder
Onderdeelnummer NTC-thermistor
Nominale weerstand 10 kΩ
Bètawaarde 3950 K
Temperatuurbereik -40°C tot 125°C
Behuizing Axiaal

 

  • Zorg ervoor dat de thermistor geschikt is voor het verwachte temperatuurbereik.
  • Gebruik een 10 kΩ-weerstand voor de spanningsdeler; anders zijn de metingen onnauwkeurig.
  • Controleer de verbindingen om kortsluiting te voorkomen.
  • Houd het I2C-adres van het LCD correct (meestal 0x27).
  • Gebruik geschikte voedingsspanningsniveaus voor de ESP32 en randapparatuur.
  • Controleer of de baudrate van de seriële monitor overeenkomt met de code-instellingen (115200).
NTC_formule

Bedradingsinstructies

ESP32-11_LCD-wiring
ESP32-25-NTC_thermometer_wiring

Om de componenten te bedraden, begin met het aansluiten van de NTC-thermistor op de ESP32. De thermistor heeft geen polariteit, dus kan in beide richtingen worden aangesloten. Verbind één aansluitdraad van de thermistor met de aardingspin (GND) op de ESP32. De andere aansluitdraad verbindt met een 10 kΩ-weerstand, die vervolgens verbindt met de 3.3V-pin op de ESP32. Het knooppunt tussen de thermistor en de weerstand wordt verbonden met pin 35 op de ESP32, die de spanning leest voor temperatuurberekeningen.

Voor het LCD, verbind de aardingspin (meestal de tweede pin van boven) met GND op de ESP32. Verbind vervolgens de VCC (vaak de eerste pin) met de 5V-pin op de ESP32. De SDA-pin (meestal de derde pin) moet worden verbonden met pin 21 op de ESP32, en de SCL-pin (vaak de vierde pin) met pin 22. Zorg ervoor dat alle verbindingen stevig zijn en controleer de pinnummers dubbel om fouten te voorkomen.

Codevoorbeelden & uitleg

De code begint met het definiëren van de constanten voor de thermistor, inclusief het pinnummer, de referentiespanning en weerstandswaarden. De setup-functie initialiseert de seriële communicatie en stelt de thermistorpin in als invoer.

const int thermistorPin = 35; // Pin verbonden met de thermistor
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // de 'andere' weerstand

De hoofdloop leest de analoge waarde van de thermistorpin, berekent de weerstand en berekent vervolgens de temperatuur in zowel Celsius als Fahrenheit met behulp van de bètaparametervergelijking. De berekende waarden worden naar de seriële monitor geprint.

int adcValue = analogRead(thermistorPin); // Lees ADC-waarde
float voltage = (adcValue * referenceVoltage) / 4095.0; // Bereken spanning
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // Bereken thermistorweerstand

Tot slot wordt de temperatuur weergegeven op het LCD. De functie lcd.print() wordt gebruikt om de temperatuurwaarden weer te geven, samen met het graden-symbool.

lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.write(223); // Graden-symbool
lcd.print("C");

Deze code werkt het LCD elke 300 milliseconden bij met de nieuwste temperatuurmetingen, waardoor real-time monitoring mogelijk is.

Demonstratie / Wat te verwachten

Na het uitvoeren van de code en het voltooien van de bedrading, zou je de temperatuurmetingen op de LCD moeten zien in zowel Celsius als Fahrenheit. Als je de thermistor in je hand houdt, zou je moeten merken dat de temperatuur stijgt naarmate de weerstand afneemt. Wees voorzichtig met omgekeerde polariteit en zorg ervoor dat de verbindingen stevig zijn, aangezien onjuiste bedrading kan leiden tot onnauwkeurige metingen (in video op 04:50).

Videotijdstippen

  • 00:00 Start
  • 1:50 introductie van het project
  • 5:32 bedrading uitgelegd
  • 8:20 Arduino NTC-code voor ESP32 uitgelegd
  • 13:38 ESP32-board en COM-poort selecteren in Arduino IDE
  • 15:20 NTC-temperatuurmeting demonstratie
  • 17:34 NTC-temperatuur op LCD1602 met ESP32
  • 18:42 NTC Arduino-code met LCD uitgelegd
  • 21:15 Demonstratie van temperatuur op LCD
  • 23:13 Groene LCD of blauwe LCD1601?

Afbeeldingen

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

Hulpmiddelen en referenties

Bestanden📁

Geen bestanden beschikbaar.