ኢኤስፒ32 ትምህርት 25/55 - የሙቀት መጠንን በNTC እና LCD መለካት | SunFounder የኢኤስፒ32 IoT መማሪያ ኪት
በዚህ ትምህርት ውስጥ፣ አሉታዊ የሙቀት መጠን ቅንጅት (NTC) ቴርሚስተር በመጠቀም የሙቀት መጠንን እንዴት መለካት እንደሚቻል እና ንባቦቹን በESP32 ማይክሮኮንትሮለር በመጠቀም በኤልሲዲ ስክሪን ላይ እንዴት ማሳየት እንደሚቻል እንማራለን። ፕሮጀክቱ NTC ቴርሚስተርን ከESP32 ጋር ማገናኘት እና የሙቀት መጠን ንባቦችን በሁለቱም በሴልሺየስ እና በፋራናይት ለማሳየት ኤልሲዲ መጠቀምን ያካትታል። ይህ በESP32 መድረክ ላይ የሙቀት ዳሳሽ እና ማሳያ ቴክኒኮችን ለመጀመር ጥሩ መንገድ ነው።
የSunFounderን ESP32 የማስፋፊያ ሰሌዳ እንጠቀማለን፣ ይህም የESP32ን አቅም በአብሮገነብ Wi-Fi እና ብሉቱዝ ያሳድጋል። ይህ ሰሌዳ ከተለያዩ ዳሳሾች እና ማሳያዎች ጋር በቀላሉ ሊዋሃድ ይችላል፣ ለአይኦቲ ፕሮጀክቶች ተስማሚ ያደርገዋል። NTC ቴርሚስተር በሙቀት መጠን በተገላቢጦሽ በሚለዋወጠው ተከላካይነቱ ላይ በመመስረት የሙቀት መጠን ንባቦችን ይሰጣል። ስለ ማዋቀሩ እና ኮዱ ተጨማሪ ማብራሪያ ለማግኘት፣ ቪዲዮውን (በቪዲዮው በ00:00) መመልከትዎን ያረጋግጡ።
ሃርድዌር ተብራርቷል
በዚህ ፕሮጀክት ውስጥ ጥቅም ላይ የሚውሉት ዋና ዋና ክፍሎች ESP32 ማይክሮኮንትሮለር፣ NTC ቴርሚስተር፣ ተከላካይ እና ኤልሲዲ ማሳያ ያካትታሉ። ESP32 እንደ ማዕከላዊ ማቀነባበሪያ ክፍል ሆኖ ያገለግላል፣ ከቴርሚስተሩ የሚመጡ መረጃዎችን በመያዝ እና የኤልሲዲ ማሳያውን ይቆጣጠራል። NTC ቴርሚስተር እንደ ሙቀት መጠኑ ተከላካይነቱን ይለውጣል፣ ይህም ከቋሚ ተከላካይ ጋር ባለው የቮልቴጅ መከፋፈያ ውቅር ላይ በመመስረት የሙቀት መጠኑን ለማስላት ያስችለናል።
ኤልሲዲ ማሳያው የሙቀት መጠን ንባቦችን በሁለቱም በሴልሺየስ እና በፋራናይት ያሳያል። ከኤልሲዲ ጋር ለመግባባት የI2C ፕሮቶኮልን እንጠቀማለን፣ ይህም የሚያስፈልጉትን ፒኖች ቁጥር በመቀነስ ሽቦውን ቀላል ያደርገዋል። NTC ቴርሚስተር የሙቀት መጠኑ ሲጨምር ተከላካይነቱ የሚቀንስበት ባህሪ አለው፣ ይህም ለስሌቶቻችን ወሳኝ ነው።
የዳታሼት ዝርዝሮች
| አምራች | SunFounder |
|---|---|
| የክፍል ቁጥር | NTC ቴርሚስተር |
| ስመ ተከላካይነት | 10 kΩ |
| የቤታ እሴት | 3950 K |
| የሙቀት መጠን ክልል | -40°C እስከ 125°C |
| ፓኬጅ | አክሲያል |
- ቴርሚስተሩ ለሚጠበቀው የሙቀት መጠን ክልል ደረጃውን የጠበቀ መሆኑን ያረጋግጡ።
- ለቮልቴጅ መከፋፈያው 10 kΩ ተከላካይ ይጠቀሙ፤ አለበለዚያ ንባቦቹ ትክክለኛ አይሆኑም።
- የአጭር ዑደት ችግሮችን ለማስቀረት ግንኙነቶችን ያረጋግጡ።
- የኤልሲዲውን I2C አድራሻ ትክክለኛ ያድርጉ (በተለምዶ 0x27)።
- ለESP32 እና ለዳርቻ መሳሪያዎች ተገቢ የኃይል አቅርቦት ደረጃዎችን ይጠቀሙ።
- የሴሪያል መቆጣጠሪያ የባውድ መጠን ከኮድ ቅንብሮች (115200) ጋር የሚዛመድ መሆኑን ያረጋግጡ።
የሽቦ መጫኛ መመሪያዎች


