Tutorial ESP32 55/55 - Como medir a tensão DC de 12V, 24V ou 100V | Kit de aprendizado em IoT ESP32 da SunFounder
Neste tutorial, aprenderemos como usar o ESP32 para medir várias tensões DC, incluindo 12V, 24V e até mesmo 100V. Ao utilizar um circuito divisor de tensão feito com dois resistores, podemos medir tensões mais altas com segurança, sem arriscar danificar o microcontrolador ESP32. Este projeto demonstrará como ler essas tensões e exibi-las no monitor serial, fornecendo informações valiosas sobre suas fontes de energia.
Assista ao vídeo para uma explicação abrangente (no vídeo em 00:00). Estaremos usando uma configuração simples de divisor de tensão para alcançar isso, garantindo que possamos medir tensões que excedem os níveis máximos de entrada do ESP32 com segurança. Este tutorial é perfeito para aqueles que procuram expandir seu conhecimento sobre o ESP32 e suas capacidades.
Fórmula para calcular a tensão
Hardware Explicado
Os principais componentes deste projeto incluem o microcontrolador ESP32, dois resistores formando um divisor de tensão e a fonte de energia que você deseja medir. O ESP32 é equipado com capacidades de Wi-Fi e Bluetooth integradas, tornando-o uma escolha versátil para projetos de IoT. O divisor de tensão, composto por dois resistores, nos permite reduzir a tensão para um nível seguro que o ESP32 pode processar.
Neste arranjo, um resistor,R1está fixado em 10kΩ, enquanto o segundo resistor,R2, pode variar dependendo da tensão máxima que você deseja medir. A tensão em relação aR1é o que leremos usando o pino de entrada analógica do ESP32, permitindo-nos calcular a tensão original da fonte de alimentação.
- Certifique-se de que os resistores têm tolerância de 1% para medições precisas.
- Use um divisor de tensão para evitar exceder as classificações de tensão de entrada do ESP32.
- Mantenha
R1a 10kΩ e ajusteR2baseado na faixa de tensão. - Verifique as conexões para evitar entradas flutuantes que podem levar a leituras imprecisas.
- Utilize uma fonte de energia estável para medições de voltagem consistentes.
Instruções de Fiação
Para ligar o circuito, comece conectando uma extremidade doR1resistor (10kΩ) à sua fonte de tensão, e a outra extremidade ao pino GPIO 35 do ESP32. Este pino irá ler a tensão atravésR1. Em seguida, conecte oR2resistor (que pode ser 100kΩ ou outro valor dependendo das suas necessidades) entre o ponto de junção deR1e o terra. Certifique-se de que o terra da fonte de energia também esteja conectado ao terra do ESP32.
Por exemplo, se medir 24V, conecte o terminal positivo da fonte de alimentação aR1, em seguida conecte a outra extremidade deR1para o pino 35 e a junção dos dois resistores. A extremidade livre deR2deve ir para o terra. Esta configuração permitirá que o ESP32 leia uma tensão reduzida com segurança.
Exemplos de Código e Guia passo a passo
const int R1 = 10000; // Resistor 1 value
const int R2 = 100000; // Resistor 2 value
const int VinPin = 35; // Voltage input pin
Neste excerto, definimos os valores para nossos resistores,R1eR2, assim como o pino analógicoVinPinque usaremos para ler a tensão. Essas constantes são cruciais para nossos cálculos de tensão.
void readVoltage() {
uint32_t voltage_mV = analogReadMilliVolts(VinPin); // Read in millivolts
VB1 = (((float) voltage_mV) / 1000.0) * (1 + (float)R2/(float)R1);
}
Esta função lê a tensão em milivolts do pino especificado e calcula a tensão real.VB1usando a fórmula do divisor de tensão. Isso é importante para traduzir a tensão reduzida de volta ao valor original.
void maxVoltage() {
float maxVoltage = (3.1) * (1 + (float)R2/(float)R1);
}
Aqui, definimos uma função para calcular e imprimir a tensão máxima que pode ser medida com segurança com base nos valores dos resistores. Esta função é crítica para garantir que não excedamos os limites de tensão do ESP32.
Demonstração / O que Esperar
Quando você executar o código, deverá ver a tensão medida exibida no monitor serial. À medida que você ajusta a tensão de entrada, as leituras devem refletir essas mudanças em tempo real, demonstrando a capacidade do ESP32 de medir várias tensões DC com precisão. Se você experimentar flutuações nas leituras, considere fazer a média de várias amostras para obter um resultado mais estável (no vídeo às 12:30).
Marcas de Tempo do Vídeo
- 00:00 Início
- 1:59 Introdução ao projeto
- 5:45 Divisor de tensão
- 7:33 Explicação da fiação
- 9:14 Código Arduino explicado
- 14:45 Selecionando a placa ESP32 e a porta COM no Arduino IDE
- 16:27 Medindo 30V usando demonstração do ESP32
- 21:36 Mudou o R2 para 330k ohm
- 22:33 Medição da tensão mínima
/*
* Código Arduino para ESP32 medir qualquer tensão CC
* escrito por Ahmad Shamshiri
* assista a explicação completa em vídeo https://youtu.be/znBiVlgV9JI
* www.robojax.com
* 19 de fevereiro de 2024
*/
bool debug = false;
const int R1 = 10000; // lermos a tensão através deste resistor ()
const int R2 = 100000;
const int VinPin = 35; // Potenciômetro conectado ao GPIO14
// Configurações PWM
const int freq = 5000; // Frequência PWM
const int resolution = 12; // Resolução PWM (bits)
const int channel = 0; // canal PWM
float VB1;
int mV;
void setup() {
Serial.begin(115200);
// Configurar PWM
ledcSetup(channel, freq, resolution);
// calculatResistor(R1, 24);//10000 ohm e 35,0V
}
void loop() {
readVoltage();
Serial.print("VB1 Voltage: ");
Serial.print(VB1); // Converter milivolts para volts
Serial.println("V ");
delay(500);
}
void readVoltage()
{
uint32_t voltage_mV = analogReadMilliVolts(VinPin); // Leia a tensão em milivolts
if(debug)
{
maxVoltage();
Serial.print("PinVoltage: ");
Serial.print(voltage_mV);
Serial.println("mV");
Serial.println(); // isso adiciona uma nova linha
}
mV = voltage_mV;
VB1 = (((float) voltage_mV) / 1000.0) * (1 + (float)R2/(float)R1);
}
/*
* imprime tensão máxima
*/
void maxVoltage()
{
float maxVoltage = ( 3.1) * (1 + (float)R2/(float)R1);
Serial.print("****Maximum Voltage: ");
Serial.print(maxVoltage);
Serial.println("V");
} // maxVoltage() fim
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
Recursos e referências
Ainda não há recursos.
Arquivos📁
Nenhum arquivo disponível.