- Предварительные условия
- Принципиальная электрическая схема
- Технологический процесс для Air Mouse
- Программирование Arduino для Air Mouse
- Скрипт драйвера Python
- Тестирование Arduino Air Mouse
Вы когда-нибудь задумывались, как наш мир движется к иммерсивной реальности. Мы постоянно находим новые способы и методы взаимодействия с нашим окружением, используя виртуальную реальность, смешанную реальность, дополненную реальность и т. Д. Каждый день появляются новые устройства с этими быстро развивающимися технологиями, чтобы поразить нас своими новыми интерактивными технологиями.
Эти иммерсивные технологии используются в играх, интерактивных мероприятиях, развлечениях и многих других приложениях. В этом руководстве мы узнаем о таком интерактивном методе, который дает вам новый способ взаимодействия с вашей системой вместо использования утомительной мыши. Наши игровые фанаты должны знать, что несколько лет назад игровая компания Nintendo продала идею трехмерного интерактивного метода взаимодействия с их консолями с помощью портативного контроллера, известного как контроллер Wii. Он использует акселерометр, чтобы определять ваши жесты для игры и отправлять их в систему по беспроводной сети. Если вы хотите узнать больше об этой технологии, вы можете ознакомиться с их патентом EP1854518B1, это даст вам полное представление о том, как работает эта технология.
Вдохновленные этой идеей, мы собираемся создать «воздушную мышь», чтобы взаимодействовать с системами, просто перемещая консоль в воздухе, но вместо использования трехмерных координатных ссылок мы будем использовать только двухмерные координатные ссылки, поэтому мы можем имитировать действия компьютерной мыши, поскольку мышь работает в двух измерениях X и Y.
Концепция этой беспроводной 3D Air Mouse очень проста. Мы будем использовать акселерометр, чтобы получить значение ускорения действий и движений «воздушной мыши» по осям x и y, а затем на основе значений акселерометром мы будем управлять курсором мыши и выполнять определенные действия с помощью программных драйверов python, запущенных на компьютере.
Предварительные условия
- Arduino Nano (любая модель)
- Модуль акселерометра ADXL335
- Модуль Bluetooth HC-05
- Нажмите на кнопки
- Компьютер с установленным Python
Чтобы узнать больше об установке python на компьютер, следуйте предыдущему руководству по управлению светодиодами Arduino-Python.
Принципиальная электрическая схема
Чтобы управлять компьютером с помощью движений руки, вам понадобится акселерометр, который выдает ускорение по осям X и Y, а для обеспечения беспроводной связи всей системы используется модуль Bluetooth для беспроводной передачи сигнала в вашу систему.
Здесь используется акселерометр ADXL335, это трехкоординатный модуль на основе МЭМС, который выводит ускорение по осям X, Y и Z, но, как было сказано ранее, для управления мышью нам понадобится только ускорение только по осям X и Y.. Узнайте больше об использовании акселерометра ADXL335 с Arduino в наших предыдущих проектах:
- Система оповещения об авариях на базе Arduino с использованием GPS, GSM и акселерометра
- Игра в пинг-понг с использованием Arduino и акселерометра
- Робот, управляемый жестами руки, на основе акселерометра с использованием Arduino
- Сигнализация детектора землетрясения с использованием Arduino
Здесь выводы Xout и Yout акселерометра подключены к выводам Analog, A0 и A1 Arduino, и для передачи сигналов от Arduino в систему используется модуль Bluetooth HC-05, поскольку Bluetooth работает через Tx и Rx. контактные соединения, поэтому мы используем программные последовательные контакты D2 и D3. Он подключается с помощью программного последовательного порта, потому что, если мы подключим Bluetooth к аппаратному последовательному порту и начнем получать показания через консоль python, он будет показывать ошибки несоответствия скорости передачи данных, поскольку Bluetooth будет связываться с python на своей собственной скорости передачи. Узнайте больше об использовании модуля Bluetooth, просмотрев различные проекты на основе Bluetooth с использованием различных микроконтроллеров, включая Arduino.
Здесь мы использовали три кнопки - одну для запуска воздушной мыши, а две другие для левого и правого щелчка, как показано на изображении ниже:
Технологический процесс для Air Mouse
На блок-схеме показан процесс Air Mouse на базе Arduino:
1. Система постоянно проверяет нажатие механического триггера до тех пор, пока он не будет нажат, мы можем нормально работать с компьютерной мышью.
2. Когда система обнаруживает нажатие кнопки, управление мышью передается воздушной мыши.
3. При нажатии спусковой кнопки система начинает передавать показания мыши на компьютер. Считывание системы состоит из показаний акселерометра и показаний для левого и правого щелчка.
4. Показания системы состоят из потока данных размером 1 байт или 8 бит, в котором первые три бита состоят из X-координат, вторые три бита состоят из Y-координат, второй последний бит является битом состояния для получения состояние щелчка левой кнопкой мыши, а последний бит - это бит состояния для получения состояния щелчка правой кнопкой мыши.
5. Значение первых трех битов, т.е. координата X, может находиться в диапазоне от 100 <= Xcord <= 999, тогда как значение для координаты Y может находиться в диапазоне от 100 <= Ycord <= 800. Значения для щелчка правой кнопкой мыши и щелчка левой кнопкой мыши представляют собой двоичные значения 0 или 1, в которых 1 означает, что щелчок был сделан, а 0, что щелчок не был сделан пользователем.
6. Чтобы подпрыгивание кнопки не влияло на положение курсора, сохраняется известная задержка в 4 секунды после каждого щелчка триггерной кнопки мыши.
7. Для правого и левого щелчка воздушной мыши мы должны сначала нажать левую или правую кнопку, а после этого мы должны нажать спусковую кнопку, чтобы переместиться в нужное положение воздушной мыши.
Программирование Arduino для Air Mouse
Arduino должен быть запрограммирован на считывание значений ускорения по осям X и Y. Полная программа дается в конце, ниже приведены важные фрагменты из кода.
Настройка глобальных переменных
Как было сказано ранее, мы подключим модуль Bluetooth к программным последовательным контактам. Итак, чтобы установить серийный номер программного обеспечения, нам нужно объявить библиотеку серийного номера программного обеспечения и настроить контакты для Tx и Rx. В Arduino Nano и Uno Pin 2 и 3 могут работать как программный серийник. Затем мы объявляем объект Bluetooth из последовательной библиотеки программного обеспечения, чтобы настроить контакт для Tx и Rx.
#включают
Настройка пустоты ()
В функции настройки мы собираемся установить переменные, чтобы сообщить программе, будут ли они действовать как ввод или вывод. Кнопка триггера будет настроена как подтягивание ввода, а левый и правый щелчки объявлены как ввод и настроены как High, чтобы они действовали как подтягивания ввода.
Также установите скорость передачи для последовательной связи и связи Bluetooth на 9600.
void setup () { pinMode (x, ВХОД); pinMode (y, ВХОД); pinMode (триггер, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, ВВОД); pinMode (светодиод, ВЫХОД); digitalWrite (lclick, HIGH); digitalWrite (rclick, HIGH); Serial.begin (9600); bluetooth.begin (9600); }
Петля пустоты ()
Как мы должны были бы спусковую кнопку , чтобы сказать, когда мы должны направить систему потока данных, поэтому мы создали весь код внутри в то время как цикл, который будет непрерывно контролировать цифровое состояние триггера подтягивающим, как она идет на низком уровне это будет передать дальше на обработку.
Как мы прикрепили светодиод, чтобы сообщить нам о состоянии системы для того, когда нажата кнопка запуска, мы сначала установить привели к низким вне в то время цикла, как это условие по умолчанию и высокий внутри в то время как цикл, который будет загораться светодиод всякий раз, когда нажимается спусковая кнопка.
Чтобы прочитать состояние левой и правой кнопок, мы глобально объявили две переменные lclick и rclick , значения которых изначально были установлены равными 0.
И в цикле установите значение этих переменных в соответствии с цифровым статусом левой и правой кнопок, чтобы проверить, нажаты ли кнопки или нет.
Мы бы считывали значения выводов X и Y акселерометра с помощью функции analogRead и сопоставляли эти значения с размером экрана, чтобы указатель мыши перемещался по всему экрану. Поскольку размер экрана - это пиксели на экране, нам необходимо настроить его соответствующим образом, и поскольку нам нужно, чтобы выходное значение было трехзначным, мы намеренно установили диапазон для X как 100 <= X <= 999 и аналогично значение Y как 100 <= Y <= 800. Помните, что пиксели считываются из левого верхнего угла, т.е. в левом верхнем углу есть значение (0,0), но, поскольку мы объявили три цифры для x и y, наши значения будут считываться из точки (100,100).
Кроме того, распечатайте значение координат и статус щелчка по последовательному порту и Bluetooth с помощью функций Serial.print и bluetooth.print, которые помогают получить значения на последовательном мониторе и в вашей системе через Bluetooth.
Наконец, из-за отскока кнопки одно значение может повторяться, что приведет к тому, что курсор мыши задержится на одной позиции, поэтому, чтобы избавиться от этого, мы должны добавить эту задержку.
void loop () { digitalWrite (светодиод, НИЗКИЙ); в то время как (digitalRead (триггер) == LOW) { digitalWrite (светодиод, HIGH); lstate = digitalRead (щелчок); rstate = digitalRead (rclick); хх = аналоговое чтение (х); yh = analogRead (y); xcord = map (xh, 286,429,100,999); ycord = map (yh, 282 427 100 800); Serial.print (xcord); Серийный. Печать (ycord); если (lstate == LOW) Serial.print (1); иначе Serial.print (0); если (rstate == LOW) Serial.print (1); иначе Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); если (lstate == LOW) bluetooth.print (1); еще bluetooth.print (0); если (rstate == LOW) bluetooth.print (1); иначе bluetooth.print (0); задержка (4000); }}
Скрипт драйвера Python
На данный момент мы закончили с аппаратным обеспечением и его частью прошивки, теперь, чтобы заставить воздушную мышь работать, нам нужен сценарий драйвера, который мог бы декодировать сигналы от воздушной мыши в движения курсора, поэтому для этого мы выбрали Python. Python - это язык сценариев, и здесь мы подразумеваем, что он помогает нам получить контроль над другой программой, так как здесь мы управляем курсором мыши.
Итак, откройте оболочку Python и установите следующие библиотеки, используя следующие команды:
pip install serial pip install pyautogui
Серийный библиотека для Python, который помогает нам, чтобы получить данные из последовательных интерфейсов, таких как COM - порты, а также позволяет нам манипулировать, тогда pyautogui является библиотека для Python, чтобы получить контроль над функциями графического интерфейса, в данном случае, мышь.
Теперь давайте перейдем к коду для драйверов, первое, что нам нужно сделать, это импортировать библиотеки последовательного порта и pyautogui, а затем из библиотеки последовательного порта мы должны установить com-порт для связи со скоростью 9600 бод, то же, что и Bluetooth.serial . Для этого вам необходимо подключить модуль Bluetooth к вашей системе, а затем в настройках системы вы должны проверить, к какому COM-порту он подключен.
Следующее, что нужно сделать, это прочитать последовательную связь от Bluetooth к системе и поддерживать ее непрерывно, сохраняя остальной код в непрерывном цикле с помощью while 1.
Как было сказано ранее, Arduino отправляет 8 бит, первые 6 для координат и последние два для статуса кнопок. Так что прочтите все биты с помощью ser.read и установите его длину на 8 бит.
Затем разделите биты для координат курсора и щелкните, разрезая их, а затем дополнительно разделите биты курсора на координаты X и Y отдельно. То же самое касается левого и правого щелчка.
Теперь из сообщения мы получаем строку байтов, и нам нужно преобразовать ее в целое число, чтобы они соответствовали координатам, мы делаем это, декодируя их, а затем преобразуя их в целые числа.
Теперь для перемещения курсора мы используем функцию pyautogui moveto , которая принимает в качестве аргументов эти целочисленные координаты и перемещает курсор в эту позицию.
Затем проверяем щелчки, мы делаем это, используя последние два бита и функцию щелчка pyautogui, щелчок по умолчанию - левый, однако мы можем установить его вправо, объявив значение кнопки справа, мы также можем определить количество щелчков для установите его на двойной щелчок, установив для параметра clicks значение 2.
Ниже приведен полный код Python для запуска на компьютере:
import serial import pyautogui ser = serial.Serial ('com3', 9600) while 1: k = ser.read (8) cursor = k click = k x = cursor y = cursor l = click r = click xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor) if l == 49: pyautogui.click (clicks = 2) elif r = = 49: pyautogui.click (button = 'right', clicks = 2)
Тестирование Arduino Air Mouse
Поэтому для управления Air Mouse подключите к ней источник питания. Это может быть слот Arduino Nano USB или регулируемый источник питания 5 В с использованием микросхемы 7805. Затем запустите сценарий драйвера python, установив com-порт, к которому подключен ваш Bluetooth. Во время выполнения сценария вы увидите задержку в мигании Bluetooth, это означает, что он подключен к вашей системе. Затем для его работы нажмите кнопку триггера, и вы увидите, что положение координат изменится, и если вы хотите щелкнуть левой или правой кнопкой мыши, затем сначала нажмите левую или правую кнопку и кнопку запуска вместе, вы увидите действие щелчка в измененное расположение курсора.
Посмотрите подробное рабочее видео ниже.