Управление мышью компьютера с помощью джойстика на Arduino: точная навигация курсора
Компоненты и материалы
| Arduino UNO | 1 шт. |
| Двухосевой джойстик | 1 шт. |
Программное обеспечение и онлайн-сервисы
- Arduino IDE
- Python 3 (с библиотеками
mouseиpyserial)
Описание проекта
В качестве альтернативы обычной мыши или тачпаду предлагается управление курсором с помощью аналогового джойстика. Джойстик позволяет перемещать курсор по осям X и Y, а встроенная кнопка выполняет функцию левого клика.
Принцип работы
Джойстик содержит два потенциометра для осей X и Y. Arduino считывает аналоговые значения (0–1023). В центральном положении значения близки к 512. Скетч преобразует отклонения в диапазон от -sensitivity до +sensitivity (по умолчанию 10). Данные передаются по последовательному порту в формате X:Y:SW, где SW — состояние кнопки (1/0).
Программирование на Python
(Обновлено 11.12.2020: заменена библиотека pyautogui на mouse)
- Установите Python 3 с официального сайта.
- Скопируйте путь к папке с Python.
- В командной строке выполните:
cd <путь_к_python> py -m pip install --upgrade pip py -m pip install mouse py -m pip install pyserial
Скрипт Python считывает данные из последовательного порта, разбирает значения X, Y и SW. Текущие координаты курсора получаются через mouse.get_position(). Новые координаты вычисляются как X + x, Y - y (ось Y инвертирована). Функция mouse.move() перемещает курсор. При нажатии кнопки джойстика (SW=1) выполняется mouse.click(button="left").
Запуск
- Загрузите скетч в Arduino UNO, подключите джойстик по схеме.
- Создайте файл
mouse_control.py, вставьте Python-код, укажите правильный COM-порт (проверьте в Диспетчере устройств). - Откройте файл в IDLE (Python GUI) и запустите модуль (F5).
- При ошибках перезапустите IDLE и проверьте COM-порт.
- Двигайте джойстик — курсор будет следовать за ним.
Код
Arduino (C++)
//////////////////////////////////
// Joystick controlled mouse
// by Shubham Santosh
/////////////////////////////////
void setup() {
Serial.begin(9600);
pinMode(9, INPUT); // SW pin
digitalWrite(9, HIGH);
}
int prev_state = 0;
void loop() {
int z = 0, xpos = 0, ypos = 0;
int x = analogRead(A0);
int y = analogRead(A1);
int sensitivity = 10;
if (x >= 550) xpos = map(x, 550, 1023, 0, sensitivity);
if (x <= 450) xpos = map(x, 450, 0, 0, -sensitivity);
if (y >= 550) ypos = map(y, 550, 1023, 0, sensitivity);
if (y <= 450) ypos = map(y, 450, 0, 0, -sensitivity);
int curr_state = digitalRead(9);
if (curr_state == 1 && prev_state == 0) z = 1;
else z = 0;
if (xpos != 0 || ypos != 0 || z == 1) {
Serial.print(xpos);
Serial.print(":");
Serial.print(ypos);
Serial.print(":");
Serial.println(z);
}
prev_state = curr_state;
delay(10);
}
Python
# Joystick controlled mouse
# By Shubham Santosh
# last edited 12/11/2020
import mouse, sys
import time
import serial
mouse.FAILSAFE = False
ArduinoSerial = serial.Serial('com3', 9600) # Укажите свой COM-порт
time.sleep(1)
while True:
data = str(ArduinoSerial.readline().decode('ascii'))
x, y, z = data.split(":")
X, Y = mouse.get_position()
x, y = int(x), int(y)
mouse.move(X + x, Y - y)
if '1' in z:
mouse.click(button="left")
Схемы подключения
Производственный процесс
- Эволюция компьютерной мыши: дизайн, производство и будущие тренды
- Температурно-управляемый вентилятор: DIY релейная система охлаждения мебели для медиа
- Raspberry Pi управляемая аквапоника: гайд по сборке и код
- Создание кнопки AWS IoT с управлением движением на Raspberry Pi, PIR-датчике и MQTT
- Создание Bluetooth-робота на Raspberry Pi с аудио-обратной связью
- Построение Wi-Fi-управляемого робота на Raspberry Pi с Python — пошаговое руководство
- Alexa-управляемый ARDrone 2.0: Голосовой дрон с Raspberry Pi и Hologram Nova
- Превращаем старую радиоуправляемую машину в джойстик-контролируемый болид на Arduino
- Интерактивная игра с джойстиком и LED-обратной связью на Arduino
- Сплав FeNi42: низкое тепловое расширение для прецизионных стекловых и керамических герметиков