Search Code

ኢኤስፒ32 ትምህርት 25/55 - የሙቀት መጠንን በNTC እና LCD መለካት | SunFounder የኢኤስፒ32 IoT መማሪያ ኪት

ኢኤስፒ32 ትምህርት 25/55 - የሙቀት መጠንን በNTC እና LCD መለካት | SunFounder የኢኤስፒ32 IoT መማሪያ ኪት

በዚህ ትምህርት ውስጥ፣ አሉታዊ የሙቀት መጠን ቅንጅት (NTC) ቴርሚስተር በመጠቀም የሙቀት መጠንን እንዴት መለካት እንደሚቻል እና ንባቦቹን በESP32 ማይክሮኮንትሮለር በመጠቀም በኤልሲዲ ስክሪን ላይ እንዴት ማሳየት እንደሚቻል እንማራለን። ፕሮጀክቱ NTC ቴርሚስተርን ከESP32 ጋር ማገናኘት እና የሙቀት መጠን ንባቦችን በሁለቱም በሴልሺየስ እና በፋራናይት ለማሳየት ኤልሲዲ መጠቀምን ያካትታል። ይህ በESP32 መድረክ ላይ የሙቀት ዳሳሽ እና ማሳያ ቴክኒኮችን ለመጀመር ጥሩ መንገድ ነው።

ESP32-25-NTC_thermometeLCD

የSunFounderን ESP32 የማስፋፊያ ሰሌዳ እንጠቀማለን፣ ይህም የESP32ን አቅም በአብሮገነብ Wi-Fi እና ብሉቱዝ ያሳድጋል። ይህ ሰሌዳ ከተለያዩ ዳሳሾች እና ማሳያዎች ጋር በቀላሉ ሊዋሃድ ይችላል፣ ለአይኦቲ ፕሮጀክቶች ተስማሚ ያደርገዋል። NTC ቴርሚስተር በሙቀት መጠን በተገላቢጦሽ በሚለዋወጠው ተከላካይነቱ ላይ በመመስረት የሙቀት መጠን ንባቦችን ይሰጣል። ስለ ማዋቀሩ እና ኮዱ ተጨማሪ ማብራሪያ ለማግኘት፣ ቪዲዮውን (በቪዲዮው በ00:00) መመልከትዎን ያረጋግጡ።

ሃርድዌር ተብራርቷል

በዚህ ፕሮጀክት ውስጥ ጥቅም ላይ የሚውሉት ዋና ዋና ክፍሎች ESP32 ማይክሮኮንትሮለር፣ NTC ቴርሚስተር፣ ተከላካይ እና ኤልሲዲ ማሳያ ያካትታሉ። ESP32 እንደ ማዕከላዊ ማቀነባበሪያ ክፍል ሆኖ ያገለግላል፣ ከቴርሚስተሩ የሚመጡ መረጃዎችን በመያዝ እና የኤልሲዲ ማሳያውን ይቆጣጠራል። NTC ቴርሚስተር እንደ ሙቀት መጠኑ ተከላካይነቱን ይለውጣል፣ ይህም ከቋሚ ተከላካይ ጋር ባለው የቮልቴጅ መከፋፈያ ውቅር ላይ በመመስረት የሙቀት መጠኑን ለማስላት ያስችለናል።

NTC_thermistor

ኤልሲዲ ማሳያው የሙቀት መጠን ንባቦችን በሁለቱም በሴልሺየስ እና በፋራናይት ያሳያል። ከኤልሲዲ ጋር ለመግባባት የI2C ፕሮቶኮልን እንጠቀማለን፣ ይህም የሚያስፈልጉትን ፒኖች ቁጥር በመቀነስ ሽቦውን ቀላል ያደርገዋል። NTC ቴርሚስተር የሙቀት መጠኑ ሲጨምር ተከላካይነቱ የሚቀንስበት ባህሪ አለው፣ ይህም ለስሌቶቻችን ወሳኝ ነው።

የዳታሼት ዝርዝሮች

አምራች SunFounder
የክፍል ቁጥር NTC ቴርሚስተር
ስመ ተከላካይነት 10 kΩ
የቤታ እሴት 3950 K
የሙቀት መጠን ክልል -40°C እስከ 125°C
ፓኬጅ አክሲያል

 

  • ቴርሚስተሩ ለሚጠበቀው የሙቀት መጠን ክልል ደረጃውን የጠበቀ መሆኑን ያረጋግጡ።
  • ለቮልቴጅ መከፋፈያው 10 kΩ ተከላካይ ይጠቀሙ፤ አለበለዚያ ንባቦቹ ትክክለኛ አይሆኑም።
  • የአጭር ዑደት ችግሮችን ለማስቀረት ግንኙነቶችን ያረጋግጡ።
  • የኤልሲዲውን I2C አድራሻ ትክክለኛ ያድርጉ (በተለምዶ 0x27)።
  • ለESP32 እና ለዳርቻ መሳሪያዎች ተገቢ የኃይል አቅርቦት ደረጃዎችን ይጠቀሙ።
  • የሴሪያል መቆጣጠሪያ የባውድ መጠን ከኮድ ቅንብሮች (115200) ጋር የሚዛመድ መሆኑን ያረጋግጡ።
NTC_formula

የሽቦ መጫኛ መመሪያዎች

ESP32-11_LCD-wiring
ESP32-25-NTC_thermometer_wiring

ክፍሎቹን ለማገናኘት፣ 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?

ምስሎች

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
ቋንቋ: 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
ቋንቋ: 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
}

ምንጮች እና ምንጮች

ፋይሎች📁

አንድ ፋይል የለም።