สารบัญ:

5-Wire Resistive Touch Sensor: 10 ขั้นตอน
5-Wire Resistive Touch Sensor: 10 ขั้นตอน

วีดีโอ: 5-Wire Resistive Touch Sensor: 10 ขั้นตอน

วีดีโอ: 5-Wire Resistive Touch Sensor: 10 ขั้นตอน
วีดีโอ: Arduino Resistive Touchscreen Panel 2024, พฤศจิกายน
Anonim
5-Wire Resistive Touch Sensor
5-Wire Resistive Touch Sensor

สวัสดีสวัสดี!

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

ฉันเคยนึกถึงโปรเจ็กต์ที่อิงจาก Plate and Ball ของ 271828 มาบ้างแล้ว แต่ฉันยังต้องเรียนรู้เกี่ยวกับเซ็นเซอร์และทฤษฎีการควบคุมอีกมากก่อนที่จะเสร็จ ฉันคิดว่าตราบใดที่ฉันเรียนรู้สิ่งหนึ่งหรือสองสิ่ง ฉันอาจจะพาพวกคุณไปด้วย!

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

ฉันตื่นเต้นมากสำหรับโปรเจ็กต์ใหม่นี้ และฉันก็ตื่นเต้นมากที่จะได้เห็นว่ามันทำงานได้ดีแค่ไหน!

วันนี้เราจะมาทำความรู้จักกับแผงสัมผัสแบบ 5-Wire ที่ใช้งานกับ DP-32 กัน

มาเริ่มกันเลย!

ขั้นตอนที่ 1: สิ่งที่คุณต้องการ

สิ่งที่คุณต้องการ
สิ่งที่คุณต้องการ

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

  • ไมโครคอนโทรลเลอร์

    ฉันใช้ DP32 กับ bread-board ในตัว เพราะมันทำให้การสร้างต้นแบบเป็นเรื่องง่ายอย่างเหลือเชื่อ

  • สายไฟและสายเคเบิลต่างๆ

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

  • แผงสัมผัสตัวต้านทานแบบ 5 สายที่มีขนาดเท่ากัน!

    ฉันมีแผงสัมผัสตัวต้านทานแบบ 4 สาย แต่สายแพสำหรับมันพัง

และนั่นแหล่ะ!

ขั้นตอนที่ 2: แผงสัมผัสแบบ Resistive 5 สายคืออะไร?

แผงสัมผัสแบบ Resistive 5 สายคืออะไร?
แผงสัมผัสแบบ Resistive 5 สายคืออะไร?
แผงสัมผัสแบบ Resistive 5 สายคืออะไร?
แผงสัมผัสแบบ Resistive 5 สายคืออะไร?
แผงสัมผัสแบบ Resistive 5 สายคืออะไร?
แผงสัมผัสแบบ Resistive 5 สายคืออะไร?

หากคุณได้อ่านบทแนะนำเกี่ยวกับแผงสัมผัสแบบ 4 สายของฉัน คุณจะคุ้นเคยกับแนวคิดทั่วไปของเซ็นเซอร์สัมผัสแบบต้านทาน แต่แผงแบบ 5 สายและแผงแบบ 4 สายทำงานแตกต่างกันเล็กน้อย

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

ในรูปที่สอง เราได้ตั้งค่าสายไฟสองในสี่สาย (บนขวาและล่างขวา) เป็นไฟฟ้าแรงสูง (แสดงเป็นสีแดง) ในขณะที่อีกสองสาย (บนซ้ายและล่างซ้าย) ตั้งค่าไว้ที่ระดับต่ำ แรงดันไฟฟ้า (แสดงเป็นสีน้ำเงิน) สิ่งนี้จะสร้างการไล่ระดับแรงดันไฟฟ้าทั่วทั้งแผง ในกรณีนี้ การไล่ระดับสีไปตามแกน X ดังนั้นแรงดันไฟฟ้าที่สูงกว่าแสดงถึงตำแหน่งที่สูงขึ้นตามแกน X

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

ในภาพที่สาม คุณจะเห็นว่าการกำหนดค่าเปลี่ยนแปลงอย่างไรเพื่อให้เราสัมผัสได้ตามแนวแกน Y ด้วยวิธีนี้ เราสามารถบอกได้ว่านิ้วของเราแตะตรงไหนในอวกาศ 2 มิติ!

ขั้นตอนที่ 3: การเดินสายไฟ

การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ

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

แน่นอนว่าการเดินสายของคุณอาจแตกต่างกัน แต่การเดินสายของฉันมีดังนี้:

อะนาล็อก 0 (พิน 6) เชื่อมต่อกับเซ็นเซอร์ (พินกลาง)

Digital 3 เชื่อมต่อกับ Top-Right (ขาบนสุด)

ดิจิตอล 2 เชื่อมต่อกับซ้ายบน (ขาที่สองบนสุด)

ดิจิตอล 1 เชื่อมต่อกับล่างซ้าย (ขาที่สองล่างสุด)

Digital 0 เชื่อมต่อกับ Bottom-Right (ขาล่างสุด)

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

ขั้นตอนที่ 4: การพัฒนาซอฟต์แวร์

การพัฒนาซอฟต์แวร์
การพัฒนาซอฟต์แวร์

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

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

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

ขั้นตอนที่ 5: สถานะเครื่องกะพริบ

สถานะเครื่องกะพริบตา
สถานะเครื่องกะพริบตา

การย้ายครั้งแรกของฉันคือเปลี่ยนฟังก์ชันการกะพริบจากฟังก์ชัน "delay()" เป็นเครื่องสถานะ

สำหรับผู้ที่ไม่เคยสลับคำสั่ง จะทำงานคล้ายกับคำสั่ง if อันนี้ (ในกล่องสีส้ม) ทดสอบตัวแปร "state" ของเรา (ซึ่งเริ่มต้นที่ 0) จากนั้นข้ามไปที่กรณีสำหรับสถานะปัจจุบันของเรา คุณจะเห็นว่ากรณีที่ 0 และ 2 มีหน้าที่ในการเปิดและปิด LED (ตามลำดับ) ในขณะที่กรณีที่ 1 และ 3 รับผิดชอบในการรอระหว่างสวิตช์

ขั้นตอนที่ 6: ปุ่ม Blink

ปุ่มกะพริบตา
ปุ่มกะพริบตา
ปุ่มกะพริบตา
ปุ่มกะพริบตา
ปุ่มกะพริบตา
ปุ่มกะพริบตา

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

ฉันยังลบสถานะ "รอ" ที่สองด้วย นั่นหมายความว่าปุ่มจะเปิดไฟเป็นเวลาหนึ่งวินาที และคุณสามารถกดปุ่มอีกครั้งทันทีหลังจากที่ปิด

เป็นที่น่าสังเกตว่าระบบนี้จะดีบักปุ่มให้เราโดยอัตโนมัติ เนื่องจากเราต้องรอจนกว่าไฟ LED จะดับก่อนที่จะกลับสู่สถานะ 0 ซึ่งปุ่มสามารถกระตุ้นวงจรได้อีกครั้ง

ขั้นตอนที่ 7: การสื่อสารแบบอนุกรม

การสื่อสารแบบอนุกรม
การสื่อสารแบบอนุกรม
การสื่อสารแบบอนุกรม
การสื่อสารแบบอนุกรม

การอัปเดตนี้มีขนาดเล็กมาก ทั้งหมดที่ฉันต้องการทำคือสร้างการเชื่อมต่อแบบอนุกรมและส่งข้อความ ในภาพแรก คุณจะเห็นว่าฉันเริ่ม Serial ในฟังก์ชัน setup() ภายในเครื่องของรัฐ ฉันได้เพิ่มบรรทัดในสถานะ 1 และ 3 ที่จะส่งข้อความอย่างง่ายไปยังคอมพิวเตอร์ผ่านซีเรียล

ขั้นตอนที่ 8: การอ่านพิกัด

