สารบัญ:

ใช้ 1 อินพุตแบบอะนาล็อกสำหรับ 6 ปุ่มสำหรับ Arduino: 6 ขั้นตอน
ใช้ 1 อินพุตแบบอะนาล็อกสำหรับ 6 ปุ่มสำหรับ Arduino: 6 ขั้นตอน

วีดีโอ: ใช้ 1 อินพุตแบบอะนาล็อกสำหรับ 6 ปุ่มสำหรับ Arduino: 6 ขั้นตอน

วีดีโอ: ใช้ 1 อินพุตแบบอะนาล็อกสำหรับ 6 ปุ่มสำหรับ Arduino: 6 ขั้นตอน
วีดีโอ: #6 สอน Arduino :เรียน Arduino ควบคุมขา Digital INPUT 2024, กรกฎาคม
Anonim
ใช้ 1 อินพุตแบบอะนาล็อกสำหรับ 6 ปุ่มสำหรับ Arduino
ใช้ 1 อินพุตแบบอะนาล็อกสำหรับ 6 ปุ่มสำหรับ Arduino

ฉันมักจะสงสัยว่าฉันจะได้รับ Digital Inputs เพิ่มเติมสำหรับ Arduino ของฉันได้อย่างไร เมื่อเร็ว ๆ นี้เกิดขึ้นกับฉันว่าฉันควรจะสามารถใช้อินพุตแบบอะนาล็อกตัวใดตัวหนึ่งเพื่อนำเข้าอินพุตดิจิตอลหลายตัว ฉันค้นหาอย่างรวดเร็วและพบว่าผู้คนสามารถทำเช่นนี้ได้จากที่ใด แต่อนุญาตให้กดปุ่มเพียงปุ่มเดียวในแต่ละครั้ง ฉันต้องการให้สามารถกดปุ่มต่างๆ พร้อมกันได้ ด้วยความช่วยเหลือของ TINKERCAD CIRCUITS ฉันจึงตั้งใจที่จะทำให้สิ่งนี้เกิดขึ้น

ทำไมฉันถึงต้องการกดปุ่มพร้อมกัน? ดังที่แสดงไว้ในการออกแบบวงจร TinkerCad สามารถใช้สำหรับอินพุตสวิตช์ DIP สำหรับการเลือกโหมดต่างๆ ภายในโปรแกรม

วงจรที่ฉันใช้มานั้นใช้แหล่งจ่าย 5V จาก Arduino และใช้ตัวต้านทาน 7 ตัวและปุ่มหรือสวิตช์ 6 ปุ่ม

ขั้นตอนที่ 1: วงจร

The Circuit
The Circuit

Arduino มีอินพุตแบบอะนาล็อกที่รับอินพุต 0V ถึง 5V อินพุตนี้มีความละเอียด 10 บิต ซึ่งหมายความว่าสัญญาณแบ่งออกเป็น 2^10 ส่วนหรือ 1024 นับ จากสิ่งนี้ มากที่สุดที่เราสามารถป้อนลงในอินพุตแบบอะนาล็อกในขณะที่อนุญาตให้กดพร้อมกันได้คือ 10 ปุ่มต่อ 1 อินพุตแบบอะนาล็อก แต่นี่ไม่ใช่โลกที่สมบูรณ์แบบ มีความต้านทานในตัวนำ เสียงรบกวนจากแหล่งภายนอก และกำลังที่ไม่สมบูรณ์ ดังนั้น เพื่อให้ตัวเองมีความยืดหยุ่นมาก ฉันจึงวางแผนที่จะออกแบบปุ่มนี้สำหรับปุ่ม 6 ปุ่ม ส่วนหนึ่งเป็นผลมาจากข้อเท็จจริงที่ว่าวงจร TinkerCAD มีออบเจกต์สวิตช์ DIP 6 สวิตช์ ซึ่งจะทำให้การทดสอบง่ายขึ้น

ขั้นตอนแรกในการออกแบบของฉันคือต้องแน่ใจว่าเมื่อกดทีละปุ่ม จะมีแรงดันไฟที่ไม่ซ้ำกัน สิ่งนี้ทำให้ตัวต้านทานทั้งหมดมีค่าเท่ากัน ขั้นตอนต่อไปคือค่าความต้านทานเมื่อเพิ่มแบบขนานไม่สามารถมีความต้านทานเท่ากับค่าตัวต้านทานเดี่ยวได้ เมื่อตัวต้านทานต่อขนานกัน สามารถคำนวณความต้านทานผลลัพธ์ได้โดย Rx=1/[(1/R1)+(1/R2)] ดังนั้น ถ้า R1=2000 และ R2=1000 Rx=667 ฉันคาดการณ์ว่าการเพิ่มขนาดของตัวต้านทานแต่ละตัวเป็นสองเท่า ฉันจะไม่เห็นความต้านทานแบบเดียวกันสำหรับชุดค่าผสมใดๆ

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

