Search Code

የESP32 ትምህርት 55/55 - የ12V፣ 24V ወይም 100V የቀጥታ ጅረት ቮልቴጅ እንዴት እንደሚለካ | የSunFounder የESP32 IoT መማሪያ ኪት

የESP32 ትምህርት 55/55 - የ12V፣ 24V ወይም 100V የቀጥታ ጅረት ቮልቴጅ እንዴት እንደሚለካ | የSunFounder የESP32 IoT መማሪያ ኪት

በዚህ ትምህርት፣ እንዴት ESP32 ን በመጠቀም የተለያዩ የዲሲ ቮልቴጅዎችን፣ 12V፣ 24V እና እስከ 100V ድረስ እንዴት እንደምንለካ እንማራለን። ከሁለት ተከላካዮች የተሰራ የቮልቴጅ መከፋፈያ ወረዳ በመጠቀም፣ ESP32 ማይክሮ መቆጣጠሪያውን ሳያስጋጩ ከፍተኛ ቮልቴጅዎችን በደህና መለካት እንችላለን። ይህ ፕሮጀክት እነዚህን ቮልቴጅዎች እንዴት ማንበብ እና በተከታታይ መቆጣጠሪያ ላይ ማሳየት እንደምንችል ያሳያል፣ ይህም ስለ ኃይል ምንጮችዎ ጠቃሚ ግንዛቤዎችን ይሰጣል።

ESP32-55-any-voltage-main

ለተሟላ ማብራሪያ ቪዲዮውን ይመልከቱ (በቪዲዮው በ00:00)። ይህንን ለማሳካት ቀላል የቮልቴጅ መከፋፈያ ውቅር እንጠቀማለን፣ ይህም የESP32 ከፍተኛ የግቤት ደረጃዎችን የሚበልጡ ቮልቴጅዎችን በደህና መለካት እንደምንችል ያረጋግጣል። ይህ ትምህርት ስለ ESP32 እና አቅሞቹ እውቀታቸውን ለማስፋት ለሚፈልጉ ፍጹም ነው።

ቮልቴጅን ለማስላት ቀመር

ESP32-55_any-voltrage-formula

ሃርድዌር ተብራርቷል

ለዚህ ፕሮጀክት ቁልፍ ክፍሎች ESP32 ማይክሮ መቆጣጠሪያ፣ የቮልቴጅ መከፋፈያ የሚፈጥሩ ሁለት ተከላካዮች እና ለመለካት የሚፈልጉት የኃይል ምንጭ ያካትታሉ። ESP32 አብሮ የተሰራ ዋይ ፋይ እና ብሉቱዝ አቅሞች የተገጠሙለት ሲሆን፣ ለአይኦቲ ፕሮጀክቶች ሁለገብ ምርጫ ያደርገዋል። ከሁለት ተከላካዮች የተሰራው የቮልቴጅ መከፋፈያ፣ ቮልቴጅን ESP32 ሊሰራው ወደሚችለው ደህና ደረጃ እንድንቀንስ ያስችለናል።

በዚህ ውቅር ውስጥ፣ አንድ ተከላካይ፣ R1፣ በ10kΩ ተስተካክሏል፣ ሁለተኛው ተከላካይ፣ R2፣ ለመለካት በሚፈልጉት ከፍተኛ ቮልቴጅ ላይ በመመስረት ሊለያይ ይችላል። በR1 ላይ ያለው ቮልቴጅ የESP32 አናሎግ ግቤት ፒን በመጠቀም የምናነበው ነው፣ ይህም ከኃይል ምንጩ የመጀመሪያውን ቮልቴጅ ለማስላት ያስችለናል።

 

  • ለትክክለኛ መለኪያዎች ተከላካዮች 1% መቻል እንዳላቸው ያረጋግጡ።
  • የESP32 የግቤት ቮልቴጅ ደረጃዎችን ከመጠን በላይ ላለመጫን የቮልቴጅ መከፋፈያ ይጠቀሙ።
  • R1 ን በ10kΩ ያቆዩ እና R2 ን በቮልቴጅ ክልሉ ላይ በመመስረት ያስተካክሉ።
  • ወደ ትክክለኛ ያልሆኑ ንባቦች ሊመሩ የሚችሉ ተንሳፋፊ ግቤቶችን ለማስቀረት ግንኙነቶችን ያረጋግጡ።
  • ለተከታታይ የቮልቴጅ መለኪያዎች የተረጋጋ የኃይል ምንጭ ይጠቀሙ።

የሽቦ አገናኝ መመሪያዎች

ወረዳውን ለማገናኘት፣ የR1 ተከላካይ (10kΩ) አንድ ጫፍ ከቮልቴጅ ምንጭዎ ጋር በማገናኘት ይጀምሩ፣ ሌላኛውን ጫፍ ደግሞ ከESP32 GPIO ፒን 35 ጋር ያገናኙ። ይህ ፒን በR1 ላይ ያለውን ቮልቴጅ ያነባል። በመቀጠል፣ የR2 ተከላካይን (እንደ ፍላጎትዎ 100kΩ ወይም ሌላ እሴት ሊሆን ይችላል) በR1 መጋጠሚያ ነጥብ እና በመሬት መካከል ያገናኙ። የኃይል ምንጩ መሬት ከESP32 መሬት ጋር መገናኘቱን ያረጋግጡ።

ለምሳሌ፣ 24V ን በሚለኩበት ጊዜ፣ የኃይል አቅርቦቱን አወንታዊ ተርሚናል ከR1 ጋር ያገናኙ፣ ከዚያም የR1 ሌላኛውን ጫፍ ከፒን 35 እና ከሁለቱ ተከላካዮች መጋጠሚያ ጋር ያገናኙ። የR2 ነጻ ጫፍ ወደ መሬት መሄድ አለበት። ይህ ውቅር ESP32 የተቀነሰ ቮልቴጅን በደህና እንዲያነብ ያስችለዋል።

የኮድ ምሳሌዎች እና ማብራሪያ

const int R1 = 10000; // የተከላካይ 1 እሴት
const int R2 = 100000; // የተከላካይ 2 እሴት
const int VinPin = 35; // የቮልቴጅ ግቤት ፒን

በዚህ ክፍል፣ የተከላካዮቻችንን እሴቶች፣ R1 እና R2 ን፣ እንዲሁም ቮልቴጅን ለማንበብ የምንጠቀምበትን አናሎግ ፒን VinPin ን እንገልጻለን። እነዚህ ቋሚዎች ለቮልቴጅ ስሌቶቻችን ወሳኝ ናቸው።

void readVoltage() {
  uint32_t voltage_mV = analogReadMilliVolts(VinPin); // በሚሊቮልት ያንብቡ
  VB1 = (((float) voltage_mV) / 1000.0) * (1 + (float)R2/(float)R1);
}

ይህ ተግባር ከተገለጸው ፒን ቮልቴጅን በሚሊቮልት ያነባል እና ትክክለኛውን ቮልቴጅ VB1 ን የቮልቴጅ መከፋፈያ ቀመር በመጠቀም ያሰላል። ይህ የተቀነሰውን ቮልቴጅ ወደ መጀመሪያው እሴት ለመተርጎም አስፈላጊ ነው።

void maxVoltage() {
  float maxVoltage = (3.1) * (1 + (float)R2/(float)R1);
}

እዚህ፣ በተከላካይ እሴቶች ላይ በመመስረት በደህና ሊለካ የሚችለውን ከፍተኛ ቮልቴጅ ለማስላት እና ለማተም አንድ ተግባር እንገልጻለን። ይህ ተግባር የESP32 የቮልቴጅ ገደቦችን እንዳንጥስ ለማረጋገጥ ወሳኝ ነው።

ማሳያ / ምን እንደሚጠበቅ

