โวลต์มิเตอร์ Bluetooth ที่ใช้ Arduino โวลต์มิเตอร์แบบดิจิตอลบน Arduino ที่มีการเชื่อมต่อกับพีซีผ่านพอร์ตอนุกรม Arduino โวลต์มิเตอร์พร้อมเอาต์พุตข้อมูลไปยังคอมพิวเตอร์

ชุด Arduino แบบมัลติฟังก์ชั่นเป็นที่สนใจอย่างกว้างขวางสำหรับแฟน ๆ ของอุปกรณ์ที่ตั้งโปรแกรมด้วยระบบอิเล็กทรอนิกส์แบบโฮมเมด ช่วยให้พวกเขาสามารถนำแนวคิดที่น่าสนใจมาสู่ชีวิตได้

ข้อได้เปรียบหลักของวงจร Arduino สำเร็จรูปคือหลักการบล็อกโมดูลาร์ที่เป็นเอกลักษณ์: แต่ละบอร์ดสามารถเพิ่มอินเทอร์เฟซเพิ่มเติมได้ ซึ่งขยายความเป็นไปได้อย่างไม่มีที่สิ้นสุดสำหรับการสร้างโครงการที่แตกต่างกัน

โมดูลอาดูโน่ถูกสร้างขึ้นบนไมโครคอนโทรลเลอร์สากลพร้อม bootloader ของตัวเองซึ่งทำให้ง่ายต่อการแฟลชด้วยรหัสโปรแกรมที่จำเป็นโดยไม่ต้องใช้อุปกรณ์เพิ่มเติม การเขียนโปรแกรมดำเนินการด้วยภาษา C++ มาตรฐาน

หนึ่งในตัวอย่างที่ง่ายที่สุดของการใช้ Arduino คือการใช้งานโวลต์มิเตอร์ DC ความแม่นยำสูงที่มีช่วงการวัดตั้งแต่ 0 ถึง 30 V โดยอิงจากชุดประกอบนี้

อินพุตแบบอะนาล็อก Arduino ได้รับการออกแบบมาสำหรับแรงดันไฟฟ้าคงที่ไม่เกินห้าโวลต์ดังนั้นการใช้ที่แรงดันไฟฟ้าที่เกินค่านี้จึงเป็นไปได้ด้วยตัวแบ่งแรงดันไฟฟ้า


แผนภาพการเชื่อมต่อของ Areduino ผ่านตัวแบ่งแรงดันไฟฟ้า

ตัวแบ่งแรงดันไฟฟ้าประกอบด้วยความต้านทานสองตัวที่เชื่อมต่อกันแบบอนุกรม คำนวณโดยใช้สูตร:

ช่องต่อ USB ภายนอกในวิทยุติดรถยนต์

มีการนำเสนอแผนภาพที่เป็นประโยชน์สำหรับผู้ที่ชื่นชอบการทดลองกับ Arduino นี่คือโวลต์มิเตอร์แบบดิจิตอลอย่างง่ายที่สามารถวัดแรงดันไฟฟ้ากระแสตรงในช่วง 0 - 30V ได้อย่างน่าเชื่อถือ ตามปกติบอร์ด Arduino สามารถใช้พลังงานจากแบตเตอรี่ 9V ได้

ดังที่คุณคงทราบแล้วว่าอินพุตแบบอะนาล็อกของ Arduino สามารถใช้วัดแรงดันไฟฟ้ากระแสตรงในช่วง 0 - 5V และช่วงนี้สามารถเพิ่มได้
โดยใช้ตัวต้านทานสองตัวเป็นตัวแบ่งแรงดันไฟฟ้า ตัวแบ่งจะลดแรงดันไฟฟ้าที่วัดได้ให้เหลือระดับอินพุตอะนาล็อก Arduino จากนั้นโปรแกรมจะคำนวณค่าแรงดันไฟฟ้าจริง

เซ็นเซอร์แอนะล็อกบนบอร์ด Arduino ตรวจจับแรงดันไฟฟ้าที่อินพุตแอนะล็อก และแปลงเป็นรูปแบบดิจิทัลเพื่อประมวลผลต่อไปโดยไมโครคอนโทรลเลอร์ ในรูป แรงดันไฟฟ้าจะจ่ายให้กับอินพุตแบบอะนาล็อก (A0) ผ่านตัวแบ่งแรงดันไฟฟ้าอย่างง่ายซึ่งประกอบด้วยตัวต้านทาน R1 (100 kOhm) และ R2 (10 kOhm)

