Návod ESP32 55/55 – Ako merať 12V, 24V alebo 100V jednosmerné napätie | SunFounder's ESP32 IoT Learning kit
V tomto návode sa naučíme, ako použiť ESP32 na meranie rôznych jednosmerných napätí, vrátane 12V, 24V a dokonca až do 100V. Použitím odporového deliča napätia vytvoreného z dvoch rezistorov môžeme bezpečne merať vyššie napätia bez rizika poškodenia mikrokontroléra ESP32. Tento projekt ukáže, ako čítať tieto napätia a zobrazovať ich na sériovom monitore, čo poskytne cenné informácie o vašich zdrojoch napájania.
Pozrite si video pre komplexné vysvetlenie (vo videu o 00:00). Použijeme jednoduchú konfiguráciu odporového deliča na dosiahnutie tohto cieľa, čím zabezpečíme, že môžeme bezpečne merať napätia, ktoré presahujú maximálne vstupné úrovne ESP32. Tento návod je ideálny pre tých, ktorí chcú rozšíriť svoje znalosti o ESP32 a jeho možnostiach.
Vzorec na výpočet napätia
Vysvetlenie hardvéru
Kľúčové komponenty pre tento projekt zahŕňajú mikrokontrolér ESP32, dva rezistory tvoriace odporový delič a zdroj napájania, ktorý chcete merať. ESP32 je vybavený vstavanými funkciami Wi-Fi a Bluetooth, čo z neho robí všestrannú voľbu pre IoT projekty. Odporový delič, tvorený dvoma rezistormi, nám umožňuje znížiť napätie na bezpečnú úroveň, ktorú ESP32 dokáže spracovať.
V tomto zapojení je jeden rezistor, R1, pevne stanovený na 10kΩ, zatiaľ čo druhý rezistor, R2, sa môže meniť v závislosti od maximálneho napätia, ktoré chcete merať. Napätie na R1 je to, čo budeme čítať pomocou analógového vstupného pinu ESP32, čo nám umožní vypočítať pôvodné napätie zo zdroja napájania.
- Zabezpečte, aby rezistory mali toleranciu 1% pre presné merania.
- Použite odporový delič, aby ste zabránili prekročeniu vstupných napäťových limitov ESP32.
- Udržujte
R1na 10kΩ a upravteR2podľa rozsahu napätia. - Skontrolujte pripojenia, aby ste sa vyhli plávajúcim vstupom, ktoré môžu viesť k nepresným meraniam.
- Použite stabilný zdroj napájania pre konzistentné merania napätia.
Pokyny na zapojenie
Na zapojenie obvodu začnite pripojením jedného konca rezistora R1 (10kΩ) k vášmu zdroju napätia a druhého konca k pinu GPIO 35 na ESP32. Tento pin bude čítať napätie na R1. Ďalej pripojte rezistor R2 (ktorý môže byť 100kΩ alebo iná hodnota podľa vašich potrieb) medzi spojovací bod R1 a zem. Uistite sa, že zem zdroja napájania je tiež pripojená k zemi ESP32.
Napríklad, ak meriate 24V, pripojte kladný pól napájacieho zdroja k R1, potom pripojte druhý koniec R1 k pinu 35 a k spojovaciemu bodu oboch rezistorov. Voľný koniec R2 by mal ísť na zem. Táto konfigurácia umožní ESP32 bezpečne čítať znížené napätie.
Príklady kódu a vysvetlenie
const int R1 = 10000; // Hodnota rezistora 1
const int R2 = 100000; // Hodnota rezistora 2
const int VinPin = 35; // Pin vstupného napätia
V tomto úryvku definujeme hodnoty našich rezistorov, R1 a R2, ako aj analógový pin VinPin, ktorý použijeme na čítanie napätia. Tieto konštanty sú kľúčové pre naše výpočty napätia.
void readVoltage() {
uint32_t voltage_mV = analogReadMilliVolts(VinPin); // Čítanie v milivoltoch
VB1 = (((float) voltage_mV) / 1000.0) * (1 + (float)R2/(float)R1);
}
Táto funkcia číta napätie v milivoltoch zo špecifikovaného pinu a vypočíta skutočné napätie VB1 pomocou vzorca odporového deliča. Toto je dôležité na prepočet zníženého napätia späť na pôvodnú hodnotu.
void maxVoltage() {
float maxVoltage = (3.1) * (1 + (float)R2/(float)R1);
}
Tu definujeme funkciu na výpočet a vytlačenie maximálneho napätia, ktoré možno bezpečne merať na základe hodnôt rezistorov. Táto funkcia je kritická na zabezpečenie toho, aby sme neprekročili napäťové limity ESP32.
Demonštrácia / Čo očakávať
Keď spustíte kód, mali by ste vidieť namerané napätie zobrazené na sériovom monitore. Pri úprave vstupného napätia by sa hodnoty mali meniť v reálnom čase, čo demonštruje schopnosť ESP32 presne merať rôzne jednosmerné napätia. Ak zaznamenáte kolísanie hodnôt, zvážte spriemerovanie viacerých vzoriek na dosiahnutie stabilnejšieho výsledku (vo videu o 12:30).
Časové značky videa
- 00:00 Začiatok
- 1:59 Úvod do projektu
- 5:45 Odporový delič
- 7:33 Vysvetlenie zapojenia
- 9:14 Vysvetlenie Arduino kódu
- 14:45 Výber dosky ESP32 a COM portu v Arduino IDE
- 16:27 Meranie 30V pomocou ESP32 – demonštrácia
- 21:36 Zmena R2 na 330k ohm
- 22:33 Meranie minimálneho napätia
/*
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);
}
Common Course Links
Common Course Files
Resources & references
No resources yet.
Files📁
No files available.