Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Erstaunlicher Steuerungscomputer mit Handbewegung und Arduino

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
Ultraschallsensor - HC-SR04 (Generic)
× 2
Jumper (generisch)
× 1

Apps und Onlinedienste

Arduino-IDE
Python IDLE
PySerial Library
Pyautogui-Bibliothek

Über dieses Projekt

In diesem Projekt werden wir lernen, wie man gestengesteuerte Laptops oder Computer baut. Es basiert auf der Kombination von Arduino und Python.

Anstatt Tastatur, Maus oder Joystick zu verwenden, können wir unsere Handgesten verwenden, um bestimmte Funktionen eines Computers zu steuern, z mehr. Aus diesem Grund habe ich mich entschieden, den VLC Media Player als Handgesten-Projekt zu steuern.

Die Idee hinter dem Projekt ist ganz einfach, indem zwei Ultraschallsensoren (HC-SR04) mit Arduino verwendet werden. Wir platzieren die beiden Sensoren oben auf einem Laptop-Bildschirm und berechnen den Abstand zwischen der Hand und dem Sensor. Basierend auf den Informationen von Arduino, die über die serielle Schnittstelle an Python gesendet werden, werden diese Informationen dann von Python gelesen, das auf dem Computer ausgeführt wird, um bestimmte Aktionen auszuführen.

Hardwarekomponenten:

  • Arduino
  • Zwei Ultraschallsensoren (HC-SR04)
  • Einige Drähte

Software-Apps:

  • Arduino-IDE
  • Python-LEERLAUF
  • PySerial-Bibliothek (Wir werden verwenden, um mit seriellen Ports zu kommunizieren).
  • PyAutogui-Bibliothek (Wir werden verwenden, um Aktionen auszuführen).

Ich gehe also davon aus, dass Sie bereits Python und die PySerial-Bibliothek installiert und einige grundlegende Projekte erfolgreich durchgeführt haben. Wenn nicht, machen Sie sich keine Sorgen; Ich empfehle Ihnen, meinem vorherigen Tutorial (Programmierung von Arduino mit Python) zu folgen. Auch wenn Sie den Ultraschallsensor kennenlernen möchten, können Sie einen Blick darauf werfen (hier).

Schritt 1:Sehen Sie sich das Video an, um weitere Informationen zu erhalten

Schritt 2:Zweck der Handgesten

Im Folgenden sind die 5 Handgesten für Befehle aufgeführt, die ich zu Demonstrationszwecken programmiert habe.

  • Geste aus der ersten Hand: Mit dieser Geste können wir VLC abspielen/anhalten, indem wir die beiden Hände in einer bestimmten Entfernung vor den rechten/linken Ultraschallsensor legen.
  • Zweite Geste: Damit können wir das Video "zurückspulen", indem wir eine Hand in einer bestimmten Entfernung vor den linken Sensor halten.
  • Dritte Geste: Mit dieser Geste können wir das Video "weiterleiten", indem wir eine Hand in einer bestimmten Entfernung vor den rechten Sensor halten.
  • Vierte Geste: Mit dieser Geste können wir die Lautstärke des Videos erhöhen, indem wir eine Hand in einem bestimmten Abstand vor den linken Sensor halten und sich vom Sensor entfernen.
  • Fünfte Geste: Mit dieser Geste können wir die Lautstärke des Videos verringern, indem wir eine Hand in einer bestimmten Entfernung vor den linken Sensor halten und uns dem Sensor nähern.

Schritt 3:Schema

Der Schaltplan ist recht einfach, Sie sollten einfach die folgenden Anweisungen befolgen. Jeder Sensor hat also 4 Pins:

  • Vcc - dieser Pin ist mit 5V+ verbunden.
  • Trigger - Sie müssen diesen Pin in Ihrem Programm definieren.
  • Echo - dieser Pin ist der gleiche wie Trig, du musst ihn auch definieren.
  • GND - dieser Pin ist mit Masse verbunden.

Schritt 4:Python programmieren

1. Python IDLE installieren

Sie können diesen Schritt überspringen, wenn Sie Python IDLE bereits auf Ihrem Computer installiert haben. Wenn ja, fahren Sie mit Schritt 2 fort oder lesen Sie die folgenden Anweisungen.

  • Gehen Sie zur Python-Website und laden Sie sie herunter (hier).
  • Sobald Sie fertig sind, fahren Sie mit der Installation fort, indem Sie das Verzeichnis beibehalten, in dem das Python standardmäßig installiert wird.

HINWEIS:Auch wenn Ihr Computer mit 64-Bit arbeitet, können Sie aufgrund der fehlenden Kompatibilität mit Arduino-Bibliotheken 32-Bit-Python selbst verwenden.

2. PySerial-Bibliothek installieren

