Chế tạo chuột vi tính với Arduino Pro Micro và Joystick

Mô tả dự án: 

Pro Micro là 1 Board Arduino độc đáo với chức năng HID (Human Interface Device) có thể giả lập chuột và bàn phím. Bài này tui sẽ hướng dẫn các bạn làm 1 con chuột độc đáo với Pro Micro và Joystick.

Nguyên lý

Joystick thực ra là 2 cái potentiometer hoạt động độc lập, và ta chỉ cần đọc giá trị thay đổi của chúng rồi dùng thư viện Mouse.h của Arduino để di chuyển chuột tùy theo cái joystick đi nhiều hay ít. Ngoài ra joystick này còn có 1 nút bấm. Ta mặc định đây là nút Left Click của chuột. Đơn giản quá phải hem? wink

Phần cứng

Joystick có 5 chân. Các bạn nối vời Pro Micro theo bảng sau:

Joystick Pro Micro
5V 5V
GD GD
Rx A1
Ry A0
SW 9

 

 

 

Phần mềm

/* HID Joystick Mouse Example */
//Taken from https://www.sparkfun.com/tutorials/3...
#include <Mouse.h>

int horzPin = A0; // Chân nối vô biến trở ngang
int vertPin = A1; // Chân nối vô biến trở dọc
int selPin = 9; // chân nối vô nút nhấn trên joystick

int vertZero, horzZero; //lưu giá trị khởi tạo lúc ban đầu joystick chưa bị xê dịch (thường là 512 - đồ mới, khác 512 đồ cũ)
int vertValue, horzValue; // lưu giá trị analog hiện thời của mỗi biến trở 
const int sensitivity = 100; // Tốc độ chuột, càng lớn càng chậm. Nên để bé hơn 500ms
int mouseClickFlag = 0;

void setup()
{
    pinMode(selPin, INPUT); // nút nhấn trên joystick là input
    digitalWrite(selPin, HIGH); // biến selPin thành INPUT_PULLUP, có thể để pinMode là INPUT_PULLUP không cần dòng này
    delay(500); // dừng 500ms
    vertZero = analogRead(vertPin); // lấy giá trị khởi điểm cho biến trở dọc
    delay(500);
    horzZero = analogRead(horzPin); // lấy giá trị khởi điểm cho biến trở ngang
    delay(500);

}

void loop()
{
    vertValue = analogRead(vertPin) - vertZero; // đọc giá trị tương đối của trục dọc
    delay(1);
    horzValue = analogRead(horzPin) - horzZero; //  đọc giá trị tương đối của trục ngang
    delay(1);
    
    if (vertValue != 0)
        Mouse.move(0, vertValue/sensitivity, 0); // di chuyển trục chỉ theo trục y
    if (horzValue != 0)
        Mouse.move(horzValue/sensitivity, 0, 0); // di chuyển trục chỉ theo trục x
    
    if ((digitalRead(selPin) == 0) && (!mouseClickFlag)) // Nếu nhấn nút và trước đó chưa nhấn nút
    {
        mouseClickFlag = 1;
        Mouse.press(MOUSE_LEFT); // event chuột trái phát ra
    }
    else if ((digitalRead(selPin))&&(mouseClickFlag)) // nếu không còn nhấn nút nữa và trc đó đã nhấn nút
    {
        mouseClickFlag = 0;
        Mouse.release(MOUSE_LEFT); // thả left button
    }
}

 

Lưu ý

Các bạn có thể chỉnh độ nhạy của chuột bằng cách thay đổi biến:

const int sensitivity = 100; 

Biến càng cao  thì chuột càng chậm, và thường thì dưới 500 thì okê.

Gợi ý nâng cao

  • Các bạn có thể gắn thêm 1 potentiometer để điều khiển độ nhạy của chuột.
  • Làm 1 case thật oách cho chuột promicro của mình.  
lên
19 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

"Đi học dzìa": Phần 3 - Sử dụng PIR kết hợp Camera và gửi email

Đây là phần 3 của tutorial "Đi học dzìa". Nếu bạn đã chán youtube hoặc bạn dù không ở nhà nhưng vẫn muốn làm điệp viên "Không Không Thấy" kiểm soát xem ai đã về đến nhà và nhận thông báo qua email.

lên
13 thành viên đã đánh giá bài viết này hữu ích.

Raspberry Pi Thiên Lý Nhãn (Phần 3): Khóa thông minh nhận dạng khuôn mặt với Raspberry Pi và OpenCV

Trong bài trước tui đã giới thiệu về việc nhận diện khuôn mặt với Raspberry Pi và webcam. Tuy nhiên bài chỉ dừng lại ở việc Raspberry Pi có thể nhận diện được khuôn mặt của bất kỳ ai đứng trước webcam mà thôi. Bài toán đặt ra là làm thế nào để Raspberry Pi nhận được khuôn mặt của chính bạn? Đây là một bài toán khó và thú vị. Khó là vì chúng ta cần thuật toán và khả năng xử lí hình ảnh mạnh. Thú vị là do ta có thể "chế cháo" kết hợp với các hệ thống bảo mật khác như vân tay, mật khẩu để tăng tính an ninh cho đề án của bạn. Vì độ phức tạp của đề án này nên tui sẽ chia ra làm 2 phần.

  • Phần đầu tiên là "phần mềm": chúng ta sẽ ghi lại khoảng 200 tấm hình webcam với khuôn mặt của bạn và huấn luyện máy tính với thuật toán chính diện (eigenfaces) của OpenCV. Do tài nguyên của Pi hạn hẹp nên bạn cần chạy phần này trên máy tính của mình. 
  • Phần tiếp theo là "phần cứng": ta nối Pi với relay và cho webcam chụp ảnh. Nếu Pi nhận diện được chính khuôn mặt của bạn thì sẽ kích relay.

Lưu ý là các bạn phải tải OpenCV về trên cả Pi và máy tính. Các bạn vào đây để download code và các tập tin cần thiết nữa: https://github.com/johnkimdinh/Facial-recognition-Raspberry-Pi-OpenCV

lên
3 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: