Search Code

ESP32 Tutoriaal 55/55 - Hoe om 12V, 24V of 100V GS-spanning te meet | SunFounder se ESP32 IoT-leerkit

ESP32 Tutoriaal 55/55 - Hoe om 12V, 24V of 100V GS-spanning te meet | SunFounder se ESP32 IoT-leerkit

In hierdie tutoriaal sal ons leer hoe om die ESP32 te gebruik om verskeie GS-spannings te meet, insluitend 12V, 24V, en selfs tot 100V. Deur gebruik te maak van 'n spanningsverdelerkring wat uit twee resistors bestaan, kan ons veilig hoër spannings meet sonder om die ESP32-mikrobeheerder te beskadig. Hierdie projek sal demonstreer hoe om hierdie spannings te lees en op die reeksmonitor te vertoon, wat waardevolle insigte in jou kragbronne bied.

ESP32-55-any-voltage-main

Kyk die video vir 'n omvattende verduideliking (in video by 00:00). Ons sal 'n eenvoudige spanningsverdelerkonfigurasie gebruik om dit te bereik, om te verseker dat ons spannings kan meet wat die ESP32 se maksimum insetvlakke veilig oorskry. Hierdie tutoriaal is perfek vir diegene wat hul kennis van die ESP32 en sy vermoëns wil uitbrei.

Formule om spanning te bereken

ESP32-55_any-voltrage-formula

Hardeware Verduidelik

Die sleutelkomponente vir hierdie projek sluit die ESP32-mikrobeheerder, twee resistors wat 'n spanningsverdeler vorm, en die kragbron wat jy wil meet in. Die ESP32 is toegerus met ingeboude Wi-Fi- en Bluetooth-vermoëns, wat dit 'n veelsydige keuse vir IoT-projekte maak. Die spanningsverdeler, wat uit twee resistors bestaan, stel ons in staat om die spanning af te skaal na 'n veilige vlak wat die ESP32 kan verwerk.

In hierdie opstelling is een resistor, R1, vasgestel op 10kΩ, terwyl die tweede resistor, R2, kan wissel na gelang van die maksimum spanning wat jy wil meet. Die spanning oor R1 is wat ons sal lees met behulp van die ESP32 se analoog insetpen, wat ons in staat stel om die oorspronklike spanning van die kragbron te bereken.

 

  • Verseker resistors is 1% toleransie vir akkurate metings.
  • Gebruik 'n spanningsverdeler om te voorkom dat die ESP32 se insetspanningsgraderings oorskry word.
  • Hou R1 op 10kΩ en pas R2 aan op grond van die spanningsreeks.
  • Kontroleer verbindings om drywende insette te vermy wat tot onakkurate lesings kan lei.
  • Gebruik 'n stabiele kragbron vir konsekwente spanningsmetings.

Bedradingsinstruksies

Om die kring te bedraad, begin deur een punt van die R1-resistor (10kΩ) aan jou spanningsbron te koppel, en die ander punt aan die ESP32 se GPIO-pen 35. Hierdie pen sal die spanning oor R1 lees. Koppel vervolgens die R2-resistor (wat 100kΩ of 'n ander waarde kan wees na gelang van jou behoeftes) tussen die aansluitingspunt van R1 en die grond. Maak seker dat die grond van die kragbron ook aan die ESP32 se grond gekoppel is.

Byvoorbeeld, as jy 24V meet, koppel die kragtoevoer se positiewe terminaal aan R1, koppel dan die ander punt van R1 aan pen 35 en die aansluiting van die twee resistors. Die vrye punt van R2 moet na grond gaan. Hierdie konfigurasie sal die ESP32 in staat stel om 'n afgeskaalde spanning veilig te lees.

Kode Voorbeelde & Deurloop

const int R1 = 10000; // Resistor 1 waarde
const int R2 = 100000; // Resistor 2 waarde
const int VinPin = 35; // Spanning insetpen

In hierdie uittreksel definieer ons die waardes vir ons resistors, R1 en R2, sowel as die analoogpen VinPin wat ons sal gebruik om die spanning te lees. Hierdie konstantes is noodsaaklik vir ons spanningsberekeninge.

void readVoltage() {
  uint32_t voltage_mV = analogReadMilliVolts(VinPin); // Lees in millivolts
  VB1 = (((float) voltage_mV) / 1000.0) * (1 + (float)R2/(float)R1);
}

Hierdie funksie lees die spanning in millivolts van die gespesifiseerde pen en bereken die werklike spanning VB1 met behulp van die spanningsverdelerformule. Dit is belangrik om die afgeskaalde spanning terug te vertaal na die oorspronklike waarde.

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

Hier definieer ons 'n funksie om die maksimum spanning te bereken en te druk wat veilig gemeet kan word op grond van die resistorwaardes. Hierdie funksie is kritiek om te verseker dat ons nie die ESP32 se spanningslimiete oorskry nie.

Demonstrasie / Wat om te VerwAg

Wanneer jy die kode laat loop, behoort jy die gemete spanning op die reeksmonitor te sien vertoon. Soos jy die insetspanning aanpas, behoort die lesings hierdie veranderinge in reële tyd te weerspieël, wat die ESP32 se vermoë demonstreer om verskeie GS-spannings akkuraat te meet. As jy skommelinge in die lesings ervaar, oorweeg dit om veelvuldige monsters te gemiddeld om 'n meer stabiele resultaat te verkry (in video by 12:30).

Video Tydstempels

  • 00:00 Begin
  • 1:59 Inleiding tot die projek
  • 5:45 Spanningsverdeler
  • 7:33 Bedrading verduidelik
  • 9:14 Arduino-kode verduidelik
  • 14:45 Kies ESP32-bord en COM-poort op Arduino IDE
  • 16:27 Meet 30V met ESP32 Demonstrasie
  • 21:36 Verander die R2 na 330k ohm
  • 22:33 Minimum spanningsmeting

Beelde

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

Hulpbronne en verwysings

Geen hulpbronne nog.

Lêers📁

Geen lêers beskikbaar.