Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Geweldige besturingscomputer met handbeweging en Arduino

Componenten en benodigdheden

Arduino UNO
× 1
Ultrasone sensor - HC-SR04 (algemeen)
× 2
Jumperdraden (algemeen)
× 1

Apps en online services

Arduino IDE
Python IDLE
PySerial-bibliotheek
Pyautogui-bibliotheek

Over dit project

In dit project gaan we leren hoe we gebarengestuurde laptops of computers kunnen bouwen. Het is gebaseerd op het gebruik van de combinatie van Arduino en Python.

In plaats van een toetsenbord, muis of joystick te gebruiken, kunnen we onze handgebaren gebruiken om bepaalde functies van een computer te bedienen, zoals het afspelen/pauzeren van een video, naar links/rechts bewegen in een fotodiavoorstelling, omhoog/omlaag scrollen in een webpagina en veel meer. Daarom heb ik besloten om VLC Media Player te bedienen als een handgebarenproject.

Het idee achter het project is vrij eenvoudig door twee ultrasone sensoren (HC-SR04) met Arduino te gebruiken. We plaatsen de twee sensoren boven op een laptopscherm en berekenen de afstand tussen de hand en de sensor. Rekening houdend met de informatie van Arduino die via de seriële poort naar Python wordt gestuurd, wordt deze informatie vervolgens gelezen door Python die op de computer draait om bepaalde acties uit te voeren.

Hardwarecomponenten:

  • Arduino
  • Twee ultrasone sensoren (HC-SR04)
  • Sommige draden

Software-apps:

  • Arduino IDE
  • Python IDLE
  • PySerial-bibliotheek (we zullen gebruiken om te communiceren met seriële poorten).
  • PyAutogui-bibliotheek (we zullen gebruiken om acties uit te voeren).

Dus ik neem aan dat je de Python- en PySerial-bibliotheek al hebt geïnstalleerd en een aantal basisprojecten met succes hebt uitgevoerd. Zo niet, maak je geen zorgen; Ik raad je aan om mijn vorige tutorial te volgen (Arduino programmeren met Python). Ook als je kennis wilt maken met de Ultrasone Sensor kun je (hier) een kijkje nemen.

Stap 1:Bekijk de video voor meer details

Stap 2:Handgebaren Doel

Hieronder volgen de handgebaren met 5 commando's die ik heb geprogrammeerd voor demonstratiedoeleinden.

  • Gebaar uit de eerste hand: Hiermee kunnen we VLC 'afspelen/pauzeren' door de twee handen op een bepaalde afstand voor de rechter/linker ultrasone sensor te plaatsen.
  • Tweede gebaar: Hiermee kunnen we de video 'terugspoelen' door een hand op een bepaalde afstand voor de linkersensor te plaatsen.
  • Derde gebaar: Hiermee kunnen we de video 'doorsturen' door een hand op een bepaalde afstand voor de rechtersensor te plaatsen.
  • Voorwaartse beweging: Hiermee kunnen we het 'volume verhogen' van de video door een hand op een bepaalde afstand voor de linkersensor te plaatsen en weg van de sensor te gaan.
  • Vijfde gebaar: hiermee kunnen we het 'volume verlagen' van de video door een hand op een bepaalde afstand voor de linkersensor te plaatsen en dicht bij de sensor te komen.

Stap 3:Schematisch

Het schema is vrij eenvoudig, je moet gewoon de onderstaande instructies volgen. Elke sensor heeft dus 4 pinnen:

  • Vcc - deze pin is verbonden met 5V+.
  • Trig - u moet deze pin in uw programma definiëren.
  • Echo - deze pin is hetzelfde als Trig, je moet hem ook definiëren.
  • GND - deze pin is verbonden met aarde.

Stap 4:Python programmeren

1. Installeer Python IDLE

U kunt deze stap overslaan als u Python IDLE al op uw computer hebt geïnstalleerd. Zo ja, ga dan naar stap 2 of bekijk de volgende instructies.

  • Ga naar de Python-website en download deze (hier).
  • Als je klaar bent, ga je verder met de installatie door de map te behouden waarin de python standaard wordt geïnstalleerd.

OPMERKING:zelfs als uw computer op 64-bits werkt, kunt u 32-bits Python zelf gebruiken vanwege het gebrek aan compatibiliteit met Arduino-bibliotheken.

2. Installeer de PySerial-bibliotheek

PySerial is een Python API-module die wordt gebruikt om seriële gegevens naar Arduino of een andere microcontroller te lezen en te schrijven. Om op Windows te installeren, gaat u naar de downloadpagina van PySerial en volgt u de onderstaande stappen:

  • Download de PySerial via de bovenstaande link.
  • Installeer het door de instelling als standaard te houden. U moet er zeker van zijn dat Pyserial correct werkte. Om dit te doen; je typt in:
serienummer importeren 

Als je geen enkele fout bent tegengekomen, zit je goed. Anders raad ik je aan om je installatie en Python IDLE-extensie te controleren.

3. Installeer de PyAutogui-bibliotheek

Het doel van PyAutoGUI is om een ​​platformonafhankelijke Python-module te bieden voor GUI-automatisering voor mensen. De API is ontworpen om zo eenvoudig mogelijk te zijn met verstandige standaardinstellingen. Volg de onderstaande stappen om pyautogui voor Windows te installeren. (Om deze stappen te volgen zou u Python IDLE al moeten hebben geïnstalleerd.)

Als je andere platforms gebruikt, raad ik je aan om hier een kijkje te nemen.

  • Open Windows-opdracht
  • Typ de volgende opdracht in
cd C:\Python27 
  • Vervolgens typ je:
python –m pip install –upgrade pip 
  • Het laatste commando is:
python –m pip install pyautogui 

OPMERKING:om er zeker van te zijn dat pyautogui correct werkte, typt u het volgende in:

import pyautogui 

Als je geen enkele fout bent tegengekomen, zit je goed.

Stap 5:Arduino-code

Om vanuit Python een verbinding met de Arduino tot stand te brengen, moeten we eerst uitzoeken op welke COM-poort de Arduino staat. Deze taak wordt eenvoudig gemaakt door de programmeeromgeving van Ardunio, zoals ik op de bovenstaande afbeelding heb opgemerkt.

const int trigger1 =2; //Triggerpin van 1e Sesnorconst int echo1 =3; // Echo-pin van 1e Sesnorconst int trigger2 =4; //Triggerpin van 2e Sesnorconst int echo2 =5;//Echopin van 2e Sesnorlong time_taken;int dist,distL,distR;void setup() {Serial.begin(9600); pinMode (trigger1, UITGANG); pinMode (echo1, INPUT); pinMode (trigger2, UITGANG); pinMode (echo2, INPUT); }/*###Functie om afstand te berekenen###*/void calculator_distance(int trigger, int echo){digitalWrite(trigger, LOW);delayMicroseconds(2);digitalWrite(trigger, HIGH);delayMicroseconds(10);digitalWrite (trigger, LAAG); time_taken =pulseIn(echo, HIGH);dist=time_taken*0.034/2;if (dist>60)dist =60;}void loop() { //infinite loopycalculate_distance(trigger1,echo1);distL =afst; // haal afstand van linker sensorcalculate_distance (trigger2, echo2); distR =dist; //afstand van rechter sensor//Pauzemodi -Holdif ((distL>40 &&distR>40) &&(distL <60 &&distR<60)) // Detecteer beide handen {Serial.println ("Play/Pause"); vertraging (500);}calculate_distance(trigger1,echo1);distL =dist;calculate_distance(trigger2,echo2);distR =dist;//Control Modes//Lock Left - Control Modeif (distL>=13 &&distL<=17) { vertraging (100); // Hand Hold Time berekenen_afstand (trigger1, echo1); distL =dist; if (distL>=13 &&distL<=17) { Serial.println ("Links vergrendeld"); while(distL<=40) {calc_distance(trigger1,echo1); distL =dist; if (distL<10) // Hand ingedrukt {Serial.println ("Volume verhoogd"); vertraging (300);} if (distL>20) // Hand uitgetrokken {Serial.println ("Volume verminderd"); vertraging (300);} } }}//Lock Right - Control Modeif (distR>=13 &&distR<=17){ delay(100); // Hand Hold Time calculator_distance (trigger2, echo2); distR =dist; if (distR>=13 &&distR<=17) { Serial.println ("Right Locked"); while(distR<=40) { berekenen_afstand (trigger2, echo2); distR =dist; if (distR<10) //Rechterhand ingedrukt {Serial.println ("Terugspoelen"); vertraging (300);} if (distR>20) //Rechterhand uitgetrokken {Serial.println ("Forward"); vertraging (300);} }}}vertraging (200);} 

Als u de Arduino-code leest, ziet u 5 commando's die bepaalde toetsenbordfuncties besturen om de vereiste taak te volbrengen.

arduino_pythogui.ino Downloaden

arduino_pythogui.ino

Stap 6:Python-code

Ten eerste hebben we een eenvoudig programma nodig om de Python gegevens over de seriële poort te laten verzenden.

importeer seriële #Serial geïmporteerd voor seriële communicatieimporttijd #Vereist om vertragingsfuncties te gebruiken import pyautogui #Vereist om acties uit te voerenArduinoSerial =serial.Serial('com15',9600) #Maak een seriële poortobject genaamd arduinoSerialDatatime.sleep(2 ) #wacht 2 seconden totdat de communicatie tot stand is gebracht terwijl 1:inkomend =str (ArduinoSerial.readline()) #lees de seriële gegevens en print deze als regelafdruk inkomend als 'Play/Pause' in inkomend:pyautogui.typewrite([ 'space'], 0.2) als 'Terugspoelen' in inkomend:pyautogui.hotkey('ctrl', 'left') als 'Forward' in inkomend:pyautogui.hotkey('ctrl', 'right') als 'Volume verhoogd' in inkomend:pyautogui.hotkey('ctrl', 'down') indien 'Volume verlaagd' in inkomend:pyautogui.hotkey('ctrl', 'up') inkomend =""; 

Code

  • Codefragment #5
  • Codefragment #6
Codefragment #5Platte tekst
const int trigger1 =2; //Triggerpin van 1e Sesnorconst int echo1 =3; // Echo-pin van 1e Sesnorconst int trigger2 =4; //Triggerpin van 2e Sesnorconst int echo2 =5;//Echopin van 2e Sesnorlong time_taken;int dist,distL,distR;void setup() {Serial.begin(9600); pinMode (trigger1, UITGANG); pinMode (echo1, INPUT); pinMode (trigger2, UITGANG); pinMode (echo2, INPUT); }/*###Functie om afstand te berekenen###*/void calculator_distance(int trigger, int echo){digitalWrite(trigger, LOW);delayMicroseconds(2);digitalWrite(trigger, HIGH);delayMicroseconds(10);digitalWrite (trigger, LAAG); time_taken =pulseIn(echo, HIGH);dist=time_taken*0.034/2;if (dist>60)dist =60;}void loop() { //infinite loopycalculate_distance(trigger1,echo1);distL =afst; // haal afstand van linker sensorcalculate_distance (trigger2, echo2); distR =dist; //afstand van rechter sensor//Pauzemodi -Holdif ((distL>40 &&distR>40) &&(distL <60 &&distR<60)) // Detecteer beide handen {Serial.println ("Play/Pause"); vertraging (500);}calculate_distance(trigger1,echo1);distL =dist;calculate_distance(trigger2,echo2);distR =dist;//Control Modes//Lock Left - Control Modeif (distL>=13 &&distL<=17) { vertraging (100); // Hand Hold Time berekenen_afstand (trigger1, echo1); distL =dist; if (distL>=13 &&distL<=17) { Serial.println ("Links vergrendeld"); while(distL<=40) {calc_distance(trigger1,echo1); distL =dist; if (distL<10) // Hand ingedrukt {Serial.println ("Volume verhoogd"); vertraging (300);} if (distL>20) // Hand uitgetrokken {Serial.println ("Volume verminderd"); vertraging (300);} } }}//Lock Right - Control Modeif (distR>=13 &&distR<=17){ delay(100); // Hand Hold Time calculator_distance (trigger2, echo2); distR =dist; if (distR>=13 &&distR<=17) { Serial.println ("Right Locked"); while(distR<=40) { berekenen_afstand (trigger2, echo2); distR =dist; if (distR<10) //Rechterhand ingedrukt {Serial.println ("Rewind"); vertraging (300);} if (distR>20) //Rechterhand uitgetrokken {Serial.println ("Forward"); vertraging (300);} }}}vertraging (200);}
Codefragment #6Platte tekst
import serieel #Serial geïmporteerd voor seriële communicatie importtijd #Vereist om vertragingsfuncties te gebruiken import pyautogui #Vereist om acties uit te voerenArduinoSerial =serial.Serial('com15',9600) #Maak een seriële poortobject genaamd arduinoSerialDatatime.sleep(2) #wait gedurende 2 seconden om de communicatie tot stand te brengenterwijl 1:inkomend =str (ArduinoSerial.readline()) #lees de seriële gegevens en print deze als regelafdruk inkomend als 'Play/Pause' in inkomend:pyautogui.typewrite(['space' ], 0.2) als 'Terugspoelen' in inkomend:pyautogui.hotkey('ctrl', 'left') als 'Forward' in inkomend:pyautogui.hotkey('ctrl', 'right') als 'Volume verhoogd' in inkomend:pyautogui.hotkey('ctrl', 'down') indien 'Volume verlaagd' in inkomend:pyautogui.hotkey('ctrl', 'up') inkomend ="";

Productieproces

  1. Maak Monitor Ambilight met Arduino
  2. Universele afstandsbediening met Arduino, 1Sheeld en Android
  3. DIY voltmeter met Arduino en smartphone
  4. Ioed gebruiken om een ​​robotarm op afstand te bedienen
  5. Frequentie- en werkcyclusmeting met Arduino
  6. Bedien Arduino Rover met Firmata en Xbox One Controller
  7. Bewegingssensor-waterpistool
  8. LED-helderheid regelen met Bolt en Arduino
  9. Eenvoudige en slimme robotarm met Arduino
  10. Volledige controle over uw tv met Alexa en Arduino IoT Cloud
  11. FM-radio met Arduino en RDA8057M