PySerial ist ein Python-API-Modul, das verwendet wird, um serielle Daten zu lesen und auf Arduino oder einen anderen Mikrocontroller zu schreiben. Rufen Sie zur Installation unter Windows einfach die Download-Seite von PySerial auf und führen Sie die folgenden Schritte aus:

  • Laden Sie PySerial über den obigen Link herunter.
  • Installieren Sie es, indem Sie die Standardeinstellung beibehalten. Sie sollten sicher sein, dass Pyserial richtig funktioniert. Um dies zu tun; du gibst ein:
Seriennummer importieren 

Wenn Sie mit keinem Fehler konfrontiert wurden, sind Sie gut. Ansonsten rate ich Ihnen, Ihre Installation und die Python IDLE-Erweiterung zu überprüfen.

3. PyAutogui-Bibliothek installieren

Der Zweck von PyAutoGUI besteht darin, ein plattformübergreifendes Python-Modul für die GUI-Automatisierung für Menschen bereitzustellen. Die API ist so einfach wie möglich mit sinnvollen Voreinstellungen gestaltet. Führen Sie die folgenden Schritte aus, um pyautogui für Windows zu installieren. (Um diese Schritte auszuführen, sollten Sie Python IDLE bereits installiert haben.)

Wenn Sie andere Plattformen verwenden, empfehle ich Ihnen, hier vorbeizuschauen.

  • Windows-Befehl öffnen
  • Geben Sie den folgenden Befehl ein
CD C:\Python27 
  • Dann tippst du:
python –m pip install –upgrade pip 
  • Der letzte Befehl ist:
python –m pip install pyautogui 

HINWEIS:Um sicherzustellen, dass pyautogui richtig funktioniert, geben Sie einfach Folgendes ein:

pyautogui importieren 

Wenn kein Fehler aufgetreten ist, ist es gut.

Schritt 5:Arduino-Code

Um von Python aus eine Verbindung mit dem Arduino zu initiieren, müssen wir zunächst herausfinden, an welchem ​​COM-Port sich der Arduino befindet. Diese Aufgabe wird einfach von der Ardunio-Programmierumgebung übernommen, wie ich im Bild oben festgestellt habe.

const int trigger1 =2; // Trigger-Pin des 1. Sesnorconst int echo1 =3; // Echo-Pin des 1. Sesnorconst int trigger2 =4; // Trigger-Pin des 2. Sesnorconst int echo2 =5; // Echo-Pin des 2. Sesnorlong time_taken;int dist,distL,distR;void setup () {Serial.begin (9600); pinMode (Trigger1, AUSGANG); PinMode (Echo1, EINGANG); PinMode (Trigger2, AUSGANG); pinMode (echo2, EINGANG); }/*###Funktion zum Berechnen der Distanz###*/void compute_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() { //unendliche loopycalculate_distance(trigger1,echo1);distL =dist; // Abstand des linken Sensors berechnen_abstand (trigger2, echo2); distR =dist; // Abstand des rechten Sensors abrufen // Pause-Modi -Holdif ((distL>40 &&distR>40) &&(distL <60 &&distR<60)) //Erkenne beide Hände {Serial.println("Play/Pause"); delay (500);}calculate_distance(trigger1,echo1);distL =dist;calculate_distance(trigger2,echo2);distR =dist;//Control Modes//Lock Left - Control Modeif (distL>=13 &&distL<=17) { Verzögerung (100); // Handhaltezeit berechnen_distanz (trigger1, echo1); distL =dist; if (distL>=13 &&distL<=17) {Serial.println("Left Locked"); while(distL<=40) {calcul_distance(trigger1,echo1); distL =dist; if (distL<10) //Hand eingeschoben {Serial.println ("Volumen erhöht"); Verzögerung (300);} if (distL>20) // Hand herausgezogen {Serial.println ("Volume Decreased"); delay (300);} } }} // Rechts sperren - Kontrollmodusif (distR>=13 &&distR<=17){ delay(100); // Handhaltezeit berechnen_distanz (trigger2, echo2); distR =dist; if (distR>=13 &&distR<=17) {Serial.println("Rechts gesperrt"); while(distR<=40) {calcul_distance(trigger2,echo2); distR =dist; if (distR<10) //Rechte Hand gedrückt in {Serial.println ("Rewind"); Verzögerung (300);} if (distR>20) //Rechte Hand herausgezogen {Serial.println ("Forward"); Verzögerung (300);} }}}verzögerung (200);} 

Wenn Sie den Arduino-Code lesen, werden Sie 5 Befehle beobachten, die bestimmte Tastaturfunktionen steuern, um die gewünschte Aufgabe zu erfüllen.

arduino_pythogui.ino Herunterladen

arduino_pythogui.ino

Schritt 6:Python-Code

Als erstes brauchen wir ein einfaches Programm, um Python dazu zu bringen, Daten über den seriellen Port zu senden.

Serielle importieren #Serielle importiert für serielle KommunikationImportzeit #Erforderlich, um Verzögerungsfunktionen zu verwendenimport pyautogui #Erforderlich, um Aktionen auszuführenArduinoSerial =serial.Serial('com15',9600) #Serielles Port-Objekt namens arduinoSerialDatatime.sleep (2 .) erstellen ) #warten Sie 2 Sekunden, bis die Kommunikation aufgebaut ist während 1:eingehend =str (ArduinoSerial.readline()) #die seriellen Daten lesen und als Zeilendruck ausgeben eingehend wenn 'Play/Pause' in eingehend:pyautogui.typewrite([ 'Leerzeichen'], 0.2) bei 'Zurückspulen' bei eingehenden:pyautogui.hotkey('ctrl', 'links') bei 'Vorwärts' bei eingehenden:pyautogui.hotkey('ctrl', 'rechts') bei 'Volumen erhöht' in eingehend:pyautogui.hotkey('ctrl', 'down') wenn 'Volumen verringert' in eingehend:pyautogui.hotkey('ctrl', 'up') eingehend =""; 

Code

  • Code-Snippet Nr. 5
  • Code-Snippet #6
Code-Snippet #5Klartext
const int trigger1 =2; // Trigger-Pin des 1. Sesnorconst int echo1 =3; // Echo-Pin des 1. Sesnorconst int trigger2 =4; // Trigger-Pin des 2. Sesnorconst int echo2 =5; // Echo-Pin des 2. Sesnorlong time_taken;int dist,distL,distR;void setup () {Serial.begin (9600); pinMode (Trigger1, AUSGANG); PinMode (Echo1, EINGANG); PinMode (Trigger2, AUSGANG); pinMode (echo2, EINGANG); }/*###Funktion zum Berechnen der Distanz###*/void compute_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() { //unendliche loopycalculate_distance(trigger1,echo1);distL =dist; // Abstand des linken Sensors berechnen_abstand (trigger2, echo2); distR =dist; // Abstand des rechten Sensors abrufen // Pause-Modi -Holdif ((distL>40 &&distR>40) &&(distL <60 &&distR<60)) //Erkenne beide Hände {Serial.println("Play/Pause"); delay (500);}calculate_distance(trigger1,echo1);distL =dist;calculate_distance(trigger2,echo2);distR =dist;//Control Modes//Lock Left - Control Modeif (distL>=13 &&distL<=17) { Verzögerung (100); // Handhaltezeit berechnen_distanz (trigger1, echo1); distL =dist; if (distL>=13 &&distL<=17) {Serial.println("Left Locked"); while(distL<=40) {calcul_distance(trigger1,echo1); distL =dist; if (distL<10) //Hand eingeschoben {Serial.println ("Volumen erhöht"); Verzögerung (300);} if (distL>20) // Hand herausgezogen {Serial.println ("Volume Decreased"); delay (300);} } }} // Rechts sperren - Kontrollmodusif (distR>=13 &&distR<=17){ delay(100); // Handhaltezeit berechnen_distanz (trigger2, echo2); distR =dist; if (distR>=13 &&distR<=17) {Serial.println("Rechts gesperrt"); while(distR<=40) {calcul_distance(trigger2,echo2); distR =dist; if (distR<10) //Rechte Hand gedrückt in {Serial.println ("Rewind"); Verzögerung (300);} if (distR>20) //Rechte Hand herausgezogen {Serial.println ("Forward"); Verzögerung (300);} }}}Verzögerung (200);}
Code-Snippet #6Kurztext
import serial #Serial importiert für die serielle KommunikationImportzeit #Erforderlich, um Verzögerungsfunktionen zu verwendenimport pyautogui #Erforderlich, um Aktionen auszuführenArduinoSerial =serial.Serial('com15',9600) #Erzeuge ein serielles Port-Objekt namens arduinoSerialDatatime.sleep(2) #wait für 2 Sekunden, damit die Kommunikation aufgebaut wird während 1:eingehend =str (ArduinoSerial.readline()) #die seriellen Daten lesen und als Zeilendruck ausgeben eingehend wenn 'Play/Pause' in eingehend:pyautogui.typewrite(['space' ]. pyautogui.hotkey('ctrl', 'down') if 'Volume Decreased' in Incoming:pyautogui.hotkey('ctrl', 'up') Incoming ="";

Herstellungsprozess

  1. Erstellen von Monitor-Ambilight mit Arduino
  2. Universelle Fernbedienung mit Arduino, 1Sheeld und Android
  3. DIY-Voltmeter mit Arduino und Smartphone
  4. Einsatz des IoT zur Fernsteuerung eines Roboterarms
  5. Frequenz- und Duty-Cycle-Messung mit Arduino
  6. Steuern Sie Arduino Rover mit Firmata und Xbox One-Controller
  7. Bewegungssensor-Wasserpistole
  8. Steuerung der LED-Helligkeit mit Bolt und Arduino
  9. Einfacher und intelligenter Roboterarm mit Arduino
  10. Volle Kontrolle über Ihren Fernseher mit Alexa und Arduino IoT Cloud