ኮዱን ሲያሂዱ፣ የተለካው ቮልቴጅ በተከታታይ መቆጣጠሪያው ላይ ሲታይ ማየት አለብዎት። የግቤት ቮልቴጅን ሲያስተካክሉ፣ ንባቦቹ እነዚህን ለውጦች በቅጽበት ያንጸባርቃሉ፣ ይህም ESP32 የተለያዩ የዲሲ ቮልቴጅዎችን በትክክል የመለካት አቅምን ያሳያል። በንባቦቹ ላይ መለዋወጥ ካጋጠምዎት፣ የተረጋጋ ውጤት ለማግኘት ብዙ ናሙናዎችን አማካይ ማድረግን ያስቡበት (በቪዲዮው በ12:30)።

የቪዲዮ ጊዜ ምልክቶች

  • 00:00 መጀመሪያ
  • 1:59 ለፕሮጀክቱ መግቢያ
  • 5:45 የቮልቴጅ መከፋፈያ
  • 7:33 የሽቦ አገናኝ ተብራርቷል
  • 9:14 የአርዱኖ ኮድ ተብራርቷል
  • 14:45 በአርዱኖ IDE ላይ የESP32 ቦርድ እና COM ወደብ መምረጥ
  • 16:27 ESP32 ን በመጠቀም 30V መለካት ማሳያ
  • 21:36 R2 ን ወደ 330k ohm ቀይሯል
  • 22:33 ዝቅተኛው የቮልቴጅ መለኪያ

ምስሎች

ESP32-55_any-voltrage-formula
ESP32-55_any-voltrage-formula
ESP32-55-any-voltage-main
ESP32-55-any-voltage-main
805-ESP32 Tutorial 55/55 - Arduino code to measure 12V, 24V or 100V DC voltage
ቋንቋ: C++
/*
Arduino code for ESP32 to measure any DC voltage
📚⬇️ Download and resource page https://robojax.com/RJT674
written by Ahmad Shamshiri
watch full video explanation https://youtu.be/znBiVlgV9JI
www.robojax.com
Feb 19, 2024
*/
bool debug = false;
const int R1 = 10000;//we read the voltage acrosst this resistor ()
const int R2 = 100000;

const int VinPin = 35; // Potentiometer connected to GPIO14


// PWM settings
const int freq = 5000; // PWM frequency
const int resolution = 12; // PWM resolution (bits)
const int channel = 0; // PWM channel

float VB1;
int mV;

void setup() {
  Serial.begin(115200);
  // Configure PWM
  ledcSetup(channel, freq, resolution);
  //calculatResistor(R1, 24);//10000 ohm and 35.0V

}



void loop() {
   readVoltage();

  Serial.print("VB1 Voltage: ");
  Serial.print(VB1); // Convert millivolts to volts
  Serial.println("V ");


  delay(500);
}

void readVoltage()
{
  uint32_t voltage_mV = analogReadMilliVolts(VinPin); // Read the voltage in millivolts
  if(debug)
  {
    maxVoltage();
    Serial.print("PinVoltage: ");
    Serial.print(voltage_mV);
    Serial.println("mV");
    Serial.println();//this adds a new line
  }
  mV = voltage_mV;
  VB1 = (((float) voltage_mV) / 1000.0)  * (1 + (float)R2/(float)R1);
}

/*
prints maximum volage
*/
void maxVoltage()
{
  float maxVoltage = ( 3.1)  * (1 + (float)R2/(float)R1);
    Serial.print("****Maximum Voltage: ");
    Serial.print(maxVoltage);
    Serial.println("V");

}//maxVoltage() end

void calculatResistor(int r1, float voltage)
{
    Serial.print("Calculating R2 when R1 is :");
    Serial.print(r1);
    Serial.print(" Ohms and Maximum Input Voltage is ");  
    Serial.print(voltage);  
    Serial.println("V");  
    Serial.print("***** R2 Should Be ");  
    float r2 = (voltage - 3.1)/ (3.1/ (float)r1);
    Serial.print(r2 / 1000.0);  
    Serial.println(" kilo Ohms");  
    while(1);
}

ምንጮች እና ምንጮች

አሁን ምንም ምንጮች የለም።

ፋይሎች📁

አንድ ፋይል የለም።