สารบัญ:

ปุ่มกดที่ตั้งโปรแกรมได้: 5 ขั้นตอน (พร้อมรูปภาพ)
ปุ่มกดที่ตั้งโปรแกรมได้: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ปุ่มกดที่ตั้งโปรแกรมได้: 5 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ปุ่มกดที่ตั้งโปรแกรมได้: 5 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: 32 ปุ่มลับบนคีย์บอร์ดของคุณ 2024, ธันวาคม
Anonim
ปุ่มกดที่ตั้งโปรแกรมได้
ปุ่มกดที่ตั้งโปรแกรมได้
ปุ่มกดที่ตั้งโปรแกรมได้
ปุ่มกดที่ตั้งโปรแกรมได้

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

แป้นกดนี้ตรวจพบว่าเป็นแป้นพิมพ์ในระบบปฏิบัติการหลักทั้งหมด ไม่จำเป็นต้องใช้ไดรเวอร์เพิ่มเติม

เสบียง

  • ตัวเข้ารหัสแบบหมุน
  • ปุ่มกดจำนวนมาก (ขึ้นอยู่กับความต้องการของคุณ)
  • Arduino Pro Micro, Arduino Leonardo หรือบอร์ด dev อื่นๆ ที่มี Atmega32U4 MCU
  • ลวด บัดกรี หัวแร้ง ฯลฯ
  • (ไม่บังคับ) ฐานหนาสำหรับป้องกันไม่ให้แป้นกดเลื่อน ฉันใช้ HDD. รุ่นเก่า 3.5 นิ้ว

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

วงจรไฟฟ้า
วงจรไฟฟ้า

ฉันเลือกใช้บอร์ด Arduino Pro Micro dev กับ Atmega32U4 MCU ซึ่งมีหมุดดิจิทัลที่ใช้งานได้ 18 พิน

หมุดสำหรับเชื่อมต่อปุ่มกดและตัวเข้ารหัสแบบโรตารี่ถูกเลือกโดยไม่ได้คำนึงถึงลำดับใดเป็นพิเศษ แต่ควรสังเกตบางสิ่ง:

  1. พินที่อ่านได้แบบดิจิทัลทั้งหมดมีตัวดึงข้อมูลภายในซึ่งช่วยให้ลดตัวต้านทานแบบดึงลงภายนอกได้ แน่นอนว่าโค้ดควรได้รับการอัปเดตตามนั้น เพราะคาดว่าสถานะของพินจะเปลี่ยนจากต่ำไปสูงเมื่อกดปุ่ม
  2. ในตัวอย่างไลบรารี encoder.h ระบุว่าประสิทธิภาพที่ดีที่สุดของตัวเข้ารหัสจะไปถึงเมื่อพินทั้งสองเชื่อมต่อกับพินที่สามารถขัดจังหวะ MCU ได้ หมุดอนาล็อกส่วนใหญ่ของ Atmega32U4 ไม่มีความสามารถในการขัดจังหวะ
  3. ค่าตัวต้านทานแบบดึงลงที่แน่นอนนั้นไม่สำคัญ สิ่งใดจาก 1 kΩ ถึง 100 kΩ จะทำงานได้ดี ค่าความต้านทานที่มากขึ้นช่วยให้มีการกระจายพลังงานน้อยลง แต่ส่งผลให้พินตอบสนองต่อการเปลี่ยนแปลงแรงดันไฟฟ้าช้าลง เพียงแค่เลือกตัวต้านทานค่าที่คุณมีมากที่สุด
  4. เครื่องเข้ารหัสแบบเครื่องกลไม่ใช่สิ่งที่น่าเชื่อถือที่สุดเนื่องจากการสึกหรอของหน้าสัมผัสและการตีกลับ นั่นเป็นเหตุผลที่จำเป็นต้องมีวิธีการแก้ปัญหาที่ดี ค่าตัวเก็บประจุที่ฉันเลือกและเวลาหน่วงในโค้ดอาจไม่ให้ผลลัพธ์ที่ดีที่สุดสำหรับคุณ ดังนั้นจึงจำเป็นต้องมีการทดลองเล็กน้อย หรือเปลี่ยนไปใช้ตัวเข้ารหัสแบบออปติคัล แต่ราคาของมันสูงกว่าอย่างเห็นได้ชัด

ขั้นตอนที่ 2: การประกอบ

