Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Contrôle de PC par gestes avec Arduino et Python – Utilisation mains libres

Composants et fournitures

Contrôle de PC par gestes avec Arduino et Python – Utilisation mains libres
Arduino UNO
× 1
Contrôle de PC par gestes avec Arduino et Python – Utilisation mains libres
Capteur ultrasonique HC-SR04 (générique)
× 2
Contrôle de PC par gestes avec Arduino et Python – Utilisation mains libres
Fils de connexion (générique)
× 1

Applications et services en ligne

Contrôle de PC par gestes avec Arduino et Python – Utilisation mains libres
Arduino IDE
Python IDLE
Bibliothèque PySerial
Bibliothèque PyAutoGUI

À propos de ce projet

Dans ce projet, nous apprenons à construire un contrôle de PC par gestes. Basé sur la combinaison Arduino + Python.

Au lieu de clavier, souris ou joystick, nous utilisons des gestes de la main pour contrôler certaines fonctions : lecture/pause vidéo, navigation gauche/droite dans un diaporama, défilement haut/bas dans une page web, etc. J'ai choisi de contrôler VLC Media Player comme démonstration.

L'idée est simple : deux capteurs ultrasoniques HC-SR04 avec Arduino. Placés au-dessus de l'écran du portable, ils mesurent la distance entre la main et le capteur. Les informations d'Arduino sont envoyées à Python via le port série ; Python, en cours d'exécution sur l'ordinateur, effectue les actions correspondantes.

Composants matériels :

Applications logicielles :

Je suppose que vous avez déjà installé Python et PySerial et réalisé quelques projets de base. Sinon, consultez mon tutoriel précédent (Programmer Arduino avec Python). Pour vous familiariser avec le capteur ultrasonique, voir ici.

Étape 1 : Regardez la vidéo pour plus de détails

Étape 2 : Objectif des gestes

Voici les 5 gestes programmés pour la démo :

Étape 3 : Schéma

Contrôle de PC par gestes avec Arduino et Python – Utilisation mains libres
Contrôle de PC par gestes avec Arduino et Python – Utilisation mains libres
Contrôle de PC par gestes avec Arduino et Python – Utilisation mains libres

Le schéma est simple, suivez les instructions. Chaque capteur a 4 broches :

Étape 4 : Programmation Python

Contrôle de PC par gestes avec Arduino et Python – Utilisation mains libres
Contrôle de PC par gestes avec Arduino et Python – Utilisation mains libres
Contrôle de PC par gestes avec Arduino et Python – Utilisation mains libres

1. Installer Python IDLE

Passez cette étape si déjà installé. Sinon :

NOTE : Même sur un OS 64 bits, utilisez Python 32 bits pour compatibilité avec les bibliothèques Arduino.

2. Installer la bibliothèque PySerial

PySerial est un module Python API pour lire/écrire des données série vers Arduino. Sur Windows :

3. Installer la bibliothèque PyAutoGUI

PyAutoGUI fournit un module multiplateforme d'automatisation GUI. Pour Windows (Python déjà installé) :

NOTE : Vérifiez avec import pyautogui. Si pas d'erreur, c'est bon.

Étape 5 : Code Arduino

Contrôle de PC par gestes avec Arduino et Python – Utilisation mains libres

Pour connecter Python à l'Arduino, identifiez le port COM (visible dans l'IDE Arduino).

const int trigger1 = 2; // Broche Trigger 1er capteur
const int echo1 = 3;    // Broche Echo 1er capteur
const int trigger2 = 4; // Broche Trigger 2e capteur
const int echo2 = 5;    // Broche Echo 2e capteur
long time_taken;
int dist, distL, distR;

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

/*### Fonction calcul distance ###*/
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; // distance capteur gauche
  calculate_distance(trigger2, echo2);
  distR = dist; // distance capteur droit

  // Mode Pause – Détection deux mains
  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;

  // Modes Contrôle
  // Verrouillage Gauche
  if (distL >= 13 && distL <= 17) {
    delay(100); // Temps de maintien main
    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) { // Main poussée
          Serial.println("Volume Increased");
          delay(300);
        }
        if (distL > 20) { // Main tirée
          Serial.println("Volume Decreased");
          delay(300);
        }
      }
    }
  }

  // Verrouillage Droit
  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) { // Main droite poussée
          Serial.println("Rewind");
          delay(300);
        }
        if (distR > 20) { // Main droite tirée
          Serial.println("Forward");
          delay(300);
        }
      }
    }
  }
  delay(200);
}

Le code Arduino envoie 5 commandes via le port série pour contrôler des fonctions clavier.

arduino_pythogui.ino

Étape 6 : Code Python

Contrôle de PC par gestes avec Arduino et Python – Utilisation mains libres

Programme simple pour lire le port série et déclencher les actions :

import serial
import time
import pyautogui

ArduinoSerial = serial.Serial('com15', 9600)
time.sleep(2) # attente établissement communication

while 1:
    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 = ""

Code

Extrait de code #5 Texte brut
const int trigger1 = 2; //Trigger pin of 1st Sesnor const int echo1 = 3; //Echo pin of 1st Sesnor const int trigger2 = 4; //Trigger pin of 2nd Sesnor const int echo2 = 5;//Echo pin of 2nd Sesnor long time_taken; int dist,distL,distR; void setup() { Serial.begin(9600); pinMode(trigger1, OUTPUT); pinMode(echo1, INPUT); pinMode(trigger2, OUTPUT); pinMode(echo2, INPUT); } /*###Function to calculate distance###*/ 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; 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; 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);} } } } 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); }
Extrait de code #6 Texte brut
import serial #Serial imported for Serial communication import time #Required to use delay functions import pyautogui #Required to to perform actions ArduinoSerial = serial.Serial('com15',9600) #Create Serial port object called arduinoSerialData time.sleep(2) #wait for 2 seconds for the communication to get established while 1: incoming = str (ArduinoSerial.readline()) #read the serial data and print it as line 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 Incresaed' in incoming: pyautogui.hotkey('ctrl', 'down') if 'Volume Decreased' in incoming: pyautogui.hotkey('ctrl', 'up') incoming = "";

Processus de fabrication

  1. Créer un système Ambilight spectaculaire pour moniteur avec Arduino
  2. Construire une télécommande Android universelle avec Arduino, 1Sheeld et contrôle IR
  3. Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile
  4. Contrôle IoT à Distance d'un Bras Robotique Personnalisé avec Arduino MKR1000
  5. Mesure Précise de Fréquence et Rapport Cyclique avec Arduino UNO
  6. Contrôlez un rover Arduino avec Firmata et une manette Xbox One
  7. Pistolet à eau intelligent à détection de mouvement avec Arduino Nano
  8. Contrôle fluide de la luminosité LED avec Bolt IoT et Arduino UNO
  9. Construisez un Bras Robotique Intelligent Contrôlé par Arduino : Tutoriel DIY Facile