Мышь, управляемая джойстиком
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 |
Приложения и онлайн-сервисы
| ||||
|
Об этом проекте
В качестве альтернативы отслеживанию курсора компьютера с помощью мыши или трекпада я сделал это же приложение с помощью джойстика. Джойстик может перемещать курсор в любом направлении (оси x и Y), а также выполняет функцию щелчка с помощью встроенного переключателя джойстика.
Основы-
Джойстик состоит из двух потенциометров, выровненных по осям x и y. Arduino считывает аналоговые значения с джойстика в диапазоне от 0 до 1023. Таким образом, когда джойстик находится в положении по умолчанию (в центре), аналоговое значение также становится близким к 500 (между 0 и 1023).
Скетч Arduino запрограммирован таким образом, что, когда джойстик перемещается от центра, затем выводятся значения в диапазоне от -sensitivity до + value (значение по умолчанию vlaue установлено 10) в зависимости от положения. Таким образом, когда джойстик перемещается в одно крайнее положение, Arduino печатает значение 10, а если джойстик перемещается в другое крайнее положение, печатается -10.
Чтобы напечатать отдельные значения для направлений x и y, мы будем использовать «:» между значениями направлений x и y. Пример:
Состояние кнопки джойстика (SW) печатается (1/0) на последовательном мониторе после значений x и y.
Чтобы ноутбук / компьютер распознал значения, нам понадобится модуль pyautogui для Python.
Программирование на Python
(отредактировано 11.12.2020 - библиотека изменена с pyautogui на mouse)
У пользователя должен быть установлен Python 3 на своем ноутбуке / компьютере. Его можно скачать здесь.
После установки скопируйте путь к расположению файла python.
Следующие шаги необходимо выполнить в командной строке. Откройте командную строку и введите следующее:
1. cd <вставьте путь к файлу Python>
2. py –m pip install –-upgrade pip
3. py –m pip install mouse
4. py -m pip install pyserial
мышь модуль используется для выполнения действий мыши и pyserial модуль используется для отправки / получения данных от Arduino. Я уже установил необходимые модули, поэтому получил это
Программа python предназначена для чтения данных, напечатанных Arduino, и распознавания x и y значения направления, а также состояние переключателя (SW).
Текущие координаты курсора получаются из функции мыши mouse.get_position ()
который предоставляет координаты X и Y курсора в виде пикселей.
Когда джойстик перемещается, аналоговые значения, предоставляемые Arduino, добавляются к текущей позиции курсора для перемещения курсора в желаемом направлении.
Чтобы переместить курсор в заданном направлении, функция mouse.move (X + x, Y + y)
соответствует этой цели.
где X и Y - текущая позиция курсора, а x и y - позиции увеличения / уменьшения, предоставляемые Arduino.
пример: mouse.moveTo (100,150)
перемещает курсор на 100 пикселей по оси x и 150 пикселей по оси y.
Чтобы выполнить операцию щелчка в зависимости от статуса ПО, mouse.click (button ="left")
используется.
Окончательное исполнение
Загрузите эскиз Arduino (приведенный ниже) в ваш Arduino UNO и подключите джойстик к контактам Arduino, как показано на схеме.
Убедившись, что на вашем компьютере / ноутбуке установлены мышь и pyserial, выполните следующие действия.
1. Скопируйте эскиз Python в файл блокнота. Укажите правильный COM-порт ардуино. Из диспетчера устройств вы можете получить COM-порт, к которому подключена плата Arduino. После внесения изменений сохраните файл как «.py».
2. Откройте IDLE Python (графический интерфейс Python) и откройте из него файл блокнота.
3. запустить модуль.
После этого вы вернетесь к экрану, показанному на рис. 4
Если вы видите какие-либо ошибки, перезапустите IDLE и проверьте, правильно ли вы указали COM-порт arduino.
Если ошибок нет, переместите джойстик, и вы увидите движение курсора.
Код
- Код Arduino
- Код Python
Код Arduino Arduino
////////////////////////////////// Мышь, управляемая джойстиком ////// by Shubham Santosh / //////////////////////////////////// void setup () {Serial.begin (9600); pinMode (9, ВХОД); // вывод SW digitalWrite (9, HIGH);} int prev_state =0; // предыдущее состояние switchvoid loop () {int z =0, xpos =0, ypos =0; int x =аналоговое чтение (A0); int y =analogRead (A1); int чувствительность =10; // вы можете настроить чувствительность в зависимости от вашего удобства if (x> =550) // при перемещении вверх xpos =map (x, 550,1023,0, чувствительность); if (x <=450) // при движении вниз xpos =map (x, 450,0,0, -sensitivity); if (y> =550) // при перемещении вправо ypos =map (y, 550,1023,0, чувствительность); if (y <=450) // при перемещении влево ypos =map (y, 450,0,0, -sensitivity); int curr_state =digitalRead (9); if (curr_state ==1 &&prev_state ==0) // при нажатии SW z =1; иначе 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; задержка (10); // для нормальной работы}
Код Python Python
# Мышь, управляемая джойстиком # Автор:Shubham Santosh # последний раз редактировалось 11.12.2020import mouse, sysimport time import serialmouse.FAILSAFE =FalseArduinoSerial =serial.Serial ('com3', 9600) # Укажите правильный COM porttime.sleep (1 ) # задержка в 1 секунду при 1:data =str (ArduinoSerial.readline (). decode ('ascii')) # чтение данных (x, y, z) =data.split (":") # присваивается x, y and z (X, Y) =mouse.get_position () # прочитать текущую позицию курсора (x, y) =(int (x), int (y)) # преобразовать в int mouse.move (X + x, Yy ) # переместите курсор в желаемую позицию, если '1' в z:# прочтите статус SW mouse.click (button ="left") # щелкает левой кнопкой
Схема
Производственный процесс
- Компьютерная мышь
- Вентилятор с регулируемой температурой
- Аквапоника под управлением Raspberry Pi
- Кнопка AWS IoT с управлением движением
- Робот Raspberry Pi, управляемый через Bluetooth
- Робот, управляемый Wi-Fi и использующий Raspberry Pi
- MajorTom:ARDrone 2.0 с голосовым управлением Alexa
- Радиоуправляемая машина с джойстиком
- Игра с джойстиком
- Сплав с контролируемым расширением Alloy 42