Samouczek ESP32 55/55 - Jak zmierzyć napięcie stałe 12V, 24V lub 100V | Zestaw edukacyjny SunFounder ESP32 IoT
W tym samouczku nauczymy się, jak używać ESP32 do pomiaru różnych napięć stałych, w tym 12V, 24V, a nawet do 100V. Wykorzystując dzielnik napięcia zbudowany z dwóch rezystorów, możemy bezpiecznie mierzyć wyższe napięcia bez ryzyka uszkodzenia mikrokontrolera ESP32. Ten projekt pokaże, jak odczytywać te napięcia i wyświetlać je na monitorze szeregowym, dostarczając cennych informacji o Twoich źródłach zasilania.
Obejrzyj wideo, aby uzyskać szczegółowe wyjaśnienie (na wideo o 00:00). Użyjemy prostej konfiguracji dzielnika napięcia, aby to osiągnąć, zapewniając bezpieczny pomiar napięć przekraczających maksymalne poziomy wejściowe ESP32. Ten samouczek jest idealny dla osób chcących poszerzyć swoją wiedzę o ESP32 i jego możliwościach.
Wzór do obliczania napięcia
Wyjaśnienie sprzętu
Kluczowe elementy tego projektu to mikrokontroler ESP32, dwa rezystory tworzące dzielnik napięcia oraz źródło zasilania, które chcesz mierzyć. ESP32 jest wyposażony we wbudowaną łączność Wi-Fi i Bluetooth, co czyni go wszechstronnym wyborem do projektów IoT. Dzielnik napięcia, składający się z dwóch rezystorów, pozwala nam zmniejszyć napięcie do bezpiecznego poziomu, który ESP32 może przetworzyć.
W tej konfiguracji jeden rezystor, R1, jest stały i wynosi 10kΩ, podczas gdy drugi rezystor, R2, może się zmieniać w zależności od maksymalnego napięcia, które chcesz mierzyć. Napięcie na R1 jest tym, co odczytamy za pomocą analogowego pinu wejściowego ESP32, co pozwoli nam obliczyć oryginalne napięcie ze źródła zasilania.
- Upewnij się, że rezystory mają tolerancję 1% dla dokładnych pomiarów.
- Użyj dzielnika napięcia, aby nie przekroczyć dopuszczalnych napięć wejściowych ESP32.
- Utrzymuj
R1na poziomie 10kΩ i dostosujR2w zależności od zakresu napięcia. - Sprawdź połączenia, aby uniknąć pływających wejść, które mogą prowadzić do niedokładnych odczytów.
- Użyj stabilnego źródła zasilania dla spójnych pomiarów napięcia.
Instrukcje podłączenia
Aby podłączyć obwód, zacznij od połączenia jednego końca rezystora R1 (10kΩ) do źródła napięcia, a drugiego końca do pinu GPIO 35 ESP32. Ten pin będzie odczytywał napięcie na R1. Następnie podłącz rezystor R2 (który może wynosić 100kΩ lub inną wartość w zależności od potrzeb) między punkt połączenia R1 a masą. Upewnij się, że masa źródła zasilania jest również podłączona do masy ESP32.
Na przykład, jeśli mierzysz 24V, podłącz dodatni zacisk zasilacza do R1, a następnie podłącz drugi koniec R1 do pinu 35 i punktu połączenia dwóch rezystorów. Wolny koniec R2 powinien być podłączony do masy. Ta konfiguracja pozwoli ESP32 bezpiecznie odczytać zmniejszone napięcie.
Przykłady kodu i omówienie
const int R1 = 10000; // Wartość rezystora 1
const int R2 = 100000; // Wartość rezystora 2
const int VinPin = 35; // Pin wejścia napięcia
W tym fragmencie definiujemy wartości naszych rezystorów, R1 i R2, oraz pin analogowy VinPin, którego użyjemy do odczytu napięcia. Te stałe są kluczowe dla naszych obliczeń napięcia.
void readVoltage() {
uint32_t voltage_mV = analogReadMilliVolts(VinPin); // Odczyt w miliwoltach
VB1 = (((float) voltage_mV) / 1000.0) * (1 + (float)R2/(float)R1);
}
Ta funkcja odczytuje napięcie w miliwoltach z określonego pinu i oblicza rzeczywiste napięcie VB1 za pomocą wzoru na dzielnik napięcia. Jest to ważne do przeliczenia zmniejszonego napięcia z powrotem na oryginalną wartość.
void maxVoltage() {
float maxVoltage = (3.1) * (1 + (float)R2/(float)R1);
}
Tutaj definiujemy funkcję do obliczania i wyświetlania maksymalnego napięcia, które można bezpiecznie zmierzyć na podstawie wartości rezystorów. Ta funkcja jest kluczowa, aby upewnić się, że nie przekraczamy limitów napięcia ESP32.
Demonstracja / Czego się spodziewać
Po uruchomieniu kodu powinieneś zobaczyć zmierzone napięcie wyświetlane na monitorze szeregowym. Gdy będziesz regulować napięcie wejściowe, odczyty powinny odzwierciedlać te zmiany w czasie rzeczywistym, demonstrując zdolność ESP32 do dokładnego pomiaru różnych napięć stałych. Jeśli zauważysz wahania odczytów, rozważ uśrednienie wielu próbek, aby uzyskać bardziej stabilny wynik (na wideo o 12:30).
Znaczniki czasu wideo
- 00:00 Start
- 1:59 Wprowadzenie do projektu
- 5:45 Dzielnik napięcia
- 7:33 Wyjaśnienie podłączeń
- 9:14 Wyjaśnienie kodu Arduino
- 14:45 Wybór płytki ESP32 i portu COM w Arduino IDE
- 16:27 Demonstracja pomiaru 30V za pomocą ESP32
- 21:36 Zmiana R2 na 330k omów
- 22:33 Pomiar minimalnego napięcia
/*
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
Zasoby i odniesienia
Brak zasobów.
Pliki📁
Brak dostępnych plików.