ESP32 Tutorial 55/55 - Hoe meet je 12V, 24V of 100V gelijkspanning | SunFounder's ESP32 IoT-leerkit
In deze tutorial leren we hoe we de ESP32 kunnen gebruiken om verschillende gelijkspanningen te meten, waaronder 12V, 24V en zelfs tot 100V. Door gebruik te maken van een spanningsdelercircuit bestaande uit twee weerstanden, kunnen we veilig hogere spanningen meten zonder risico op schade aan de ESP32-microcontroller. Dit project laat zien hoe we deze spanningen kunnen uitlezen en weergeven op de seriële monitor, wat waardevolle inzichten biedt in uw stroombronnen.
Bekijk de video voor een uitgebreide uitleg (in de video op 00:00). We gebruiken een eenvoudige spanningsdelerschakeling om dit te bereiken, zodat we spanningen kunnen meten die de maximale ingangsniveaus van de ESP32 overschrijden, veilig kunnen meten. Deze tutorial is perfect voor degenen die hun kennis van de ESP32 en zijn mogelijkheden willen uitbreiden.
Formule om spanning te berekenen
Hardware uitgelegd
De belangrijkste componenten voor dit project zijn de ESP32-microcontroller, twee weerstanden die een spanningsdeler vormen, en de stroombron die u wilt meten. De ESP32 is uitgerust met ingebouwde Wi-Fi- en Bluetooth-mogelijkheden, waardoor het een veelzijdige keuze is voor IoT-projecten. De spanningsdeler, bestaande uit twee weerstanden, stelt ons in staat om de spanning te verlagen naar een veilig niveau dat de ESP32 kan verwerken.
In deze opstelling is één weerstand, R1, vast ingesteld op 10kΩ, terwijl de tweede weerstand, R2, kan variëren afhankelijk van de maximale spanning die u wilt meten. De spanning over R1 is wat we zullen uitlezen met behulp van de analoge ingangspin van de ESP32, waardoor we de oorspronkelijke spanning van de stroombron kunnen berekenen.
- Zorg ervoor dat weerstanden een tolerantie van 1% hebben voor nauwkeurige metingen.
- Gebruik een spanningsdeler om te voorkomen dat de ingangsspanningswaarden van de ESP32 worden overschreden.
- Houd
R1op 10kΩ en pasR2aan op basis van het spanningsbereik. - Controleer verbindingen om zwevende ingangen te voorkomen die tot onnauwkeurige metingen kunnen leiden.
- Gebruik een stabiele stroombron voor consistente spanningsmetingen.
Bedradingsinstructies
Om het circuit te bedraden, begint u met het verbinden van één uiteinde van de R1-weerstand (10kΩ) met uw spanningsbron, en het andere uiteinde met GPIO-pin 35 van de ESP32. Deze pin leest de spanning over R1. Verbind vervolgens de R2-weerstand (die 100kΩ of een andere waarde kan zijn, afhankelijk van uw behoeften) tussen het knooppunt van R1 en de grond. Zorg ervoor dat de grond van de stroombron ook is verbonden met de grond van de ESP32.
Als u bijvoorbeeld 24V meet, verbindt u de positieve pool van de voeding met R1, en verbindt u vervolgens het andere uiteinde van R1 met pin 35 en het knooppunt van de twee weerstanden. Het vrije uiteinde van R2 moet naar de grond gaan. Deze configuratie stelt de ESP32 in staat om veilig een verlaagde spanning uit te lezen.
Codevoorbeelden & uitleg
const int R1 = 10000; // Weerstand 1 waarde
const int R2 = 100000; // Weerstand 2 waarde
const int VinPin = 35; // Spanning ingangspin
In dit fragment definiëren we de waarden voor onze weerstanden, R1 en R2, evenals de analoge pin VinPin die we zullen gebruiken om de spanning uit te lezen. Deze constanten zijn cruciaal voor onze spanningsberekeningen.
void readVoltage() {
uint32_t voltage_mV = analogReadMilliVolts(VinPin); // Lees in millivolts
VB1 = (((float) voltage_mV) / 1000.0) * (1 + (float)R2/(float)R1);
}
Deze functie leest de spanning in millivolts van de opgegeven pin en berekent de werkelijke spanning VB1 met behulp van de spanningsdelerformule. Dit is belangrijk om de verlaagde spanning terug te vertalen naar de oorspronkelijke waarde.
void maxVoltage() {
float maxVoltage = (3.1) * (1 + (float)R2/(float)R1);
}
Hier definiëren we een functie om de maximale spanning te berekenen en af te drukken die veilig kan worden gemeten op basis van de weerstandswaarden. Deze functie is essentieel om ervoor te zorgen dat we de spanningslimieten van de ESP32 niet overschrijden.
Demonstratie / Wat te verwachten
Wanneer u de code uitvoert, zou u de gemeten spanning op de seriële monitor moeten zien. Terwijl u de ingangsspanning aanpast, moeten de metingen deze veranderingen in realtime weerspiegelen, wat de mogelijkheid van de ESP32 aantoont om verschillende gelijkspanningen nauwkeurig te meten. Als u fluctuaties in de metingen ervaart, overweeg dan om meerdere samples te middelen voor een stabieler resultaat (in de video op 12:30).
Videotijdstempels
- 00:00 Start
- 1:59 Introductie van het project
- 5:45 Spanningsdeler
- 7:33 Bedrading uitgelegd
- 9:14 Arduino-code uitgelegd
- 14:45 ESP32-board en COM-poort selecteren in Arduino IDE
- 16:27 Meten van 30V met ESP32-demonstratie
- 21:36 R2 gewijzigd naar 330k ohm
- 22:33 Minimale spanningsmeting
/*
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
Hulpmiddelen en referenties
Nog geen middelen.
Bestanden📁
Geen bestanden beschikbaar.