Inspiration
Dự án được truyền cảm hứng từ ý tưởng biến một thiết bị đeo tay phổ biến và giá rẻ như Mi Band thành một công cụ điều khiển máy tính hiện đại. Chúng tôi rất thích khái niệm “chuột bay” (air mouse / flying mouse) – cho phép di chuyển con trỏ chỉ bằng cử chỉ tay trong không khí mà không cần chạm bàn phím hay chuột vật lý. Ngoài ra, tinh thần mã nguồn mở đã thúc đẩy chúng tôi xây dựng giải pháp này để mọi người đều có thể sử dụng và phát triển thêm.
What it does
Dự án cho phép điều khiển con trỏ chuột trên máy tính chỉ bằng cách đeo Mi Band trên cổ tay và di chuyển bàn tay/cổ tay trong không khí. Dữ liệu từ cảm biến gia tốc (accelerometer) của Mi Band được thu thập qua Bluetooth, xử lý và chuyển đổi thành chuyển động của con trỏ chuột theo kiểu chuột bay.
Hiện tại hỗ trợ di chuyển con trỏ mượt mà theo 2 chiều. Chúng tôi đang mở rộng thêm nhận diện cử chỉ để thực hiện click chuột và cuộn trang.
How we built it
Chúng tôi xây dựng hoàn toàn bằng Python để dễ phát triển và mã nguồn mở:
- Kết nối Bluetooth Low Energy (BLE) với Mi Band bằng thư viện
bleak. - Đọc dữ liệu thô từ cảm biến gia tốc của Mi Band.
- Xử lý tín hiệu: lọc nhiễu và tích phân để tính vận tốc, vị trí.
Công thức cập nhật vận tốc và vị trí cơ bản:
[ v_t = v_{t-1} + a_t \cdot \Delta t ]
[ x_t = x_{t-1} + v_t \cdot \Delta t ]
(trong đó (a_t) là gia tốc tại thời điểm (t), (\Delta t) là khoảng thời gian giữa 2 mẫu dữ liệu).
- Ánh xạ chuyển động sang vị trí con trỏ chuột trên màn hình.
- Sử dụng thư viện
pyautogui(hoặcpynput) để điều khiển chuột hệ thống. - Thêm bước calibration để người dùng dễ dàng điều chỉnh độ nhạy và phạm vi di chuyển.
- Ứng dụng chạy nền, có giao diện console đơn giản để kết nối và hiệu chỉnh.
Toàn bộ mã nguồn đã được công khai trên GitHub.
Challenges we ran into
- Giao thức BLE của Mi Band không có tài liệu chính thức đầy đủ, phải nghiên cứu và reverse engineer để đọc dữ liệu cảm biến chính xác.
- Dữ liệu gia tốc rất nhạy, dễ bị nhiễu → con trỏ chuột giật cục.
- Vấn đề drift khi tích phân gia tốc hai lần để tính vị trí (sai lệch tích lũy theo thời gian).
- Độ trễ kết nối Bluetooth ảnh hưởng đến trải nghiệm real-time.
- Hỗ trợ đa nền tảng (Windows, Linux, macOS) và nhiều model Mi Band khác nhau gặp nhiều khó khăn về quyền truy cập và đặc tính BLE.
- Cần tinh chỉnh rất nhiều tham số lọc để đạt được sự cân bằng giữa độ mượt và độ chính xác.
Accomplishments that we're proud of
- Xây dựng được prototype hoạt động ổn định với độ trễ chấp nhận được (thường dưới 80ms).
- Tối ưu hóa thuật toán lọc tín hiệu giúp con trỏ di chuyển khá tự nhiên và ít giật.
- Hoàn thiện mã nguồn mở sạch sẽ, dễ cài đặt và có hướng dẫn chi tiết.
- Tạo được demo thực tế có thể dùng ngay cho thuyết trình hoặc điều khiển máy tính từ xa.
- Đóng góp một giải pháp mã nguồn mở thực tế cho cộng đồng sử dụng Mi Band.
What we learned
- Kiến thức sâu về Bluetooth Low Energy (BLE) và cách giao tiếp với thiết bị đeo tay.
- Kỹ năng xử lý tín hiệu số, lọc nhiễu và sensor fusion cho dữ liệu IMU.
- Những thách thức thực tế khi xây dựng thiết bị nhập liệu dựa trên cảm biến chuyển động (calibration, mapping 3D → 2D, giảm latency).
- Tầm quan trọng của việc test liên tục trên nhiều người dùng và nhiều điều kiện khác nhau.
- Cách làm việc hiệu quả với mã nguồn mở và tài liệu reverse engineering.
What's next for test
- Thêm nhận diện cử chỉ đơn giản (double tap để click, xoay cổ tay để scroll).
- Cải thiện độ chính xác và giảm drift bằng thuật toán nâng cao hơn (Kalman filter, Madgwick…).
- Xây dựng giao diện đồ họa (GUI) thân thiện với wizard hiệu chỉnh.
- Hỗ trợ thêm nhiều model Mi Band và thử nghiệm trên các thiết bị đeo khác.
- Tối ưu hóa tiêu thụ pin của Mi Band khi kết nối liên tục.
- Thực hiện test rộng rãi với nhiều người dùng để thu thập feedback và cải thiện trải nghiệm.
- Chuẩn bị phát hành phiên bản ổn định v1.0 và mời cộng đồng đóng góp.
Built With
- accelerometer
- air-mouse
- ble
- bleak
- bluetooth
- cross-platform
- gesture-control
- imu
- iot
- mi-band
- mouse
- numpy
- open-source
- pyautogui
- pynput
- python
- real-time-processing
- sensor-fusion
- wearables
Log in or sign up for Devpost to join the conversation.