Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

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

Компоненты и расходные материалы

Arduino UNO
× 1
Ультразвуковой датчик - HC-SR04 (общий)
× 2
Перемычки (общие)
× 1

Приложения и онлайн-сервисы

IDE Arduino
Python IDLE
Библиотека PySerial
Библиотека Pyautogui

Об этом проекте

В этом проекте мы узнаем, как создавать ноутбуки или компьютеры с жестами. Он основан на использовании комбинации Arduino и Python.

Вместо клавиатуры, мыши или джойстика мы можем использовать жесты рук для управления определенными функциями компьютера, такими как воспроизведение / пауза видео, перемещение влево / вправо в слайд-шоу фотографий, прокрутка вверх / вниз на веб-странице и многие другие. более. Вот почему я решил управлять VLC Media Player как проектом жестов рук.

Идея проекта довольно проста, если использовать два ультразвуковых датчика (HC-SR04) с Arduino. Мы разместим два датчика в верхней части экрана ноутбука и рассчитаем расстояние между рукой и датчиком. Рассчитывая на информацию от Arduino, которая отправляется на Python через последовательный порт, эта информация затем будет считана Python, который работает на компьютере, для выполнения определенных действий.

Компоненты оборудования:

  • Ардуино
  • Два ультразвуковых датчика (HC-SR04)
  • Некоторые провода

Программные приложения:

  • IDE Arduino
  • Python IDLE
  • Библиотека PySerial (мы будем использовать для связи с последовательными портами).
  • Библиотека PyAutogui (мы будем использовать для выполнения действий).

Итак, я предполагаю, что вы уже установили библиотеки Python и PySerial и успешно выполнили несколько базовых проектов. Если нет, не волнуйтесь; Советую следовать моему предыдущему руководству (Программирование Arduino с использованием Python). Также, если вы хотите познакомиться с ультразвуковым датчиком, вы можете взглянуть (здесь).

Шаг 1. Посмотрите видео, чтобы узнать больше

Шаг 2. Цель жестов рук

Ниже приведены 5 жестов, которые я запрограммировал для демонстрационных целей.

  • Жест из первых рук:он позволяет нам "воспроизвести / приостановить" VLC, поместив две руки перед правым / левым ультразвуковым датчиком на определенном расстоянии.
  • Второй жест:он позволяет нам «перемотать» видео, поместив руку перед левым датчиком на определенном расстоянии.
  • Третий жест:он позволяет нам «пересылать» видео, помещая руку перед правым датчиком на определенном расстоянии.
  • Четвертый жест:он позволяет «увеличить громкость» видео, поместив руку перед левым датчиком на определенном расстоянии и отодвинувшись от датчика.
  • Пятый жест:он позволяет нам «уменьшить громкость» видео, поместив руку перед левым датчиком на определенном расстоянии и приблизившись к датчику.

Шаг 3. Схема

Схема довольно проста, вам просто нужно следовать приведенным ниже инструкциям. Итак, каждый датчик имеет 4 контакта:

  • Vcc - этот вывод подключен к 5 В +.
  • Триггер - вам необходимо определить этот контакт в своей программе.
  • Echo - этот пин такой же, как Trig, его также необходимо определить.
  • GND - этот вывод подключен к земле.

Шаг 4. Программирование на Python

1. Установите Python IDLE

Вы можете пропустить этот шаг, если вы уже установили Python IDLE на свой компьютер. Если да, переходите к шагу 2 или следуйте приведенным ниже инструкциям.

  • Перейдите на веб-сайт Python и загрузите его (здесь).
  • После того, как вы закончите, вы переходите к установке, сохраняя каталог, в котором python устанавливается по умолчанию.

ПРИМЕЧАНИЕ. Даже если ваш компьютер работает в 64-разрядной версии, вы можете использовать сам 32-разрядный Python из-за отсутствия совместимости с библиотеками Arduino.

2. Установите библиотеку PySerial

PySerial - это модуль Python API, который используется для чтения и записи последовательных данных в Arduino или любой другой микроконтроллер. Для установки в Windows просто посетите страницу загрузки PySerial и выполните следующие действия:

  • Загрузите PySerial по ссылке выше.
  • Установите его, оставив настройку по умолчанию. Убедитесь, что Pyserial работает правильно. Сделать это; вы вводите:
  импорт серийного номера  

Если вы не столкнулись ни с одной ошибкой, все в порядке. В противном случае я советую вам проверить вашу установку и расширение Python IDLE.

3. Установите библиотеку PyAutogui

Цель PyAutoGUI - предоставить кроссплатформенный модуль Python для автоматизации графического интерфейса пользователя для людей. API спроектирован так, чтобы быть максимально простым с разумными значениями по умолчанию. Выполните следующие шаги, чтобы установить pyautogui для Windows. (Чтобы выполнить эти шаги, у вас уже должен быть установлен Python IDLE.)

Если вы используете другие платформы, советую посмотреть здесь.

  • Открыть команду Windows
  • Введите следующую команду.
  cd C:\ Python27  
  • Затем вы вводите:
  python –m pip install –upgrade pip  
  • Последняя команда:
  python –m pip install pyautogui  

ПРИМЕЧАНИЕ. Чтобы убедиться, что pyautogui работает правильно, просто введите:

  импортировать pyautogui  

Если вы не столкнулись ни с одной ошибкой, все в порядке.

Шаг 5. Код Arduino

Чтобы инициировать соединение с Arduino из Python, мы сначала должны выяснить, на каком COM-порту находится Arduino. Эта задача просто выполняется средой программирования Ardunio, как я отметил на картинке выше.

  const int trigger1 =2; // Триггерный вывод 1-го Sesnorconst int echo1 =3; // Эхо-вывод 1-го Sesnorconst int trigger2 =4; // Триггерный вывод 2-го Sesnorconst int echo2 =5; // Вывод эха 2-го Sesnorlong time_taken; int dist, distL, distR; void setup () {Serial.begin (9600); pinMode (триггер1, ВЫХОД); pinMode (echo1, ВХОД); pinMode (триггер2, ВЫХОД); pinMode (echo2, ВХОД); } / * ### Функция для вычисления расстояния ### * / void calculate_distance (int trigger, int echo) {digitalWrite (trigger, LOW); delayMicroseconds (2); digitalWrite (trigger, HIGH); delayMicroseconds (10); digitalWrite (trigger, LOW); time_taken =pulseIn (echo, HIGH); dist =time_taken * 0,034 / 2; if (dist> 60) dist =60;} void loop () {// бесконечный циклpycalculate_distance (trigger1, echo1); distL =расстояние; // получить расстояние от левого сенсораcalculate_distance (trigger2, echo2); distR =dist; // получение расстояния до правого датчика // Режимы паузы -Holdif ((distL> 40 &&distR> 40) &&(distL <60 &&distR <60)) // Обнаружение обеих рук {Serial.println ("Play / Pause"); delay (500);} calculate_distance (trigger1, echo1); distL =dist; calculate_distance (trigger2, echo2); distR =dist; // Режимы управления // Заблокировать влево - Режим управленияif (distL> =13 &&distL <=17) {задержка (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 ("Объем увеличился"); delay (300);} if (distL> 20) // Рука вытащена {Serial.println ("Volume Decreased"); delay (300);}}}} // Заблокировать вправо - режим управленияif (distR> =13 &&distR <=17) {delay (100); // Время удержания руки calculate_distance (trigger2, echo2); distR =dist; если (distR> =13 &&distR <=17) {Serial.println ("заблокировано справа"); в то время как (distR <=40) {вычислить_дистанцию ​​(триггер2, эхо2); distR =dist; if (distR <10) // Правая рука нажата {Serial.println ("Rewind"); delay (300);} if (distR> 20) // Правая рука вытащила {Serial.println ("Вперед"); delay (300);}}}} задержка (200);}  

Если вы прочитаете код Arduino, вы увидите 5 команд, которые управляют определенными функциями клавиатуры для достижения требуемой задачи.

arduino_pythogui.ino Загрузить

arduino_pythogui.ino

Шаг 6. Код Python

Во-первых, нам нужна простая программа, чтобы заставить Python отправлять данные через последовательный порт.

  import serial #Serial import for Serial communicationimport time # Требуется для использования функций задержкиimport pyautogui # Требуется для выполнения действий ArduinoSerial =serial.Serial ('com15', 9600) # Создание объекта последовательного порта с именем arduinoSerialDatatime.sleep (2 ) # подождите 2 секунды, пока установится связь, пока 1:incoming =str (ArduinoSerial.readline ()) # считайте последовательные данные и распечатайте их как входящую строку, если 'Play / Pause' в входящих:pyautogui.typewrite ([ 'space'], 0.2) если 'Rewind' во входящем:pyautogui.hotkey ('ctrl', 'left') если 'Forward' во входящем:pyautogui.hotkey ('ctrl', 'right') if 'Volume Incresaed' во входящем:pyautogui.hotkey ('ctrl', 'down'), если 'Volume Decreased' во входящем:pyautogui.hotkey ('ctrl', 'up') incoming ="";  

