Search Code

Samouczek ESP32 55/55 - Jak zmierzyć napięcie stałe 12V, 24V lub 100V | Zestaw edukacyjny SunFounder ESP32 IoT

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.

ESP32-55-any-voltage-main

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

ESP32-55_any-voltrage-formula

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 R1 na poziomie 10kΩ i dostosuj R2 w 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

Obrazy

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
Język: 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);
}

Zasoby i odniesienia

Brak zasobów.

Pliki📁

Brak dostępnych plików.