ด้วยค่าตัวแบ่งเหล่านี้ บอร์ด Arduino จึงสามารถจ่ายแรงดันไฟฟ้าได้ตั้งแต่ 0 ถึง
55V. ที่อินพุต A0 เรามีแรงดันไฟฟ้าที่วัดได้หารด้วย 11 เช่น 55V / 11=5V กล่าวอีกนัยหนึ่ง เมื่อวัด 55V ที่อินพุต Arduino เราจะมีค่าสูงสุดที่อนุญาตคือ 5V ในทางปฏิบัติ ควรเขียนช่วง "0 - 30V" บนโวลต์มิเตอร์นี้เพื่อให้คงอยู่จะดีกว่า
ขอบความปลอดภัย!

หมายเหตุ

หากการอ่านจอแสดงผลไม่ตรงกับการอ่านโวลต์มิเตอร์ทางอุตสาหกรรม (ห้องปฏิบัติการ) จำเป็นต้องวัดค่าความต้านทาน R1 และ R2 ด้วยเครื่องมือที่แม่นยำและใส่ค่าเหล่านี้แทน R1=100000.0 และ R2=10,000.0 ในโค้ดโปรแกรม จากนั้นคุณควรวัดแรงดันไฟฟ้าจริงระหว่างพิน 5V และ "กราวด์" ของบอร์ด Arduino ด้วยโวลต์มิเตอร์ในห้องปฏิบัติการ ผลลัพธ์ที่ได้จะเป็นค่าน้อยกว่า 5V เช่น จะเป็น 4.95V ควรใส่มูลค่าที่แท้จริงนี้ในบรรทัดของโค้ด
vout = (ค่า * 5.0) / 1,024.0 แทนที่จะเป็น 5.0
นอกจากนี้ ให้ลองใช้ตัวต้านทานที่มีความแม่นยำซึ่งมีความทนทาน 1%

ตัวต้านทาน R1 และ R2 ช่วยป้องกันแรงดันไฟฟ้าขาเข้าที่เพิ่มขึ้น อย่างไรก็ตาม โปรดจำไว้ว่าแรงดันไฟฟ้าที่สูงกว่า 55V อาจทำให้บอร์ด Arduino เสียหายได้ นอกจากนี้ การออกแบบนี้ไม่ได้ให้การป้องกันประเภทอื่น (จากแรงดันไฟกระชาก การกลับขั้ว หรือแรงดันไฟเกิน)

โปรแกรมโวลต์มิเตอร์แบบดิจิตอล

/*
ดีซีโวลท์มิเตอร์
Arduino DVM ตามแนวคิดตัวแบ่งแรงดันไฟฟ้า
ที.เค.หเรนทรัน
*/
#รวม
จอแอลซีดีลิควิดคริสตัล (7, 8, 9, 10, 11, 12);
อินพุทอนาล็อกอินพุท = 0;
ลอยตัว = 0.0;
ลอยวิน = 0.0;
ลอย R1 = 100,000.0; // แนวต้าน R1 (100K) -ดูข้อความ!
ลอย R2 = 10,000.0; // แนวต้าน R2 (10K) – ดูข้อความ!
ค่า int = 0;
การตั้งค่าเป็นโมฆะ())(
pinMode (อินพุตอะนาล็อก, อินพุต);
จอแอลซีดี. เริ่มต้น (16, 2);
lcd.print("DC โวลต์มิเตอร์");
}
เป็นโมฆะวน()
// อ่านค่าที่อินพุตแบบอะนาล็อก
ค่า = analogRead (analogInput);
vout = (ค่า * 5.0) / 1,024.0; //ดูข้อความ
vin = โวต์ / (R2/(R1+R2));
ถ้า (วิน<0.09) {
vin=0.0;//คำสั่งเพื่อยุติการอ่านที่ไม่ต้องการ !
}
จอแอลซีดี setCursor (0, 1);
lcd.print("อินพุต V= ");
จอแอลซีดีพิมพ์(วิน);
ล่าช้า (500);
}

แผนผังของ Arduino-โวลต์มิเตอร์

รายการส่วนประกอบ

บอร์ด Arduino Uno
ตัวต้านทาน 100 โอห์ม
ตัวต้านทาน 10 kOhm
ตัวต้านทาน 100 โอห์ม
ตัวต้านทานทริมเมอร์ 10kOhm
จอ LCD 16?2 (ฮิตาชิ HD44780)

แผนผังของโวลต์มิเตอร์แบบไบโพลาร์แบบโฮมเมดบน Arduino Uno และพร้อมจอแสดงผล 1602A ในบทความ “โวลต์มิเตอร์คู่บน ARDUINO UNO” (L.1) ผู้เขียนเสนอคำอธิบายของโวลต์มิเตอร์และโปรแกรมสำหรับการวัดและบ่งชี้แรงดันไฟฟ้าคงที่สองตัวพร้อมกัน ซึ่งสะดวกมากถ้าคุณต้องการวัดแรงดันไฟฟ้าคงที่สองตัวพร้อมกันและเปรียบเทียบกัน