Код

  • Фрагмент кода № 5
  • Фрагмент кода №6
Фрагмент кода № 5 Обычный текст
 const int trigger1 =2; // Триггерный вывод 1-го Sesnorconst int echo1 =3; // Эхо-вывод 1-го Sesnorconst int trigger2 =4; // Триггерный вывод 2-го Sesnorconst int echo2 =5; // Вывод эха 2-го Sesnorlong time_taken; int dist, distL, distR; void setup () {Serial.begin (9600); pinMode (триггер1, ВЫХОД); pinMode (echo1, ВХОД); pinMode (триггер2, ВЫХОД); pinMode (echo2, ВХОД); } / * ### Функция для вычисления расстояния ### * / void calculate_distance (int trigger, int echo) {digitalWrite (trigger, LOW); delayMicroseconds (2); digitalWrite (trigger, HIGH); delayMicroseconds (10); digitalWrite (trigger, LOW); time_taken =pulseIn (echo, HIGH); dist =time_taken * 0,034 / 2; if (dist> 60) dist =60;} void loop () {// бесконечный циклpycalculate_distance (trigger1, echo1); distL =расстояние; // получить расстояние от левого сенсораcalculate_distance (trigger2, echo2); distR =dist; // получение расстояния до правого датчика // Режимы паузы -Holdif ((distL> 40 &&distR> 40) &&(distL <60 &&distR <60)) // Обнаружение обеих рук {Serial.println ("Play / Pause"); delay (500);} calculate_distance (trigger1, echo1); distL =dist; calculate_distance (trigger2, echo2); distR =dist; // Режимы управления // Заблокировать влево - Режим управленияif (distL> =13 &&distL <=17) {задержка (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 ("Объем увеличился"); delay (300);} if (distL> 20) // Рука вытащена {Serial.println ("Volume Decreased"); delay (300);}}}} // Заблокировать вправо - режим управленияif (distR> =13 &&distR <=17) {delay (100); // Время удержания руки calculate_distance (trigger2, echo2); distR =dist; если (distR> =13 &&distR <=17) {Serial.println ("заблокировано справа"); в то время как (distR <=40) {вычислить_дистанцию ​​(триггер2, эхо2); distR =dist; if (distR <10) // Правая рука нажата {Serial.println ("Rewind"); delay (300);} if (distR> 20) // Правая рука вытащила {Serial.println ("Вперед"); delay (300);}}}} задержка (200);} 
Фрагмент кода №6 Обычный текст
 import serial #Serial import for Serial communicationimport time # Требуется для использования функций задержкиimport pyautogui # Требуется для выполнения действий ArduinoSerial =serial.Serial ('com15', 9600) # Создать объект последовательного порта с именем arduinoSerialDatatime.sleep (2) #wait в течение 2 секунд для установления связи, пока 1:incoming =str (ArduinoSerial.readline ()) # Прочтите последовательные данные и распечатайте их как входящую строку, если 'Play / Pause' в входящих:pyautogui.typewrite (['space' ], 0.2) если 'Rewind' во входящем:pyautogui.hotkey ('ctrl', 'left'), если 'Forward' во входящем:pyautogui.hotkey ('ctrl', 'right'), если 'Volume Incresaed' во входящем:pyautogui.hotkey ('ctrl', 'down'), если 'Volume Decreased' во входящих:pyautogui.hotkey ('ctrl', 'up') incoming =""; 

Производственный процесс

  1. Создание монитора Ambilight с помощью Arduino
  2. Универсальный пульт дистанционного управления с использованием Arduino, 1Sheeld и Android
  3. Вольтметр своими руками с использованием Arduino и смартфона
  4. Использование Интернета вещей для удаленного управления манипулятором
  5. Измерение частоты и рабочего цикла с использованием Arduino
  6. Управление Arduino Rover с помощью Firmata и контроллера Xbox One
  7. Водяной пистолет с датчиком движения
  8. Управление яркостью светодиода с помощью Bolt и Arduino
  9. Простая и умная роботизированная рука с использованием Arduino
  10. Полный контроль над вашим телевизором с помощью Alexa и Arduino IoT Cloud