สารบัญ:

เครื่องวัดโวลต์มิเตอร์ที่แม่นยำและแม่นยำของ Arduino (0-90V DC): 3 ขั้นตอน
เครื่องวัดโวลต์มิเตอร์ที่แม่นยำและแม่นยำของ Arduino (0-90V DC): 3 ขั้นตอน

วีดีโอ: เครื่องวัดโวลต์มิเตอร์ที่แม่นยำและแม่นยำของ Arduino (0-90V DC): 3 ขั้นตอน

วีดีโอ: เครื่องวัดโวลต์มิเตอร์ที่แม่นยำและแม่นยำของ Arduino (0-90V DC): 3 ขั้นตอน
วีดีโอ: PZEM-025 มิเตอร์ วัดไฟ DC 50A-300A 0-300V DC รุ่นใหม่มี Shunt ในตัว Bidirectional Volt Amp Kwh Watt 2024, กรกฎาคม
Anonim

ในคำแนะนำนี้ ฉันได้สร้างโวลต์มิเตอร์เพื่อวัดแรงดันสูง DC (0-90v) ด้วยความแม่นยำและความแม่นยำสัมพัทธ์โดยใช้ Arduino Nano

การวัดการทดสอบที่ฉันทำนั้นแม่นยำเพียงพอ โดยส่วนใหญ่อยู่ภายใน 0.3v ของแรงดันไฟฟ้าจริงที่วัดด้วยโวลต์มิเตอร์มาตรฐาน (ฉันใช้ Astro AI DM6000AR) นี่ใกล้เพียงพอสำหรับการใช้งานอุปกรณ์ที่ฉันตั้งใจไว้

ในการเก็บถาวรนี้ ฉันใช้การอ้างอิงแรงดันไฟฟ้า (4.096v) และตัวแบ่งแรงดันไฟฟ้า

ทางด้านโค้ด แน่นอนว่าฉันใช้ตัวเลือก "การอ้างอิงภายนอก" สำหรับ Arduino Nano และตัวอย่าง "Smoothing" ในบทช่วยสอน Arduino

เสบียง

1 x Arduino Nano - ลิงค์

1 x Oled แสดงผล (SSD 1306) - ลิงค์

1 x 1/4W ตัวต้านทาน 1% - 1k ohm - Link

1 x 1/4W ตัวต้านทาน 1% - 220k ohm - Link

1 x 1/4W ตัวต้านทาน 1% - 10k ohm - Link

1 x 4.096v LM4040DIZ-4.1 แรงดันอ้างอิง - Link

เขียงหั่นขนมและสายไฟ - Link

Astro AI DM6000AR - ลิงค์

USB Power Bank - ลิงค์

แบตเตอรี่ 9V - ลิงค์

CanadianWinters เป็นผู้มีส่วนร่วมในโปรแกรม Amazon Services LLC Associates ซึ่งเป็นโปรแกรมโฆษณาในเครือที่ออกแบบมาเพื่อให้เว็บไซต์ได้รับค่าธรรมเนียมโดยการลิงก์ไปยัง Amazon.com และเว็บไซต์ในเครือ ด้วยการใช้ลิงก์เหล่านี้ ในฐานะที่เป็น Amazon Associate ฉันจะได้รับรายได้จากการซื้อที่เข้าเงื่อนไข แม้ว่าคุณจะซื้ออย่างอื่น และจะไม่เสียค่าใช้จ่ายใดๆ

ขั้นตอนที่ 1: แผนผัง

แผนผัง
แผนผัง
แผนผัง
แผนผัง

ฉันเชื่อมต่อทุกส่วนตามแผนผังด้านบน โดยเฉพาะอย่างยิ่งฉันเลือกการอ้างอิงแรงดันไฟฟ้า 4.096 ให้อยู่ใกล้เครื่องหมาย 5v มากที่สุดเพื่อหลีกเลี่ยงการสูญเสียความละเอียด

ตามแผ่นข้อมูล ฉันเลือกตัวต้านทาน 1K โอห์มสำหรับการอ้างอิงแรงดันไฟฟ้า แม้ว่าจะสามารถใช้ค่าอื่นได้ แรงดันไฟฟ้าสำหรับอ้างอิงมาจากพิน Nano 5v

แนวคิดของวงจรคือแรงดันไฟตรงที่จะวัดต้องผ่านตัวต้านทานแรงดันไฟ แรงดันไฟฟ้าที่ปรับขนาดแล้วจะเข้าสู่ขาอะนาล็อกของ Arduino เพื่อสุ่มตัวอย่าง ปรับให้เรียบ ปรับขนาดใหม่ และแสดงบนจอแสดงผล OLed

ฉันพยายามทำให้ทุกอย่างเรียบง่าย:)

ขั้นตอนที่ 2: การคำนวณรหัสและตัวต้านทาน

ค่าตัวต้านทานถูกเลือกตามที่แนะนำ (ถ้าฉันจำไม่ผิดนี่คือในแผ่นข้อมูล Arduino/Atmega) เพื่อให้อิมพีแดนซ์ต่ำกว่า 10k โอห์ม

เพื่อลดความซับซ้อนของสิ่งต่าง ๆ ฉันสร้างสเปรดชีตที่คำนวณโดยอัตโนมัติในกรณีที่คุณต้องการใช้ค่าความต้านทานที่แตกต่างกัน: ลิงก์ไปยัง Google ชีต

นี่คือรหัสที่ฉันใช้สำหรับโครงการนี้:

#รวม

#include U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);// (หมุน, [รีเซ็ต]) แรงดันลอย =0; // ใช้สำหรับเก็บค่าแรงดัน float Radjust = 0.043459459; //ตัวแบ่งแรงดัน (R2 / R1+R2) float vbat =0; // แรงดันไฟสุดท้ายหลัง calcs- แรงดันของแบตเตอรีลอย Vref = 4.113; //แรงดันอ้างอิง - ค่าจริงที่วัดได้ ค่าที่กำหนด 4.096v const int numReadings = 50; // จำนวนตัวอย่างการอ่าน - เพิ่มเพื่อให้เรียบยิ่งขึ้น ลดลงเพื่อให้อ่านเร็วขึ้น การอ่าน int[numReadings]; // การอ่านจากอินพุทอนาล็อก int readIndex = 0; // ดัชนีของการอ่านปัจจุบันที่ไม่ได้ลงนามรวมแบบยาว = 0; // ยอดรวม int เฉลี่ย = 0; //ตัวแปรสำหรับการรีเฟรชหน้าจอโดยไม่ใช้การหน่วงเวลา unsigned long PreviousMillis = 0; // จะเก็บครั้งสุดท้ายที่หน้าจอถูกอัพเดต // ค่าคงที่จะไม่เปลี่ยนแปลง: const long interval = 50; // ช่วงเวลาที่รีเฟรชหน้าจอ (มิลลิวินาที) ถือเป็นโมฆะ การตั้งค่า (เป็นโมฆะ) { analogReference (ภายนอก); // ใช้ AREF สำหรับแรงดันอ้างอิง 4.096 แรงดันไฟฟ้าจริงอ้างอิงของฉันคือ 4.113v u8g2.begin(); สำหรับ (int thisReading = 0; thisReading = numReadings) { // …วนรอบจุดเริ่มต้น: readIndex = 0; } // คำนวณค่าเฉลี่ย: ค่าเฉลี่ย = (ผลรวม / numReadings); แรงดันไฟฟ้า = เฉลี่ย * (Vref / 1023.0); //4.113 คือ Vref vbat = แรงดัน/Radjust; // การตั้งค่าการหน่วงเวลาสำหรับการรีเฟรชหน้าจอโดยใช้ Millis if (currentMillis - PreviousMillis >= ช่วงเวลา) { // บันทึกครั้งสุดท้ายที่หน้าจอได้รับการอัพเดต PreviousMillis = currentMillis; u8g2.clearBuffer(); // ล้าง menory ภายใน // แสดงแพ็คแรงดัน u8g2.setFont(u8g2_font_fub20_tr); // 20px แบบอักษร u8g2.setCursor (1, 20); u8g2.print(vbat, 2); u8g2.setFont(u8g2_font_8x13B_mr); // แบบอักษร 10 px u8g2.setCursor (76, 20); u8g2.print("โวลต์"); u8g2.setCursor (1, 40); u8g2.print("CanadianWinters'"); u8g2.setCursor (1, 60); u8g2.print("แรงดันไฟฟ้าที่แม่นยำ"); } u8g2.sendBuffer(); // ถ่ายโอนหน่วยความจำภายในไปยังการแสดงผลล่าช้า (1); }

โปรดทราบว่าฉันค่อนข้างจะขึ้นสนิมกับการเข้ารหัส Arduino ดังนั้นหากคุณพบข้อผิดพลาดหรือวิธีปรับปรุงโค้ด ฉันยินดีรับฟังข้อเสนอแนะ:)

ขั้นตอนที่ 3: มาทดสอบกัน

มาทดสอบกัน!
มาทดสอบกัน!
มาทดสอบกัน!
มาทดสอบกัน!
มาทดสอบกัน!
มาทดสอบกัน!

เพื่อทดสอบโวลต์มิเตอร์นี้ ฉันใช้แบตเตอรี่ 8x 9v ที่ซื้อมาจากร้านค้าในพื้นที่ ฉันวางแผนที่จะใช้โวลต์มิเตอร์นี้เพื่อวัดแรงดันไฟฟ้าของชุดแบตเตอรี่รถจักรยานไฟฟ้าของฉัน (มีแรงดันไฟฟ้าตั้งแต่ 24-60v กับ 72v เป็นครั้งคราว)

เมื่อบรรจุอุปกรณ์อิเล็กทรอนิกส์ลงใน pcb และกล่องเล็กๆ แล้ว จะทำให้เป็นเครื่องวัดแบตเตอรี่แบบพกพาที่ดีและสวยงาม กราฟิกและแบบอักษรบน OLED สามารถปรับแต่งให้เหมาะกับความต้องการของคุณได้ (เช่น แบบอักษรที่ใหญ่ขึ้นเพื่อให้อ่านง่าย)

เป้าหมายของฉันคือการอ่านค่าแรงดันไฟฟ้าบนมิเตอร์ Oled/Arduino ซึ่งอยู่ไม่ไกลจาก Digital Multi Meter ของฉันมากนัก ฉันตั้งเป้าไปที่ +/-0, 3v max delta ดังที่คุณเห็นจากวิดีโอ ฉันสามารถเก็บถาวรสิ่งนี้ได้ ยกเว้นที่ปลายบนสุดของการวัด

ฉันหวังว่าคุณจะสนุกกับคำแนะนำนี้และแจ้งให้เราทราบความคิดของคุณ!

แนะนำ: