- วัสดุที่จำเป็น
- แผนภูมิวงจรรวม
- หน่วยการวัด
- หน่วยคำนวณและแสดงผล
- การเขียนโปรแกรม Arduino
- วิธีการวัดความแม่นยำมากขึ้น?
- การทำงานและการทดสอบ
ในฐานะวิศวกรอิเล็กทรอนิกส์เรามักจะพึ่งพามิเตอร์ / เครื่องมือในการวัดและวิเคราะห์การทำงานของวงจร เริ่มต้นด้วยมัลติมิเตอร์ธรรมดาไปจนถึงเครื่องวิเคราะห์คุณภาพไฟฟ้าที่ซับซ้อนหรือ DSO ทุกอย่างมีแอพพลิเคชั่นเฉพาะของตัวเอง เครื่องวัดเหล่านี้ส่วนใหญ่พร้อมใช้งานและสามารถซื้อได้ตามพารามิเตอร์ที่จะวัดและความแม่นยำ แต่บางครั้งเราอาจจบลงในสถานการณ์ที่เราต้องสร้างมิเตอร์ของเราเอง ตัวอย่างเช่นคุณกำลังทำงานในโครงการ Solar PV และคุณต้องการคำนวณการใช้พลังงานของโหลดของคุณในสถานการณ์เช่นนี้เราสามารถสร้าง Wattmeter ของเราเองโดยใช้แพลตฟอร์มไมโครคอนโทรลเลอร์แบบง่ายๆเช่น Arduino
การสร้างมิเตอร์ของคุณเองไม่เพียง แต่ลดต้นทุนในการทดสอบเท่านั้น แต่ยังช่วยให้เรามีพื้นที่ในการทดสอบได้ง่ายขึ้นอีกด้วย เช่นเดียวกับวัตต์มิเตอร์ที่สร้างขึ้นโดยใช้ Arduinoสามารถปรับแต่งได้อย่างง่ายดายเพื่อตรวจสอบผลลัพธ์บนมอนิเตอร์แบบอนุกรมและพล็อตกราฟบนพล็อตเตอร์อนุกรมหรือเพิ่มการ์ด SD เพื่อบันทึกค่าของแรงดันไฟฟ้ากระแสและพลังงานตามช่วงเวลาที่กำหนดไว้ ฟังดูน่าสนใจใช่ไหม!? มาเริ่มกันเลย…
วัสดุที่จำเป็น
- Arduino นาโน
- LM358 Op-Amp
- 7805 ตัวควบคุมแรงดันไฟฟ้า
- จอ LCD 16 * 2
- 0.22 โอห์ม 2 วัตต์ตัวต้านทานแบบปัด
- หม้อทริมเมอร์ 10k
- ตัวต้านทาน 10k, 20k, 2.2k, 1k
- ตัวเก็บประจุ 0.1uF
- ทดสอบโหลด
- Perf board หรือ breadboard
- ชุดบัดกรี (อุปกรณ์เสริม)
แผนภูมิวงจรรวม
แผนภาพวงจรที่สมบูรณ์ของโครงการarduino wattmeter แสดงไว้ด้านล่าง
เพื่อความสะดวกในการทำความเข้าใจวงจร arduino wattmeterจะแบ่งออกเป็นสองหน่วย ส่วนบนของวงจรคือหน่วยวัดและส่วนล่างของวงจรคือหน่วยคำนวณและแสดงผล สำหรับคนที่ยังใหม่กับวงจรประเภทนี้ตามฉลาก ตัวอย่าง + 5V คือฉลากซึ่งหมายความว่าควรพิจารณาพินทั้งหมดที่ป้ายกำกับเชื่อมต่อเมื่อเชื่อมต่อเข้าด้วยกัน โดยปกติจะใช้ป้ายกำกับเพื่อทำให้แผนผังวงจรดูเรียบร้อย
วงจรได้รับการออกแบบให้เข้ากับระบบที่ทำงานระหว่าง 0-24V โดยมีช่วงกระแส 0-1A โดยคำนึงถึงข้อกำหนดของ Solar PV แต่คุณสามารถขยายช่วงได้อย่างง่ายดายเมื่อคุณเข้าใจการทำงานของวงจร หลักการพื้นฐานที่อยู่เบื้องหลังวงจรคือการวัดแรงดันไฟฟ้าข้ามโหลดและกระแสผ่านเพื่อคำนวณพลังงานที่ใช้โดยมัน ค่าที่วัดได้ทั้งหมดจะแสดงในจอ LCD แบบตัวเลขและตัวอักษร 16 * 2
ด้านล่างเรามาแยกวงจรออกเป็นส่วนเล็ก ๆ เพื่อให้เราได้ภาพที่ชัดเจนว่าวงจรเยื้องไปทำงานอย่างไร
หน่วยการวัด
หน่วยวัดประกอบด้วยตัวแบ่งศักย์เพื่อช่วยให้เราวัดแรงดันไฟฟ้าและใช้ตัวต้านทานแบบปิดที่มี Op-amp แบบไม่กลับด้านเพื่อช่วยให้เราวัดกระแสผ่านวงจร ส่วนแบ่งที่เป็นไปได้จากวงจรด้านบนแสดงไว้ด้านล่าง
ที่นี่แรงดันไฟฟ้าอินพุตแสดงโดย Vcc ตามที่บอกไว้ก่อนหน้านี้เรากำลังออกแบบวงจรสำหรับช่วงแรงดันไฟฟ้าตั้งแต่ 0V ถึง 24V แต่ไมโครคอนโทรลเลอร์อย่าง Arduino ไม่สามารถวัดค่าแรงดันไฟฟ้าที่สูงขนาดนั้นได้ สามารถวัดแรงดันไฟฟ้าได้ตั้งแต่ 0-5V เท่านั้น ดังนั้นเราจึงต้องแมป (แปลง) ช่วงแรงดันไฟฟ้า 0-24V ถึง 0-5V สามารถทำได้อย่างง่ายดายโดยใช้วงจรแบ่งศักย์ดังที่แสดงด้านล่าง ตัวต้านทาน 10k และ 2.2k รวมกันเป็นวงจรแบ่งที่มีศักยภาพ แรงดันไฟฟ้าขาออกของตัวแบ่งศักย์สามารถคำนวณได้โดยใช้สูตรด้านล่าง เช่นเดียวกับที่ใช้ในการตัดสินใจค่าตัวต้านทานของคุณคุณสามารถใช้เครื่องคำนวณออนไลน์ของเราเพื่อคำนวณค่าตัวต้านทานหากคุณกำลังออกแบบวงจรใหม่
Vout = (Vin × R2) / (R1 + R2)
0-5V ที่แมปสามารถหาได้จากส่วนตรงกลางซึ่งระบุว่าเป็นแรงดันไฟฟ้า จากนั้นแรงดันไฟฟ้าที่แมปนี้สามารถป้อนเข้ากับขา Arduino Analog ได้ในภายหลัง
ต่อไปเราต้องวัดกระแสผ่าน LOAD ดังที่เราทราบดีว่าไมโครคอนโทรลเลอร์สามารถอ่านได้เฉพาะแรงดันไฟฟ้าอนาล็อกดังนั้นเราจึงจำเป็นต้องแปลงค่าของกระแสเป็นแรงดันไฟฟ้า สามารถทำได้โดยเพียงแค่เพิ่มตัวต้านทาน (ตัวต้านทานแบบแบ่ง) ในเส้นทางซึ่งตามกฎของโอห์มจะลดค่าของแรงดันไฟฟ้าลงบนมันซึ่งเป็นสัดส่วนกับกระแสที่ไหลผ่าน ค่าของแรงดันตกนี้จะน้อยลงมากดังนั้นเราจึงใช้ op-amp เพื่อขยาย วงจรสำหรับสิ่งเดียวกันดังแสดงด้านล่าง
ที่นี่ค่าของตัวต้านทานแบบปัด (SR1) คือ 0.22 โอห์ม ดังที่ได้กล่าวไว้ก่อนหน้านี้เรากำลังออกแบบวงจรสำหรับ 0-1A ดังนั้นตามกฎของโอห์มเราสามารถคำนวณแรงดันตกคร่อมตัวต้านทานนี้ซึ่งจะอยู่ที่ประมาณ 0.2V เมื่อกระแสสูงสุด 1A ผ่านโหลด แรงดันไฟฟ้านี้มีขนาดเล็กมากสำหรับไมโครคอนโทรลเลอร์ในการอ่านเราใช้ Op-Amp ในโหมด Non-Inverting Amplifier เพื่อเพิ่มแรงดันไฟฟ้าจาก 0.2V ไปยังระดับที่สูงขึ้นเพื่อให้ Arduino อ่านได้
Op-Amp ในโหมด Non-Inverting แสดงไว้ด้านบน แอมพลิฟายเออร์ได้รับการออกแบบให้มีอัตราขยาย 21 ดังนั้น 0.2 * 21 = 4.2V สูตรคำนวณกำไรของ Op-amp แสดงไว้ด้านล่างนี้คุณยังสามารถใช้เครื่องคำนวณอัตราขยายออนไลน์นี้เพื่อรับค่าตัวต้านทานของคุณหากคุณกำลังออกแบบวงจรใหม่
กำไร = Vout / Vin = 1 + (Rf / Rin)
ในกรณีของเราค่า Rf คือ 20k และค่าของ Rin คือ 1k ซึ่งทำให้เรามีค่า gian เป็น 21 จากนั้นแรงดันไฟฟ้าที่ขยายจาก Op-amp จะถูกมอบให้กับตัวกรอง RC ที่มีตัวต้านทาน 1k และตัวเก็บประจุ 0.1uF ถึง กรองเสียงรบกวนใด ๆ ที่อยู่คู่กัน ในที่สุดแรงดันไฟฟ้าจะถูกป้อนเข้ากับขาอะนาล็อก Arduino
ส่วนสุดท้ายที่เหลืออยู่ในหน่วยวัดคือส่วนควบคุมแรงดันไฟฟ้า เนื่องจากเราจะให้แรงดันไฟฟ้าอินพุตแบบแปรผันเราจึงต้องมีโวลต์ + 5V ที่มีการควบคุมเพื่อให้ Arduino และ Op-amp ทำงาน แรงดันไฟฟ้าที่ควบคุมนี้จะได้รับจากตัวควบคุมแรงดันไฟฟ้า 7805 เพิ่มตัวเก็บประจุที่เอาต์พุตเพื่อกรองสัญญาณรบกวน
หน่วยคำนวณและแสดงผล
ในหน่วยการวัดเราได้ออกแบบวงจรเพื่อแปลงพารามิเตอร์ Voltage และ Current เป็น 0-5V ซึ่งสามารถป้อนเข้ากับขา Arduino Analog ตอนนี้ในส่วนนี้ของวงจรเราจะเชื่อมต่อสัญญาณแรงดันไฟฟ้าเหล่านี้กับ Arduino และเชื่อมต่อจอแสดงผลตัวอักษรและตัวเลข 16 × 2 กับ Arduino เพื่อให้เราสามารถดูผลลัพธ์ได้ วงจรสำหรับสิ่งเดียวกันดังแสดงด้านล่าง
ดังที่คุณเห็นพินแรงดันไฟฟ้าเชื่อมต่อกับพินอนาล็อก A3 และพินปัจจุบันเชื่อมต่อกับพินอนาล็อก A4 LCD ใช้พลังงานจาก + 5V จาก 7805 และเชื่อมต่อกับพินดิจิทัลของ Arduino เพื่อทำงานในโหมด 4 บิต เรายังใช้โพเทนชิออมิเตอร์ (10k) ที่เชื่อมต่อกับ Con pin เพื่อปรับความคมชัดของ LCD
การเขียนโปรแกรม Arduino
ตอนนี้เราเข้าใจฮาร์ดแวร์ดีแล้วให้เราเปิด Arduino และเริ่มเขียนโปรแกรม วัตถุประสงค์ของรหัสคือการอ่านแรงดันอนาล็อกบนพิน A3 และ A4 และคำนวณค่าแรงดันกระแสและค่าพลังงานและสุดท้ายจะแสดงบนหน้าจอ LCD โปรแกรมที่สมบูรณ์ในการทำเช่นเดียวกันมีให้ที่ท้ายหน้าซึ่งสามารถใช้กับฮาร์ดแวร์ที่กล่าวถึงข้างต้นได้ นอกจากนี้รหัสยังแบ่งออกเป็นตัวอย่างขนาดเล็กและอธิบาย
ในฐานะที่เป็นโปรแกรมทั้งหมดที่เราเริ่มต้นด้วยการกำหนดพินที่เราใช้ ในโครงการขา A3 และ A4 ใช้ในการวัดแรงดันและกระแสตามลำดับและหมุดดิจิทัล 3,4,8,9,10 และ 11 ใช้สำหรับเชื่อมต่อ LCD กับ Arduino
int Read_Voltage = A3; int Read_Current = A4; const int rs = 3, th = 4, d4 = 8, d5 = 9, d6 = 10, d7 = 11; // พูดถึงหมายเลขพินสำหรับการเชื่อมต่อ LCD LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
นอกจากนี้เรายังได้รวมไฟล์ส่วนหัวที่เรียกว่าคริสตัลเหลวเพื่อเชื่อมต่อ LCD กับ Arduino จากนั้นในฟังก์ชั่นการตั้งค่าเราจะเริ่มต้นหน้าจอ LCD และแสดงข้อความแนะนำเป็น“ Arduino Wattmeter” และรอสองวินาทีก่อนที่จะล้างข้อมูล รหัสเดียวกันแสดงอยู่ด้านล่าง
การตั้งค่าเป็นโมฆะ () { lcd.begin (16, 2); // เริ่มต้น 16 * 2 LCD lcd.print ("Arduino Wattmeter"); // Intro Message line 1 lcd.setCursor (0, 1); lcd.print ("- Circuitdigest"); // Intro Message line 2 ล่าช้า (2000); lcd.clear (); }
ภายในฟังก์ชันลูปหลักเราใช้ฟังก์ชันการอ่านแบบอะนาล็อกเพื่ออ่านค่าแรงดันไฟฟ้าจากพิน A3 และ A4 ดังที่เราทราบค่าเอาต์พุต Arduino ADC ตั้งแต่ 0-1203 เนื่องจากมี ADC 10 บิต จากนั้นค่านี้จะต้องถูกแปลงเป็น 0-5V ซึ่งสามารถทำได้โดยการคูณด้วย (5/1023) จากนั้นก่อนหน้านี้ในฮาร์ดแวร์เราได้แมปค่าจริงของแรงดันไฟฟ้าตั้งแต่ 0-24V ถึง 0-5V และค่าจริงของรูปแบบปัจจุบัน 0-1A ถึง 0-5V ตอนนี้เราต้องใช้ตัวคูณเพื่อเปลี่ยนค่าเหล่านี้กลับเป็นค่าจริง สามารถทำได้โดยการคูณด้วยค่าตัวคูณ ค่าของตัวคูณสามารถคำนวณในทางทฤษฎีโดยใช้สูตรที่ให้ไว้ในส่วนฮาร์ดแวร์หรือหากคุณมีชุดแรงดันและค่ากระแสที่ทราบแล้วคุณสามารถคำนวณได้ในทางปฏิบัติฉันทำตามตัวเลือกหลังเพราะมีแนวโน้มที่จะแม่นยำกว่าแบบเรียลไทม์ ดังนั้นค่าของตัวคูณคือ 6.46 และ 0.239 ดังนั้นโค้ดจึงดูเหมือนด้านล่าง
ลอย Voltage_Value = analogRead (Read_Voltage); ลอย Current_Value = analogRead (Read_Current); Voltage_Value = Voltage_Value * (5.0 / 1023.0) * 6.46; Current_Value = Current_Value * (5.0 / 1023.0) * 0.239;
วิธีการวัดความแม่นยำมากขึ้น?
วิธีการคำนวณค่าของแรงดันไฟฟ้าจริงและกระแสไฟฟ้าข้างต้นจะใช้ได้ดี แต่ต้องทนทุกข์ทรมานจากข้อเสียเปรียบประการหนึ่งนั่นคือความสัมพันธ์ระหว่างแรงดันไฟฟ้า ADC ที่วัดได้และแรงดันไฟฟ้าจริงจะไม่เป็นเชิงเส้นดังนั้นตัวคูณตัวเดียวจะไม่ให้ผลลัพธ์ที่แม่นยำมากซึ่งจะใช้กับกระแสไฟฟ้าเช่นกัน
ดังนั้นเพื่อปรับปรุงความแม่นยำเราสามารถพล็อตชุดของค่า ADC ที่วัดได้ด้วยเวลจริงโดยใช้ชุดค่าที่ทราบแล้วใช้ข้อมูลนั้นในการพล็อตกราฟและหาสมการตัวคูณโดยใช้วิธีการถดถอยเชิงเส้น คุณสามารถอ้างถึง Arduino dB meter ซึ่งฉันได้ใช้วิธีการที่คล้ายกัน
ในที่สุดเมื่อเราคำนวณค่าของแรงดันไฟฟ้าจริงและกระแสจริงผ่านโหลดแล้วเราสามารถคำนวณกำลังโดยใช้สูตร (P = V * I) จากนั้นเราจะแสดงค่าทั้งสามบนจอ LCD โดยใช้รหัสด้านล่าง
lcd.setCursor (0, 0); lcd.print ("V ="); lcd.print (Voltage_Value); lcd.print (""); lcd.print ("I ="); lcd.print (Current_Value); float Power_Value = Voltage_Value * Current_Value; lcd.setCursor (0, 1); lcd.print ("กำลังไฟ ="); lcd.print (Power_Value);
การทำงานและการทดสอบ
เพื่อประโยชน์ในการสอนฉันใช้บอร์ด perf ในการประสานส่วนประกอบทั้งหมดตามที่แสดงในวงจร ฉันใช้ขั้วสกรู Phoenix เพื่อเชื่อมต่อโหลดและแจ็ค DC Barrel ปกติเพื่อเชื่อมต่อแหล่งพลังงานของฉัน บอร์ด Arduino Nano และ LCD ติดตั้งบน Female Bergstik เพื่อให้สามารถใช้ซ้ำได้หากจำเป็นในภายหลัง
หลังจากเตรียมฮาร์ดแวร์ให้พร้อมแล้วให้อัปโหลดรหัส Arduino ไปยังบอร์ดนาโนของคุณ ปรับหม้อทริมเมอร์เพื่อควบคุมระดับความคมชัดของ LCD จนกว่าคุณจะเห็นข้อความแนะนำที่ชัดเจน ในการทดสอบบอร์ดให้เชื่อมต่อโหลดเข้ากับขั้วต่อสกรูและแหล่งจ่ายเข้ากับแจ็ค Barrel แรงดันไฟฟ้าต้นทางควรมากกว่า 6V เพื่อให้โปรเจ็กต์นี้ทำงานได้เนื่องจาก Arduino ต้องใช้ + 5V ในการทำงาน หากทุกอย่างทำงานได้ดีคุณควรเห็นค่าของแรงดันไฟฟ้าตลอดโหลดและกระแสไฟฟ้าที่แสดงในบรรทัดแรกของ LCD และกำลังคำนวณที่แสดงบนบรรทัดที่สองของ LCD ดังที่แสดงด้านล่าง
ส่วนที่สนุกของการสร้างบางสิ่งอยู่ที่การทดสอบเพื่อตรวจสอบว่าจะทำงานได้ดีเพียงใด ในการทำเช่นนั้นฉันได้ใช้ไฟแสดงสถานะรถยนต์ 12V เป็นฟองและ RPS เป็นแหล่งที่มา เนื่องจาก RPS สามารถวัดและแสดงค่าของกระแสและแรงดันไฟฟ้าได้จึงเป็นเรื่องง่ายที่เราจะตรวจสอบความถูกต้องและประสิทธิภาพของวงจรของเรา และใช่ฉันยังใช้ RPS ของฉันเพื่อปรับเทียบค่าตัวคูณของฉันเพื่อให้ฉันได้ค่าใกล้เคียงกับค่าที่แม่นยำ
การทำงานทั้งหมดสามารถพบได้ในวิดีโอที่ให้ไว้ในตอนท้ายของหน้านี้ หวังว่าคุณจะเข้าใจวงจรและโปรแกรมและเรียนรู้สิ่งที่เป็นประโยชน์ หากคุณมีปัญหาในการใช้งานให้โพสต์ไว้ในส่วนความคิดเห็นด้านล่างหรือเขียนในฟอรัมของเราเพื่อขอความช่วยเหลือด้านเทคนิคเพิ่มเติม
นี้โครงการ Wattmeter Arduino ตามที่มีการอัพเกรดอื่น ๆ อีกมากมายที่สามารถเพิ่มการเพิ่มประสิทธิภาพในการบันทึกข้อมูลอัตโนมัติ, พล็อตกราฟแจ้งมากกว่าแรงดันไฟฟ้าหรือสถานการณ์มากกว่าปัจจุบัน ฯลฯ ดังนั้นการเข้าพักอยากรู้อยากเห็นและแจ้งให้เรารู้ว่าสิ่งที่คุณจะใช้นี้