- Forutsetninger:
- Konseptet bak prosjektet:
- Kretsdiagram:
- Programmering av Arduino:
- Programmering av Python:
- Geststyrt datamaskin i aksjon:
Nylig Gesture-kontrollerte bærbare datamaskiner eller datamaskiner blir veldig berømte. Denne teknikken kalles Leap-bevegelse som gjør det mulig for oss å kontrollere visse funksjoner på datamaskinen / bærbare datamaskinen ved å bare vinke hånden foran den. Det er veldig kult og morsomt å gjøre det, men disse bærbare datamaskinene er virkelig priset veldig høyt. Så i dette prosjektet, la oss prøve å bygge vår egen Gesture Control Laptop / Computer ved å kombinere kraften til Arduino og Python.
Vi vil bruke to ultralydssensorer for å bestemme håndens posisjon og kontrollere en mediaspiller (VLC) basert på posisjonen. Jeg har brukt dette til demonstrasjon, men når du først har forstått prosjektet, kan du gjøre alt ved å bare endre noen kodelinjer og kontrollere favorittapplikasjonen din på din favoritt måte.
Forutsetninger:
Vi har allerede dekket noen få prosjekter som kombinerer Arduino med Python. Så jeg antar at du allerede har installert Python og dets serielle bibliotek og har prøvd noen få grunnleggende prosjekter som blinkende LED. Hvis ikke, ikke bekymre deg, du kan falle tilbake til denne Arduino-Python Led Controlling-opplæringen og komme sammen med den. Så sørg for at du har installert Python og pyserial bibliotek før du fortsetter.
Konseptet bak prosjektet:
Konseptet bak prosjektet er veldig enkelt. Vi vil plassere to ultralydssensorer (US) på toppen av skjermen og vil lese avstanden mellom skjermen og hånden vår ved hjelp av Arduino, basert på denne verdien av avstanden vil vi utføre visse handlinger. For å utføre handlinger på datamaskinen vår bruker vi Python pyautogui- biblioteket. Kommandoene fra Arduino sendes til datamaskinen via seriell port (USB). Disse dataene blir deretter lest av python som kjører på datamaskinen, og basert på lesedataene vil en handling bli utført.
Kretsdiagram:
For å kontrollere PC-en med håndbevegelser, er det bare å koble de to ultralydsensorene til Arduino. Vi vet at amerikanske sensorer fungerer med 5V, og de drives derfor av den innebygde spenningsregulatoren til Arduino. Arduino kan kobles til PC / Laptop for å drive modulen og også for seriell kommunikasjon. Når tilkoblingene er gjort, plasser dem på skjermen som vist nedenfor. Jeg har brukt et dobbelt sidetape til å feste det på skjermen min, men du kan bruke din egen kreativitet. Etter å ha sikret den et sted kan vi fortsette med programmeringen.
Programmering av Arduino:
Arduinoen skal være programmert til å lese håndavstanden fra den amerikanske sensoren. Det komplette programmet er gitt på slutten av denne siden; rett nedenfor har jeg gitt forklaringen på programmet. Hvis du er ny på Ultralydsensor, er det bare å gå gjennom Arduino & Ultralydssensorbasert avstandsmåling.
Ved å lese verdien av avstand kan vi komme til bestemte handlinger som skal kontrolleres med bevegelser, for eksempel har jeg i dette programmet programmert 5 handlinger som en demo.
Handling 1: Når begge hendene er plassert foran sensoren på en bestemt langt avstand, skal videoen i VLC-spilleren spille / pause.
Handling 2: Når høyre hånd er plassert foran sensoren på en bestemt langt avstand, skal videoen spole frem ett trinn.
Handling 3: Når venstre hånd er plassert foran sensoren på en bestemt langt avstand, bør videoen spole tilbake ett trinn.
Handling 4: Når høyre hånd er plassert foran sensoren på en bestemt nær avstand, og hvis den flyttes mot sensoren, skal videoen spole fremover, og hvis den flyttes bort, skal videoen spole tilbake.
Handling 5: Når venstre hånd er plassert foran sensoren på en bestemt nær avstand, og hvis den flyttes mot sensoren, vil volumet på videoen øke og hvis det flyttes bort, bør volumet reduseres.
La oss se hvordan programmet er skrevet for å utføre handlingene ovenfor. Så, som alle programmer, begynner vi med å definere I / O-pinnene som vist nedenfor. De to amerikanske sensorene er koblet til digitale pinner 2,3,4 og 5 og drives av + 5V pin. Utløserpinnene er utgangspinner og ekkopinner er inngangspinner.
Seriekommunikasjonen mellom Arduino og python foregår med en overføringshastighet på 9600.
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 void setup () {Serial.begin (9600); pinMode (trigger1, OUTPUT); pinMode (echo1, INPUT); pinMode (trigger2, OUTPUT); pinMode (echo2, INPUT); }
Vi må beregne avstanden mellom sensoren og hånden hver gang før vi avslutter en handling. Så vi må gjøre det mange ganger, noe som betyr at denne koden skal brukes som en funksjon. Vi har skrevet en funksjon kalt beregningsavstand () som vil gi oss avstanden mellom sensoren og hånden.
/ * ### Funksjon for å beregne avstand ### * / ugyldig beregne avstand (int utløser, int ekko) {digitalWrite (utløser, LAV); delayMicroseconds (2); digitalWrite (trigger, HIGH); delayMicroseconds (10); digitalWrite (utløser, LAV); time_taken = pulseIn (ekko, HIGH); dist = time_taken * 0,034 / 2; hvis (dist> 50) dist = 50; }
Inne vår viktigste løkke vi se etter verdien av avstanden og utføre handlingene som er nevnt ovenfor. Før det bruker vi to variabler distL og distR som blir oppdatert med gjeldende avstandsverdi.
beregne avstand (trigger1, echo1); distL = dist; // få avstand til venstre sensor beregne avstand (trigger2, echo2); distR = dist; // få avstand fra høyre sensor
Siden vi vet avstanden mellom begge sensorene, kan vi nå sammenligne den med forhåndsdefinerte verdier og komme til bestemte handlinger. For eksempel hvis begge hendene er plassert i en avstand på 40 mc så spiller / stopper vi videoen. Her vil ordet "Play / Pause" bli sendt ut gjennom seriell port
hvis ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Oppdag begge hender {Serial.println ("Spill / pause"); forsinkelse (500);}
Hvis høyre hånd alene er plassert før modulen, spoler vi videoen frem ett trinn, og hvis den er venstre hånd spoler vi tilbake ett trinn. Basert på handlingen vil ordet “Spole tilbake” eller “Fremover” sendes ut gjennom serieporten
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);}
Mot detaljert kontroll av volum og spor bruker vi en annen metode for å forhindre falske utløsere. For å kontrollere volumet må vi plassere venstre hånd ca. I en avstand på 15 cm kan du enten flytte den mot sensoren for å redusere volumet for å flytte den bort fra sensoren for å øke volumet. Koden for det samme er vist nedenfor. Basert på handlingen, her vil ordet “Vup” eller “Vdown” bli sendt ut gjennom seriell port
// Lås venstre - Kontrollmodus hvis (distL> = 13 && distL <= 17) {forsinkelse (100); // Hand Hold Time-beregningsavstand (trigger1, echo1); distL = dist; hvis (distL> = 13 && distL <= 17) {Serial.println ("Venstre låst"); mens (distL <= 40) {beregne_avstand (trigger1, ekko1); distL = dist; hvis (distL <10) // Hånd presset inn {Serial.println ("Vup"); forsinkelse (300);} hvis (distL> 20) // Hånd trukket ut {Serial.println ("Vdown"); forsinkelse (300);}}}}
Vi kan bruke den samme metoden for sensoren på høyre side også for å kontrollere sporet av videoen. Det vil si at hvis vi beveger høyre hånd mot sensoren, vil den spole fremover og hvis du flytter den bort fra sensoren, vil den spole tilbake filmen. Basert på handlingen vil ordet “Spole tilbake” eller “Fremover” sendes ut gjennom serieporten
Du kan nå lese over hele koden for denne geststyrte PC-en som er gitt på slutten av siden, og prøve å understreke den som en helhet og deretter kopiere den til din Arduino IDE.
Programmering av Python:
Python-programmet for dette prosjektet er veldig enkelt. Vi må bare opprette en seriell kommunikasjon med Arduino gjennom riktig baudrate og deretter utføre noen grunnleggende tastaturhandlinger. Det første trinnet med python ville være å installere p yautogui- modulen. Sørg for at du følger dette trinnet fordi programmet ikke fungerer uten pyautogui-modulen.
Installere pyautogui-modul for Windows:
Følg trinnene nedenfor for å installere pyautogui for windows. Hvis du bruker andre plattformer, vil trinnene også være mer eller mindre like. Forsikre deg om at datamaskinen / den bærbare datamaskinen er koblet til internett og fortsett med trinnene nedenfor
Trinn 1: Åpne Windows Command prompt og endre katalogen til mappen der du har installert python. Som standard skal kommandoen være
cd C: \ Python27
Trinn 2: Bruk kommandoen python –m pip install –upgrade pip i python-katalogen din for å oppgradere pipen din. Pip er et verktøy i python som hjelper oss å installere python-moduler enkelt. Når denne modulen er oppgradert (som vist på bildet nedenfor), fortsett til neste trinn.
python –m pip install –upgrade pip
Trinn 3: Bruk kommandoen " python – m pip install pyautogui " for å installere pyautogui-modulen. Når prosessen er vellykket, bør du se en skjerm som ligner på dette nedenfor.
python –m pip install –upgrade pip
Nå som pyautogui- modulen og pyserial- modulen (installert i forrige opplæring) er vellykket installert med python, kan vi fortsette med python-programmet. Den komplette pythonkoden er gitt på slutten av opplæringen, men forklaringen på det samme er som følger.
La oss importere alle de tre nødvendige modulene for dette prosjektet. De er pyautogui, seriell python og tid.
importer seriell #Serie importert for seriell kommunikasjon importtid # Nødvendig for å bruke forsinkelsesfunksjoner import pyautogui
Deretter etablerer vi forbindelse med Arduino gjennom COM-port. På datamaskinen min er Arduino koblet til COM 18. Bruk enhetsbehandling for å finne hvilken COM-port Arduino er koblet til, og korriger følgende linje tilsvarende.
ArduinoSerial = serial.Serial ('com18', 9600) #Create Serial port object called arduinoSerialData time.sleep (2) # vent i 2 sekunder for at kommunikasjonen skal bli etablert
Inne i den uendelige mens sløyfen lytter vi gjentatte ganger til COM-porten og sammenligner stikkordene med eventuelle forhåndsdefinerte verk og lager tastetrykk deretter.
mens 1: innkommende = str (ArduinoSerial.readline ()) #leser seriedataene og skriver dem ut som linjeutskrift innkommende hvis 'Spill / Pause' i innkommende: pyautogui.typewrite (, 0.2) hvis 'Spol tilbake' i innkommende: pyautogui. hurtigtast ('ctrl', 'venstre') hvis 'Videresend' i innkommende: pyautogui.hotkey ('ctrl', 'høyre') hvis 'Vup' i innkommende: pyautogui.hotkey ('ctrl', 'ned') hvis ' Vdown 'i innkommende: pyautogui.hotkey (' ctrl ',' up ')
Som du kan se, for å trykke på en tast, må vi bare bruke kommandoen "pyautogui.typewrite (, 0.2)" som vil trykke nøkkelen i 0,2 sek. Hvis du trenger hurtigtaster som ctrl + S, kan du bruke hurtigtastkommandoen "pyautogui.hotkey ('ctrl', 's')".
Jeg har brukt disse kombinasjonene fordi de fungerer på VLC mediespiller, du kan tilpasse dem på hvilken som helst måte du vil lage dine egne applikasjoner for å kontrollere hva som helst på datamaskinen med bevegelser.
Geststyrt datamaskin i aksjon:
Opprett tilkoblingene som definert ovenfor, og last opp Arduino-koden på Arduino-kortet. Bruk deretter python-skriptet nedenfor og start programmet på din bærbare / datamaskin.
Nå kan du spille hvilken som helst film på datamaskinen din ved hjelp av VLC mediaspiller og bruke hånden til å kontrollere filmen som vist i videoen nedenfor.
Håper du forsto prosjektet og likte å leke med det. Dette er bare en demo, og du kan bruke kreativiteten din til å bygge mye mer kule gestkontrollerte ting rundt dette. Gi meg beskjed om dette var nyttig og hva du vil lage ved hjelp av dette i kommentarfeltet, og jeg vil gjerne vite det.