Tự làm bàn phím cơ (phần 1)

23/2/2023 mechanical-keyboardhobbies

Chào mọi người, đợt này tự dưng hứng lên muốn tự làm cái bàn phím cơ, từ khâu thiết kế PCB, hàn linh kiện cho đến custom phần mềm. Thế nhưng mà vì một vài lý do mà mình chỉ làm Macropad thôi. Trong lúc chờ cái PCB in xong thì mình lên đây luyên thuyên tí.

“Thế sao để tiêu đề là ‘bàn phím cơ’???"

“Thì Macropad cũng là bàn phím cơ mà :D, có điều nó nhỏ thôi. Để thế nghe cho nó sang mồm :D”

Thật ra ban đầu mình cũng chả quan tâm đến bàn phím. Đi làm công ty cấp cho cái gì thì dùng cái đó, mấy năm đi làm gõ bàn phím 100K vẫn ok. Cho đến khi mình cần mua một cái bàn phím, khi đó công ty lại có mấy bác dùng phím cơ gõ cạch cạch, nghe cũng vui. Tham khảo một hồi thế là lấy em Fuhlen m87s về trải nghiệm. Phải nói là cảm nhận của mình lúc đó thấy bình thường, cũng chỉ là cái bàn phím để gõ thôi mà, không có gì ấn tượng (giá rẻ mà pepe_mad).

Cho đến một ngày mình thấy Keychron K2, đúng hợp gu thẩm mỹ, vừa nhìn đã thấy đẹp. Từ layout 75% compact, viền nhôm cho đến LED RGB pepe_dreamy. Thật lòng mà nói thì mình thuộc dạng dùng phím cơ vì nó đẹp chứ không quá quan trọng về cảm giác gõ.

My K2

Lý do dẫn đến hôm nay mình quyết định tự làm Macropad bắt nguồn từ việc gần đây mình mới mua Keychron K6. Mới dùng mà cứ sợ nó bị hư :)), mà hư thì chỉ có nước đi mua cái mới hoặc kit mới mà giá trị cũng hơn 1 nửa rồi. Và một lý do quan trọng nữa là Keychron thiết kế layout phím K6 ng* vãi, có mỗi việc đổi hiệu ứng LED mà làm nguyên một phím, thay bằng phím Del có phải tốt hơn không. Ngoài ra mình cũng rất hay dùng HomeEnd. Thế là đánh đổi việc bảo hành, mình tháo ra đo đạc kích thước PCB và vị trí của switch. Rồi mày mò tìm hiểu phần mềm KiCad, cách vẽ mạch, đi dây. Với kỳ vọng nếu sau này có hư PCB thì chỉ việc đi in cái mới thay thế.

#Let's get started

Đầu tiên là thành phần cơ bản của một bàn phím cơ

  • Microcontroller (Vi điều khiển): là trái tim của bàn phím, nó xử lý và gửi thông tin gõ phím (keycode) cho máy tính.
  • Switch: Đơn giản là công tắc, khi được bật (nhấn) nó tạo ra mạch kín giúp Microcontroller nhận tín hiệu, từ đó gửi keycode tương ứng như đã lập trình.
  • PCB: Switch chỉ là công tắc, cần gì đó để nối mạch với các chân in/out (GPIO) của Microcontroller. Và PCB ở đây để đảm nhận trách nhiệm đó. Dĩ nhiên ta có thể hàn dây điện trực tiếp nhưng PCB giúp mạch trông gọn gàng và đẹp hơn.
  • Đi-ốt: Linh kiện chỉ cho dòng điện đi qua nó theo 1 chiều duy nhất. Mình sẽ nói lý do cần nó ở bên dưới.
  • Keycap

#Bắt đầu với vẽ sơ đồ nguyên lý

Sự thay đổi điện áp ở chân Microcontroller khi nhấn phím giúp nó nhận biết keycode nào nên được gửi. Tuy nhiên do giới hạn bởi số chân, ta không thể có 90 chân cho 90 phím được. Nên người ta đã nghĩ ra sơ đồ mạch dạng ma trận, lúc này mỗi phím được xác định bằng việc thay đổi điện áp ở 2 chân. Vậy là chỉ cần 19 (9 x 10) chân là đáp ứng được 90 phím rồi.

Tuy nhiên với mạch ma trận cơ bản sẽ xảy ra 2 vấn đề Ghosting và Masking khi nhấn nhiều phím cùng lúc. Bạn có thể đọc bài viết này để hiểu kỹ hơn về vấn đề và cách họ giải quyết nó bằng Đi-ốt.

Để bắt đầu vẽ mạch, cần chọn vi điều khiển trước. Sau khi tham khảo thì mình chọn ProMicro vì nó sẵn có trên mấy sàn thương mại điện tử. Phần mềm mình dùng để vẽ mạch là KiCad. Nếu bạn muốn tìm hiểu KiCad có thể bắt đầu từ video này, rất chi tiết dễ hiểu. Một số linh kiện (symbol + footprint) không tồn tại sẵn trong KiCad, thì phải google để add thêm vào.