สิ่งนี้อาจจำเป็น เช่น เมื่อซ่อมแซมหรือตั้งค่าตัวปรับแรงดันไฟฟ้ากระแสตรงเพื่อวัดแรงดันไฟฟ้าที่อินพุตและเอาต์พุต หรือในกรณีอื่น

อย่างไรก็ตาม มีวงจรที่มีแหล่งจ่ายไฟแบบไบโพลาร์ เมื่อแรงดันไฟฟ้า ณ จุดใดจุดหนึ่งในวงจรที่สัมพันธ์กับค่า "ศูนย์" ทั่วไปอาจเป็นได้ทั้งค่าบวกหรือค่าลบ

แผนภาพ

ในที่นี้เราจะอธิบายการปรับเปลี่ยนวงจรและโปรแกรมเพื่อให้อุปกรณ์สามารถวัดและระบุแรงดันไฟฟ้าทั้งบวกและลบได้

เริ่มต้นด้วยแรงดันไฟฟ้าที่วัดได้จะจ่ายให้กับอินพุตอะนาล็อกสองตัว A1 และ A2 มีอินพุตแบบอะนาล็อกทั้งหมดหกช่อง A0-A5 คุณสามารถเลือกสองช่องใดก็ได้ ในกรณีนี้ A1 และ A2 จะถูกเลือก แรงดันไฟฟ้าบนพอร์ตอะนาล็อกสามารถเป็นค่าบวกได้เท่านั้นและอยู่ในช่วงตั้งแต่ศูนย์ถึงแรงดันไฟฟ้าของไมโครคอนโทรลเลอร์เท่านั้นนั่นคือในนามสูงถึง 5V

เอาต์พุตของพอร์ตอะนาล็อกจะถูกแปลงเป็นรูปแบบดิจิทัลโดย ADC ของไมโครคอนโทรลเลอร์ เพื่อให้ได้ผลลัพธ์เป็นหน่วยโวลต์ คุณต้องคูณด้วย 5 (ด้วยแรงดันอ้างอิงนั่นคือด้วยแรงดันไฟฟ้าของไมโครคอนโทรลเลอร์) แล้วหารด้วย 1,024

ข้าว. 1. แผนผังของโวลต์มิเตอร์แบบไบโพลาร์บน Arduino Uno และ 1602A

เพื่อให้สามารถวัดแรงดันไฟฟ้าที่มากกว่า 5V หรือมากกว่าแรงดันไฟฟ้าของไมโครคอนโทรลเลอร์ได้เนื่องจากแรงดันไฟฟ้าจริงที่เอาท์พุตของตัวกันโคลง 5 โวลต์บนบอร์ด ARDUINO UNO อาจแตกต่างจาก 5V และโดยปกติแล้ว ต่ำกว่าเล็กน้อย คุณต้องใช้ตัวแบ่งตัวต้านทานแบบธรรมดาที่อินพุต

นี่คือตัวแบ่งแรงดันระหว่างตัวต้านทาน R1, R3 และ R2, R4 แต่จะเกิดอะไรขึ้นถ้าต้องวัดแรงดันไฟฟ้าน้อยกว่าศูนย์? ในกรณีนี้มีทางเดียวเท่านั้นที่จะออกจากสถานการณ์ - เพื่อเพิ่มระดับอินพุตเป็นศูนย์ ตามหลักการแล้ว คุณต้องมีแรงดันไฟฟ้าครึ่งหนึ่ง นั่นคือ สูงสุด 2.5V ในกรณีนี้ ข้อมูล 2.5V จะถูกเพิ่มให้กับแรงดันไฟฟ้าอินพุต

จากนั้นโดยทางโปรแกรม เพียงลบแรงดันไฟฟ้านี้ออกจากแรงดันไฟฟ้าที่วัดได้ แต่จะต้องมีแหล่งจ่ายแรงดันไฟฟ้าเพิ่มเติม โดยหลักการแล้ว การทำเช่นนี้ไม่ใช่เรื่องยาก แต่มีวิธีแก้ปัญหาที่ง่ายกว่า

นอกจากตัวปรับแรงดันไฟฟ้า 5V แล้ว บอร์ด ARDUINO UNO ยังมีแหล่งจ่ายแรงดันไฟฟ้า 3.3V ดังนั้นจึงสามารถใช้เป็น "ศูนย์เสมือน" สำหรับการเข้าได้

การเปลี่ยนแปลงในวงจรสามารถมองเห็นได้ในรูปที่ 1 เมื่อเปรียบเทียบกับตัวเลือกแรก อินพุต "ศูนย์" จะถูกจัดเรียงใหม่จากศูนย์ทั่วไปไปเป็นแหล่งกำเนิด +Z.ZV ดังนั้นเมื่อแรงดันไฟฟ้าอินพุตเป็นบวก ที่อินพุตจะมากกว่า 3.3V (แต่ไม่เกิน 5V - นี่คือขีดจำกัดบนของการวัด) และเมื่อเป็นลบ - น้อยกว่า 3.3V (แต่ไม่น้อยกว่า OV - นี่ คือขีดจำกัดล่างของการวัด)

การเพิ่มขีดจำกัดการวัด (โมดูโล) ทำได้โดยใช้ตัวแบ่งตัวต้านทาน และการระบุแรงดันไฟฟ้าอินพุตจริงที่จ่ายให้กับ X2 และ X3 ทำได้โดยการลบซอฟต์แวร์ด้วยค่า 3.3V จากแรงดันไฟฟ้าที่อินพุตไมโครคอนโทรลเลอร์

โปรแกรมแสดงในตารางที่ 1 ดังแสดงในบรรทัด:

โวลต์=(vout*5.0/1024.0-3.3)/0.048 ;

โวลต์=(voutl*5.0/1024.0-3.3)/0.048;

หมายเลข 3.3 คือแรงดันไฟฟ้าของอินพุต "ศูนย์เสมือน" นี้อย่างแน่นอน

ในบรรทัดเหล่านี้ ตัวเลข 5.0 คือแรงดันไฟฟ้าที่เอาต์พุตของโคลงของบอร์ด ARDUINO UNO ตามหลักการแล้ว ควรเป็น 5V แต่เพื่อให้โวลต์มิเตอร์ทำงานได้อย่างแม่นยำ จะต้องวัดแรงดันไฟฟ้านี้ก่อน เชื่อมต่อแหล่งจ่ายไฟและวัดแรงดันไฟฟ้า +5V ที่ขั้วต่อ POWER ของบอร์ดด้วยโวลต์มิเตอร์ที่ค่อนข้างแม่นยำ

จะเกิดอะไรขึ้นให้ป้อนบรรทัดเหล่านี้แทน 5.0 เช่นเดียวกับแรงดันไฟฟ้า +3.3V - จำเป็นต้องวัดที่ขั้วต่อบอร์ดเพราะในความเป็นจริงอาจแตกต่างจาก 3.3V เล็กน้อย ตัวอย่างเช่น หาก "5V" เป็นจริง 4.85V และ "3.3V" จริง ๆ แล้วเป็น 3.32V เส้นจะมีลักษณะดังนี้:

โวลต์=(คะแนน*4.85/1024.0-3.32)/0.048;

โวลต์=(voutl*4.85/1024.0-3.32)/0.048;

ในขั้นต่อไป คุณจะต้องวัดความต้านทานที่แท้จริงของตัวต้านทาน R1-R4 และกำหนดค่าสัมประสิทธิ์ K (ระบุเป็น 0.048) สำหรับเส้นเหล่านี้โดยใช้สูตร:

K1 = R3 / (R1+R3) และ K2 = R4 / (R2+R4)

สมมติว่า K1 = 0.046 และ K2 = 0.051 ดังนั้นเราจึงเขียนว่า:

โวลต์=(คะแนน*4.85/1024.0-3.32)/0.046;

โวลต์=(voutl*4.85/1024.0-3.32)/0.051;

ดังนั้น จะต้องเปลี่ยนแปลงข้อความโปรแกรมตามแรงดันไฟฟ้าจริงที่เอาท์พุตของสเตบิไลเซอร์ 5 โวลต์และ 3.3 โวลต์ของบอร์ด ARDUINO UNO และตามค่าสัมประสิทธิ์การแบ่งตามจริงของตัวแบ่งตัวต้านทาน

หลังจากนี้อุปกรณ์จะทำงานได้อย่างแม่นยำและไม่จำเป็นต้องปรับแต่งหรือสอบเทียบใดๆ เมื่อวัดแรงดันลบบนตัวบ่งชี้ LCD จะมีเครื่องหมายลบอยู่หน้าค่าแรงดันไฟฟ้าในบรรทัดที่เกี่ยวข้อง เมื่อวัดแรงดันบวกจะไม่มีสัญญาณ

ด้วยการเปลี่ยนค่าสัมประสิทธิ์การหารของตัวหารตัวต้านทาน (และค่าสัมประสิทธิ์ "K") คุณสามารถสร้างขีดจำกัดการวัดอื่นๆ ได้ และไม่จำเป็นต้องเหมือนกันสำหรับอินพุตทั้งสอง

ฉันขอเตือนคุณว่าโมดูลแสดงผลคริสตัลเหลว H1 ประเภท 1602A เชื่อมต่อกับพอร์ตดิจิทัล D2-D7 ของบอร์ด ARDUINO UNO ไฟแสดงสถานะ LCD ใช้พลังงานจากตัวปรับแรงดันไฟฟ้า 5V ซึ่งอยู่บนบอร์ดควบคุมแรงดันไฟฟ้า 5V

เพื่อให้ตัวบ่งชี้โต้ตอบกับ ARDUINO UNO คุณจะต้องโหลดรูทีนย่อยลงในโปรแกรมเพื่อควบคุม รูทีนดังกล่าวเรียกว่า "ไลบรารี" และมี "ไลบรารี" ที่แตกต่างกันมากมายในแพ็คเกจซอฟต์แวร์ ARDUINO UNO หากต้องการทำงานกับตัวบ่งชี้ LCD ที่ใช้ HD44780 คุณต้องมีไลบรารี LiquidCrystal ดังนั้นโปรแกรม (ตารางที่ 1) จึงเริ่มต้นด้วยการโหลดไลบรารี่นี้:

บรรทัดนี้ให้คำสั่งให้โหลดไลบรารีนี้ลงใน ARDUINO UNO จากนั้นคุณจะต้องกำหนดพอร์ต ARDUINO UNO ที่จะทำงานร่วมกับไฟแสดงสถานะ LCD ฉันเลือกพอร์ต D2 ถึง D7 คุณสามารถเลือกคนอื่นได้ พอร์ตเหล่านี้ถูกกำหนดโดยบรรทัด:

นำ LiquidCrystal (2, 3, 4, 5, 6, 7);

หลังจากนั้นโปรแกรมจะเข้าสู่การทำงานจริงของโวลต์มิเตอร์

คาราฟคิน วี. RK-06-17

วรรณกรรม: 1. Karavkin V. - โวลต์มิเตอร์คู่บน ARDUINO UNO อาร์เค-01-17.

ความคิด

ความคิด อุปกรณ์สำหรับวัดแรงดัน กระแส ความจุ การคายประจุ และประจุอาจมีมานานแล้วและไม่ใช่แค่สำหรับฉันเท่านั้น คุณจะพบของเล่นมากมายที่เรียกว่า USB Tester (Doctor) สำหรับทดสอบอุปกรณ์ USB ต่างๆ ฉันสนใจอุปกรณ์ที่เป็นสากลมากกว่า โดยไม่ขึ้นอยู่กับอินเทอร์เฟซ แต่ออกแบบมาเพื่อแรงดันและกระแสบางอย่างเท่านั้น ตัวอย่างเช่น 0 - 20.00v, 0 - 5.00a, 0 - 99.99Ah. ส่วนฟังก์ชั่นผมเห็นแบบนี้ครับ

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

การพัฒนา

ในการใช้การคำนวณและการวัด เราจำเป็นต้องมีตัวควบคุม ฉันจำแนวคิดนี้ได้จากความคุ้นเคยกับ Arduino ดังนั้นคอนโทรลเลอร์จะเป็น Atmega328 ยอดนิยมที่เรียบง่ายและจะถูกตั้งโปรแกรมไว้ในสภาพแวดล้อม อาร์ดูโน่. จากมุมมองทางวิศวกรรม ตัวเลือกอาจไม่ใช่ตัวเลือกที่ดีที่สุด - คอนโทรลเลอร์นั้นค่อนข้างอ้วนสำหรับงาน และ ADC ของมันไม่สามารถเรียกได้ว่าเป็นการวัด แต่... เราจะพยายาม

  • เราจะไม่ประสานมากในโครงการนี้ โดยพื้นฐานแล้ว เราจะใช้โมดูล Arduino Pro Mini สำเร็จรูป เนื่องจากชาวจีนพร้อมที่จะจำหน่ายในราคาขายปลีก 1.5 ดอลลาร์
  • อุปกรณ์แสดงผลจะเป็นจอแสดงผล 1602 - อีก 1.5 ดอลลาร์ ฉันมีตัวเลือกสำหรับโมดูลอินเทอร์เฟซ I2C แต่ในโปรเจ็กต์นี้ไม่จำเป็นจริงๆ ($0.7)
  • เพื่อการพัฒนาเราจำเป็นต้องมีเขียงหั่นขนม ในกรณีของฉัน นี่คือ BreadBoard ขนาดเล็กราคา $1
  • แน่นอนว่าคุณจะต้องมีสายไฟและตัวต้านทานหลายตัวที่มีค่าต่างกัน สำหรับจอแสดงผล 1602 ที่ไม่มี I2C คุณต้องเลือกคอนทราสต์ด้วย - ซึ่งทำได้ด้วยตัวต้านทานแบบปรับได้ที่ 2 - 20 kOhm
  • ในการใช้แอมป์มิเตอร์ คุณจะต้องมีการแบ่งส่วน ในการประมาณค่าครั้งแรก อาจเป็นตัวต้านทาน 0.1 โอห์ม 5 วัตต์
  • หากต้องการปิดเครื่องอัตโนมัติ คุณจะต้องมีรีเลย์พร้อมหน้าสัมผัสที่ออกแบบมาสำหรับกระแสสูงสุดของอุปกรณ์และแรงดันไฟฟ้าเท่ากับแรงดันไฟฟ้า ในการควบคุมรีเลย์ คุณต้องมีทรานซิสเตอร์ NPN และไดโอดป้องกัน
  • อุปกรณ์จะใช้พลังงานจากแหล่งพลังงานภายนอก ซึ่งเห็นได้ชัดว่าอย่างน้อย 5 V หากแหล่งจ่ายไฟมีความแตกต่างกันอย่างมากก็จำเป็นต้องใช้ตัวกันโคลงแบบรวมประเภท 7805 ซึ่งจะเป็นตัวกำหนดแรงดันไฟฟ้าของรีเลย์
  • เมื่อไร Arduino Pro Mini ต้องใช้ตัวแปลง USB-TTL เพื่ออัปโหลดเฟิร์มแวร์
  • ในการตั้งค่าคุณจะต้องมีมัลติมิเตอร์

โวลต์มิเตอร์

ฉันกำลังใช้โวลต์มิเตอร์แบบธรรมดาโดยมีช่วงประมาณ 0 - 20V หมายเหตุนี้มีความสำคัญเนื่องจาก ADC ของคอนโทรลเลอร์ของเรามีความจุ 10 บิต (ค่าแยก 1,024 ค่า) ดังนั้นข้อผิดพลาดจะมีอย่างน้อย 0.02 V (20/1024) ในการใช้ฮาร์ดแวร์เราจำเป็นต้องมีอินพุตแบบอะนาล็อกของคอนโทรลเลอร์ตัวแบ่งที่ทำจากตัวต้านทานคู่หนึ่งและเอาต์พุตบางประเภท (จอแสดงผลในเวอร์ชันที่เสร็จแล้วสามารถใช้พอร์ตอนุกรมสำหรับการดีบัก)

หลักการวัด ADC คือการเปรียบเทียบแรงดันไฟฟ้าที่อินพุตแบบอะนาล็อกกับ VRef อ้างอิง เอาต์พุต ADC จะเป็นจำนวนเต็มเสมอ - 0 สอดคล้องกับ 0V, 1023 สอดคล้องกับแรงดันไฟฟ้า VRef การวัดจะดำเนินการโดยชุดการอ่านแรงดันไฟฟ้าตามลำดับและการเฉลี่ยในช่วงเวลาระหว่างการอัปเดตค่าบนหน้าจอ การเลือกแรงดันไฟฟ้าอ้างอิงมีความสำคัญเนื่องจากค่าเริ่มต้นจะเป็นแรงดันไฟฟ้าที่จ่ายซึ่งอาจไม่เสถียร สิ่งนี้ไม่เหมาะกับเราเลย - เราจะใช้แหล่งอ้างอิงภายในที่เสถียรซึ่งมีแรงดันไฟฟ้า 1.1V เป็นพื้นฐานโดยเริ่มต้นโดยการเรียกอนาล็อกอ้างอิง(ภายใน) จากนั้นเราจะปรับเทียบค่าโดยใช้การอ่านมัลติมิเตอร์

แผนภาพด้านซ้ายแสดงตัวแปรที่มีการควบคุมจอแสดงผลโดยตรง (ควบคุมได้ง่าย - ดูร่างมาตรฐานของ LiquidCrystal\HelloWorld) ทางด้านขวาคือตัวเลือก I2C ซึ่งฉันจะใช้เพิ่มเติม I2C ช่วยให้คุณประหยัดสายไฟ (ซึ่งในรุ่นปกติมี 10 เส้นไม่นับแบ็คไลท์) แต่ต้องใช้โมดูลเพิ่มเติมและการเริ่มต้นที่ซับซ้อนมากขึ้น ไม่ว่าในกรณีใด จะต้องตรวจสอบการแสดงอักขระบนโมดูลก่อนและปรับความคมชัด - ในการดำเนินการนี้ คุณเพียงแค่ต้องแสดงข้อความใด ๆ หลังจากการกำหนดค่าเริ่มต้น ความเปรียบต่างถูกปรับโดยตัวต้านทาน R1 หรือตัวต้านทานที่คล้ายกันของโมดูล I2C

