Создадим проект управления курсором мыши с помощью простого джойстика на основе платы Arduino Uno.
Комплектующие
В качестве альтернативы для отслеживания компьютерной мыши с помощью трекпада мы сделаем проект управления мышью с помощью джойстика. Джойстик может перемещать курсор в любом направлении (ось x и y), а также выполняет функцию клика с помощью встроенного переключателя.
Для нашего проекта нам понадобится немного комплектующих.
Аппаратное обеспечение
- Arduino UNO × 1
- Двухосный джойстик × 1
Программное обеспечение
- Arduino IDE
- IDLE (Python GUI)
Основы проекта
Джойстик состоит из двух потенциометров, выровненных в направлении x и y. Arduino считывает аналоговые значения с джойстика в диапазоне от 0 до 1023.
Таким образом, когда джойстик находится в своем положении по умолчанию (в центре), аналоговое значение также становится близким к 500 (между 0 и 1023).
Эскиз Arduino запрограммирован таким образом, что, когда джойстик находится в центральном положении, выводится значение 0 на последовательный монитор, а когда джойстик отведен от центра, выводится значение в диапазоне от -80 до 80.
Таким образом, когда джойстик перемещается в крайнее положение Arduino выводит значение 80, а если джойстик перемещается в другое крайнее положение, то выводится -80.
Чтобы вывести отдельные значения для направления x и y, мы будем использовать «:» между значениями направления x и y. Пример:
Состояние кнопки джойстика (SW) выводится как значение 1 или 0 на последовательном мониторе после значений x и y.
Чтобы ноутбук / компьютер распознал значения, нам понадобится pyautogui на Python.
Схема соединения
Соедините Arduino и джойстик согласно схеме ниже:
Программирование на Python
У пользователя должен быть установлен Python на ноутбуке / компьютере. Его можно скачать здесь.
Для Windows pyautogui можно установить из командной строки, введя 3 следующих команды:
cd C:\{папка_с_питоном}\Python python –m pip install –-upgrade pip python –m pip install pyautogui
Программа python предназначена для чтения текста, напечатанного Arduino, и распознавания значений направления x и y, а также состояния кнопки (SW).
Текущие координаты курсора получают из функции pyautogui pyautogui.position(), которая предоставляет координаты X и Y курсора в виде пикселей.
Когда джойстик перемещается, аналоговые значения (от -80 до 80), предоставленные Arduino добавляются с текущей позицией курсора для перемещения курсора в нужном направлении.
Чтобы переместить курсор в заданном направлении, функция pyautogui.moveTo(X + x, Y + y) удовлетворяет этой цели.
В функции X и Y - текущая позиция курсора, а x и y - позиции увеличения / уменьшения, предоставляемые Arduino.
Пример:
pyautogui.moveTo (100,150)
В этом примере функция перемещает курсор на 200 пикселей по оси x и 150 пикселей по оси y.
Для выполнения операции клика на основе состояния ПО используется pyautogui.click (x, y).
Программы
Программа Python:
import pyautogui, sys import time import serial ArduinoSerial=serial.Serial('com3',9600) #Specify the correct COM port time.sleep(1) #delay of 1 second while 1: data=str(ArduinoSerial.readline()) (x,y,z)=data.split(":") # read the x and y axis data (X,Y)=pyautogui.position() #read the current cursor's position x=int(x) y=int(y) pyautogui.moveTo(X+x,Y-y) #move cursor to desired position if '1' in z: # read the Status of SW pyautogui.click(button="left") # clicks left button
Программа Arduino:
void setup() { Serial.begin(9600); pinMode(9,INPUT); // Sw pin digitalWrite(9,HIGH); } void loop() { int z=0; int x=analogRead(A0); int y=analogRead(A1); int xpos,ypos; if(x>450 and x<550) //when joystick is in center position xpos=0; if(x>=550) // when moved up xpos=map(x,550,1023,0,80); if(x<=450) // when moved down xpos=map(x,450,0,0,-80); if(y>450 and y<550) //when joystick is in center position ypos=0; if(y>=550) // when moved right ypos=map(y,550,1023,0,80); if(y<=450) // when moved left ypos=map(y,450,0,0,-80); if(digitalRead(9)==LOW) // when SW is pressed z=1; else z=0; Serial.print(xpos); // print the data and separating by ":" Serial.print(":"); Serial.print(ypos); Serial.print(":"); Serial.println(z); delay(120); // for normal operation }
Запуск проекта
Загрузите эскиз Arduino (приведенный выше) в свой Arduino Uno и подключите джойстик к контактам Arduino, как показано на схеме выше.
Убедившись, что pyautogui установлен на вашем компьютере / ноутбуке, выполните следующие действия.
1. Скопируйте программу для питона в файл блокнота. Укажите правильный COM-порт Arduino.
В диспетчере устройств вы можете посмотреть COM-порт к которому подключена плата Arduino (см. изображение выше). Сохраните файл после внесения изменений.
2. Откройте приложение Python IDLE (python GUI).
Откройте из него файл блокнота.
2. Запустите (run) модуль.
Затем нужно снова вернуться на шаг назад.
В случае если вы видите какие-либо ошибки, перезапустите приложение и проверьте, правильно ли вы указали COM-порт Arduino.
Если ошибок нет, переместите джойстик, и вы увидите движение курсора на экране.
На этом всё. До новых проектов.