Search Code

ESP32 教學 55/55 - 點樣量度 12V、24V 或者 100V 直流電壓 | SunFounder 嘅 ESP32 IoT 學習套件

ESP32 教學 55/55 - 點樣量度 12V、24V 或者 100V 直流電壓 | SunFounder 嘅 ESP32 IoT 學習套件

喺呢個教學入面,我哋會學吓點樣用ESP32去量度各種直流電壓,包括12V、24V,甚至去到100V。透過用兩個電阻組成嘅分壓電路,我哋可以安全咁量度較高嘅電壓,唔會整壞ESP32微控制器。呢個項目會示範點樣讀取呢啲電壓,並且喺序列監視器上面顯示出嚟,等你對自己嘅電源有更深入嘅了解。

ESP32-55-any-voltage-main

睇吓條片就會有詳細解釋(片入面00:00開始)。我哋會用一個簡單嘅分壓配置嚟做到呢樣嘢,確保可以安全咁量度超過ESP32最大輸入電壓嘅電壓。呢個教學好啱想擴展對ESP32同佢能力認識嘅人。

計算電壓嘅公式

ESP32-55_any-voltrage-formula

硬件講解

呢個項目嘅主要零件包括ESP32微控制器、兩粒組成電壓分配器嘅電阻,以及你想量度嘅電源。ESP32內置Wi-Fi同藍牙功能,係物聯網項目嘅一個好多用途嘅選擇。由兩粒電阻組成嘅分壓器可以將電壓降到一個ESP32可以處理嘅安全水平。

喺呢個設定入面,一粒電阻R1固定係10kΩ,而第二粒電阻R2就可以根據你想量度嘅最大電壓而改變。R1兩端嘅電壓就係我哋用ESP32嘅模擬輸入腳讀取嘅數值,等我哋可以計返電源嘅原始電壓。

 

  • 確保電阻係1%誤差,咁量度先會準確。
  • 用分壓器嚟防止超過ESP32嘅輸入電壓額定值。
  • R1保持喺10kΩ,再根據電壓範圍調整R2
  • 檢查接線,避免浮空輸入導致讀數唔準。
  • 用穩定嘅電源嚟確保電壓量度一致。

接線指示

要接好電路,首先將R1電阻(10kΩ)一端接到你嘅電壓源,另一端接到ESP32嘅GPIO 35腳。呢個腳會讀取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; // 電壓輸入腳

喺呢段入面,我哋定義咗電阻R1R2嘅數值,以及用嚟讀取電壓嘅模擬腳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 喺Arduino IDE度選擇ESP32板同COM埠
  • 16:27 用ESP32量度30V示範
  • 21:36 將R2改做330k ohm
  • 22:33 最低電壓量度

圖片

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
語言: C++
/*
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);
}

資源與參考資料

暫時冇資源。

文件📁

冇文件可用。