gpt4 book ai didi

arduino - 如何使用内部ADC ESP32测量电池电压

转载 作者:行者123 更新时间:2023-12-03 14:43:11 25 4
gpt4 key购买 nike

我正在使用(esp32、DHT11、土壤湿度和 nrf24l01)做无线传感器节点,我想添加一个电池来为这些传感器供电,还需要测量电池电压。
对于电池,电压总是改变为不能用作 Vcc 引用,所以我发现有一个内部引用电压。
任何人都可以完成这个给我一些指导。
谢谢

我将使用 LIFEPO4 3.3v 正常(最大 3.6v)或 18650 3.7v/4.2v 最大

最佳答案

根据 docs :

The default ADC full-scale voltage is 1.1V. To read higher voltages (up to the pin maximum voltage, usually 3.3V) requires setting >0dB signal attenuation for that ADC channel.



所以我将 1.1v 设置为零,接下来您可以简单地读取电压(在循环中以获得更好的准确性),然后将其转换为有效电压并找到电池电量的百分比。

在下面的示例中,该函数将返回电池电量的百分比。记得编辑 battery_maxbattery_min根据您的电池电压水平。我假设您将电池连接到 ADC1 channel 0(GPIO 36)。

另外,我建议您创建一个电阻分压器电路来降低电压电平,因为如果您的输入电源下降,Arduino 将直接从模拟输入馈电,这是不可取的,还请记住,您的电压电平不应超过 3.9v。
#include <driver/adc.h>

float battery_read()
{
//read battery voltage per %
long sum = 0; // sum of samples taken
float voltage = 0.0; // calculated voltage
float output = 0.0; //output value
const float battery_max = 3.6; //maximum voltage of battery
const float battery_min = 3.3; //minimum voltage of battery before shutdown

float R1 = 100000.0; // resistance of R1 (100K)
float R2 = 10000.0; // resistance of R2 (10K)

for (int i = 0; i < 500; i++)
{
sum += adc1_get_voltage(ADC1_CHANNEL_0);
delayMicroseconds(1000);
}
// calculate the voltage
voltage = sum / (float)500;
voltage = (voltage * 1.1) / 4096.0; //for internal 1.1v reference
// use if added divider circuit
// voltage = voltage / (R2/(R1+R2));
//round value by two precision
voltage = roundf(voltage * 100) / 100;
Serial.print("voltage: ");
Serial.println(voltage, 2);
output = ((voltage - battery_min) / (battery_max - battery_min)) * 100;
if (output < 100)
return output;
else
return 100.0f;
}

void setup()
{
adc1_config_width(ADC_WIDTH_12Bit);
adc1_config_channel_atten(ADC1_CHANNEL_0, ADC_ATTEN_0db); //set reference voltage to internal
Serial.begin(9600);
}

void loop()
{
Serial.print("Battery Level: ");
Serial.println(battery_read(), 2);
delay(1000);
}

如果添加分频器电路更改 battery_minbattery_max根据分频器电路的新输出。

关于arduino - 如何使用内部ADC ESP32测量电池电压,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56833346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com