การประกอบ
การประกอบ
การประกอบ
การประกอบ
การประกอบ
การประกอบ
การประกอบ
การประกอบ

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

ฉันพบว่า HDD 3.5 แบบเก่าเพื่อใช้เป็นฐานสำหรับแป้นกด มันค่อนข้างหนักและป้องกันไม่ให้แผ่นกระดานเลื่อนไปมาระหว่างโต๊ะเมื่อใช้งาน (แผ่นกันลื่นก็ช่วยได้เช่นกัน) นอกจากนี้ยังมีรูสกรูขนาด 3 มม. ที่สะดวกซึ่งฉันขันสกรูรองทองเหลืองและ แก้ไขกระดานที่มุมเล็กน้อย

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

รหัสถูกเขียนด้วย Arduino IDE คุณจะต้องติดตั้ง 2 ไลบรารี:

  • ตัวเข้ารหัสโดย Paul Stoffregen
  • คีย์บอร์ดโดย Arduino

ในการรวบรวมสำหรับ Atmega32U4 คุณต้องติดตั้งไฟล์บอร์ด Arduino Pro Micro Sparkfun มีบทช่วยสอนที่ยอดเยี่ยมเกี่ยวกับวิธีการทำเช่นนั้น

สิ่งหนึ่งที่ควรทราบล่วงหน้าคือ ระวังอย่าปล่อยให้ "แป้นกด" อยู่ในรหัสของคุณ สิ่งนี้เกิดขึ้นกับฉันและ MCU ได้สแปมการกดปุ่มร่วมกันอย่างต่อเนื่อง วิธีเดียวที่ฉันทราบวิธีแก้ไขปัญหานี้คือการเขียน boot-loader ใหม่เป็น MCU หากคุณจะลงเอยเหมือนฉัน คุณสามารถทำตามคำแนะนำนี้เพื่อเบิร์นบูตโหลดเดอร์ คุณจะต้องใช้บอร์ด Arduino อีกอันเพื่อใช้เป็นโปรแกรมเมอร์

ใน main loop MCU จะอ่านแต่ละสถานะของปุ่มกดก่อน หากตรวจพบสถานะเปลี่ยนจาก LOW เป็น HIGH ฟังก์ชัน keyboard_shortcut(i) จะถูกดำเนินการ ตัวแปร i คือรหัสของปุ่มที่ถูกกด หมายเลขปุ่มกดทั้งหมดถูกกำหนดโดย ALL_BUTTONS (ในกรณีของฉัน 15) เมื่อดำเนินการ keyboard_shortcut(i) จะส่ง CTRL+SHIFT แล้วตามด้วยตัวอักษรที่จับคู่กับรหัสปุ่ม: 1->A, 2->B, 3->C เป็นต้น ชุดค่าผสมบางอย่างเช่น CTRL+SHIFT+N ถูกละไว้เนื่องจากเป็น ใช้แล้วใน Windows10 โดยค่าเริ่มต้น (ในกรณีนี้เพื่อสร้างโฟลเดอร์ใหม่) นี่คือรายการทางลัดเริ่มต้นของ Windows ทั้งหมด หลังจากหน่วงเวลาสั้น MCU จะส่งสัญญาณเพื่อปล่อยปุ่มทั้งหมดและออกจากฟังก์ชันกลับไปยังลูปหลัก

หลังจากตรวจสอบปุ่มทั้งหมดแล้ว MCU จะตรวจสอบว่าตำแหน่งของตัวเข้ารหัสแบบหมุนเปลี่ยนไปหรือไม่ และหากมีการเปลี่ยนแปลง keyboard_shortcut(i) จะถูกดำเนินการด้วยรหัสเฉพาะ

การกดปุ่ม Encoder จะกลับค่าตัวแปรบูลีน encoderButtonFlag เมื่อตัวเข้ารหัสถูกหมุน ทางลัดที่แตกต่างกันจะถูกส่งไปยังพีซี ขึ้นอยู่กับทิศทางการหมุนและค่า encoderButtonFlag

หาก debugFlag ตั้งค่าเป็น 1 ข้อความดีบักจะถูกส่งผ่าน UART ไปยังมอนิเตอร์แบบอนุกรม

ขั้นตอนที่ 4: การกำหนดค่าทางลัด

การกำหนดค่าทางลัด
การกำหนดค่าทางลัด
การกำหนดค่าทางลัด
การกำหนดค่าทางลัด

สิ่งที่แต่ละปุ่มลัดทำนั้นขึ้นอยู่กับคุณ เราทุกคนมีความชอบที่แตกต่างกัน ฉันจะให้ทางลัดที่ฉันกำหนดค่าสำหรับตัวเองเป็นตัวอย่าง ฉันใช้ Linux Mint 19.3 กับตัวจัดการเดสก์ท็อป xfce4 ดังนั้นตัวอย่างของฉันส่วนใหญ่เกี่ยวข้องกับสคริปต์ทุบตี แต่ฉันจะแสดงตัวอย่างพื้นฐานสำหรับ Windows10 ด้วย

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

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

สคริปต์อื่นๆ:

  • 2nd_display_control.sh - เปิด/ปิดจอภาพที่สอง
  • moon_lamp.sh - เปิด/ปิดโคมไฟดวงจันทร์ของฉัน
  • pc_load.sh - สร้างฟองการแจ้งเตือนด้วยการใช้งาน CPU และ GPU และอุณหภูมิในปัจจุบัน
  • shutdown.sh - เริ่มต้นการปิดระบบพีซีด้วยความล่าช้า 1 นาที และสร้างลูกโป่งการแจ้งเตือนซึ่งจะแสดงเวลาที่เหลือ
  • spec_vpn.sh - เชื่อมต่อกับเซิร์ฟเวอร์ OpenVPN เฉพาะ หรือหากมีการเชื่อมต่ออยู่แล้ว ให้ยกเลิกการเชื่อมต่อจากเซิร์ฟเวอร์
  • shortcut_controll.sh - รับคำสั่ง (บวก, ลบ, แท็บ, ปิด) เป็นอาร์กิวเมนต์ ตรวจสอบว่าหน้าต่างใดถูกโฟกัสอยู่ในขณะนี้ และหากพบแอปพลิเคชันเฉพาะที่ใช้งานอยู่ ให้ดำเนินการควบคุม ตัวอย่างเช่น การเปิดแท็บใหม่ในทางลัดเริ่มต้นของตัวแก้ไขข้อความประเสริฐคือ "CTRL+N" และในเทอร์มินัล xfce - "CTRL+T" ดังนั้นสคริปต์นี้จึงอนุญาตให้เปิดแท็บใหม่ใน sublime และ terminal ด้วยปุ่มกดเดียวกัน

ฟังก์ชันแรกของตัวเข้ารหัสแบบหมุนคือการควบคุมระดับเสียง ฟังก์ชันที่สองคือการควบคุมการซูมหน้าต่างที่ทำงานอยู่ผ่าน shortcut_controll.sh

สำหรับ Windows OS คุณสามารถแมปช็อตคัทกับแอพพลิเคชั่นผ่านหน้าต่างคุณสมบัติของโปรแกรมดังแสดงในภาพที่สอง สำหรับสิ่งอื่นใด คุณจะต้องการใช้ AutoHotkey เป็นภาษาสคริปต์อัตโนมัติสำหรับ Windows

ตัวอย่างง่ายๆ ของไวยากรณ์ AHK:

;การควบคุมระดับเสียง

^+t::ส่ง {Volume_Up}

กลับ

^+v:: ส่ง {Volume_Down}

กลับ

;ปิดหน้าต่างที่ใช้งานอยู่

^+h::WinGetTitle, ชื่อเรื่อง, A

PostMessage, 0x112, 0xF060,,, %ชื่อ%

กลับ

;ปิดเครื่อง PC

^+b::เรียกใช้การปิดระบบ /s

ขั้นตอนที่ 5: การปรับปรุง

การปรับปรุง
การปรับปรุง

การปรับปรุงที่เป็นไปได้บางประการ:

  • ปุ่มกดที่มีคุณภาพดีขึ้น
  • ต้นแบบ PCB งอได้ค่อนข้างมากเมื่อกดปุ่ม
  • ไฟ RGB เพื่อเปลี่ยนสีขึ้นอยู่กับว่าตั้งค่าเครื่องเข้ารหัสแบบโรตารี่ฟังก์ชันใดไว้
  • ปุ่มเพิ่มเติม (ใช้ IO expander IC)
  • ตัวเข้ารหัสแบบโรตารี่ที่ดีกว่า (หรือโซลูชัน debounding ที่ดีกว่า)

แนะนำ: