โวลต์มิเตอร์ AC บน Arduino โวลต์มิเตอร์ Bluetooth ที่ใช้ Arduino อินพุตแบบอะนาล็อกและตัวต้านทานแบบดึงขึ้น

มีการนำเสนอแผนภาพที่เป็นประโยชน์สำหรับผู้ที่ชื่นชอบการทดลองกับ 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 และพีซี และถ่ายโอนข้อมูลจาก ADC ไปยังพีซี โปรแกรมสำหรับ Windows เขียนโดยใช้ Visual C++ 2008 Express โปรแกรมโวลต์มิเตอร์นั้นง่ายมากและยังมีสิ่งที่ต้องปรับปรุงอีกมาก จุดประสงค์หลักคือเพื่อแสดงวิธีการทำงานกับพอร์ต COM และแลกเปลี่ยนข้อมูลระหว่างคอมพิวเตอร์กับ Arduino

การสื่อสารระหว่าง Arduino และพีซี:

  • การอ่านค่าจาก ADC เริ่มต้นเมื่อคอมพิวเตอร์ส่งคำสั่ง Arduino 0xAC และ 0x1y ที่– หมายเลขช่อง ADC (0-2)
  • การอ่านหยุดลงหลังจาก Arduino ได้รับคำสั่ง 0xAC และ 0x00;
  • เมื่ออ่านค่า Arduino จะส่งคำสั่ง 0xAB 0xaa 0xbb ไปยังคอมพิวเตอร์ทุกๆ 50 ms โดยที่ aa และ bb คือผลการวัดสูงสุดและต่ำสุด

โปรแกรมสำหรับ Arduino

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการสื่อสารแบบอนุกรมได้ที่ arduino.cc โปรแกรมค่อนข้างง่าย ส่วนใหญ่จะใช้เวลาทำงานกับพอร์ตขนาน หลังจากอ่านข้อมูลจาก ADC เสร็จแล้ว เราได้รับค่าแรงดันไฟฟ้า 10 บิต (0x0000 – 0x0400) ในรูปแบบของตัวแปร 16 บิต (INT) พอร์ตอนุกรม (RS-232) อนุญาตให้ส่งข้อมูลในรูปแบบแพ็กเก็ต 8 บิต จำเป็นต้องแบ่งตัวแปร 16 บิตออกเป็น 2 ส่วนๆ ละ 8 บิต

Serial พิมพ์ (แรงดันไฟฟ้า >> 8, ไบต์);

Serial พิมพ์ (แรงดันไฟฟ้า% 256, ไบต์);

เราเลื่อนไบต์ของตัวแปรไปทางขวา 8 บิตแล้วหารด้วย 256 แล้วส่งผลลัพธ์ไปยังคอมพิวเตอร์

คุณสามารถดาวน์โหลดซอร์สโค้ดแบบเต็มสำหรับซอฟต์แวร์ Arduino ได้

วิชวลซี++

ฉันคิดว่าคุณมีความรู้พื้นฐานเกี่ยวกับการเขียนโปรแกรม C++ สำหรับ Windows อยู่แล้ว หากไม่มี ให้ใช้ Google อินเทอร์เน็ตเต็มไปด้วยบทช่วยสอนสำหรับผู้เริ่มต้น

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

หลังจากค้นหาพอร์ตอนุกรมที่มีอยู่แล้ว พอร์ตแรกจะถูกเลือกตามค่าเริ่มต้น ดำเนินการอย่างไร:

อาร์เรย์< String ^>↑ พอร์ตอนุกรม = nullptr;

serialPorts = serialPort1->GetPortNames();

นี้->comboBox1->รายการ->AddRange(serialPorts);

นี้->comboBox1->SelectedIndex=0;

พอร์ตอนุกรมบนพีซีสามารถใช้งานได้ครั้งละหนึ่งแอปพลิเคชันเท่านั้น ดังนั้นจะต้องเปิดพอร์ตก่อนใช้งานและต้องไม่ปิด คำสั่งง่ายๆ สำหรับสิ่งนี้:

พอร์ตอนุกรม1->เปิด();

พอร์ตอนุกรม1->ปิด();

หากต้องการอ่านข้อมูลจากพอร์ตอนุกรมอย่างถูกต้อง คุณต้องใช้เหตุการณ์ (ในกรณีของเราคือการขัดจังหวะ) เลือกประเภทเหตุการณ์:

รายการแบบเลื่อนลงเมื่อดับเบิลคลิก "DataReceived"

รหัสเหตุการณ์จะถูกสร้างขึ้นโดยอัตโนมัติ:

หากไบต์แรกมาถึงพอร์ตอนุกรมคือ 0xAB แสดงว่าไบต์ที่เหลือมีข้อมูลแรงดันไฟฟ้า

ส่วนตัว: System::Void serialPort1_DataReceived (ผู้ส่ง System::Object^, System::IO::Ports::SerialDataReceivedEventArgs^ e) (

ถ่าน data0, data1 ที่ไม่ได้ลงนาม;

ถ้า (serialPort1->ReadByte()==0xAB) (

data0=serialPort1->ReadByte();

data1=serialPort1->ReadByte();

แรงดันไฟฟ้า=คณิตศาสตร์::รอบ((ลอย(data0*256+data1)/1024*5.00),2);

ข้อมูล_จำนวน++;

พอร์ตอนุกรม1->ReadByte();

เขียนและอ่านข้อมูลพอร์ตอนุกรม

ปัญหาเล็กๆ สำหรับฉันคือการส่งข้อมูล RAW ฐานสิบหกผ่านพอร์ตอนุกรม มีการใช้คำสั่ง Write(); แต่มีสามอาร์กิวเมนต์: อาร์เรย์, หมายเลขไบต์เริ่มต้น, จำนวนไบต์ที่จะเขียน

ส่วนตัว: System::Void button2_Click_1 (System::Object^ ผู้ส่ง System::EventArgs^ e) (

ช่องถ่านที่ไม่ได้ลงนาม = 0;

ช่อง=นี่->listBox1->SelectedIndex;

อาร์เรย์^เริ่มต้น =(0xAC,(0x10+ช่อง));

อาร์เรย์^หยุด =(0xAC,0x00);

serialPort1->เขียน (เริ่ม,0,2);

นี้->button2->ข้อความ="หยุด";

) อื่น (

serialPort1->เขียน (หยุด,0,2);

นี้->button2->ข้อความ="Start";

นั่นคือทั้งหมด!

บทความต้นฉบับเป็นภาษาอังกฤษ (แปล: อเล็กซานเดอร์ คัสยานอฟสำหรับเว็บไซต์ cxem.net)

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

แผนภาพ

การใช้โมดูลไมโครคอนโทรลเลอร์สากล ARDUINO UNO และจอแสดงผล LCD สองบรรทัดประเภท 1602A (ขึ้นอยู่กับคอนโทรลเลอร์ HD44780) คุณสามารถสร้างอุปกรณ์ดังกล่าวได้อย่างง่ายดาย ในบรรทัดหนึ่งจะแสดงแรงดันไฟฟ้า U1 ส่วนอีกบรรทัดจะแสดงแรงดันไฟฟ้า U2

ข้าว. 1. แผนผังของโวลต์มิเตอร์คู่พร้อมจอแสดงผล 1602A บน Arduino UNO

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

สำหรับผู้ที่ไม่คุ้นเคยกับ ARDUINO UNO ฉันแนะนำให้คุณอ่านบทความ L.1 และ L.2 ก่อน วงจรของโวลต์มิเตอร์แบบคู่แสดงไว้ในรูปที่ 1 1. ได้รับการออกแบบมาเพื่อวัดแรงดันไฟฟ้าสองตัวตั้งแต่ 0 ถึง 100V (ในทางปฏิบัติสูงถึง 90V)

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

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

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

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

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

K = R3 / (R1+R3) หรือ K = R4 / (R2+R4)

ตามลำดับสำหรับอินพุตที่แตกต่างกันของโวลต์มิเตอร์คู่

น่าสนใจมากที่ตัวต้านทานในตัวแบ่งไม่จำเป็นต้องมีความแม่นยำสูงเสมอไป คุณสามารถใช้ตัวต้านทานธรรมดาจากนั้นวัดความต้านทานจริงด้วยโอห์มมิเตอร์ที่แม่นยำและแทนที่ค่าที่วัดได้เหล่านี้ลงในสูตร คุณจะได้ค่า “K” สำหรับตัวหารเฉพาะ ซึ่งจะต้องแทนที่ลงในสูตร

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

โปรแกรม C++ แสดงในรูปที่ 2

ข้าว. 2.ซอร์สโค้ดของโปรแกรม

เพื่อควบคุมตัวบ่งชี้ LCD ได้มีการตัดสินใจใช้พอร์ต D2 ถึง D7 ของบอร์ด ARDUINO UNO โดยหลักการแล้ว พอร์ตอื่นๆ เป็นไปได้ แต่นี่คือวิธีที่ฉันตัดสินใจใช้พอร์ตเหล่านี้

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

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

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

หลังจากนั้นโปรแกรมจะเข้าสู่การทำงานจริงของโวลต์มิเตอร์ ในการวัดแรงดันไฟฟ้าได้ตัดสินใจใช้อินพุตแบบอะนาล็อก A1 และ A2 อินพุตเหล่านี้ระบุไว้ในบรรทัด:

อินพุทอนาล็อกอินพุท=1;

อินพุทอนาล็อกอินพุท1=2;

หากต้องการอ่านข้อมูลจากพอร์ตอะนาล็อก ให้ใช้ฟังก์ชัน analogRead การอ่านข้อมูลจากพอร์ตอะนาล็อกเกิดขึ้นในบรรทัด:

vout=analogRead(analogInput);

voutl=analogRead(analoglnput1);

จากนั้นคำนวณแรงดันไฟฟ้าจริงโดยคำนึงถึงอัตราส่วนการแบ่งตัวแบ่งแรงดันไฟฟ้าขาเข้า:

โวลต์=vout*5.0/1024.0/0.048 ;

โวลต์1=vout1*5.0/1024.0/0.048;

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

โวลต์=vout*4.85/1024.0/0.048;

โวลต์1=vout1*4.85/1024.0/0.048;

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

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

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

โวลต์=vout*4.85/1024.0/0.046 ;

โวลต์1=vout1*4.85/1024.0/0.051;

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

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

คาราฟคิน วี. RK-2017-01

วรรณกรรม:

  1. Karavkin V. - ไฟกะพริบต้นคริสต์มาสบน ARDUINO เป็นวิธีการรักษาความกลัวไมโครคอนโทรลเลอร์ RK-11-2016.
  2. Karavkin V. - เครื่องวัดความถี่บน ARDUINO RK-12-2016.

สวัสดีฮับ! วันนี้ฉันต้องการที่จะสานต่อหัวข้อ "การข้าม" Arduino และ Android ในสิ่งพิมพ์ก่อนหน้านี้ฉันได้พูดคุยเกี่ยวกับเครื่องบลูทู ธ และวันนี้เราจะพูดถึงโวลต์มิเตอร์บลูทู ธ DIY อุปกรณ์อื่นดังกล่าวสามารถเรียกว่าโวลต์มิเตอร์อัจฉริยะ โวลต์มิเตอร์ "อัจฉริยะ" หรือเพียงแค่โวลต์มิเตอร์อัจฉริยะ โดยไม่มีเครื่องหมายคำพูด นามสกุลไม่ถูกต้องจากมุมมองของไวยากรณ์รัสเซีย แต่มักพบในสื่อ ในตอนท้ายของบทความจะมีการลงคะแนนในหัวข้อนี้ แต่ฉันขอแนะนำให้เริ่มต้นด้วยการสาธิตการทำงานของอุปกรณ์เพื่อทำความเข้าใจว่าบทความจะเกี่ยวกับอะไร


ข้อจำกัดความรับผิดชอบ: บทความนี้มีไว้สำหรับผู้ที่ชื่นชอบ Arduino โดยเฉลี่ยซึ่งมักจะไม่คุ้นเคยกับการเขียนโปรแกรม Android ดังนั้นเราจะสร้างแอปพลิเคชันสำหรับสมาร์ทโฟนโดยใช้สภาพแวดล้อมการพัฒนาภาพของ App Inventor 2 สำหรับแอปพลิเคชัน Android เช่นเดียวกับในบทความที่แล้ว
ในการสร้างโวลต์มิเตอร์แบบบลูทู ธ DIY เราต้องเขียนโปรแกรมที่ค่อนข้างอิสระสองโปรแกรม: แบบร่างสำหรับ Arduino และแอปพลิเคชันสำหรับ Android เริ่มจากแบบร่างกันก่อน
ก่อนอื่นคุณควรรู้ว่ามีสามตัวเลือกหลักในการวัดแรงดันไฟฟ้าโดยใช้ Arduino ไม่ว่าคุณจะต้องส่งข้อมูลไปที่ใด: ไปยังพอร์ต com ไปยังหน้าจอที่เชื่อมต่อกับ Arduino หรือไปยังสมาร์ทโฟน
กรณีแรก: วัดแรงดันไฟฟ้าได้สูงสุด 5 โวลต์ โค้ดหนึ่งหรือสองบรรทัดก็เพียงพอแล้ว และใช้แรงดันไฟฟ้ากับพิน A0 โดยตรง:
int value = analogRead(0); // อ่านค่าที่อ่านได้จาก A0
แรงดันไฟฟ้า = (ค่า / 1,023.0) * 5; // จริงเฉพาะในกรณีที่ Vcc = 5.0 โวลต์
กรณีที่สอง: ในการวัดแรงดันไฟฟ้าที่มากกว่า 5 โวลต์ จะใช้ตัวแบ่งแรงดันไฟฟ้า วงจรนั้นง่ายมาก และโค้ดก็เช่นกัน

ร่าง

อินพุทอนาล็อกอินพุท = A0;
วาลลอยตัว = 0.0;
แรงดันลอย = 0.0;
ลอย R1 = 100,000.0; //แบตเตอรี่ Vin-> 100K -> A0
ลอย R2 = 10,000.0; //แบตเตอรี่ Gnd -> Arduino Gnd และ Arduino Gnd -> 10K -> A0
ค่า int = 0;

การตั้งค่าเป็นโมฆะ() (
อนุกรมเริ่มต้น(9600);
pinMode (อินพุตอะนาล็อก, อินพุต);
}

โมฆะวน() (
ค่า = analogRead (analogInput);
วาล = (ค่า * 4.7) / 1,024.0;
แรงดันไฟฟ้า = วาล / (R2/(R1+R2));
Serial.println (แรงดันไฟฟ้า);
ล่าช้า (500);
}


อาร์ดูโน่ อูโน่
โมดูลบลูทูธ
กรณีที่สาม. เมื่อคุณต้องการได้รับข้อมูลที่แม่นยำยิ่งขึ้นเกี่ยวกับแรงดันไฟฟ้า คุณควรใช้เป็นแรงดันไฟฟ้าอ้างอิง ไม่ใช่แรงดันไฟฟ้า ซึ่งสามารถเปลี่ยนแปลงได้เล็กน้อยเมื่อขับเคลื่อนด้วยแบตเตอรี่ เป็นต้น แต่แรงดันไฟฟ้าของตัวป้องกันเสถียรภาพ Arduino ภายในอยู่ที่ 1.1 โวลต์ วงจรก็เหมือนกันที่นี่ แต่โค้ดยาวกว่าเล็กน้อย ฉันจะไม่วิเคราะห์ตัวเลือกนี้โดยละเอียดเนื่องจากมีการอธิบายไว้อย่างดีในบทความเฉพาะเรื่องแล้ว แต่วิธีที่สองก็เพียงพอสำหรับฉันเนื่องจากแหล่งจ่ายไฟของฉันเสถียรจากพอร์ต USB ของแล็ปท็อป
ดังนั้นเราจึงแยกการวัดแรงดันไฟฟ้าออกแล้ว ตอนนี้เรามาดูครึ่งหลังของโครงการกันดีกว่า: การสร้างแอปพลิเคชัน Android เราจะสร้างแอปพลิเคชันโดยตรงจากเบราว์เซอร์ในสภาพแวดล้อมการพัฒนาภาพสำหรับแอปพลิเคชัน Android App Inventor 2 ไปที่เว็บไซต์ appinventor.mit.edu/explore เข้าสู่ระบบโดยใช้บัญชี Google ของคุณ คลิกปุ่มสร้างโครงการใหม่ และโดย เพียงลากและวางองค์ประกอบต่างๆ เราก็จะสร้างการออกแบบเช่นนี้:

ฉันสร้างกราฟิกให้เรียบง่ายมาก หากใครต้องการกราฟิกที่น่าสนใจมากกว่านี้ ฉันขอเตือนคุณว่าสำหรับสิ่งนี้ คุณต้องใช้ไฟล์ .png ที่มีพื้นหลังโปร่งใส แทนไฟล์ .jpeg
ตอนนี้ไปที่แท็บ Blocks และสร้างตรรกะของแอปพลิเคชันดังนี้:


หากทุกอย่างเรียบร้อยดี คุณสามารถคลิกปุ่ม Build และบันทึก .apk ลงในคอมพิวเตอร์ของฉัน จากนั้นดาวน์โหลดและติดตั้งแอปพลิเคชันบนสมาร์ทโฟนของคุณ แม้ว่าจะมีวิธีอื่นในการอัปโหลดแอปพลิเคชันก็ตาม ที่นี่สะดวกกว่าสำหรับทุกคน เป็นผลให้ฉันลงเอยด้วยแอปพลิเคชันนี้:


ฉันเข้าใจว่ามีเพียงไม่กี่คนที่ใช้สภาพแวดล้อมการพัฒนาภาพของ App Inventor 2 สำหรับแอปพลิเคชัน Android ในโครงการของพวกเขา ดังนั้นจึงอาจมีคำถามมากมายเกี่ยวกับการทำงานในสภาพแวดล้อมดังกล่าว เพื่อตอบคำถามเหล่านี้ ฉันได้จัดทำวิดีโอโดยละเอียดเกี่ยวกับวิธีสร้างแอปพลิเคชันดังกล่าว "ตั้งแต่เริ่มต้น" (คุณต้องไปที่ YouTube หากต้องการดู):

ป.ล. คอลเลกชันสื่อการเรียนรู้มากกว่า 100 รายการบน Arduino สำหรับผู้เริ่มต้นและมืออาชีพ

แผนผังของโวลต์มิเตอร์แบบไบโพลาร์แบบโฮมเมดบน 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.

 
บทความ โดยหัวข้อ:
แปลงบัตรเชื้อเพลิงให้เป็นประโยชน์ใน 1c
การเพิ่มขึ้นของการไหลเวียนของยานพาหนะบนถนนในมอสโกและภูมิภาคตลอดจนในเมืองใหญ่ในภูมิภาคได้นำไปสู่ความจำเป็นในการพัฒนาเงื่อนไขขั้นสูงและเอื้ออำนวยมากขึ้นสำหรับความร่วมมือระหว่างองค์กรเชื้อเพลิงและลูกค้าของพวกเขา ต้นทุนและคุณภาพน้ำมันเชื้อเพลิงโอเปร่า
ไฟ LED ปิรันย่า – คืออะไร?
ในบทความก่อนหน้านี้ เราได้อธิบายไว้หลายครั้งเกี่ยวกับกระบวนการสร้างบอร์ดสำหรับติดตั้งโมดูล LED ต่างๆ ในรถยนต์ การใช้วิธี LUT มอบโอกาสมากมายในการตระหนักถึงแนวคิดที่กล้าหาญที่สุด อย่างไรก็ตามเมื่อเร็ว ๆ นี้ทุกอย่าง
ไฟ LED ปิรันย่า – คืออะไร?
ในบทความก่อนหน้านี้ เราได้อธิบายไว้หลายครั้งเกี่ยวกับกระบวนการสร้างบอร์ดสำหรับติดตั้งโมดูล LED ต่างๆ ในรถยนต์ การใช้วิธี LUT มอบโอกาสมากมายในการตระหนักถึงแนวคิดที่กล้าหาญที่สุด อย่างไรก็ตามเมื่อเร็ว ๆ นี้ทุกอย่าง
การพิจารณาความผิดปกติของแหล่งที่มาของการกระแทกจากภายนอกในรถยนต์ วิธีการตรวจสอบความผิดปกติของป๋อโช้คอัพ
ในบทความนี้เราจะพูดถึงหัวข้อนี้ ดังที่คุณทราบ โช้คอัพมีบทบาทสำคัญในการรับรองความปลอดภัยของยานพาหนะ นอกจากนี้ บทบาทนี้ยังถูกประเมินต่ำไปอย่างมากจากผู้ขับขี่จำนวนมาก แต่หากพันธะเหล่านี้หมดสภาพและใช้งานได้ไม่เต็มที่