Hvordan laver man Arduino-baseret håndbevægelseskontrol af din computer?
Hand Gesture Control er ikke en ny ting. Vi har set mange robotter, der styres af håndbevægelser. Teknologi bevæger sig så hurtigt, at alt, hvad vi tænker på, allerede findes på markedet. Et meget interessant projekt er at styre din personlige computer eller den bærbare computer ved hjælp af et lille Microcontroller-kort kaldet Arduino Uno. Ved at bruge en Arduino kan vi udføre nogle enkle funktioner ved bare at vippe vores hånd i stedet for at bruge en mus eller tastaturet. Disse funktioner inkluderer glidning af billeder, rul op og ned på siderne, skift mellem fanerne i en webbrowser, afspil eller pause en video, skift mellem desktop-applikationer osv.
Hvordan udføres forskellige operationer på pc ved hjælp af håndbevægelser?
Nu som vi kender abstraktet af projektet, lad os gå videre og samle forskellige oplysninger for at begynde at arbejde. Vi vil først oprette en liste over komponenterne, derefter studere dem kort og derefter samle alle komponenterne for at skabe et fungerende system.
Trin 1: Samling af komponenterne
Den bedste metode til at starte ethvert projekt er at lave en liste over komponenter og gennemgå en kort undersøgelse af disse komponenter, fordi ingen vil holde sig midt i et projekt bare på grund af en manglende komponent. En liste over komponenter, som vi skal bruge i dette projekt, er angivet nedenfor:
Trin 2: Studere komponenterne
Da vi har en komplet liste over alle komponenterne. Lad os gå videre og gennemgå en kort undersøgelse af, hvordan alle komponenter fungerer.
Arduino Nano er et mikrocontrollerkort, der udfører forskellige operationer i forskellige kredsløb. Det kræver en C-kode der fortæller bestyrelsen, hvilke opgaver der skal udføres, og hvordan. Den har 13 digitale I / O-ben, hvilket betyder, at vi kan betjene 13 forskellige enheder. Arduino Nano har nøjagtig den samme funktionalitet som Arduino Uno, men i en ganske lille størrelse. Mikrocontrolleren på Arduino Nano-kortet er ATmega328p.Hvis du vil kontrollere mere end 13 enheder, skal du bruge Arduino Mega.
HC-SR04-kort er en ultralydssensor, der bruges til at bestemme afstanden mellem to objekter. Den består af en sender og en modtager. Senderen konverterer det elektriske signal til et ultralydssignal, og modtageren konverterer ultralydssignalet tilbage til det elektriske signal. Når senderen sender en ultralydsbølge, reflekteres den efter kollision med en bestemt genstand. Afstanden beregnes ved hjælp af den tid, det tager ultralydssignal at gå fra senderen og komme tilbage til modtageren.
Trin 3: Samling af komponenterne
Nu som vi kender hovedarbejdet af de komponenter, som vi skal bruge. Lad os begynde at samle komponenterne for at fremstille et færdigt produkt.
- Tilslut Vcc og jordstifter på begge ultralydssensorerne til 5V og jord på Arduino Nano-kortet. Trig- og ekko-stiften på den første ultralydssensor er forbundet til henholdsvis pin11 og pin10 i Arduino Nano. Trig- og ekko-stiften på den anden ultralydssensor er forbundet til henholdsvis Ar6-nano-pin6 og pin5.
- Fastgør Arduino nano-kortet på bagsiden af scotchbåndet til den bærbare computer. Begge ultralydssensorer fastgøres til begge tophjørner på den bærbare computer.
Trin 4: Kom godt i gang med Arduino
Hvis du ikke allerede er fortrolig med Arduino IDE, skal du ikke bekymre dig, fordi en trinvis procedure til opsætning og brug af Arduino IDE med et mikrocontrollerkort forklares nedenfor.
- Download den nyeste version af Arduino IDE fra Arduino.
- Tilslut dit Arduino Nano-kort til din bærbare computer, og åbn kontrolpanelet. Klik derefter på Hardware og lyd. Klik nu på Enheder og printere.Her finder du den port, som dit mikrocontrollerkort er tilsluttet. I mit tilfælde er det COM14men det er anderledes på forskellige computere.
- Klik på værktøjsmenuen, og indstil tavlen til Arduino Nano fra rullemenuen.
- I den samme værktøjsmenu skal du indstille porten til det portnummer, du tidligere har observeret i Enheder og printere.
- I samme værktøjsmenu skal du indstille processoren til ATmega328P (gammel bootloader).
- Download koden, der er vedhæftet nedenfor, og indsæt den i din Arduino IDE. Klik på upload knap til at brænde koden på dit mikrocontrollerkort.
Klik her for at downloade koden.
Trin 5: Indstilling af bevægelser
Vi ønsker at skrive en kode, der registrerer og konverterer afstanden til en passende kommando til at udføre en opgave.
lad os først oprette en liste over alle de opgaver, vi vil udføre ved hjælp af bevægelser. Følgende er listen over alle disse opgaver.
- Skift til næste fane eller forrige fane i webbrowseren.
- Rul op og ned på websiden.
- Afspil og pause videoer i VLC Player.
- Øg og sænk lydstyrken.
- Skift mellem to opgaver.
Vi indstiller nu bevægelser til at udføre alle disse operationer.
- Gestus 1: Placer din hånd foran den højre ultralydssensor mellem ca. 15cm-30cm. Træk din hånd væk efter en kort varighed. Dette ruller ned på websiden og reducerer lydstyrken.
- Gestus 2: Placer din hånd foran den højre ultralydssensor mellem ca. 15cm-30cm. Efter en kort periode skal du skubbe din hånd mod ultralydssensoren. Dette vil rulle op på websiden og øge lydstyrken.
- Gestus 3: For at gå til den næste fane skal du stryge din hånd foran den højre ultralydssensor.
- Gestus 4: For at gå til den forrige fane skal du stryge din hånd foran den venstre ultralydssensor. Dette vil også afspille / stoppe din video på VLC-afspiller.
- Gestus 5: For at skifte mellem to opgaver skal du stryge din hånd hen over begge sensorer.
Vi har skrevet koden og lavet alle betingelser baseret på ovenstående bevægelser. Og det skal bemærkes, at vi bruger Google Chrome som vores webbrowser og VLC Media Player som vores medieapplikation.
Trin 6: Forståelse af Arduino-koden
Vi har skrevet en kode, der konverterer 5 bevægelser til en digital kommando. denne kommando sendes til den serielle port. Vi skriver et pythonprogram for at fortolke disse kommandoer og udføre nogle tastaturfunktioner for at udføre forskellige opgaver.
1. I starten initialiseres alle stifter, som vi vil forbinde med sensorerne. Forskellige variabler initialiseres også for at gemme data til beregning af tid og afstand.
const int trigPin1 = 11; // trigger output pin (sensor 1) const int echoPin1 = 10; // ekkoindgangsstift (sensor 1) const int trigPin2 = 6; // trigger output pin (sensor 2) const int echoPin2 = 5; // ekkoindgangsstift (sensor 2) // variabler, der bruges til langvarig beregning af afstand int afstand1, afstand2; flyde r; usigneret lang temp = 0; int temp1 = 0; int l = 0;
2. Vi har skrevet en funktion, ugyldig find_distance (ugyldig) for at beregne afstanden til begge ultralydssensorerne. Det er bedre ikke at udløse begge ultralydssensorer på samme tid, fordi det kan forårsage forstyrrelse. Denne funktion returnerer afstanden i cm.
ugyldig find_distance (ugyldig) {digitalWrite (trigPin1, LOW); forsinkelseMikrosekunder (2); digitalWrite (trigPin1, HIGH); forsinkelseMikrosekunder (10); digitalWrite (trigPin1, LOW); varighed = pulseIn (echoPin1, HIGH, 5000); r = 3,4 * varighed / 2; // beregning for at få målingen i cm ved hjælp af tiden returneret af pulsein-funktionen. afstand1 = r / 100,00; digitalWrite (trigPin2, LOW); forsinkelseMikrosekunder (2); digitalWrite (trigPin2, HIGH); forsinkelseMikrosekunder (10); digitalWrite (trigPin2, LOW); varighed = pulseIn (echoPin2, HIGH, 5000); r = 3,4 * varighed / 2; distance2 = r / 100,00; forsinkelse (100); }
3. ugyldig opsætning () er en funktion, der initialiserer alle de ben, der skal bruges som INPUT eller OUTPUT. Baudrate er også indstillet i denne funktion. Baudrate er den hastighed, hvormed mikrocontrolkortet kommunikerer med de tilsluttede sensorer.
ugyldig opsætning () {Serial.begin (9600); pinMode (trigPin1, OUTPUT); // initialiser trigger- og ekko-benene på både sensoren som input og output: pinMode (echoPin1, INPUT); pinMode (trigPin2, OUTPUT); pinMode (echoPin2, INPUT); forsinkelse (1000); }
4. ugyldig sløjfe ()er en funktion, der kører gentagne gange ina loop. I denne sløjfe beregner vi afstanden i mange tilfælde og anvender betingelser for at detektere gestus.
ugyldig sløjfe () {find_distance (); hvis (distance2 <= 35 && distance2> = 15) {temp = millis (); mens (millis () <= (temp + 300)) find_distance (); hvis (distance2 <= 35 && distance2> = 15) {temp = distance2; mens (distance2 <= 50 || distance2 == 0) {find_distance (); hvis ((temp + 6)distance2) {Serial.println ("op"); }}} andet {Serial.println ("næste"); }} ellers hvis (distance1 <= 35 && distance1> = 15) {temp = millis (); mens (millis () <= (temp + 300)) {find_distance (); hvis (distance2 <= 35 && distance2> = 15) {Serial.println ("ændring"); l = 1; pause; }} hvis (l == 0) {Serial.println ("forrige"); mens (distance1 <= 35 && distance1> = 15) find_distance (); } l = 0; }}
Trin 7: Python-programmering
Vi installerer PyAutoGUIog påberåbe sig forskellige tastaturkommandoer ved blot at læse indgående serielle data. Med dette program kan vi efterligne mange musefunktioner og tastaturhandlinger som venstre eller højreklik på musen eller et hvilket som helst tastaturtryk.
Først installerer vi PIP på vores windows. Det er en enkel procedure. Klik her for at åbne videovejledningen til installation af pip på din computer. Efter installation af PIP på vores computer vil vi gå videre og installere pyAutoGUI. For at gøre det skal du skrive følgende kommando i kommandoprompten
python -m pip installere pyautogui
Denne kommando installerer puAutoGUI på din computer. Hvis alt går godt indtil nu, lad os gå videre og skrive et pythonprogram for at påberåbe forskellige tastaturkommandoer. Da vi modtager 5 forskellige kommandoer i den serielle input af Arduino-koden, kan Python-kode konvertere disse kommandoer til bestemte tastaturkommandoer som følger.
- Data: “næste” —–> Handling: “Ctrl + PgDn”
- Data: “forrige” —–> Handling: “Ctrl + PgUp”
- Data: “ned” —–> Handling: “Pil ned”
- Data: “op” —–> Handling: “Pil op”
- Data: “ændring” —–> Handling: “Alt + Tab”
Python kan bruges til at programmere enArduino, simpelthen ved at importere pyfirmata, som kan interface Arduino med Python. Følgende er Python-koden, der kræves for at køre projektet:
import serial # add Serielt bibliotek til seriel kommunikation import pyautogui # add pyautogui bibliotek til programmatisk styring af musen og tastaturet. Arduino_Serial = serial.Serial ('com12', 9600) # Initialiser seriel og opret seriel portobjekt kaldet Arduino_Serial mens 1: incoming_data = str (Arduino_Serial.readline ()) # læs serielle data og udskriv dem som linie print indkommende_data #print the indgående serielle data, hvis 'næste' i indgående_data: # hvis indgående data er 'næste' pyautogui.hotkey ('ctrl', 'pgdn') # udfør "ctrl + pgdn" -operation, der flytter til næste fane, hvis 'forrige' i indgående_data : # hvis indgående data er 'forrige' pyautogui.hotkey ('ctrl', 'pgup') # udfør "ctrl + pgup" -operation, der flytter til den forrige fane, hvis 'ned' i indkommende_data: # hvis indgående data er 'nede' # pyautogui.press ('ned') # udfører "pil ned" operation, der ruller ned på siden pyautogui.scroll (-100) hvis 'op' i indkommende_data: # hvis indgående dat a er 'op' # pyautogui.press ('op') # udfører "pil op", der ruller op på siden pyautogui.scroll (100) hvis 'ændring' i indkommende data: # hvis indgående data er 'ændring' pyautogui.keyDown ('alt') # udfører "alt + tab" -funktion, der skifter fanen pyautogui.press ('tab') pyautogui.keyUp ('alt') indkommende_data = ""; # rydder dataene
Det var den enkleste måde at kontrollere din pc på ved hjælp af håndbevægelser. Følg alle ovennævnte trin, og nyd at kontrollere din pc ved hånden i stedet for et tastatur og en mus.