Cerca codice

Tutorial ESP32 55/55 - Come misurare tensioni DC di 12V, 24V o 100V | Kit di apprendimento IoT ESP32 di SunFounder

Tutorial ESP32 55/55 - Come misurare tensioni DC di 12V, 24V o 100V | Kit di apprendimento IoT ESP32 di SunFounder

In questo tutorial, impareremo come utilizzare l'ESP32 per misurare varie tensioni DC, tra cui 12V, 24V e persino fino a 100V. Utilizzando un circuito divisore di tensione realizzato con due resistori, possiamo misurare in sicurezza tensioni più elevate senza rischiare di danneggiare il microcontrollore ESP32. Questo progetto dimostrerà come leggere queste tensioni e mostrarle sul monitor seriale, fornendo preziose informazioni sulle tue fonti di alimentazione.

ESP32-55-di-ogni-voltaggio-principale

Guarda il video per una spiegazione completa (nel video a :00). Useremo una semplice configurazione di partitore di tensione per raggiungere questo obiettivo, assicurandoci di poter misurare tensioni che superano in sicurezza i livelli massimi di ingresso dell'ESP32. Questo tutorial è perfetto per coloro che desiderano ampliare le loro conoscenze sull'ESP32 e le sue capacità.

Formula per calcolare la tensione

ESP32-55_formula-per-qualsiasi-tensione

Componenti hardware spiegati

I componenti chiave per questo progetto includono il microcontrollore ESP32, due resistori che formano un partitore di tensione e la fonte di alimentazione che si desidera misurare. L'ESP32 è dotato di Wi-Fi e Bluetooth integrati, rendendolo una scelta versatile per i progetti IoT. Il partitore di tensione, composto da due resistori, ci consente di ridurre la tensione a un livello sicuro che l'ESP32 può elaborare.

In questa configurazione, un resistore,R1, è fissato a 10kΩ, mentre il secondo resistore,R2, può variare a seconda della massima tensione che desideri misurare. La tensione attraversoR1è ciò che leggeremo utilizzando il pin di input analogico dell'ESP32, permettendoci di calcolare la tensione originale dalla sorgente di alimentazione.

  • Assicurati che i resistori abbiano una tolleranza del 1% per misurazioni accurate.
  • Utilizza un partitore di tensione per prevenire il superamento delle specifiche di tensione in ingresso dell'ESP32.
  • MantieniR1a 10kΩ e regolareR2basato sull'intervallo di tensione.
  • Controlla le connessioni per evitare ingressi flottanti che possono portare a letture imprecise.
  • Utilizza una fonte di alimentazione stabile per misurazioni di tensione coerenti.

Istruzioni per il cablaggio

Per cablare il circuito, inizia collegando un'estremità delR1resistore (10kΩ) alla tua sorgente di tensione, e l'altro capo al pin GPIO 35 dell'ESP32. Questo pin leggerà la tensione attraversoR1. Successivamente, collega ilR2resistore (che può essere 100kΩ o un altro valore a seconda delle tue esigenze) tra il punto di giunzione diR1e il terreno. Assicurati che il terreno della fonte di alimentazione sia collegato anche al terreno dell'ESP32.

Ad esempio, se si misura 24V, collegare il terminale positivo dell'alimentatore aR1, poi collega l'altra estremità diR1al pin 35 e il giunto dei due resistori. L'estremità libera diR2dovrebbe andare a massa. Questa configurazione consentirà all'ESP32 di leggere in modo sicuro una tensione ridotta.

Esempi di codice e guida passo-passo

const int R1 = 10000; // Resistor 1 value
const int R2 = 100000; // Resistor 2 value
const int VinPin = 35; // Voltage input pin

In questo estratto, definiamo i valori per i nostri resistori,R1eR2, così come il pin analogicoVinPinche useremo per leggere la tensione. Queste costanti sono fondamentali per i nostri calcoli della tensione.

void readVoltage() {
  uint32_t voltage_mV = analogReadMilliVolts(VinPin); // Read in millivolts
  VB1 = (((float) voltage_mV) / 1000.0) * (1 + (float)R2/(float)R1);
}

Questa funzione legge la tensione in millivolt dal pin specificato e calcola la tensione reale.VB1utilizzando la formula del divisore di tensione. Questo è importante per tradurre la tensione ridotta al valore originale.

void maxVoltage() {
  float maxVoltage = (3.1) * (1 + (float)R2/(float)R1);
}

Qui definiamo una funzione per calcolare e stampare la massima tensione che può essere misurata in sicurezza in base ai valori dei resistori. Questa funzione è fondamentale per garantire che non superiamo i limiti di tensione dell'ESP32.

Dimostrazione / Cosa Aspettarsi

Quando esegui il codice, dovresti vedere la tensione misurata visualizzata sul monitor seriale. Man mano che regoli la tensione di ingresso, le letture dovrebbero riflettere questi cambiamenti in tempo reale, dimostrando la capacità dell'ESP32 di misurare vari voltaggi DC con precisione. Se riscontri fluttuazioni nelle letture, considera di ottenere la media di più campioni per ottenere un risultato più stabile (nel video a 12:30).

Timestamp video

  • 00:00 Inizio
  • 1:59 Introduzione al progetto
  • 5:45 Partitore di tensione
  • 7:33 Spiegazione del cablaggio
  • 9:14 Codice Arduino spiegato
  • 14:45 Selezionando la scheda ESP32 e la porta COM su Arduino IDE
  • 16:27 Misurazione di 30V utilizzando una dimostrazione con ESP32
  • 21:36 Cambiato il R2 a 330k ohm
  • 22:33 Misurazione della tensione minima

Immagini

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
Lingua: C++
/*
 * Codice Arduino per ESP32 per misurare qualsiasi tensione continua scritto da Ahmad Shamshiri guarda la spiegazione video completa https://youtu.be/znBiVlgV9JI www.robojax.com 19 feb 2024
 */
bool debug = false;
const int R1 = 10000; // leggere la tensione attraverso questa resistenza ()
const int R2 = 100000;

const int VinPin = 35; // Potenziometro connesso a GPIO14


 // Impostazioni PWM
const int freq = 5000; // Frequenza PWM
const int resolution = 12; // risoluzione PWM (bit)
const int channel = 0; // canale PWM

float VB1;
int mV;

void setup() {
  Serial.begin(115200);
 // Configura PWM
  ledcSetup(channel, freq, resolution);
 // calcolaResistore(R1, 24);//10000 ohm e 35.0V

}



void loop() {
   readVoltage();

  Serial.print("VB1 Voltage: ");
  Serial.print(VB1); // Convertire millivolt in volt
  Serial.println("V ");


  delay(500);
}

void readVoltage()
{
  uint32_t voltage_mV = analogReadMilliVolts(VinPin); // Leggi la tensione in millivolt.
  if(debug)
  {
    maxVoltage();
    Serial.print("PinVoltage: ");
    Serial.print(voltage_mV);
    Serial.println("mV");
    Serial.println(); // questo aggiunge una nuova riga
  }
  mV = voltage_mV;
  VB1 = (((float) voltage_mV) / 1000.0)  * (1 + (float)R2/(float)R1);
}

/*
 * stampa voltaggio massimo
 */
void maxVoltage()
{
  float maxVoltage = ( 3.1)  * (1 + (float)R2/(float)R1);
    Serial.print("****Maximum Voltage: ");
    Serial.print(maxVoltage);
    Serial.println("V");

} // maxVoltage() fine

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);
}

Risorse e riferimenti

Nessuna risorsa ancora.

File📁

Nessun file disponibile.