Проект управляемой джойстиком мыши с помощью Ардуино

Создадим проект управления курсором мыши с помощью простого джойстика на основе платы Arduino Uno.

Комплектующие

В качестве альтернативы для отслеживания компьютерной мыши с помощью трекпада мы сделаем проект управления мышью с помощью джойстика. Джойстик может перемещать курсор в любом направлении (ось x и y), а также выполняет функцию клика с помощью встроенного переключателя.

Для нашего проекта нам понадобится немного комплектующих.

Аппаратное обеспечение

  1. Arduino UNO × 1
  2. Двухосный джойстик × 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.

Если ошибок нет, переместите джойстик, и вы увидите движение курсора на экране.

На этом всё. До новых проектов.

13 апреля 2020 в 02:40 | Обновлено 21 января 2021 в 02:55 (редакция)
Опубликовано:
Уроки, ,

Добавить комментарий

Ваш E-mail не будет никому виден. Обязательные поля отмечены *