ክፍሎቹን ለማገናኘት፣ NTC ቴርሚስተሩን ከESP32 ጋር በማገናኘት ይጀምሩ። ቴርሚስተሩ ምንም የዋልታ አቅጣጫ የለውም፣ ስለዚህ በሁለቱም አቅጣጫ ሊገናኝ ይችላል። የቴርሚስተሩን አንድ ጫፍ በESP32 ላይ ካለው የመሬት (GND) ፒን ጋር ያገናኙ። ሌላኛው ጫፍ ከ10 kΩ ተከላካይ ጋር ይገናኛል፣ ይህም በመቀጠል በESP32 ላይ ካለው 3.3V ፒን ጋር ይገናኛል። በቴርሚስተሩ እና በተከላካዩ መካከል ያለው መጋጠሚያ በESP32 ላይ ካለው ፒን 35 ጋር ይገናኛል፣ ይህም ለሙቀት ስሌቶች ቮልቴጁን ያነባል።
ለኤልሲዲው፣ የመሬት ፒኑን (በተለምዶ ከላይ ሁለተኛው ፒን) ከESP32 ላይ ካለው GND ጋር ያገናኙ። ከዚያ VCC (ብዙውን ጊዜ የመጀመሪያው ፒን) በESP32 ላይ ካለው 5V ፒን ጋር ያገናኙ። የSDA ፒን (ብዙውን ጊዜ ሦስተኛው ፒን) በESP32 ላይ ካለው ፒን 21 ጋር መገናኘት አለበት፣ እና የSCL ፒን (ብዙውን ጊዜ አራተኛው ፒን) ከፒን 22 ጋር መገናኘት አለበት። ሁሉም ግንኙነቶች ደህንነታቸው የተጠበቀ መሆናቸውን ያረጋግጡ እና ስህተቶችን ለማስቀረት የፒን ቁጥሮቹን በድጋሚ ያረጋግጡ።
የኮድ ምሳሌዎች እና ጉዞ
ኮዱ ለቴርሚስተሩ ቋሚዎችን በመግለጽ ይጀምራል፣ የፒን ቁጥርን፣ የማመሳከሪያ ቮልቴጅን እና የተከላካይነት እሴቶችን ጨምሮ። የማዋቀር ተግባሩ የሴሪያል ግንኙነትን ያስጀምራል እና የቴርሚስተር ፒኑን እንደ ግብዓት ያዘጋጃል።
const int thermistorPin = 35; // ከቴርሚስተሩ ጋር የተገናኘ ፒን
const float referenceVoltage = 3.3;
const float referenceResistor = 10000; // 'ሌላኛው' ተከላካይ
ዋናው ዑደት ከቴርሚስተር ፒኑ የአናሎግ እሴቱን ያነባል፣ ተከላካይነቱን ያሰላል፣ ከዚያም የቤታ መለኪያ እኩልታን በመጠቀም የሙቀት መጠኑን በሁለቱም በሴልሺየስ እና በፋራናይት ያሰላል። የተሰሉት እሴቶች በሴሪያል መቆጣጠሪያው ላይ ይታተማሉ።
int adcValue = analogRead(thermistorPin); // ADC እሴትን ያንብቡ
float voltage = (adcValue * referenceVoltage) / 4095.0; // ቮልቴጅን ያሰሉ
float resistance = (voltage * referenceResistor) / (referenceVoltage - voltage); // የቴርሚስተር ተከላካይነትን ያሰሉ
በመጨረሻም፣ የሙቀት መጠኑ በኤልሲዲው ላይ ይታያል። የlcd.print() ተግባር የሙቀት መጠን እሴቶችን ከዲግሪ ምልክቱ ጋር ለማሳየት ይጠቅማል።
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.write(223); // የዲግሪ ምልክት
lcd.print("C");
ይህ ኮድ ኤልሲዲውን በየ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 የNTC Arduino ኮድ ከLCD ጋር ተብራርቷል
- 21:15 የሙቀት መጠን በLCD ላይ ማሳያ
- 23:13 አረንጓዴ LCD ወይስ ሰማያዊ LCD1601?
// 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
}
/*
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
}
Common Course Links
Common Course Files
ምንጮች እና ምንጮች
-
ሰነዶችESP32 Tutorial 25/55- SunFounder doc page for NTS thermometerdocs.sunfounder.com
-
ሰነዶችLearn about NTC Thermistordocs.sunfounder.com
ፋይሎች📁
አንድ ፋይል የለም።