ESP32 Упатство 55/55 - Како да измерите 12V, 24V или 100V DC напон | SunFounder-овиот ESP32 IoT комплет за учење
Во ова упатство, ќе научиме како да го користиме ESP32 за мерење на различни DC напони, вклучувајќи 12V, 24V, па дури и до 100V. Со користење на делител на напон составен од два отпорници, можеме безбедно да мериме повисоки напони без ризик од оштетување на микроконтролерот ESP32. Овој проект ќе демонстрира како да ги читаме овие напони и да ги прикажеме на серискиот монитор, обезбедувајќи вредни сознанија за вашите извори на напојување.
Погледнете го видеото за сеопфатно објаснување (во видеото на 00:00). Ќе користиме едноставна конфигурација на делител на напон за да го постигнеме ова, осигурувајќи дека можеме безбедно да мериме напони што ги надминуваат максималните влезни нивоа на ESP32. Ова упатство е совршено за оние кои сакаат да го прошират своето знаење за ESP32 и неговите можности.
Формула за пресметување на напон
Објаснување на хардверот
Клучните компоненти за овој проект вклучуваат микроконтролер ESP32, два отпорници што формираат делител на напон, и изворот на напојување што сакате да го мерите. ESP32 е опремен со вградени Wi-Fi и Bluetooth можности, што го прави разновиден избор за IoT проекти. Делителот на напон, составен од два отпорници, ни овозможува да го намалиме напонот на безбедно ниво што ESP32 може да го обработи.
Во оваа поставка, едниот отпорник, R1, е фиксиран на 10kΩ, додека вториот отпорник, R2, може да варира во зависност од максималниот напон што сакате да го мерите. Напонот низ R1 е она што ќе го читаме користејќи го аналогниот влезен пин на ESP32, што ни овозможува да го пресметаме оригиналниот напон од изворот на напојување.
- Осигурете се дека отпорниците се со толеранција од 1% за точни мерења.
- Користете делител на напон за да спречите надминување на влезните напонски оценки на ESP32.
- Држете го
R1на 10kΩ и прилагодете гоR2врз основа на опсегот на напон. - Проверете ги врските за да избегнете лебдечки влезови што можат да доведат до неточни читања.
- Користете стабилен извор на напојување за конзистентни мерења на напон.
Инструкции за поврзување
За да го поврзете колото, започнете со поврзување на едниот крај на отпорникот R1 (10kΩ) со вашиот извор на напон, а другиот крај со GPIO пин 35 на ESP32. Овој пин ќе го чита напонот низ R1. Потоа, поврзете го отпорникот R2 (кој може да биде 100kΩ или друга вредност во зависност од вашите потреби) помеѓу спојната точка на R1 и земјата. Осигурете се дека земјата на изворот на напојување е исто така поврзана со земјата на ESP32.
На пример, ако мерите 24V, поврзете го позитивниот терминал на напојувањето со 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 точно да мери различни DC напони. Ако доживеете флуктуации во читањата, размислете за просечување на повеќе примероци за да постигнете постабилен резултат (во видеото на 12:30).
Временски ознаки на видеото
- 00:00 Почеток
- 1:59 Вовед во проектот
- 5:45 Делител на напон
- 7:33 Објаснување на поврзувањето
- 9:14 Објаснување на Arduino кодот
- 14:45 Избор на ESP32 плоча и COM порт во Arduino IDE
- 16:27 Мерење на 30V со ESP32 - Демонстрација
- 21:36 Промена на R2 на 330k ом
- 22:33 Минимално мерење на напон
/*
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);
}
Common Course Links
Common Course Files
Resources & references
No resources yet.
Files📁
No files available.