อ่านพิกัด
อ่านพิกัด
อ่านพิกัด
อ่านพิกัด
อ่านพิกัด
อ่านพิกัด
อ่านพิกัด
อ่านพิกัด

เป็นเรื่องดีที่ขั้นตอนสุดท้ายนั้นง่าย เพราะขั้นตอนนี้ดูแย่มาก

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

ฉันได้เขียน state-machine ใหม่ทั้งหมดแล้ว การดูโค้ดค่อนข้างสับสน ดังนั้นฉันจึงรวมบล็อกไดอะแกรมที่ควรแสดงสิ่งที่ทำเสร็จแล้ว

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

หมายเหตุ: ค่าคงที่ DEBOUNCE_TIME อาจต่ำเล็กน้อย รู้สึกอิสระที่จะเพิ่มมัน

ขั้นตอนที่ 9: ทำความสะอาด

การทำความสะอาด
การทำความสะอาด
การทำความสะอาด
การทำความสะอาด
การทำความสะอาด
การทำความสะอาด

เรามาถึงโค้ดเวอร์ชันสุดท้ายของโปรเจ็กต์นี้แล้ว!

ในการเริ่มต้น ฉันได้เพิ่มฟังก์ชันที่เรียกว่า loop_diff() เพื่อคำนวณเวลาที่ผ่านไป นาฬิกาภายในสำหรับ DP32 เป็นแบบ unsigned long และถึงแม้จะไม่น่าเป็นไปได้อย่างยิ่ง แต่ก็มีความเป็นไปได้ที่นาฬิกาอาจวนซ้ำในบางครั้งระหว่างรันไทม์ของโค้ดนี้* ในกรณีนั้น เพียงแค่ลบเวลาปัจจุบันออกจากเวลาที่บันทึกไว้ใน btn_time หรือ panel_time จะทำให้เราได้รับสิ่งแปลก ๆ ดังนั้นฉันจึงเขียน loop_diff() เพื่อตรวจจับเมื่อเกิดลูปและทำงานตามนั้น

ฉันยังทำความสะอาดเล็กน้อย ฉันได้ลบตัวแปร "state_time" ที่ไม่ได้ใช้แล้ว ฉันได้เปลี่ยนจากแท็ก LED_BUILTIN (ซึ่งเป็นมาตรฐาน Arduino) เป็นแท็ก PIN_LED1 (ซึ่งเป็นมาตรฐานสำหรับ chipKit และ DP32) ฉันได้ลบข้อความทั้งหมดผ่าน Serial เกี่ยวกับการเริ่มและสิ้นสุดกระบวนการ ซึ่งทำให้ข้อมูลของเราผ่าน Serial สะอาดขึ้นมาก

*ฉันคำนวณทางคณิตศาสตร์เมื่อหลายปีก่อน และฉันคิดว่าสำหรับฟังก์ชัน millis() จะใช้เวลาราวหนึ่งสัปดาห์ของรันไทม์คงที่ ก่อนที่ตัวแปรจะวนซ้ำ

ขั้นตอนที่ 10: ความคิดสุดท้าย

ความคิดสุดท้าย
ความคิดสุดท้าย

และนั่นแหล่ะ!

หากคุณได้ปฏิบัติตาม ตอนนี้คุณควรมีแผงสัมผัสที่ใช้งานได้เชื่อมต่อกับไมโครคอนโทรลเลอร์ของคุณ! นี่เป็นโครงการขนาดเล็ก แต่เป็นส่วนหนึ่งของโครงการที่ใหญ่กว่า ฉันกำลังพยายามทำบางอย่างเช่น Plate and Ball ของ 271828 และฉันยังมีเวลาอีกมากก่อนที่จะเกิดเหตุการณ์นั้นขึ้น ฉันจะพยายามนำคุณไปสู่กระบวนการทั้งหมด และแต่ละส่วนควรเป็นโปรเจ็กต์เล็กๆ ของตัวเอง

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

ขอบคุณครับ แล้วเจอกันใหม่ครับ!

แนะนำ: