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

Ordinateur de contrôle incroyable utilisant le mouvement de la main et Arduino

Composants et fournitures

Arduino UNO
× 1
Capteur à ultrasons - HC-SR04 (Générique)
× 2
Câbles de raccordement (générique)
× 1

Applications et services en ligne

Arduino IDE
Python IDLE
Bibliothèque PySerial
Bibliothèque Pyautogui

À propos de ce projet

Dans ce projet, nous allons apprendre à construire des ordinateurs portables ou des ordinateurs à commande gestuelle. Il est basé sur l'utilisation de la combinaison d'Arduino et de Python.

Au lieu d'utiliser un clavier, une souris ou un joystick, nous pouvons utiliser nos gestes de la main pour contrôler certaines fonctions d'un ordinateur comme lire/mettre en pause une vidéo, se déplacer vers la gauche/droite dans un diaporama de photos, faire défiler vers le haut/bas dans une page Web et bien d'autres Suite. C'est pourquoi j'ai décidé de contrôler VLC Media Player en tant que projet de geste de la main.

L'idée derrière le projet est assez simple en utilisant deux capteurs à ultrasons (HC-SR04) avec Arduino. Nous allons placer les deux capteurs sur le dessus d'un écran d'ordinateur portable et calculer la distance entre la main et le capteur. En comptant sur les informations d'Arduino qui sont envoyées à Python via le port série, ces informations seront ensuite lues par Python qui s'exécute sur l'ordinateur afin d'effectuer certaines actions.

Composants matériels :

  • Arduino
  • Deux capteurs à ultrasons (HC-SR04)
  • Quelques fils

Applications logicielles :

  • IDE Arduino
  • Python IDLE
  • Bibliothèque PySerial (nous l'utiliserons pour communiquer avec les ports série).
  • Bibliothèque PyAutogui (Nous utiliserons pour effectuer des actions).

Je suppose donc que vous avez déjà installé les bibliothèques Python et PySerial et que vous avez réalisé avec succès certains projets de base. Sinon, ne vous inquiétez pas ; Je vous conseille de suivre mon précédent tutoriel (Programming Arduino Using Python). De plus, si vous souhaitez vous familiariser avec le capteur à ultrasons, vous pouvez jeter un œil (ici).

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

Étape 2 :Objectif des gestes de la main

Voici les 5 commandes de gestes de la main que j'ai programmées à des fins de démonstration.

  • Geste de la première main : Il nous permet de « Lecture/Pause » de VLC en plaçant les deux mains devant le capteur à ultrasons droit/gauche à une distance particulière.
  • Deuxième geste : Il nous permet de "rembobiner" la vidéo en plaçant une main devant le capteur gauche à une distance particulière.
  • Troisième geste : Il nous permet de "faire avancer" la vidéo en plaçant une main devant le capteur droit à une distance particulière.
  • Quatrième geste : cela nous permet d'augmenter le volume de la vidéo en plaçant une main devant le capteur gauche à une distance particulière et en s'éloignant du capteur.
  • Cinquième geste : Il nous permet de « diminuer le volume » de la vidéo en plaçant une main devant le capteur gauche à une distance particulière et en nous rapprochant du capteur.

Étape 3 : Schéma

Le schéma est assez simple, vous devez simplement suivre les instructions ci-dessous. Donc chaque capteur a 4 broches :

  • Vcc - cette broche est connectée à 5V+.
  • Trig - vous devez définir cette broche dans votre programme.
  • Echo - cette broche est la même que Trig, vous devez également la définir.
  • GND - cette broche est connectée à la terre.

Étape 4 :Programmation Python

1. Installez Python IDLE

Vous pouvez ignorer cette étape si vous avez déjà installé Python IDLE sur votre ordinateur. Si oui, passez à l'étape 2, ou bien regardez les instructions suivantes.

  • Allez sur le site python et téléchargez-le (ici).
  • Une fois que vous avez terminé, vous passez à l'installation en conservant le répertoire dans lequel le python est installé par défaut.

REMARQUE :même si votre ordinateur fonctionne en 64 bits, vous pouvez utiliser Python 32 bits lui-même en raison du manque de compatibilité avec les bibliothèques Arduino.

2. Installez la bibliothèque PySerial

PySerial est un module API Python qui est utilisé pour lire et écrire des données série sur Arduino ou tout autre microcontrôleur. Pour installer sur Windows, il suffit de visiter la page de téléchargement de PySerial et de suivre les étapes ci-dessous :

  • Téléchargez le PySerial à partir du lien ci-dessus.
  • Installez-le en conservant le paramètre par défaut. Vous devez vous assurer que Pyserial a fonctionné correctement. Pour faire ça; vous saisissez :
importer la série 

Si vous n'avez rencontré aucune erreur, vous êtes bon. Sinon je vous conseille de vérifier votre installation et l'extension Python IDLE.

3. Installez la bibliothèque PyAutogui

Le but de PyAutoGUI est de fournir un module Python multiplateforme pour l'automatisation de l'interface graphique pour les êtres humains. L'API est conçue pour être aussi simple que possible avec des valeurs par défaut sensées. Suivez les étapes ci-dessous pour installer pyautogui pour Windows. (Pour suivre ces étapes, vous devriez déjà avoir installé Python IDLE.)

Si vous utilisez d'autres plateformes, je vous conseille de jeter un œil ici.

  • Ouvrir la commande Windows
  • Tapez la commande suivante
cd C:\Python27 
  • Ensuite, vous tapez :
python –m pip install –upgrade pip 
  • La dernière commande est :
python –m pip install pyautogui 

REMARQUE :Pour être sûr que pyautogui a fonctionné correctement, saisissez simplement :

importer pyautogui 

Si vous n'avez rencontré aucune erreur, vous êtes bon.

Étape 5 : Code Arduino

Pour initier une connexion avec l'Arduino à partir de Python, nous devons d'abord déterminer sur quel port COM l'Arduino est activé. Cette tâche est simplement effectuée par l'environnement de programmation Ardunio comme je l'ai noté dans l'image ci-dessus.

const int trigger1 =2 ; //Broche de déclenchement du 1er Sesnorconst int echo1 =3; //Broche d'écho du 1er Sesnorconst int trigger2 =4; //Broche de déclenchement du 2e Sesnorconst int echo2 =5;//Broche d'écho du 2e Sesnorlong time_taken;int dist,distL,distR;void setup() {Serial.begin(9600); pinMode(trigger1, OUTPUT); pinMode(écho1, INPUT); pinMode(trigger2, OUTPUT); pinMode(écho2, INPUT); }/*###Fonction pour calculer la 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() { //infini loopycalculate_distance(trigger1,echo1);distL =dist; // obtenir la distance du capteur gauchecalculate_distance(trigger2,echo2);distR =dist; //obtenir la distance du capteur droit//Modes de pause -Holdif ((distL>40 &&distR>40) &&(distL <60 &&distR<60)) //Détecter les deux mains{Serial.println("Play/Pause"); delay (500);}calculate_distance(trigger1,echo1);distL =dist;calculate_distance(trigger2,echo2);distR =dist;//Modes de contrôle//Verrouillage à gauche - Mode de contrôleif (distL>=13 &&distL<=17) { retard (100); //Temps de maintien de la 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) //Poussé à la main {Serial.println ("Volume augmenté"); delay (300);} if (distL>20) //La main a retiré {Serial.println ("Volume Diminué"); délai (300);} } }}//Verrouillage à droite - Mode de contrôleif (distR>=13 &&distR<=17){ delay(100); //Temps de maintien de la main 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 enfoncée {Serial.println ("Rewind"); délai (300);} if (distR>20) //Main droite tirée {Serial.println ("Forward"); délai (300);} }}}délai(200);} 

Si vous lisez le code Arduino, vous observerez 5 commandes qui contrôlent certaines fonctions du clavier afin d'accomplir la tâche requise.

Télécharger arduino_pythogui.ino

arduino_pythogui.ino

Étape 6 :Code Python

Tout d'abord, nous avons besoin d'un programme simple pour que Python envoie des données sur le port série.

import serial #Serial import for Serial communicationimport time #Required to use delay functionsimport pyautogui #Required to perform actionsArduinoSerial =serial.Serial('com15',9600) #Créer un objet de port série appelé arduinoSerialDatatime.sleep(2 ) #attendez 2 secondes pour que la communication soit établie pendant 1 :entrant =str (ArduinoSerial.readline()) #lisez les données série et imprimez-les sous forme de ligne print entrante si 'Play/Pause' en entrant :pyautogui.typewrite([ 'espace'], 0.2) si 'Rewind' en entrant :pyautogui.hotkey('ctrl', 'left') si 'Forward' en entrant :pyautogui.hotkey('ctrl', 'right') si 'Volume augmenté' en entrant :pyautogui.hotkey('ctrl', 'bas') si 'Volume diminué' en entrant :pyautogui.hotkey('ctrl', 'up') entrant =""; 

Code

  • Extrait de code n°5
  • Extrait de code n° 6
Extrait de code n°5Texte brut
const int trigger1 =2 ; //Broche de déclenchement du 1er Sesnorconst int echo1 =3; //Broche d'écho du 1er Sesnorconst int trigger2 =4; //Broche de déclenchement du 2e Sesnorconst int echo2 =5;//Broche d'écho du 2e Sesnorlong time_taken;int dist,distL,distR;void setup() {Serial.begin(9600); pinMode(trigger1, OUTPUT); pinMode(écho1, INPUT); pinMode(trigger2, OUTPUT); pinMode(écho2, INPUT); }/*###Fonction pour calculer la 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() { //infini loopycalculate_distance(trigger1,echo1);distL =dist; // obtenir la distance du capteur gauchecalculate_distance(trigger2,echo2);distR =dist; //obtenir la distance du capteur droit//Modes de pause -Holdif ((distL>40 &&distR>40) &&(distL <60 &&distR<60)) //Détecter les deux mains{Serial.println("Play/Pause"); delay (500);}calculate_distance(trigger1,echo1);distL =dist;calculate_distance(trigger2,echo2);distR =dist;//Modes de contrôle//Verrouillage à gauche - Mode de contrôleif (distL>=13 &&distL<=17) { retard (100); //Temps de maintien de la 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) //Poussé à la main {Serial.println ("Volume augmenté"); delay (300);} if (distL>20) //La main a retiré {Serial.println ("Volume Diminué"); délai (300);} } }}//Verrouillage à droite - Mode de contrôleif (distR>=13 &&distR<=17){ delay(100); //Temps de maintien de la main 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 enfoncée {Serial.println ("Rewind"); délai (300);} if (distR>20) //Main droite tirée {Serial.println ("Forward"); délai (300);} }}}délai(200);}
Extrait de code n°6Texte brut
import serial #Serial import for Serial communicationimport time #Required to use delay functionsimport pyautogui #Required to perform actionsArduinoSerial =serial.Serial('com15',9600) #Créer un objet de port série appelé arduinoSerialDatatime.sleep(2) #wait pendant 2 secondes pour que la communication s'établisse pendant 1 :entrant =str (ArduinoSerial.readline()) #lire les données série et les imprimer en tant que ligne print entrant si 'Play/Pause' en entrant :pyautogui.typewrite(['space' ], 0.2) si 'Rewind' en entrant :pyautogui.hotkey('ctrl', 'left') si 'Forward' en entrant :pyautogui.hotkey('ctrl', 'right') si 'Volume augmenté' en entrant :pyautogui.hotkey('ctrl', 'down') si 'Volume Diminué' en entrant :pyautogui.hotkey('ctrl', 'up') entrant ="";

Processus de fabrication

  1. Créer un moniteur Ambilight à l'aide d'Arduino
  2. Télécommande universelle utilisant Arduino, 1Sheeld et Android
  3. Voltmètre DIY utilisant Arduino et Smartphone
  4. Utiliser l'IoT pour contrôler à distance un bras robotique
  5. Mesure de la fréquence et du cycle de service à l'aide d'Arduino
  6. Contrôler Arduino Rover à l'aide de Firmata et de la manette Xbox One
  7. Pistolet à eau à détecteur de mouvement
  8. Contrôle de la luminosité des LED à l'aide de Bolt et Arduino
  9. Bras robotique simple et intelligent utilisant Arduino