- Forudsætninger:
- Koncept bag projektet:
- Kredsløbsdiagram:
- Programmering af din Arduino:
- Programmering af din Python:
- Gestusstyret computer i aktion:
For nylig er gesturstyrede bærbare computere eller computere meget berømte. Denne teknik kaldes Leap motion, som gør det muligt for os at kontrollere bestemte funktioner på vores computer / bærbare computer ved blot at vippe vores hånd foran den. Det er meget sejt og sjovt at gøre det, men disse laptops er virkelig meget høje priser. Så i dette projekt, lad os prøve at opbygge vores egen Gesture control Laptop / Computer ved at kombinere kraften fra Arduino og Python.
Vi bruger to ultralydssensorer til at bestemme vores hånds position og styre en medieafspiller (VLC) baseret på positionen. Jeg har brugt dette til demonstration, men når du først har forstået projektet, kan du gøre alt ved blot at ændre nogle få kodelinjer og kontrollere din yndlingsapplikation på din favorit måde.
Forudsætninger:
Vi har allerede dækket nogle få projekter, der kombinerer Arduino med Python. Så jeg antager, at du allerede har installeret Python og dets serielle bibliotek og med succes har afprøvet få grundlæggende projekter som blinkende LED. Hvis ikke, skal du ikke bekymre dig, du kan falde tilbage til denne Arduino-Python Led Controlling-tutorial og komme sammen med det. Så sørg for at du har installeret Python og pyserialt bibliotek, før du fortsætter.
Koncept bag projektet:
Konceptet bag projektet er meget simpelt. Vi placerer to ultralydssensorer (USA) oven på vores skærm og læser afstanden mellem skærmen og vores hånd ved hjælp af Arduino, baseret på denne afstandsafstand vil vi udføre visse handlinger. For at udføre handlinger på vores computer bruger vi Python pyautogui- biblioteket. Kommandoerne fra Arduino sendes til computeren via seriel port (USB). Disse data læses derefter af python, der kører på computeren, og baseret på de læst data udføres en handling.
Kredsløbsdiagram:
For at kontrollere pc'en med håndbevægelser skal du bare forbinde de to ultralydssensorer med Arduino. Vi ved, at amerikanske sensorer arbejder med 5V, og de drives derfor af den indbyggede spændingsregulator i Arduino. Arduino kan tilsluttes pc'en / den bærbare computer til strømforsyning til modulet og også til seriel kommunikation. Når forbindelserne er færdige, skal du placere dem på din skærm som vist nedenfor. Jeg har brugt et dobbelt sidetape til at fastgøre det på min skærm, men du kan bruge din egen kreativitet. Efter at have sikret det et sted kan vi fortsætte med programmeringen.
Programmering af din Arduino:
Arduino skal være programmeret til at læse afstanden fra hånden fra den amerikanske sensor. Det komplette program findes i slutningen af denne side; lige nedenfor har jeg givet forklaringen på programmet. Hvis du er ny med Ultralydssensor, skal du bare gennemgå Arduino & Ultralydssensorbaseret afstandsmåling.
Ved at læse afstanden kan vi nå frem til bestemte handlinger, der skal styres med bevægelser, for eksempel har jeg i dette program programmeret 5 handlinger som en demo.
Handling 1: Når begge hænder er placeret foran sensoren i en bestemt fjern afstand, skal videoen i VLC-afspiller afspille / pause.
Handling 2: Når højre hånd placeres op foran sensoren i en bestemt fjern afstand, skal videoen spole fremad et trin.
Handling 3: Når venstre hånd er placeret op foran sensoren i en bestemt fjern afstand, skal videoen spole et trin tilbage.
Handling 4: Når højre hånd er placeret foran sensoren i en bestemt nær afstand, og hvis den bevæges mod sensoren, skal videoen spole fremad, og hvis den flyttes væk, skal videoen spoles tilbage.
Handling 5: Når venstre hånd placeres op foran sensoren i en bestemt tæt afstand, og hvis den bevæges mod sensoren, skal lydstyrken på videoen øges, og hvis den flyttes væk, skal lydstyrken falde.
Lad os se, hvordan programmet er skrevet til at udføre ovenstående handlinger. Så som alle programmer starter vi med at definere I / O-benene som vist nedenfor. De to amerikanske sensorer er tilsluttet digitale stifter 2,3,4 og 5 og får strøm fra + 5V stift. Triggerstifterne er outputstifter og Echo-stifter er inputstifter.
Seriekommunikationen mellem Arduino og python finder sted med en baudhastighed på 9600.
const int trigger1 = 2; // Trigger pin of 1st Sesnor const int echo1 = 3; // Echo pin af 1. Sesnor const int trigger2 = 4; // Trigger pin of 2nd Sesnor const int echo2 = 5; // Echo pin of 2nd Sesnor void setup () {Serial.begin (9600); pinMode (trigger1, OUTPUT); pinMode (echo1, INPUT); pinMode (trigger2, OUTPUT); pinMode (echo2, INPUT); }
Vi skal beregne afstanden mellem sensoren og hånden hver gang, før vi afslutter en handling. Så vi er nødt til at gøre det mange gange, hvilket betyder, at denne kode skal bruges som en funktion. Vi har skrevet en funktion ved navn beregningsafstand (), som returnerer os afstanden mellem sensoren og hånden.
/ * ### Funktion til beregning af afstand ### * / ugyldig beregningsafstand (int trigger, int echo) {digitalWrite (trigger, LOW); forsinkelseMikrosekunder (2); digitalWrite (trigger, HIGH); forsinkelseMikrosekunder (10); digitalWrite (trigger, LOW); time_taken = pulseIn (ekko, HIGH); dist = time_taken * 0,034 / 2; hvis (dist> 50) dist = 50; }
Inde i vores hovedsløjfe kontrollerer vi værdien af afstand og udfører de ovennævnte handlinger. Før det bruger vi to variabler distL og distR, der opdateres med den aktuelle afstandsværdi.
beregne afstand (trigger1, echo1); distL = dist; // få afstand til venstre sensor beregne afstand (trigger2, echo2); distR = dist; // få afstand til højre sensor
Da vi kender afstanden mellem begge sensorer, kan vi nu sammenligne den med foruddefinerede værdier og nå frem til bestemte handlinger. For eksempel hvis begge hænder er placeret i en afstand på 40 mc, så afspiller / stopper vi videoen. Her vil ordet "Afspil / pause" blive sendt via den serielle port
hvis ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Registrer begge hænder {Serial.println ("Afspil / pause"); forsinkelse (500);}
Hvis højre hånd alene placeres foran modulet, spoler vi videoen fremad med et trin, og hvis den er venstre hånd, spoles vi tilbage med et trin. Baseret på handlingen sendes ordet "Spol tilbage" eller "Videresend" via den serielle port
if ((distL> 40 && distL <50) && (distR == 50)) // Detect Left Hand {Serial.println ("Rewind"); delay (500);} if ((distR> 40 && distR <50) && (distL == 50)) // Detect Right Hand {Serial.println ("Forward"); forsinkelse (500);}
Foe detaljeret kontrol af volumen og spor, vi bruger en anden metode til at forhindre falske udløsere. For at kontrollere lydstyrken skal vi placere venstre hånd ca. I en afstand på 15 cm kan du enten flytte den mod sensoren for at mindske lydstyrken for at flytte den væk fra sensoren for at øge lydstyrken. Koden for det samme er vist nedenfor. Baseret på handlingen vil ordet “Vup” eller “Vdown” her blive sendt via den serielle port
// Lås venstre - Kontroltilstand, hvis (distL> = 13 && distL <= 17) {forsinkelse (100); // Hand Hold Time-beregningsafstand (trigger1, echo1); distL = dist; hvis (distL> = 13 && distL <= 17) {Serial.println ("Venstre låst"); mens (distL <= 40) {beregner_afstand (trigger1, ekko1); distL = dist; hvis (distL <10) // Hånd skubbet ind {Serial.println ("Vup"); forsinkelse (300);} hvis (distL> 20) // Hånd trukket ud {Serial.println ("Vdown"); forsinkelse (300);}}}}
Vi kan også bruge den samme metode til sensoren til højre for at styre sporet af videoen. Det vil sige, hvis vi bevæger højre hånd mod sensoren, vil den spole hurtigt fremad, og hvis du flytter den væk fra sensoren, spoler den filmen tilbage. Baseret på handlingen sendes ordet "Spol tilbage" eller "Videresend" via den serielle port
Du kan nu læse den komplette kode for denne gestusstyrede pc, der er givet i slutningen af siden, og prøve at undervurdere den som en helhed og derefter kopiere den til din Arduino IDE.
Programmering af din Python:
Python-programmet til dette projekt er meget simpelt. Vi skal bare etablere en seriel kommunikation med Arduino gennem den korrekte baudrate og derefter udføre nogle grundlæggende tastaturhandlinger. Det første trin med python ville være at installere p yautogui- modulet. Sørg for at følge dette trin, fordi programmet ikke fungerer uden pyautogui-modulet.
Installation af pyautogui-modul til Windows:
Følg nedenstående trin for at installere pyautogui til windows. Hvis du bruger andre platforme, vil trinnene også være nogenlunde ens. Sørg for, at din computer / bærbare computer er tilsluttet internettet, og fortsæt med nedenstående trin
Trin 1: Åbn Windows Kommandoprompt, og skift biblioteket til den mappe, hvor du har installeret python. Som standard skal kommandoen være
cd C: \ Python27
Trin 2: Brug din kommando python –m pip install –upgrade pip i din python-mappe til at opgradere din pip. Pip er et værktøj i python, som hjælper os med at installere python-moduler let. Når dette modul er opgraderet (som vist på billedet nedenfor), fortsæt til næste trin.
python –m pip-installation –opgrader pip
Trin 3: Brug kommandoen “ python – m pip install pyautogui ” til at installere pyautogui-modulet. Når processen er vellykket, skal du se en skærm, der ligner denne nedenfor.
python –m pip-installation –opgrader pip
Nu hvor pyautogui- modulet og pyserialmodulet (installeret i den foregående tutorial) er vellykket installeret med python, kan vi fortsætte med python-programmet. Den komplette pythonkode gives i slutningen af vejledningen, men forklaringen på det samme er som følger.
Lad os importere alle de tre nødvendige moduler til dette projekt. De er pyautogui, seriel python og tid.
import seriel #Serie importeret til seriel kommunikation importtid # Kræves for at bruge forsinkelsesfunktioner import pyautogui
Dernæst opretter vi forbindelse til Arduino gennem COM-port. På min computer er Arduino tilsluttet COM 18. Brug enhedsadministrator til at finde ud af, hvilken COM-port din Arduino er tilsluttet, og korriger følgende linje i overensstemmelse hermed.
ArduinoSerial = serial.Serial ('com18', 9600) # Opret seriel portobjekt kaldet arduinoSerialData time.sleep (2) # vent i 2 sekunder for at kommunikationen bliver etableret
Inden i den uendelige mens sløjfe lytter vi gentagne gange til COM-porten og sammenligner nøgleordene med alle forud deficerede værker og trykker på tastaturet i overensstemmelse hermed.
mens 1: indkommende = str (ArduinoSerial.readline ()) #læs serielle data og udskriv dem som linieudskrivning indgående, hvis 'Afspil / pause' i indgående: pyautogui.typewrite (, 0.2) hvis 'Spol tilbage' i indgående: pyautogui. genvejstast ('ctrl', 'venstre') hvis 'Videresend' i indgående: pyautogui.hotkey ('ctrl', 'højre') hvis 'Vup' i indgående: pyautogui.hotkey ('ctrl', 'ned') hvis ' Vdown 'i indgående: pyautogui.hotkey (' ctrl ',' op ')
Som du kan se, for at trykke på en tast skal vi blot bruge kommandoen "pyautogui.typewrite (, 0.2)", som vil trykke på tastaturet i 0,2 sek. Hvis du har brug for genvejstaster som ctrl + S, kan du bruge genvejskommandoen "pyautogui.hotkey ('ctrl', 's')".
Jeg har brugt disse kombinationer, fordi de arbejder på VLC medieafspiller, du kan tilpasse dem på enhver måde, du kan lide at oprette dine egne applikationer til at styre noget i computeren med bevægelser.
Gestusstyret computer i aktion:
Opret forbindelserne som defineret ovenfor, og upload Arduino-koden på dit Arduino-kort. Brug derefter python-scriptet nedenfor og start programmet på din bærbare computer / computer.
Nu kan du afspille en hvilken som helst film på din computer ved hjælp af VLC medieafspiller og bruge din hånd til at kontrollere filmen som vist i videoen nedenfor.
Håber du forstod projektet og nød at lege med det. Dette er bare en demo, og du kan bruge din kreativitet til at opbygge meget mere seje gestusstyrede ting omkring dette. Lad mig vide, om dette var nyttigt, og hvad du vil oprette ved hjælp af dette i kommentarfeltet, og jeg vil med glæde vide det.