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

Управление ПК жестами: Arduino + Python — бесконтактное управление

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

Компонент Количество
Arduino UNO 1
Ультразвуковой датчик HC-SR04 2
Перемычки 1 набор

Приложения и библиотеки

О проекте

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

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

Идея: два ультразвуковых датчика HC-SR04 на Arduino измеряют расстояние до рук. Данные передаются в Python через последовательный порт. Python-скрипт на компьютере интерпретирует их и выполняет действия.

Аппаратные компоненты

Программное обеспечение

Предполагается, что Python и PySerial уже установлены и базовые проекты работают. Если нет — см. предыдущее руководство «Programming Arduino Using Python». С датчиком HC-SR04 можно ознакомиться здесь.

Шаг 1: Видео-обзор

(Ссылка на видео в оригинале)

Шаг 2: Назначение жестов

Запрограммированы 5 жестов:

  1. Play/Pause — обе руки перед левым/правым датчиком на дальнем расстоянии.
  2. Rewind (назад) — рука перед левым датчиком на дальнем расстоянии.
  3. Forward (вперёд) — рука перед правым датчиком на дальнем расстоянии.
  4. Громкость + — рука перед левым датчиком на дальнем расстоянии, затем движение от датчика.
  5. Громкость − — рука перед левым датчиком на дальнем расстоянии, затем движение к датчику.

Шаг 3: Схема подключения

У каждого датчика 4 пина:

Управление ПК жестами: Arduino + Python — бесконтактное управление
Управление ПК жестами: Arduino + Python — бесконтактное управление
Управление ПК жестами: Arduino + Python — бесконтактное управление

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

1. Установка Python IDLE

Если уже установлен — пропустите. Иначе: скачайте с python.org, установите с настройками по умолчанию. Примечание: даже на 64-битной ОС можно использовать 32-битный Python из-за совместимости с Arduino-библиотеками.

2. Установка PySerial

PySerial — модуль для чтения/записи последовательного порта. На Windows: скачайте со страницы загрузки, установите с дефолтными настройками. Проверка: в Python введите import serial — ошибок не должно быть.

3. Установка PyAutoGUI

Кроссплатформенная автоматизация GUI. В командной строке Windows:

cd C:\Python27
python -m pip install --upgrade pip
python -m pip install pyautogui

Проверка: import pyautogui — без ошибок.

Шаг 5: Код для Arduino

Сначала определите COM-порт Arduino (в Arduino IDE).

const int trigger1 = 2;
const int echo1 = 3;
const int trigger2 = 4;
const int echo2 = 5;
long time_taken;
int dist, distL, distR;

void setup() {
  Serial.begin(9600);
  pinMode(trigger1, OUTPUT);
  pinMode(echo1, INPUT);
  pinMode(trigger2, OUTPUT);
  pinMode(echo2, INPUT);
}

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() {
  calculate_distance(trigger1, echo1);
  distL = dist;
  calculate_distance(trigger2, echo2);
  distR = dist;

  // Play/Pause — обе руки на расстоянии 40-60 см
  if ((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;

  // Left Lock — контроль громкости
  if (distL >= 13 && distL <= 17) {
    delay(100);
    calculate_distance(trigger1, echo1);
    distL = dist;
    if (distL >= 13 && distL <= 17) {
      Serial.println("Left Locked");
      while (distL <= 40) {
        calculate_distance(trigger1, echo1);
        distL = dist;
        if (distL < 10) { Serial.println("Volume Increased"); delay(300); }
        if (distL > 20) { Serial.println("Volume Decreased"); delay(300); }
      }
    }
  }

  // Right Lock — перемотка
  if (distR >= 13 && distR <= 17) {
    delay(100);
    calculate_distance(trigger2, echo2);
    distR = dist;
    if (distR >= 13 && distR <= 17) {
      Serial.println("Right Locked");
      while (distR <= 40) {
        calculate_distance(trigger2, echo2);
        distR = dist;
        if (distR < 10) { Serial.println("Rewind"); delay(300); }
        if (distR > 20) { Serial.println("Forward"); delay(300); }
      }
    }
  }
  delay(200);
}

Шаг 6: Код для Python

import serial
import time
import pyautogui

ArduinoSerial = serial.Serial('com15', 9600)  # замените на свой COM-порт
time.sleep(2)

while True:
    incoming = str(ArduinoSerial.readline())
    print(incoming)
    if 'Play/Pause' in incoming:
        pyautogui.typewrite(['space'], 0.2)
    if 'Rewind' in incoming:
        pyautogui.hotkey('ctrl', 'left')
    if 'Forward' in incoming:
        pyautogui.hotkey('ctrl', 'right')
    if 'Volume Increased' in incoming:
        pyautogui.hotkey('ctrl', 'down')
    if 'Volume Decreased' in incoming:
        pyautogui.hotkey('ctrl', 'up')
    incoming = ""

Важно: в Python-коде исправлена опечатка оригинала: Volume Incresaed → Volume Increased.

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

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