- Предварительные условия:
- Концепция проекта:
- Принципиальная электрическая схема:
- Программирование вашего Arduino:
- Программирование вашего Python:
- Компьютер, управляемый жестами, в действии:
В последнее время все большую популярность приобретают ноутбуки и компьютеры, управляемые жестами. Этот метод называется прыжковым движением, который позволяет нам управлять определенными функциями на нашем компьютере / ноутбуке, просто размахивая рукой перед ним. Это очень круто и весело, но цены на эти ноутбуки действительно очень высоки. Итак, в этом проекте давайте попробуем создать наш собственный ноутбук / компьютер для управления жестами, объединив возможности Arduino и Python.
Мы будем использовать два ультразвуковых датчика для определения положения нашей руки и управления медиаплеером (VLC) в зависимости от положения. Я использовал это для демонстрации, но как только вы разобрались с проектом, вы можете делать что угодно, просто изменив несколько строк кода и управляя своим любимым приложением по своему вкусу.
Предварительные условия:
Мы уже рассмотрели несколько проектов, сочетающих Arduino с Python. Итак, я предполагаю, что вы уже установили Python и его последовательную библиотеку и успешно опробовали несколько базовых проектов, таких как мигающий светодиод. Если нет, не волнуйтесь, вы можете вернуться к этому руководству по Arduino-Python Led Controlling и смириться с ним. Поэтому перед продолжением убедитесь, что вы установили Python и библиотеку pyserial.
Концепция проекта:
Концепция проекта очень проста. Мы разместим два ультразвуковых датчика (US) поверх нашего монитора и будем считывать расстояние между монитором и нашей рукой с помощью Arduino, на основе этого значения расстояния мы будем выполнять определенные действия. Для выполнения действий на нашем компьютере мы используем библиотеку Python pyautogui. Команды от Arduino отправляются на компьютер через последовательный порт (USB). Затем эти данные будут считаны питоном, запущенным на компьютере, и на основе прочитанных данных будет выполнено действие.
Принципиальная электрическая схема:
Чтобы управлять ПК с помощью жестов рук, просто подключите два ультразвуковых датчика к Arduino. Мы знаем, что американские датчики работают с напряжением 5 В, поэтому они питаются от встроенного регулятора напряжения Arduino. Arduino можно подключить к ПК / ноутбуку для питания модуля, а также для последовательной связи. Как только соединения будут выполнены, поместите их на свой монитор, как показано ниже. Я использовал двусторонний скотч, чтобы приклеить его к монитору, но вы можете проявить свое собственное творчество. Закрепив его на месте, мы можем приступить к программированию.
Программирование вашего Arduino:
Arduino должен быть запрограммирован на считывание расстояния руки от датчика США. Полная программа приводится в конце этой страницы; чуть ниже я дал пояснение к программе. Если вы новичок в ультразвуковом датчике, просто пройдите через Arduino & Ultrasonic Sensor Based Distance Measurement.
Считывая значение расстояния, мы можем прийти к определенным действиям, которыми нужно управлять с помощью жестов, например, в этой программе я запрограммировал 5 действий в качестве демонстрации.
Действие 1: Когда обе руки поднимаются перед датчиком на определенном расстоянии, видео в проигрывателе VLC должно воспроизводиться / приостанавливаться.
Действие 2: Когда правая рука находится перед датчиком на определенном расстоянии, видео должно переместиться вперед на один шаг.
Действие 3: Когда левая рука находится перед датчиком на определенном расстоянии, видео должно перематываться на один шаг назад.
Действие 4: Когда правая рука находится перед датчиком на определенном близком расстоянии, а затем при перемещении по направлению к датчику видео должно перематываться вперед, а при удалении видео должно перематываться назад.
Действие 5: Когда левая рука находится перед датчиком на определенном близком расстоянии, а затем при перемещении к датчику громкость видео должна увеличиваться, а при удалении громкость должна уменьшаться.
Давайте посмотрим, как написана программа для выполнения вышеуказанных действий. Итак, как и все программы, мы начинаем с определения контактов ввода / вывода, как показано ниже. Два датчика US подключены к цифровым контактам 2,3,4 и 5 и питаются от контакта + 5V. Триггерные контакты являются выходными контактами, а контакты Echo - входными контактами.
Последовательная связь между Arduino и python осуществляется со скоростью 9600 бод.
const int trigger1 = 2; // Триггерный вывод 1-го Сеснора const int echo1 = 3; // Эхо-вывод 1-го Сеснора const int trigger2 = 4; // Триггерный вывод 2-го Sesnor const int echo2 = 5; // Вывод эха 2-го Sesnor void setup () {Serial.begin (9600); pinMode (триггер1, ВЫХОД); pinMode (echo1, ВХОД); pinMode (триггер2, ВЫХОД); pinMode (echo2, ВХОД); }
Нам нужно каждый раз рассчитывать расстояние между датчиком и рукой, прежде чем делать выводы о каком-либо действии. Таким образом, мы должны делать это много раз, а это значит, что этот код следует использовать как функцию. Мы написали функцию с именем calculate_distance (), которая возвращает нам расстояние между датчиком и рукой.
/ * ### Функция для вычисления расстояния ### * / void calculate_distance (int trigger, int echo) {digitalWrite (trigger, LOW); delayMicroseconds (2); digitalWrite (триггер, ВЫСОКИЙ); delayMicroseconds (10); digitalWrite (триггер, LOW); time_taken = pulseIn (эхо, ВЫСОКИЙ); dist = time_taken * 0,034 / 2; если (dist> 50) dist = 50; }
Внутри нашего основного цикла мы проверяем значение расстояния и выполняем действия, упомянутые выше. Перед этим мы используем две переменные distL и distR, которые обновляются с текущим значением расстояния.
Calcul_distance (триггер1, эхо1); distL = dist; // получить расстояние от левого датчика calculate_distance (trigger2, echo2); distR = dist; // получаем расстояние до правого датчика
Поскольку мы знаем расстояние между обоими датчиками, теперь мы можем сравнить его с предопределенными значениями и прийти к определенным действиям. Например, если обе руки расположены на расстоянии 40 мс, мы воспроизводим / приостанавливаем воспроизведение видео. Здесь слово «Воспроизведение / Пауза» будет отправлено через последовательный порт.
if ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Обнаружение обеих рук {Serial.println ("Play / Pause"); delay (500);}
Если перед модулем помещается только правая рука, мы перематываем видео вперед на один шаг, а если это левая рука, мы перематываем на один шаг назад. В зависимости от действия, здесь слово «Перемотка назад» или «Вперед» будет отправлено через последовательный порт.
if ((distL> 40 && distL <50) && (distR == 50)) // Обнаружение левой руки {Serial.println ("Rewind"); delay (500);} if ((distR> 40 && distR <50) && (distL == 50)) // Обнаружение правой руки {Serial.println ("Forward"); delay (500);}
Для детального контроля громкости и отслеживания мы используем другую методологию, чтобы предотвратить ложные срабатывания. Чтобы регулировать громкость, мы должны разместить левую руку прибл. На расстоянии 15 см вы можете переместить его в сторону датчика, чтобы уменьшить объем, или отодвинуть от датчика, чтобы увеличить объем. Код для того же показан ниже. В зависимости от действия, здесь слово «Vup» или «Vdown» будет отправлено через последовательный порт.
// Заблокировать влево - режим управления if (distL> = 13 && distL <= 17) {delay (100); // Время удержания руки calculate_distance (trigger1, echo1); distL = dist; if (distL> = 13 && distL <= 17) {Serial.println ("Заблокировано слева"); в то время как (distL <= 40) {вычислить_дистанцию (триггер1, эхо1); distL = dist; if (distL <10) // Рука вставлена {Serial.println ("Vup"); delay (300);} if (distL> 20) // Рука вытащена {Serial.println ("Vdown"); delay (300);}}}}
Мы можем использовать тот же метод для правого бокового датчика, чтобы контролировать дорожку видео. То есть, если мы переместим правую руку к датчику, он перемотает фильм вперед, а если вы отодвинете его от датчика, он перемотает фильм. В зависимости от действия, здесь слово «Перемотка назад» или «Вперед» будет отправлено через последовательный порт.
Теперь вы можете прочитать полный код этого компьютера, управляемого жестами, который приведен в конце страницы, и попытаться понять его в целом, а затем скопировать его в свою Arduino IDE.
Программирование вашего Python:
Программа python для этого проекта очень проста. Нам просто нужно установить последовательную связь с Arduino через правильную скорость передачи, а затем выполнить некоторые основные действия с клавиатурой. Первым шагом с python будет установка модуля p yautogui . Обязательно выполните этот шаг, потому что программа не будет работать без модуля pyautogui.
Установка модуля pyautogui для windows:
Выполните следующие шаги, чтобы установить pyautogui для Windows. Если вы используете другие платформы, шаги также будут более или менее похожи. Убедитесь, что ваш компьютер / ноутбук подключен к Интернету, и выполните следующие действия.
Шаг 1. Откройте командную строку Windows и измените каталог на папку, в которую вы установили python. По умолчанию команда должна быть
компакт-диск C: \ Python27
Шаг 2: Внутри вашего каталога python используйте команду python –m pip install –upgrade pip для обновления вашего pip. Pip - это инструмент на Python, который помогает нам легко устанавливать модули Python. После обновления этого модуля (как показано на рисунке ниже) переходите к следующему шагу.
python –m pip install –upgrade pip
Шаг 3: Используйте команду « python –m pip install pyautogui », чтобы установить модуль pyautogui. Когда процесс будет успешным, вы должны увидеть экран, похожий на показанный ниже.
python –m pip install –upgrade pip
Теперь, когда модуль pyautogui и модуль pyserial (установленные в предыдущем руководстве) успешно установлены вместе с python, мы можем продолжить работу с программой python. Полный код питона дается в конце урока, но объяснение того же заключается в следующем.
Давайте импортируем все три необходимых модуля для этого проекта. Это pyautogui, серийный питон и время.
import serial # Serial import for Serial communication import time # Требуется использовать функции задержки import pyautogui
Далее мы устанавливаем соединение с Arduino через COM-порт. На моем компьютере Arduino подключен к COM 18. С помощью диспетчера устройств найдите, к какому COM-порту подключен ваш Arduino, и исправьте следующую строку соответствующим образом.
ArduinoSerial = serial.Serial ('com18', 9600) # Создать объект последовательного порта с именем arduinoSerialData time.sleep (2) # подождать 2 секунды, чтобы установилась связь
Внутри бесконечного во время цикла, мы постоянно слушать COM порт и сравнить ключевые слова с любыми предварительно бросил вызов работ и сделать нажатия платы соответственно.
while 1: incoming = str (ArduinoSerial.readline ()) # считываем последовательные данные и распечатываем их как входящую строку, если 'Play / Pause' во входящем: pyautogui.typewrite (, 0.2) if 'Rewind' во входящем: pyautogui. hotkey ('ctrl', 'left') если 'Вперед' во входящем: pyautogui.hotkey ('ctrl', 'right'), если 'Vup' во входящем: pyautogui.hotkey ('ctrl', 'down') if ' Vdown 'во входящих: pyautogui.hotkey (' ctrl ',' up ')
Как видите, чтобы нажать клавишу, нам просто нужно использовать команду «pyautogui.typewrite (, 0.2)», которая будет нажимать клавишу пробела в течение 0,2 секунды. Если вам нужны горячие клавиши, такие как ctrl + S, вы можете использовать команду горячих клавиш «pyautogui.hotkey ('ctrl', 's')».
Я использовал эти комбинации, потому что они работают с медиаплеером VLC, вы можете настраивать их как хотите, чтобы создавать свои собственные приложения для управления чем угодно на компьютере с помощью жестов.
Компьютер, управляемый жестами, в действии:
Выполните соединения, как указано выше, и загрузите код Arduino на плату Arduino. Затем используйте приведенный ниже сценарий python и запустите программу на своем ноутбуке / компьютере.
Теперь вы можете воспроизводить любой фильм на своем компьютере с помощью медиаплеера VLC и использовать свою руку для управления фильмом, как показано в видео, приведенном ниже.
Надеюсь, вы поняли проект и получили удовольствие от игры. Это всего лишь демонстрация, и вы можете использовать свое творчество, чтобы создать вокруг нее гораздо больше крутых вещей, управляемых жестами. Дайте мне знать, было ли это полезно и что вы создадите, используя это, в разделе комментариев, и я буду рад это узнать.