อินพุตเป็นตัวแบ่ง 1:19 ซึ่งช่วยให้คุณได้รับแรงดันไฟฟ้าสูงสุดประมาณ 20V ที่ Vref = 1.1 (โดยปกติแล้วตัวเก็บประจุ + ซีเนอร์ไดโอดจะถูกวางขนานกับอินพุตเพื่อป้องกัน แต่ตอนนี้สิ่งนี้ไม่สำคัญสำหรับเรา ). ตัวต้านทานมีการแพร่กระจาย และ Vref อ้างอิงของคอนโทรลเลอร์ก็เช่นกัน ดังนั้นหลังจากการประกอบ เราจำเป็นต้องวัดแรงดันไฟฟ้า (อย่างน้อยแหล่งจ่ายไฟ) ขนานกับอุปกรณ์ของเราและมัลติมิเตอร์อ้างอิง และเลือก Vref ในโค้ดจนกว่าค่าที่อ่านได้จะตรงกัน นอกจากนี้ ยังเป็นที่น่าสังเกตว่า ADC ใดๆ มีแรงดันออฟเซ็ตเป็นศูนย์ (ซึ่งทำให้การอ่านค่าที่จุดเริ่มต้นของช่วงเสียไป) แต่เราจะไม่พูดถึงเรื่องนั้นในตอนนี้

การแยกแหล่งจ่ายและกราวด์การวัดก็เป็นสิ่งสำคัญเช่นกัน ADC ของเรามีความละเอียดที่แย่กว่า 1mV เล็กน้อย ซึ่งอาจทำให้เกิดปัญหาได้หากการเดินสายไม่ถูกต้อง โดยเฉพาะบนเขียงหั่นขนม เนื่องจากเค้าโครงของบอร์ดโมดูลได้เสร็จสิ้นแล้ว และเราจะต้องเลือกพินเท่านั้น โมดูลมีพิน "กราวด์" หลายพิน ดังนั้นเราต้องตรวจสอบให้แน่ใจว่าพลังงานเข้าสู่โมดูลผ่าน "กราวด์" อันหนึ่ง และวัดผ่านอีกอัน ที่จริงแล้ว เพื่อทำการเปลี่ยนแปลง ฉันมักจะใช้พินกราวด์ใกล้กับอินพุตอะนาล็อกมากที่สุดเสมอ

ในการควบคุม I2C จะใช้เวอร์ชันของไลบรารี LiquidCrystal_I2C - ในกรณีของฉันจะมีการระบุ pinout เฉพาะของโมดูล I2C (โมดูลการผลิตของจีนที่มีการควบคุมที่แตกต่างกัน) ฉันยังทราบด้วยว่า I2C ใน Arduino ต้องใช้พิน A4 และ A5 - บนบอร์ด Pro Mini พวกเขาไม่ได้อยู่ที่ขอบซึ่งไม่สะดวกสำหรับการสร้างต้นแบบบน BreadBoard

แหล่งที่มา

#รวม #รวม // โวลต์มิเตอร์อย่างง่ายพร้อมจอแสดงผล i2c 1602 V 16.11 // การตั้งค่าสำหรับจอแสดงผล i2c 1602 พร้อม pinout ที่ไม่ได้มาตรฐาน #define LCD_I2C_ADDR 0x27 #define BACKLIGHT 3 #define LCD_EN 2 #define LCD_RW 1 #define LCD_RS 0 #define LCD_D4 4 #define LCD_D5 5 #กำหนด LCD_D6 6 #กำหนด LCD_D7 7 LiquidCrystal_I2C lcd(LCD_I2C_ADDR,LCD_EN,LCD_RW,LCD_RS,LCD_D4,LCD_D5,LCD_D6,LCD_D7); // อ่านเวลาอัปเดต, ms (200-2000) #define REFRESH_TIME 330 // อินพุตแบบอะนาล็อก #define PIN_VOLT A0 // แรงดันอ้างอิงภายใน (เลือก) const float VRef = 1.10; // ค่าสัมประสิทธิ์ตัวแบ่งความต้านทานอินพุต (Rh + Rl) / Rl ใน<-[ Rh ]--(analogInPin)--[ Rl ]--|GND const float VoltMult = (180.0 + 10.0) / 10.0; float InVolt, Volt; void setup() { analogReference(INTERNAL); // Инициализация дисплея lcd.begin (16, 2); lcd.setBacklightPin(BACKLIGHT, POSITIVE); lcd.setBacklight(HIGH); // включить подсветку lcd.clear(); // очистить дисплей lcd.print("Voltage"); } void loop() { unsigned long CalcStart = millis(); int ReadCnt = 0; InVolt = 0; // Чтение из порта с усреднением while ((millis() - CalcStart) < REFRESH_TIME) { InVolt += analogRead(PIN_VOLT); ReadCnt++; } InVolt = InVolt / ReadCnt; // Смещение 0 для конкретного ADC (подобрать или отключить) if (InVolt >0.2) อินโวลท์ += 3; // แปลงเป็นโวลต์ (ค่า: 0..1023 -> (0..VRef) ปรับขนาดโดย Mult) Volt = InVolt * VoltMult * VRef / 1023; // ข้อมูลเอาต์พุต lcd.setCursor (0, 1); จอแอลซีดีพิมพ์(โวลต์); จอแอลซีดีพิมพ์("V"); )

บทความนี้มีแผนภาพที่น่าสนใจสำหรับผู้ที่ชื่นชอบการทดลองและ อาร์ดูโน่. มีโวลต์มิเตอร์แบบดิจิทัลอย่างง่ายที่สามารถวัดแรงดันไฟฟ้ากระแสตรงระหว่าง 0 ถึง 30 โวลต์ได้อย่างปลอดภัย ตัวบอร์ด Arduino เองสามารถจ่ายไฟจากแหล่งจ่ายไฟมาตรฐาน 9 V



ดังที่คุณทราบ การใช้อินพุตแบบอะนาล็อก Arduino คุณสามารถวัดแรงดันไฟฟ้าได้ตั้งแต่ 0 ถึง 5 V (โดยมีแรงดันอ้างอิงมาตรฐาน 5 V) แต่ช่วงนี้สามารถขยายได้โดยใช้ตัวแบ่งแรงดันไฟฟ้า


ตัวแบ่งจะลดแรงดันไฟฟ้าที่วัดได้ให้อยู่ในระดับที่ยอมรับได้สำหรับอินพุตแบบอะนาล็อก จากนั้นโค้ดที่เขียนเป็นพิเศษจะคำนวณแรงดันไฟฟ้าจริง



เซ็นเซอร์อะนาล็อกใน Arduino ตรวจจับแรงดันไฟฟ้าที่อินพุตแบบอะนาล็อกและแปลงเป็นรูปแบบดิจิทัลที่ไมโครคอนโทรลเลอร์สามารถอ่านได้ เราเชื่อมต่อตัวแบ่งแรงดันไฟฟ้าที่เกิดจากความต้านทาน R1 (100K) และ R2 (10K) กับอินพุตอะนาล็อก A0 ด้วยค่าความต้านทานเหล่านี้ สามารถจ่ายไฟให้กับ Arduino ได้สูงสุดถึง 55 V เนื่องจากสัมประสิทธิ์การหารในกรณีนี้คือ 11 ดังนั้น 55V/11 = 5V เพื่อให้แน่ใจว่าการวัดมีความปลอดภัยสำหรับบอร์ด ควรวัดแรงดันไฟฟ้าในช่วงตั้งแต่ 0 ถึง 30 V จะดีกว่า



หากค่าที่อ่านได้บนจอแสดงผลไม่ตรงกับค่าที่อ่านได้ของโวลต์มิเตอร์ที่ตรวจสอบแล้ว ให้ใช้มัลติมิเตอร์แบบดิจิตอลที่มีความแม่นยำเพื่อค้นหาค่าที่แน่นอนของ R1 และ R2 ในกรณีนี้ ในโค้ด คุณจะต้องแทนที่ R1=100000.0 และ R2=10000.0 ด้วยค่าของคุณเอง จากนั้นคุณควรตรวจสอบแหล่งจ่ายไฟโดยการวัดแรงดันไฟฟ้าบนบอร์ดระหว่าง 5V และ GND แรงดันไฟฟ้าสามารถเป็น 4.95 V จากนั้นในรหัส vout = (ค่า * 5.0) / 1,024.0 คุณต้องแทนที่ 5.0 ด้วย 4.95 ขอแนะนำให้ใช้ตัวต้านทานที่มีความแม่นยำโดยมีข้อผิดพลาดไม่เกิน 1% โปรดจำไว้ว่าแรงดันไฟฟ้าที่สูงกว่า 55V อาจทำให้บอร์ด Arduino เสียหายได้!



#รวม จอแอลซีดีลิควิดคริสตัล (7, 8, 9, 10, 11, 12); อินพุทอนาล็อกอินพุท = 0; ลอยตัว = 0.0; ลอยวิน = 0.0; ลอย R1 = 100,000.0; // ความต้านทาน R1 (100K) ลอย R2 = 10,000.0; // ความต้านทาน R2 (10K) ค่า int = 0; การตั้งค่าเป็นโมฆะ ()) ( pinMode (analogInput, INPUT); lcd.begin (16, 2); lcd.print ("DC VOLTMETER"); ) void loop ()) ( // อ่านค่าอะนาล็อก ค่า = analogRead (analogInput ); vout = (ค่า * 5.0) / 1,024.0; vin = vout / (R2/(R1+R2)); ถ้า (vin<0.09) { vin=0.0;// обнуляем нежелательное значение } lcd.setCursor(0, 1); lcd.print("INPUT V= "); lcd.print(vin); delay(500); }


องค์ประกอบที่ใช้:


บอร์ด Arduino Uno
ตัวต้านทาน 100 KOhm
ตัวต้านทาน 10 KOhm
ตัวต้านทาน 100 โอห์ม
โพเทนชิออมิเตอร์ 10KOhm
จอแสดงผล LCD 16×2