Hur man gör Arduino-baserad handgestkontroll av din dator?
Handgest Control är inte en ny sak. Vi har sett många robotar som styrs av handgester. Teknik går så snabbt att allt vi tänker på redan finns på marknaden. Ett mycket intressant projekt är att styra din persondator eller din bärbara dator med ett litet mikrokontrollerkort som heter Arduino Uno. Genom att använda en Arduino kan vi utföra några enkla funktioner genom att bara vifta med handen istället för att använda en mus eller tangentbordet. Dessa funktioner inkluderar glidning av bilder, bläddra upp och ner på sidorna, växla mellan flikarna i en webbläsare, spela upp eller pausa en video, växla mellan stationära applikationer etc.
Hur man utför olika operationer på PC med handgester?
Nu som vi känner till abstrakt av projektet, låt oss gå vidare och samla in annan information för att börja arbeta. Vi kommer först att göra en lista över komponenterna, sedan studera dem kort och sedan montera alla komponenter för att skapa ett fungerande system.
Steg 1: Samla in komponenterna
Det bästa sättet att starta något projekt är att göra en lista över komponenter och gå igenom en kort studie av dessa komponenter eftersom ingen vill sticka mitt i ett projekt bara på grund av en saknad komponent. En lista över komponenter som vi ska använda i detta projekt ges nedan:
Steg 2: Studera komponenterna
Eftersom vi har en komplett lista över alla komponenter. Låt oss gå vidare och gå igenom en kort studie av hur alla komponenter fungerar.
Arduino Nano är ett mikrokontrollerkort som utför olika operationer i olika kretsar. Det kräver en C-kod som talar om för styrelsen vilka uppgifter som ska utföras och hur. Den har 13 digitala I / O-stift vilket betyder att vi kan använda 13 olika enheter. Arduino Nano har exakt samma funktionalitet som Arduino Uno men i ganska liten storlek. Mikrokontrollern på Arduino Nano-kortet är ATmega328p.Om du vill styra mer än 13 enheter, använd Arduino Mega.
HC-SR04-kortet är en ultraljudssensor som används för att bestämma avståndet mellan två objekt. Den består av en sändare och en mottagare. Sändaren omvandlar den elektriska signalen till en ultraljudssignal och mottagaren konverterar ultraljudssignalen tillbaka till den elektriska signalen. När sändaren skickar en ultraljudsvåg reflekteras den efter kollision med ett visst föremål. Avståndet beräknas med hjälp av den tid det tar för ultraljudssignalen att gå från sändaren och komma tillbaka till mottagaren.
Steg 3: Montering av komponenterna
Nu som vi känner till huvudarbetet för de komponenter som vi ska använda. Låt oss börja montera komponenterna för att göra en slutprodukt.
- Anslut Vcc och jordstift på båda ultraljudssensorerna till 5V och jord på Arduino Nano-kortet. Triggen och ekstiftet på den första ultraljudssensorn är ansluten till pin11 respektive pin10 på Arduino Nano. Den andra ultraljudssensorns trigg- och ekstift är ansluten till pin6 respektive pin5 på Arduino nano.
- Fäst Arduino nano-kortet på baksidan av den bärbara skärmtejpen. Båda ultraljudssensorerna kommer att fästas i de övre hörnen på den bärbara datorn.
Steg 4: Komma igång med Arduino
Om du inte redan är bekant med Arduino IDE, oroa dig inte eftersom en steg för steg-procedur för att ställa in och använda Arduino IDE med ett mikrokontrollkort förklaras nedan.
- Ladda ner den senaste versionen av Arduino IDE från Arduino.
- Anslut ditt Arduino Nano-kort till din bärbara dator och öppna kontrollpanelen. Klicka sedan på Hårdvara och ljud. Klicka nu på Enheter och skrivare.Här hittar du porten som ditt mikrokontrollkort är anslutet till. I mitt fall är det COM14men det är annorlunda på olika datorer.
- Klicka på Verktyg-menyn och ställ in tavlan till Arduino Nano från rullgardinsmenyn.
- I samma verktygsmeny ställer du in porten till det portnummer som du observerade tidigare i Enheter och skrivare.
- I samma verktygsmeny ställer du in processorn på ATmega328P (Old Bootloader).
- Ladda ner koden som bifogas nedan och klistra in den i din Arduino IDE. Klicka på ladda upp för att bränna koden på ditt mikrokontrollkort.
Klicka här för att ladda ner koden.
Steg 5: Ställa in gester
Vi vill skriva en kod som kommer att upptäcka och konvertera avståndet till ett lämpligt kommando för att utföra en uppgift.
låt oss först göra en lista över alla uppgifter som vi vill utföra med hjälp av gester. Nedan följer listan över alla dessa uppgifter.
- Byt till nästa flik eller föregående flik i webbläsaren.
- Bläddra upp och ner på webbsidan.
- Spela och pausa videor i VLC Player.
- Öka och sänka volymen.
- Växla mellan två uppgifter.
Vi kommer nu att ställa in gester för att utföra alla dessa operationer.
- Gest 1: Placera handen framför den högra ultraljudssensorn mellan cirka 15 och 30 cm. Efter en liten tidsperiod drar du bort handen. Detta rullar ner på webbsidan och minskar volymen.
- Gest 2: Placera handen framför den högra ultraljudssensorn mellan cirka 15 och 30 cm. Efter en liten tid, tryck din hand mot ultraljudssensorn. Detta rullar upp webbsidan och ökar volymen.
- Gest 3: För att gå till nästa flik, svep din hand framför höger ultraljudssensor.
- Gest 4: För att gå till föregående flik, svep din hand framför den vänstra ultraljudssensorn. Detta kommer också att spela / pausa din video på VLC-spelare.
- Gest 5: För att växla mellan två uppgifter sveper du handen över båda sensorerna.
Vi har skrivit koden och gjort alla villkor baserat på ovanstående gester. Och det bör noteras att vi använder Google Chrome som vår webbläsare och VLC Media Player som vår medieapplikation.
Steg 6: Förstå Arduino-koden
Vi har skrivit en kod som omvandlar 5 gester till ett digitalt kommando. detta kommando skickas till den seriella porten. Vi kommer att skriva ett pythonprogram för att tolka dessa kommandon och utföra några tangentbordsfunktioner för att utföra olika uppgifter.
1. I början initialiseras alla stift som vi vill ansluta till sensorerna. Olika variabler initieras också för att lagra data för beräkning av tid och avstånd.
const int trigPin1 = 11; // trigger utgångsstift (sensor 1) const int echoPin1 = 10; // ekoingångsstift (sensor 1) const int trigPin2 = 6; // trigger utgångsstift (sensor 2) const int echoPin2 = 5; // ekoingång (sensor 2) // variabler som används för avståndsberäkning av lång varaktighet; int avstånd1, avstånd2; flyta r; osignerad lång temp = 0; int temp1 = 0; int l = 0;
2. Vi har skrivit en funktion, ogiltig find_distance (ogiltig) för att beräkna avståndet för båda ultraljudssensorerna. Det är bättre att inte utlösa båda ultraljudssensorerna samtidigt eftersom det kan orsaka viss störning. Den här funktionen returnerar avståndet i cm.
void find_distance (void) {digitalWrite (trigPin1, LOW); delayMicroseconds (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); varaktighet = pulseIn (echoPin1, HIGH, 5000); r = 3,4 * varaktighet / 2; // beräkning för att få mätningen i cm med den tid som returneras av pulsein-funktionen. avstånd 1 = r / 100,00; digitalWrite (trigPin2, LOW); delayMicroseconds (2); digitalWrite (trigPin2, HIGH); delayMicroseconds (10); digitalWrite (trigPin2, LOW); duration = pulseIn (echoPin2, HIGH, 5000); r = 3,4 * varaktighet / 2; avstånd2 = r / 100,00; fördröjning (100); }
3. ogiltig installation () är en funktion som initierar alla stift som ska användas som INPUT eller OUTPUT. Baud Rate ställs också in i denna funktion. Baud Rate är den hastighet med vilken mikrokontrollkortet kommunicerar med de anslutna sensorerna.
ogiltig installation () {Serial.begin (9600); pinMode (trigPin1, OUTPUT); // initialisera trigger- och echo-stiften för både sensorn som in- och utgång: pinMode (echoPin1, INPUT); pinMode (trigPin2, OUTPUT); pinMode (echoPin2, INPUT); fördröjning (1000); }
4. ogiltig slinga ()är en funktion som körs upprepade gånger i en slinga. I den här slingan beräknar vi avståndet i många fall och använder villkor för att upptäcka gesten.
void loop () {find_distance (); if (distance2 <= 35 && distance2> = 15) {temp = millis (); medan (millis () <= (temp + 300)) find_distance (); om (avstånd2 <= 35 && avstånd2> = 15) {temp = avstånd2; medan (distance2 <= 50 || distance2 == 0) {find_distance (); om ((temp + 6)avstånd2) {Serial.println ("upp"); }}} annat {Serial.println ("nästa"); }} annars om (distance1 <= 35 && distance1> = 15) {temp = millis (); medan (millis () <= (temp + 300)) {find_distance (); if (distance2 <= 35 && distance2> = 15) {Serial.println ("ändra"); l = 1; ha sönder; }} om (l == 0) {Serial.println ("föregående"); medan (distance1 <= 35 && distance1> = 15) find_distance (); } l = 0; }}
Steg 7: Python-programmering
Vi installerar PyAutoGUIoch åberopa olika tangentbordskommandon genom att helt enkelt läsa inkommande seriell data. Med det här programmet kan vi härma många musåtgärder och tangentbordsåtgärder som vänster eller högerklicka på musen eller valfritt tangentbord.
Först installerar vi PIP på våra fönster. Det är ett enkelt förfarande. Klicka här för att öppna videoguiden för att installera pip på din dator. Efter att ha installerat PIP på vår dator går vi vidare och installerar pyAutoGUI. För att göra det, skriv följande kommando i kommandotolken
python -m pip installera pyautogui
Detta kommando installerar puAutoGUI på din dator. Om allt går bra fram till nu, låt oss gå vidare och skriva ett pythonprogram för att åberopa olika tangentbordskommandon. Eftersom vi tar emot 5 olika kommandon i serieinmatningen av Arduino-koden kan Python-koden konvertera dessa kommandon till vissa tangentbordskommandon enligt följande.
- Data: “nästa” —–> Åtgärd: “Ctrl + PgDn”
- Data: “föregående” —–> Åtgärd: “Ctrl + PgUp”
- Data: “ner” —–> Åtgärd: “Nedåtpil”
- Data: “upp” —–> Åtgärd: “Uppåtpil”
- Data: ”ändra” —–> Åtgärd: “Alt + Tab”
Python kan användas för att programmera enArduino, helt enkelt genom att importera pyfirmata, som kan gränssnitt Arduino med Python. Följande är Python-koden som krävs för att köra projektet:
importera serienummer lägg till Seriellt bibliotek för seriekommunikation importera pyautogui # lägg till pyautogui-biblioteket för att programmera styr musen och tangentbordet. Arduino_Serial = serial.Serial ('com12', 9600) # Initiera seriell och skapa seriell portobjekt som heter Arduino_Serial medan 1: inkommande_data = str (Arduino_Serial.readline ()) # läs seriedata och skriv ut som radutskrift inkommande_data # skriv ut inkommande seriedata om 'nästa' i inkommande data: # om inkommande data är 'nästa' pyautogui.hotkey ('ctrl', 'pgdn') # utför "ctrl + pgdn" -åtgärd som flyttar till nästa flik om "föregående" i inkommande_data : # om inkommande data är 'tidigare' pyautogui.hotkey ('ctrl', 'pgup') # utför "ctrl + pgup" -åtgärd som flyttar till föregående flik om 'ner' i inkommande_data: # om inkommande data är 'ner' # pyautogui.press ('ner') # utför "pil ned" som rullar ner på sidan pyautogui.scroll (-100) om 'upp' i inkommande_data: # om inkommande dat a är 'upp' # pyautogui.press ('upp') # utför "uppåt" -operation som rullar upp på sidan pyautogui.scroll (100) om 'förändring' i inkommande_data: # om inkommande data är 'ändra' pyautogui.keyDown ('alt') # utför "alt + tab" -operation som växlar fliken pyautogui.press ('tab') pyautogui.keyUp ('alt') inkommande_data = ""; # rensar data
Det var det enklaste sättet att styra din dator med hjälp av handgester. Följ alla stegen som nämns ovan och njut av att kontrollera din dator med din hand istället för ett tangentbord och en mus.