ESP32 บทเรียน 55/55 - วิธีวัดแรงดันไฟฟ้ากระแสตรง 12V, 24V หรือ 100V | ชุดเรียนรู้ IoT ESP32 ของ SunFounder
ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีการใช้ ESP32 เพื่อวัดแรงดันไฟฟ้ากระแสตรงต่างๆ รวมถึง 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 ในการวัดแรงดันไฟฟ้ากระแสตรงต่างๆ ได้อย่างแม่นยำ หากคุณพบความผันผวนของค่าที่อ่านได้ ให้พิจารณาหาค่าเฉลี่ยจากหลายตัวอย่างเพื่อให้ได้ผลลัพธ์ที่เสถียรยิ่งขึ้น (ในวิดีโอที่ 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
แหล่งข้อมูลและเอกสารอ้างอิง
ยังไม่มีทรัพยากรเลย
ไฟล์📁
ไม่มีไฟล์ที่พร้อมใช้งาน