Мышь, управляемая смартфоном
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Приложения и онлайн-сервисы
| ||||
| ||||
|
Об этом проекте
Этот проект похож на мою предыдущую работу, где я использовал джойстик для управления курсором ПК. Ключевое отличие состоит в том, что я создал приложение для смартфона, которое содержит 2 виртуальных джойстика для перемещения курсора, а также для прокрутки экрана, а также делает левый и правый щелчок, как обычный трекпад.
Работает
Проект включает в себя приложение для смартфона, которое отправляет данные осей x и y джойстика, статус прокрутки, статус левого и правого щелчка через Bluetooth на Arduino Uno, подключенный к модулю Bluetooth HC-05. Эти данные при приеме в Arduino обрабатываются, чтобы внести изменения в текущую позицию курсора для получения новой позиции. Полученные данные вместе со статусом прокрутки и кнопки затем распечатываются как выходные данные, которые распознаются скетчем Python для чтения. Эскиз Python предназначен для выполнения действий мыши с помощью модуля мыши.
О приложении
Приложение для смартфона создано с помощью MIT-App Inventor. Создать приложение просто, вам просто нужно добавить нужные блоки для создания необходимого приложения. Я сослался на руководство по настольной робототехнике по их созданию. Главный экран приложения выглядит следующим образом:
Перед отправкой основной информации в модуль HC-05 приложение сначала отправляет однобайтовое число (255) для обозначения начала информации. Последовательность передачи данных следующая-
1. Отправьте "255" для обозначения начала
2. Отправить 1 байтовое значение оси X джойстика
3. Отправьте 1 байтовое значение оси Y джойстика
4. Отправить статус щелчка левой кнопкой мыши, кнопки щелчка правой кнопкой мыши и статус прокрутки (1 байт).
Данные из приложения отправляются каждые 20 миллисекунд в Arduino UNO.
Сторона Ардуино
Байты данных из приложения принимаются Arduino с помощью модуля Bluetooth HC-05. Arduino содержит текущие координаты курсора, где диапазон координат x составляет от 0 до 1279, а диапазон координат y - от 0 до 799. Я получил эти крайние координаты из функции python mouse.get_position ()
который возвращает координаты при перемещении курсора (не используется в основном эскизе).
На основе данных, полученных при перемещении джойстика, текущая позиция курсора (координаты x и y) затем добавляется / вычитается с данными, полученными приложением, чтобы переместить курсор в новую желаемую координату. Окончательные данные затем печатаются на последовательном мониторе в последовательности, указанной ниже.
Следующая последовательность данных, наконец, считывается программой python для ее выполнения. Для этого нам нужно будет загрузить дополнительные модули, а именно мышь и pyserial, как описано ниже.
Программирование на Python
У пользователя должен быть установлен Python 3 на своем ноутбуке / компьютере. Его можно скачать здесь.
(Для Windows)
После установки скопируйте путь к расположению файла 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. Я уже установил необходимые модули, поэтому получил это
Исполнение
Установите приложение Bluetooth Mouse Control на свой смартфон.
Загрузите эскиз Arduino в Arduino UNO и следуйте схеме, указанной на схеме.
Сторона Python -
1. Скопируйте и вставьте код Python в файл блокнота. Измените COM-порт на COM-порт вашего Arduino UNO и сохраните его как '.py'.
2. Откройте python IDLE и откройте из него файл блокнота.
3. Запустите эскиз.
После этого вы вернетесь к экрану, показанному на рис. 2.2.
Откройте приложение для смартфона и подключитесь к модулю bluetooth, и вы заметите движение курсора при изменении направления джойстика.
Код
- Код Arduino
- Код Python
Код Arduino Arduino
получено данных int [5] {0,0,0,0}; // Для сохранения байта из phoneint in_byte =0; int array_index =0; int l_prev =0, r_prev =0; // предыдущий статус левого и правого щелчка мыши void setup () {Serial.begin (9600); // запускает монитор последовательного порта} int height =0, width =0; void loop () {int clicks =0; int чувствительность =20; // вы можете настроить чувствительность int xpos =0, ypos =0; if (Serial.available ()> 0) {// получить байт с телефона in_byte =Serial.read (); // записываем в байтах в переменную if (in_byte ==(255)) {// если переменная равна 0, то массив вставляется в 0. array_index =0; } полученные данные [array_index] =in_byte; // сохранить номер в массиве array_index =array_index +1; if (получено данных [1]> =110) xpos =map (получено данных [1], 110,172,0, чувствительность); // При перемещении вправоtif (datareceived [1] <=70) xpos =map (datareceived [1], 60,1,0, -sensitivity); // При перемещении leftif (datareceived [2]> =110) ypos =map (datareceived [2], 110,255,0, чувствительность); // При перемещении вниз if (datareceived [2] <=60) ypos =map (datareceived [2], 70,1,0, -sensitivity); // При перемещении вверхif (datareceived [3] ==1 &&l_prev ==0) // ЧТОБЫ распознать одно нажатие кнопки clicks =1; else if (datareceived [3] ==2 &&r_prev ==0) clicks =2; иначе if (dataareceived [3] ==3 || datareceived [3] ==4) clicks =datareceived [3]; // scrolll_prev =datareceived [3]; r_prev =datareceived [3]; if (xpos! =0 or ypos! =0 or clicks! =0) // когда один из джойстиков перемещается, или кнопка нажимается или прокручивается { height =height + ypos; width =width + xpos; if (height> =799) height =799; if (height <=0) height =0; if (width> =1279) width =1279; if (width <=0) width =0; Serial.print (ширина); Serial.print (":"); Serial.print (высота); Serial.print (":"); Serial.println (клики); clicks =0;} }}
Код Python Python
import 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 (x, y) =(int (x), int (y) ) # преобразовать в int mouse.move (x, y) # переместить курсор в нужные координаты, если '1' в z:mouse.click (button ="left") # щелкает кнопкой мыши elif '2' в z:mouse. click (button ="right") elif '3' в z:mouse.wheel (delta =-1) # Прокрутить вниз elif '4' в z:mouse.wheel (delta =1) # Прокрутить вверх
Схема
Производственный процесс
- Робот Raspberry Pi, управляемый через Bluetooth
- Интерактивный настольный светильник, управляемый жестами
- Вольтметр своими руками с использованием Arduino и смартфона
- Светодиоды, управляемые Alexa через Raspberry Pi
- Радиоуправляемая машина с джойстиком
- Arduino с Bluetooth для управления светодиодом!
- Роботизированная рука, управляемая нунчук (с Arduino)
- Робот, управляемый речью
- MobBob:самостоятельный робот Arduino, управляемый смартфоном Android
- Устройства с голосовым управлением Bluetooth с OK Google