Rồi bắt đầu vẽ. Mình chọn Duplex Matrix vì PCB mình không có nhiều khoảng trống viền để đi dây.

Sơ đồ nguyên lý

#Vẽ Sơ đồ bố trí mạch (PCB Layout)

Tiếp theo là công đoạn vẽ mạch. Giai đoạn này hơi khó ở việc sắp xếp vị trí linh kiện sao cho có không gian để đi dây cũng như chỗ để MountingHole. Mất mấy ngày hì hục mới vẽ xong.

Lưu ý, Ở bước này trước khi vẽ bạn cần xác định trước nơi in PCB họ hỗ trợ thông số độ rộng mạch đồng, khoảng cách tối thiểu, etc. Sau đó quay lại setting cho KiCad trước khi vẽ. Vì có những nơi họ không cho kích thước mạch đồng quá nhỏ, cũng như khoảng cách không quá gần.

Thành quả sau mấy ngày lao động

#Nhưng…

Trước khi đem đi in, mình cẩn thận lên server MechKeys hỏi trước xem có vấn đề gì không cho chắc ăn. Thì được các tiền bối chỉ cho là K6 có thể nạp được QMK , really?? pepe_wide_eyes1. May mà hỏi có đầu có đuôi, tránh XY problem. Cộng với việc sợ in xong không vừa vỏ của nó, mà 90% là không vừa, vì mình chỉ đo bằng thước kẻ, sai số khả năng rất lớn. Nên thôi tạm gác lại, mình nạp QMK để custom phím dùng đã, khi nào hư tính tiếp. Đọc đến đây thì mọi người cũng hiểu là không phải tự dưng hứng lên mà mục đích chính của mình là để tiết kiệm pepe_sad.


#Không bỏ cuộc

Nhưng mọi chuyện không thể kết thúc đơn giản thế được. Để không phí công mấy ngày tìm hiểu, mình quay sang làm một cái nhỏ hơn - Macropad. Không làm được cái to, ta làm cái nhỏ vậy pepe_ok. Ban đầu khi thấy trên mạng bán cái Numpad, mình thấy buồn cười vãi, ai lại đi mua cái bàn phím 65% rồi lại bỏ tiền đi mua cái Numpad riêng. Thế rồi tìm hiểu mới biết mình có thể custom các macro cho nó, ví dụ nhấn 1 phím đã copy thay vì phải giữ Ctrl. Cũng hay ho đó chứ, làm thử thôi.

Macropad của mình có 6 phím, và 2 núm xoay có thể dùng chỉnh âm lượng hoặc độ sáng màn hình. Mình đặt tên nó là lmacro6.

Sơ đồ nguyên lý
3D preview

Các thành phần của nó gồm:

  • 1 vi điều khiển ProMicro
  • 2 Rotary Encoder EC11 (núm xoay)
  • 6 switch Gateron + 6 Keycap
  • 8 cái Đi-ốt 1N4148
    • 6 cái cho 6 phím
    • 2 cái cho núm xoay, vì ngoài xoay nó cũng có khả năng nhấn tương tự như switch.

Tất cả đều có thể mua trên các trang thương mại điện tử.

Sau khi vẽ xong layout, để đem đi in được thì cần phải export ra file Gerber và Drill và gửi cho nơi in PCB. Cách export thì bạn có thể tham khảo rất nhiều bài hướng dẫn trên google. 

#Firmware

Mình chọn QMK vì cộng đồng lớn, hỗ trợ nhiều vi điều khiển, ngoài ra còn hỗ trợ cả VIA - cung cấp phần mềm cho setting Keymap và Macro thay vì phải flash firmware mỗi lần muốn thay đổi.

May mắn là trong source của QMK đã có sẵn một số source của người khác, nên mình cũng đỡ công tìm hiểu từ đầu. Mình chỉ clone và chỉnh sửa thông số cho phù hợp vi điều khiển của mình. Source của lmacro6 mình để ở đây cho bạn nào muốn tham khảo.

Nạp firmware test thử

Hiện tại thì đồ nghề, linh kiện đã đủ hiết rồi, chỉ thiếu mỗi em PCB pepe_cry. Thật sự thì đợi chờ chẳng bao giờ là hạnh phúc.

Chỉ thiếu mỗi PCB :(

Tạm thời mình kết thúc bài này ở đây đã. Cảm ơn mọi người đã chịu khó đọc đến đây growing-heart (hoặc có thể đã scroll xuống vì không đủ kiên nhẫn). Ở bài tới mình sẽ chia sẻ về quá trình lắp ráp và nạp firmware. Giờ thì buồn ngủ quá rồi. Good night! pepe_stayuplate


Mà công nhận đợi cái PCB 10 ngày rồi chưa có khó chịu vãi pepe_popcorn

Update: phần 2