Tutorial ESP32 55/55 - Cum să măsori tensiunea continuă de 12V, 24V sau 100V | Kitul de învățare IoT ESP32 de la SunFounder
În acest tutorial, vom învăța cum să folosim ESP32 pentru a măsura diverse tensiuni de curent continuu, inclusiv 12V, 24V și chiar până la 100V. Prin utilizarea unui circuit divizor de tensiune realizat din două rezistențe, putem măsura în siguranță tensiuni mai mari fără a risca deteriorarea microcontrolerului ESP32. Acest proiect va demonstra cum să citim aceste tensiuni și să le afișăm pe monitorul serial, oferind informații valoroase despre sursele tale de alimentare.
Urmărește videoclipul pentru o explicație cuprinzătoare (în videoclip la 00:00). Vom folosi o configurație simplă de divizor de tensiune pentru a realiza acest lucru, asigurându-ne că putem măsura tensiuni care depășesc nivelurile maxime de intrare ale ESP32 în siguranță. Acest tutorial este perfect pentru cei care doresc să își extindă cunoștințele despre ESP32 și capacitățile acestuia.
Formula pentru calcularea tensiunii
Hardware explicat
Componentele cheie pentru acest proiect includ microcontrolerul ESP32, două rezistențe care formează un divizor de tensiune și sursa de alimentare pe care dorești să o măsori. ESP32 este echipat cu capacități integrate Wi-Fi și Bluetooth, fiind o alegere versatilă pentru proiecte IoT. Divizorul de tensiune, format din două rezistențe, ne permite să reducem tensiunea la un nivel sigur pe care ESP32 îl poate procesa.
În această configurație, o rezistență, R1, este fixată la 10kΩ, în timp ce a doua rezistență, R2, poate varia în funcție de tensiunea maximă pe care dorești să o măsori. Tensiunea pe R1 este cea pe care o vom citi folosind pinul analogic de intrare al ESP32, permițându-ne să calculăm tensiunea originală de la sursa de alimentare.
- Asigură-te că rezistențele au toleranță de 1% pentru măsurători precise.
- Folosește un divizor de tensiune pentru a preveni depășirea valorilor nominale de tensiune de intrare ale ESP32.
- Menține
R1la 10kΩ și ajusteazăR2în funcție de intervalul de tensiune. - Verifică conexiunile pentru a evita intrările flotante care pot duce la citiri inexacte.
- Folosește o sursă de alimentare stabilă pentru măsurători consistente ale tensiunii.
Instrucțiuni de cablare
Pentru a cabla circuitul, începe prin conectarea unui capăt al rezistenței R1 (10kΩ) la sursa ta de tensiune, iar celălalt capăt la pinul GPIO 35 al ESP32. Acest pin va citi tensiunea pe R1. Apoi, conectează rezistența R2 (care poate fi 100kΩ sau altă valoare, în funcție de nevoile tale) între punctul de joncțiune al R1 și masă. Asigură-te că masa sursei de alimentare este, de asemenea, conectată la masa ESP32.
De exemplu, dacă măsori 24V, conectează borna pozitivă a sursei de alimentare la R1, apoi conectează celălalt capăt al R1 la pinul 35 și la joncțiunea celor două rezistențe. Capătul liber al R2 ar trebui să meargă la masă. Această configurație va permite ESP32 să citească o tensiune redusă în siguranță.
Exemple de cod și explicații
const int R1 = 10000; // Valoarea rezistenței 1
const int R2 = 100000; // Valoarea rezistenței 2
const int VinPin = 35; // Pinul de intrare a tensiunii
În acest fragment, definim valorile pentru rezistențele noastre, R1 și R2, precum și pinul analogic VinPin pe care îl vom folosi pentru a citi tensiunea. Aceste constante sunt cruciale pentru calculele noastre de tensiune.
void readVoltage() {
uint32_t voltage_mV = analogReadMilliVolts(VinPin); // Citește în milivolți
VB1 = (((float) voltage_mV) / 1000.0) * (1 + (float)R2/(float)R1);
}
Această funcție citește tensiunea în milivolți de la pinul specificat și calculează tensiunea reală VB1 folosind formula divizorului de tensiune. Acest lucru este important pentru a traduce tensiunea redusă înapoi la valoarea originală.
void maxVoltage() {
float maxVoltage = (3.1) * (1 + (float)R2/(float)R1);
}
Aici, definim o funcție pentru a calcula și afișa tensiunea maximă care poate fi măsurată în siguranță pe baza valorilor rezistențelor. Această funcție este critică pentru a ne asigura că nu depășim limitele de tensiune ale ESP32.
Demonstrație / Ce să te aștepți
Când rulezi codul, ar trebui să vezi tensiunea măsurată afișată pe monitorul serial. Pe măsură ce ajustezi tensiunea de intrare, citirile ar trebui să reflecte aceste modificări în timp real, demonstrând capacitatea ESP32 de a măsura cu precizie diverse tensiuni de curent continuu. Dacă întâmpini fluctuații în citiri, ia în considerare medierea mai multor eșantioane pentru a obține un rezultat mai stabil (în videoclip la 12:30).
Marcaje temporale din videoclip
- 00:00 Început
- 1:59 Introducere în proiect
- 5:45 Divizor de tensiune
- 7:33 Cablare explicată
- 9:14 Cod Arduino explicat
- 14:45 Selectarea plăcii ESP32 și a portului COM în Arduino IDE
- 16:27 Măsurarea a 30V folosind ESP32 - Demonstrație
- 21:36 Schimbarea R2 la 330k ohm
- 22:33 Măsurarea tensiunii minime
/*
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
Resurse și referințe
Încă nu sunt resurse.
Fișiere📁
Nu sunt disponibile fișiere.