Arduino Uno Keypad (Keypad dùng Arduino Uno)
Keypad đơn giản dùng Arduino Uno với 3 rotary encoder và 3 nút bấm. Giao tiếp Serial gửi sự kiện xoay/nút sang Python (Pyserial + pyautogui) để điều khiển volume, cuộn chuột và phím F1–F3.
Mô tả
Bàn phím này dùng:
- Arduino Uno
- 3 rotary encoder, loại có đế hình chữ nhật rộng 16mm (mình tận dụng lại từ một cái amplifier bị hư)
- 3 nút bấm đế vuông rộng 9mm (loại hay đi kèm trong các kit Arduino)
- 1 LED 5mm
- (Tùy chọn) một công tắc trượt để có 2 chế độ chuyển đổi (6mm x 20mm, loại nút nhỏ khá phổ biến trong nhiều thiết bị, có 2 lỗ bắt vít cách nhau 15mm)
- 3 điện trở 10K ohm (hoặc 4 nếu bạn muốn có công tắc đổi chế độ) cho các nút bấm
- điện trở 220 ohm cho LED
- 8 đai ốc M3
- 2 vít M3x20mm
- 6 vít M3x8mm
- 2 đai ốc M4
- 2 vít M4x10mm
- một kiểu đối trọng/miếng nặng nào đó; mình dùng miếng thép đúc 38mm x 21mm x 4mm lấy từ cái amp cũ, nhưng bạn có thể dùng washer hoặc cắt một miếng thép đúng kích thước.
Mình đã in toàn bộ file bằng Prusa I3 MK2.5S và nozzle rộng 0.6mm với layer height 0.25mm (mấy file này khá dễ in và chỉ phần top mới cần support).
Keypad dùng giao tiếp Serial để gửi tín hiệu nhấn phím và xoay núm, sau đó được một đoạn mã Python nhận ở nền (bạn có thể cài để tự chạy khi đăng nhập).
Code Arduino khá đơn giản và mình đã đính kèm trong các file (mình chưa lập trình phần công tắc đổi chế độ, nhưng thêm vào chắc cũng dễ).
Code Python dùng thư viện Pyserial để đọc thông tin từ serial bus (https://pyserial.readthedocs.io/en/latest/pyserial.html#installation) và thư viện pyautogui để ghi nhận thao tác nhấn phím (https://pyautogui.readthedocs.io/en/latest/install.html).
Đây là đoạn code mình đã dùng (2 núm phía dưới dùng để có 2 tốc độ cuộn chuột, núm phía trên là chỉnh âm lượng; các nút bấm là phím chức năng).
import serial
import pyautogui
arduino = serial.Serial("COM4", 9600, timeout=.1)
while True:
data = arduino.readline()
if data != None :
dataList = data.decode("ascii").split("_")
last = 0
for word in dataList :
if word == "volUp" : pyautogui.press('volumeup')
elif word == "volDo": pyautogui.press('volumedown')
elif word == "en1Up" : pyautogui.scroll(50)
elif word == "en1Do" : pyautogui.scroll(-50)
elif word == "en2Up" : pyautogui.scroll(500)
elif word == "en2Do" : pyautogui.scroll(-500)
elif word == "bu1": pyautogui.press('f1')
elif word == "bu2": pyautogui.press('f2')
elif word == "bu3": pyautogui.press('f3')
Keypad chạy khá ổn, dù thỉnh thoảng có vài lỗi lạ mà mình chưa giải quyết được. Vì mình ráp nguyên cái keypad bằng những món linh kiện có sẵn trong nhà nên mình cũng khá hài lòng với kết quả.
Giấy phép
File mô hình
Chưa có bản in nào được khoe. Hãy là người đầu tiên!
Chưa có bình luận nào. Hãy là người đầu tiên!