ESP32 Урок 55/55 — Как измерить постоянное напряжение 12 В, 24 В или 100 В | Обучающий набор SunFounder ESP32 IoT
В этом руководстве мы научимся использовать ESP32 для измерения различных напряжений постоянного тока, включая 12 В, 24 В и даже до 100 В. Используя делитель напряжения, состоящий из двух резисторов, мы можем безопасно измерять более высокие напряжения, не рискуя повредить микроконтроллер ESP32. Этот проект продемонстрирует, как считывать эти напряжения и отображать их в мониторе последовательного порта, предоставляя ценную информацию о ваших источниках питания.
Посмотрите видео для подробного объяснения (в видео на 00:00). Мы будем использовать простую конфигурацию делителя напряжения для достижения этой цели, гарантируя, что мы можем безопасно измерять напряжения, превышающие максимальные входные уровни ESP32. Это руководство идеально подходит для тех, кто хочет расширить свои знания об ESP32 и его возможностях.
Формула для расчета напряжения
Объяснение аппаратной части
Ключевые компоненты для этого проекта включают микроконтроллер ESP32, два резистора, образующих делитель напряжения, и источник питания, который вы хотите измерить. ESP32 оснащен встроенными возможностями Wi-Fi и Bluetooth, что делает его универсальным выбором для проектов Интернета вещей. Делитель напряжения, состоящий из двух резисторов, позволяет нам снизить напряжение до безопасного уровня, который ESP32 может обработать.
В этой схеме один резистор, R1, зафиксирован на 10 кОм, а второй резистор, R2, может изменяться в зависимости от максимального напряжения, которое вы хотите измерить. Напряжение на R1 — это то, что мы будем считывать с помощью аналогового входного контакта ESP32, что позволит нам рассчитать исходное напряжение от источника питания.
- Убедитесь, что резисторы имеют допуск 1% для точных измерений.
- Используйте делитель напряжения, чтобы не превышать номинальные входные напряжения ESP32.
- Держите
R1на 10 кОм и регулируйтеR2в зависимости от диапазона напряжений. - Проверяйте соединения, чтобы избежать плавающих входов, которые могут привести к неточным показаниям.
- Используйте стабильный источник питания для получения стабильных измерений напряжения.
Инструкции по подключению
Чтобы подключить схему, начните с соединения одного конца резистора R1 (10 кОм) с вашим источником напряжения, а другой конец — с контактом GPIO 35 ESP32. Этот контакт будет считывать напряжение на R1. Затем подключите резистор R2 (который может быть 100 кОм или другим значением в зависимости от ваших потребностей) между точкой соединения R1 и землей. Убедитесь, что земля источника питания также подключена к земле ESP32.
Например, при измерении 24 В подключите положительный вывод источника питания к R1, затем соедините другой конец R1 с контактом 35 и точкой соединения двух резисторов. Свободный конец R2 должен идти на землю. Эта конфигурация позволит ESP32 безопасно считывать пониженное напряжение.
Примеры кода и пояснения
const int R1 = 10000; // Значение резистора 1
const int R2 = 100000; // Значение резистора 2
const int VinPin = 35; // Контакт входа напряжения
В этом фрагменте мы определяем значения наших резисторов, R1 и R2, а также аналоговый контакт VinPin, который мы будем использовать для считывания напряжения. Эти константы имеют решающее значение для наших расчетов напряжения.
void readVoltage() {
uint32_t voltage_mV = analogReadMilliVolts(VinPin); // Чтение в милливольтах
VB1 = (((float) voltage_mV) / 1000.0) * (1 + (float)R2/(float)R1);
}
Эта функция считывает напряжение в милливольтах с указанного контакта и вычисляет фактическое напряжение VB1 с использованием формулы делителя напряжения. Это важно для преобразования пониженного напряжения обратно в исходное значение.
void maxVoltage() {
float maxVoltage = (3.1) * (1 + (float)R2/(float)R1);
}
Здесь мы определяем функцию для расчета и вывода максимального напряжения, которое можно безопасно измерить на основе значений резисторов. Эта функция критически важна для обеспечения того, чтобы мы не превышали пределы напряжения ESP32.
Демонстрация / Что ожидать
Когда вы запустите код, вы должны увидеть измеренное напряжение, отображаемое в мониторе последовательного порта. При регулировке входного напряжения показания должны отражать эти изменения в реальном времени, демонстрируя способность ESP32 точно измерять различные напряжения постоянного тока. Если вы испытываете колебания показаний, рассмотрите возможность усреднения нескольких выборок для получения более стабильного результата (в видео на 12:30).
Временные метки видео
- 00:00 Начало
- 1:59 Введение в проект
- 5:45 Делитель напряжения
- 7:33 Объяснение подключения
- 9:14 Объяснение кода Arduino
- 14:45 Выбор платы ESP32 и COM-порта в Arduino IDE
- 16:27 Демонстрация измерения 30 В с помощью ESP32
- 21:36 Изменение R2 на 330 кОм
- 22:33 Измерение минимального напряжения
/*
* Код Arduino для ESP32 для измерения любого постоянного напряжения написан Ахмадом Шамширим. Посмотрите полное видеообъяснение https://youtu.be/znBiVlgV9JI www.robojax.com 19 февраля 2024 года
*/
bool debug = false;
const int R1 = 10000; // мы измерили напряжение на этом резисторе ()
const int R2 = 100000;
const int VinPin = 35; // Потенциометр подключен к GPIO14
// Настройки ШИМ
const int freq = 5000; // Частота ШИМ
const int resolution = 12; // Разрешение ШИМ (бит)
const int channel = 0; // ШИМ-канал
float VB1;
int mV;
void setup() {
Serial.begin(115200);
// Настроить ШИМ
ledcSetup(channel, freq, resolution);
// calculatResistor(R1, 24);//10000 Ом и 35.0V
}
void loop() {
readVoltage();
Serial.print("VB1 Voltage: ");
Serial.print(VB1); // Преобразуйте милливольты в вольты
Serial.println("V ");
delay(500);
}
void readVoltage()
{
uint32_t voltage_mV = analogReadMilliVolts(VinPin); // Прочитайте напряжение в милливольтах
if(debug)
{
maxVoltage();
Serial.print("PinVoltage: ");
Serial.print(voltage_mV);
Serial.println("mV");
Serial.println(); // это добавляет новую строку
}
mV = voltage_mV;
VB1 = (((float) voltage_mV) / 1000.0) * (1 + (float)R2/(float)R1);
}
/*
* печатает максимальное напряжение
*/
void maxVoltage()
{
float maxVoltage = ( 3.1) * (1 + (float)R2/(float)R1);
Serial.print("****Maximum Voltage: ");
Serial.print(maxVoltage);
Serial.println("V");
} // maxVoltage() конец
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
Ресурсы и ссылки
Ресурсов пока нет.
Файлы📁
Нет доступных файлов.