ฉันสามารถสร้างแป้นพิมพ์ USB แบบเต็มด้วย Makey Makey + Raspberry Pi ได้ไหม


15

ฉันเพิ่งซื้อMakey Makey (จาก Arduino Leonardo / ATMega32u4) โดยหวังว่าจะสร้างแป้นพิมพ์ steampunk แบบ USB จากชิ้นส่วนโลหะบางส่วน ก่อนที่มันจะมาถึงฉันอ่านรายละเอียดอีกครั้งและรู้ว่ามันมีเพียง 18 อินพุตที่เป็นไปได้ดังนั้นปุ่ม 85+ จะไม่ทำงาน ไม่มีใครมีความคิดว่าฉันจะสร้างสัตว์ร้ายตัวนี้กับ Raspberry Pi ได้ไหม? (ซึ่งเชื่อมต่อค่อนข้างง่ายจากโพสต์ก่อนหน้า )


มันยอดเยี่ยมมาก
Jivings

1
แทนที่จะใช้อินพุตสำหรับแต่ละคีย์คุณสามารถใช้เมทริกซ์และใช้อินพุต 18 ตัวเพื่อจัดการ 81 คีย์ (เมทริกซ์ 9x9) เท่าที่ฉันรู้ว่า RPi มีอินพุตน้อยกว่าอาร์ดิโนดังนั้นฉันจึงไม่คิดว่ามันจะช่วยได้
Craig

@Craig ดังนั้นคุณหมายถึงการรวมอินพุตเช่นนี้: arduino.cc/playground/Main/KeypadTutorial
sventechie

@sventech ใช่ ฉันไม่คุ้นเคยกับ makey makey ดังนั้นฉันไม่รู้ว่าการสลับความต้านทานสูงจะมีปฏิสัมพันธ์กับเมทริกซ์ได้อย่างไร
Craig

คำตอบ:


6

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

อย่างไรก็ตามหากคุณยินดีที่จะเพิ่ม 2 IC ของคุณสามารถทำให้ตัวเองแป้นพิมพ์ด้วยปุ่มมากมายที่คุณจะมีปัญหาที่จะเกิดขึ้นกับฟังก์ชั่นสำหรับทุกปุ่ม!

คำแนะนำของฉันคือการเชื่อมต่อ 2 I2C ของ IC กับบัส I2C บน Raspberry Pi และใช้สิ่งเหล่านั้นเพื่อสร้างเมทริกซ์สแกนของคุณเอง

หากคุณใช้ PCF8574 หนึ่งตัวคุณจะมี 8 I / O พินให้ใช้งานถ้าคุณได้ PCF8575 คุณก็จะมี 16 I / O พิน โดยการรวมแล้วคุณจะได้รับเมทริกซ์สแกนของ:

  • 64 ปุ่ม: (2x PCF8574)
  • 128 ปุ่ม: (1x PCF8574 และ 1x PCF8575)
  • 256 ปุ่ม: (2x PCF8575)

คุณต้องใช้หนึ่งในนั้นเป็นเอาต์พุตและอีกอันใช้เป็นอินพุต บนเอาต์พุตคุณปล่อยให้ 'เดิน' เล็กน้อยจากบิต 0 ถึงบิต n (7 หรือ 15) นี่คือคอลัมน์ของเมทริกซ์ คุณอ่านค่าของอินพุตอย่างต่อเนื่องและนี่คือแถวของเมทริกซ์ การรวมกันของบิตเอาต์พุตใดที่แอ็คทีฟและอินพุตบิตคือ '1' คือคีย์ที่ถูกกด

หลักการสแกนเมทริกซ์

จริง ๆ แล้วการสร้างเมทริกซ์นั้นใช้งานได้ดีที่สุดและในขณะที่คุณอยู่ที่นี่อย่าลืมที่จะเพิ่มไดโอดหลังจากเปลี่ยนทุกครั้งที่คุณใส่ในเมทริกซ์ไดโอดนี้ (ปกติ 1N4148 จะทำได้ดี) จะต้องวางไว้กับขั้วบวก เพื่อสวิทช์และแคโทดไปยังบรรทัดแถว แรงดันไฟฟ้าตกที่ 0.6V สำหรับไดโอดนี้ไม่น่าจะมีปัญหาส่วนที่เหลือ (3.3V-0.6V) 2.7V ยังคงเป็นตรรกะ '1'

เมทริกซ์การสแกนในทางปฏิบัติ

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

ตัวอย่าง ghosting

รูปภาพแสดงตัวอย่างของ ghosting ปุ่ม A, B, D ถูกกดและนอกเหนือจากแถว 1 (สำหรับปุ่ม A) และแถวที่ 2 (สำหรับปุ่ม C) สูงในขณะที่คอลัมน์ 1 ทำงานซึ่งไม่ถูกต้อง

หลังจากการผจญภัยของฮาร์ดแวร์ทั้งหมดคุณต้องเขียนหรือดัดแปลงไดรเวอร์เคอร์เนลเพื่อใช้แป้นพิมพ์ภายใต้ linux จุดเริ่มต้นที่ดีอาจเป็นลิงค์นี้:ไดร์เวอร์สำหรับคีย์บนตัวขยาย TCA6416 I2C IOนี่เป็นแนวคิดที่คล้ายกัน แต่ใช้คีย์แพด 16 คีย์เท่านั้น

หวังว่านี่จะช่วยคุณได้เล็กน้อย


3

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

หากคุณต้องการเปลี่ยนเมทริกซ์ไฟฟ้าจริง ๆ แล้วคุณอาจต้องออกแบบเองตั้งแต่เริ่มต้น แต่ไม่จำเป็นจริงๆ

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.