ตัวต้านทานตัวสุดท้ายมี 3 จุดประสงค์ อย่างแรก มันทำหน้าที่เป็นตัวต้านทานแบบดึงลง ถ้าไม่มีตัวต้านทาน เมื่อไม่มีการกดปุ่ม วงจรจะไม่สมบูรณ์ สิ่งนี้จะช่วยให้แรงดันไฟฟ้าที่อินพุตแบบอะนาล็อกของ Arduino สามารถลอยไปยังศักย์ไฟฟ้าใดก็ได้ ตัวต้านทานแบบดึงลงโดยพื้นฐานแล้วจะดึงแรงดันไฟลงเหลือ 0 V จุดประสงค์ที่สองคือการจำกัดกระแสของวงจรนี้ กฎของโอห์มระบุว่า V=IR หรือ Voltage = Current คูณด้วยความต้านทาน ด้วยแหล่งจ่ายแรงดันที่กำหนด ตัวต้านทานที่ใหญ่ขึ้นหมายความว่ากระแสจะเล็กลง ดังนั้น หากใช้สัญญาณ 5V กับตัวต้านทาน 500ohm กระแสที่ใหญ่ที่สุดที่เราเห็นจะเป็น 0.01A หรือ 10mA จุดประสงค์ที่สามคือการให้แรงดันสัญญาณ กระแสทั้งหมดที่ไหลผ่านตัวต้านทานตัวสุดท้ายจะเป็น: i=5V / Rtotal โดยที่ Rtotal = Rlast + {1/[(1/R1)+(1/R2)+(1/R3)+(1/R4)+ (1/R5)+(1/R6)]}. อย่างไรก็ตาม รวมเฉพาะ 1/Rx สำหรับตัวต้านทานแต่ละตัวที่มีการกดปุ่มที่เกี่ยวข้องเท่านั้น จากกระแสรวม แรงดันไฟฟ้าที่จ่ายให้กับอินพุตแบบอะนาล็อกจะเป็น i*Rlast หรือ i*500

ขั้นตอนที่ 2: พิสูจน์ - Excel

พิสูจน์ - Excel
พิสูจน์ - Excel

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

ฉันตั้งค่าการรวมกันที่เป็นไปได้ของอินพุตสวิตช์ทั้งหมดและจัดระเบียบตามลำดับเหล่านี้ตามรูปแบบไบนารี ค่า "1" แสดงว่าสวิตช์เปิดอยู่ ค่าว่างแสดงว่าปิดอยู่ ที่ด้านบนของสเปรดชีต ฉันใส่ค่าความต้านทานสำหรับสวิตช์แต่ละตัวและสำหรับตัวต้านทานแบบดึงลง จากนั้นฉันก็คำนวณความต้านทานที่เท่ากันสำหรับแต่ละชุดค่าผสม ยกเว้นเมื่อตัวต้านทานทั้งหมดปิดอยู่ เนื่องจากตัวต้านทานเหล่านี้จะไม่ส่งผลกระทบหากไม่มีแหล่งพลังงานจ่าย เพื่อให้การคำนวณของฉันง่ายขึ้นเพื่อที่ฉันจะได้คัดลอกและวางในแต่ละชุดค่าผสม ฉันได้รวมชุดค่าผสมทั้งหมดในการคำนวณโดยการคูณค่าสวิตช์แต่ละค่า (0 หรือ 1) ด้วยค่าความต้านทานกลับด้าน การทำเช่นนี้จะตัดความต้านทานออกจากการคำนวณหากสวิตช์ปิดอยู่ สมการผลลัพธ์สามารถเห็นได้ในรูปภาพของสเปรดชีต แต่ Req = Rx+1/(Sw1/R1 + Sw2/R2 + Sw3/R3 + Sw4/R4 + Sw5/R5 + Sw6/R6) ใช้ Itotal = 5V / Req เราจะกำหนดกระแสทั้งหมดผ่านวงจร นี่เป็นกระแสเดียวกับที่ไหลผ่านตัวต้านทานแบบดึงลง และให้แรงดันไฟฟ้าแก่อินพุตแบบอะนาล็อกของเรา คำนวณได้เป็น Vin = Itotal x Rx จากการตรวจสอบทั้งข้อมูล Req และข้อมูล Vin เราจะพบว่าเรามีค่าที่ไม่ซ้ำกันจริงๆ

ณ จุดนี้ดูเหมือนว่าวงจรของเราจะใช้งานได้ มาดูวิธีการตั้งโปรแกรม Arduino กัน

ขั้นตอนที่ 3: การเขียนโปรแกรม Arduino

การเขียนโปรแกรม Arduino
การเขียนโปรแกรม Arduino
การเขียนโปรแกรม Arduino
การเขียนโปรแกรม Arduino
การเขียนโปรแกรม Arduino
การเขียนโปรแกรม Arduino

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

ต่อไปนี้คือบทแนะนำสั้นๆ เกี่ยวกับวิธีการกำหนดสมการของเส้นใน Excel

1) เลือกเซลล์ที่ไม่มีข้อมูล ถ้าคุณมีเซลล์ที่เลือกไว้ซึ่งมีข้อมูล Excel จะพยายามเดาว่าคุณต้องการเทรนด์อะไร ซึ่งทำให้ยากต่อการกำหนดแนวโน้ม เนื่องจาก Excel ไม่ค่อยคาดการณ์อย่างถูกต้อง

2) เลือกแท็บ "แทรก" และเลือกแผนภูมิ "กระจาย"

3) คลิกขวาในกล่องแผนภูมิและคลิกที่ "เลือกข้อมูล…" นี้จะปรากฏขึ้นหน้าต่าง "เลือกแหล่งข้อมูล" เลือกปุ่ม เพิ่ม เพื่อเลือกข้อมูลต่อไป

4) ตั้งชื่อซีรีส์ (ไม่บังคับ) เลือกช่วงสำหรับแกน X โดยคลิกที่ลูกศรขึ้นแล้วเลือกข้อมูลแรงดันไฟฟ้า เลือกช่วงสำหรับแกน Y โดยคลิกลูกศรขึ้น จากนั้นเลือกข้อมูลจำนวนเต็ม (0-63)

5) คลิกขวาที่จุดข้อมูลและเลือก "เพิ่มเส้นแนวโน้ม…" ในหน้าต่าง "รูปแบบเส้นแนวโน้ม" เลือกปุ่มพหุนาม เมื่อดูจากกระแส เราจะเห็นว่า Order of 2 ไม่ค่อยตรงกัน ฉันเลือกลำดับ 3 และรู้สึกว่าสิ่งนี้แม่นยำกว่ามาก เลือกช่องทำเครื่องหมายสำหรับ "แสดงสมการบนแผนภูมิ" สมการสุดท้ายจะแสดงบนแผนภูมิแล้ว

6) เสร็จแล้ว

ตกลง. กลับไปที่โปรแกรม Arduino ตอนนี้เรามีสมการแล้ว การเขียนโปรแกรม Arduino เป็นเรื่องง่าย จำนวนเต็มที่แสดงถึงตำแหน่งสวิตช์จะคำนวณในโค้ด 1 บรรทัด ด้วยการใช้ฟังก์ชัน "bitread" เราสามารถจับค่าของแต่ละบิตและรู้สถานะของแต่ละปุ่มได้ (ดูรูป)

ขั้นตอนที่ 4: วงจร TinkerCAD

วงจร TinkerCAD
วงจร TinkerCAD

หากคุณยังไม่ได้ลองใช้ TinkerCAD Circuits ให้ทำเลย รอ!!!! อ่านคำแนะนำของฉันให้จบแล้วลองดู TinkerCAD Circuits ทำให้การทดสอบวงจร Arduino เป็นเรื่องง่าย ประกอบด้วยวัตถุไฟฟ้าและ Arduinos หลายตัว แม้กระทั่งช่วยให้คุณสามารถตั้งโปรแกรม Arduino สำหรับการทดสอบได้

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

เพื่อพิสูจน์ว่าการเขียนโปรแกรม Arduino ใช้งานได้ ฉันแสดงสถานะของสวิตช์เป็น LED โดยใช้เอาต์พุตดิจิทัลของ Arduino

จากนั้นฉันก็เปลี่ยนทุกสวิตช์สำหรับชุดค่าผสมที่เป็นไปได้ทั้งหมดและภูมิใจที่จะบอกว่า "มันได้ผล" !!!

ขั้นตอนที่ 5: "นานมาก และขอบคุณสำหรับปลาทั้งหมด" (อ้างอิง 1)

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

ขอบคุณที่อ่านคำแนะนำของฉัน ฉันหวังว่ามันจะช่วยคุณในโครงการของคุณ

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

ขั้นตอนที่ 6: การอ้างอิง

คุณไม่คิดว่าฉันจะเสนอราคาโดยไม่ให้การอ้างอิงถึงแหล่งที่มาใช่ไหม

อ้างอิง 1: อดัมส์, ดักลาส. นานมาก และขอบคุณสำหรับปลาทั้งหมด (หนังสือเล่มที่ 4 ของ Hitchhiker's Guide to the Galaxy "ไตรภาค")

แนะนำ: