ค้นหาโค้ด

ESP32 บทเรียน 55/55 - วิธีวัดแรงดันไฟฟ้ากระแสตรง 12V, 24V หรือ 100V | ชุดเรียนรู้ IoT ESP32 ของ SunFounder

ESP32 บทเรียน 55/55 - วิธีวัดแรงดันไฟฟ้ากระแสตรง 12V, 24V หรือ 100V | ชุดเรียนรู้ IoT ESP32 ของ SunFounder

ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีการใช้ ESP32 เพื่อวัดแรงดันไฟฟ้ากระแสตรงต่างๆ รวมถึง 12V, 24V และแม้กระทั่งสูงถึง 100V โดยการใช้วงจรแบ่งแรงดันไฟฟ้าที่สร้างจากตัวต้านทานสองตัว เราสามารถวัดแรงดันไฟฟ้าที่สูงขึ้นได้อย่างปลอดภัยโดยไม่เสี่ยงต่อความเสียหายของไมโครคอนโทรลเลอร์ ESP32 โปรเจกต์นี้จะสาธิตวิธีการอ่านแรงดันไฟฟ้าเหล่านี้และแสดงผลบนซีเรียลมอนิเตอร์ ซึ่งให้ข้อมูลเชิงลึกที่มีค่าเกี่ยวกับแหล่งจ่ายไฟของคุณ

ESP32-55-any-voltage-main

ชมวิดีโอสำหรับคำอธิบายที่ครอบคลุม (ในวิดีโอที่ 00:00) เราจะใช้การกำหนดค่าตัวแบ่งแรงดันไฟฟ้าแบบง่ายเพื่อให้บรรลุเป้าหมายนี้ เพื่อให้แน่ใจว่าเราสามารถวัดแรงดันไฟฟ้าที่เกินระดับอินพุตสูงสุดของ ESP32 ได้อย่างปลอดภัย บทช่วยสอนนี้เหมาะสำหรับผู้ที่ต้องการขยายความรู้เกี่ยวกับ ESP32 และความสามารถของมัน

สูตรคำนวณแรงดันไฟฟ้า

ESP32-55_any-voltrage-formula

อธิบายฮาร์ดแวร์

ส่วนประกอบสำคัญสำหรับโปรเจกต์นี้ประกอบด้วยไมโครคอนโทรลเลอร์ 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 ในการวัดแรงดันไฟฟ้ากระแสตรงต่างๆ ได้อย่างแม่นยำ หากคุณพบความผันผวนของค่าที่อ่านได้ ให้พิจารณาหาค่าเฉลี่ยจากหลายตัวอย่างเพื่อให้ได้ผลลัพธ์ที่เสถียรยิ่งขึ้น (ในวิดีโอที่ 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 การวัดแรงดันไฟฟ้าต่ำสุด

ภาพ

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);
}

แหล่งข้อมูลและเอกสารอ้างอิง

ยังไม่มีทรัพยากรเลย

ไฟล์📁

ไม่มีไฟล์ที่พร้อมใช้งาน