- Priekšnosacījumi:
- Projekta koncepcija:
- Ķēdes shēma:
- Arduino programmēšana:
- Python programmēšana:
- Ar žestu kontrolēts dators darbībā:
Nesen ar žestu vadāmi klēpjdatori vai datori kļūst ļoti slaveni. Šo paņēmienu sauc par lēciena kustību, kas ļauj mums kontrolēt noteiktas datora / klēpjdatora funkcijas, vienkārši pamājot ar roku priekšā. Tas ir ļoti forši un jautri to darīt, taču šo klēpjdatoru cena patiešām ir ļoti augsta. Tāpēc šajā projektā mēģināsim izveidot savu žestu vadības klēpjdatoru / datoru, apvienojot Arduino un Python spēku.
Mēs izmantosim divus ultraskaņas sensorus, lai noteiktu mūsu rokas stāvokli un vadītu multivides atskaņotāju (VLC), pamatojoties uz stāvokli. Es to izmantoju demonstrēšanai, taču, tiklīdz esat sapratis projektu, varat darīt jebko, vienkārši mainot dažas koda rindas un iecienītākajā veidā kontrolējot savu iecienīto lietojumprogrammu.
Priekšnosacījumi:
Mēs jau esam apskatījuši dažus projektus, kas apvieno Arduino ar Python. Tāpēc es pieņemu, ka jūs jau esat instalējis Python un tā sērijveida bibliotēku un esat veiksmīgi izmēģinājis dažus pamata projektus, piemēram, mirgo LED. Ja nē, neuztraucieties, jūs varat atgriezties pie šīs Arduino-Python Led Controlling apmācības un saprasties ar to. Tāpēc pirms turpināt, pārliecinieties, vai esat instalējis Python un pyserial bibliotēku.
Projekta koncepcija:
Projekta koncepcija ir ļoti vienkārša. Mēs novietosim divus ultraskaņas (ASV) sensorus monitora augšpusē un, izmantojot Arduino, nolasīsim attālumu starp monitoru un roku, pamatojoties uz šo attāluma vērtību, mēs veiksim noteiktas darbības. Lai veiktu darbības savā datorā, mēs izmantojam Python pyautogui bibliotēku. Arduino komandas tiek nosūtītas uz datoru, izmantojot seriālo portu (USB). Pēc tam šos datus nolasīs pitons, kas darbojas datorā, un, pamatojoties uz nolasītajiem datiem, tiks veikta darbība.
Ķēdes shēma:
Lai vadītu datoru ar rokas žestiem, vienkārši savienojiet divus Ultraskaņas sensorus ar Arduino. Mēs zinām, ka ASV sensors darbojas ar 5V, un tāpēc tos darbina Arduino borta sprieguma regulators. Arduino var savienot ar datoru / klēpjdatoru, lai darbinātu moduli, kā arī seriālai saziņai. Kad savienojumi ir izdarīti, novietojiet tos uz monitora, kā parādīts zemāk. Es to izmantoju dubultā sānu lentē, lai to uzliktu uz sava monitora, bet jūs varat izmantot savu radošumu. Pēc tā nostiprināšanas vietā mēs varam turpināt programmēšanu.
Arduino programmēšana:
Arduino vajadzētu būt ieprogrammētam, lai nolasītu rokas attālumu no ASV sensora. Pabeigta programma tiek dota beigās šīs lapas; nedaudz zemāk es esmu sniedzis paskaidrojumu par programmu. Ja ultraskaņas sensors jums ir jauns, vienkārši veiciet Arduino un ultraskaņas sensora attāluma mērīšanu.
Izlasot attāluma vērtību, mēs varam sasniegt noteiktas darbības, kuras kontrolē ar žestiem, piemēram, šajā programmā es esmu ieprogrammējis 5 darbības kā demonstrāciju.
1. darbība: Kad abas rokas ir novietotas sensora priekšā noteiktā tālā attālumā, video VLC atskaņotājam vajadzētu atskaņot / pauzēt.
2. darbība: kad labā roka ir novietota sensora priekšā noteiktā tālā attālumā, videoklipam vajadzētu strauji virzīties uz priekšu vienu soli.
3. darbība: Kad kreisā roka ir novietota augšpus sensora noteiktā tālā attālumā, videoklipam vajadzētu pārtīt vienu soli.
4. darbība: Kad labā roka tiek novietota sensora priekšā noteiktā tuvumā un pēc tam, ja tas tiek virzīts uz sensoru, videoklipam vajadzētu ātri virzīties uz priekšu un, ja attālināts, videoklipam vajadzētu pārtīt.
5. darbība: Kad kreisā roka tiek novietota augšpus sensora noteiktā tuvumā, un tad, ja tas tiek virzīts uz sensoru, video skaļumam vajadzētu palielināties, un, ja tas tiek pārvietots prom, skaļumam vajadzētu samazināties.
Apskatīsim, kā programma ir rakstīta, lai veiktu iepriekš minētās darbības. Tātad, tāpat kā visas programmas, mēs sākam ar I / O tapu definēšanu, kā parādīts zemāk. Abi ASV sensori ir savienoti ar digitālajām tapām 2,3,4 un 5, un tos darbina ar + 5V kontaktu. Sprūda tapas ir izvades tapa, un atbalss tapas ir ievades tapas.
Sērijas komunikācija starp Arduino un pitonu notiek ar 9600 pārraides ātrumu.
const int trigeris1 = 2; // 1. Sesnora ieslēgšanas tapa pin int echo1 = 3; // 1. Sesnora atbalss tapa pin int trig2 = 4; // Otrā Sesnora ieslēgšanas spraudnis konst int echo2 = 5; // Otrā Sesnora spraudņa spraudnis nav spēkā ((Serial.begin (9600)); pinMode (trigeris1, OUTPUT); pinMode (echo1, INPUT); pinMode (trigeris2, OUTPUT); pinMode (echo2, INPUT); }
Mums ir jāaprēķina attālums starp Sensoru un roku katru reizi, pirms mēs veicam kādu darbību. Tāpēc mums tas jādara daudzas reizes, kas nozīmē, ka šis kods ir jāizmanto kā funkcija. Mēs esam uzrakstījuši funkciju ar nosaukumu aprēķināt_tālums (), kas mums atgriezīs attālumu starp sensoru un roku.
/ * ### Funkcija attāluma aprēķināšanai ### * / void aprēķina_tālums (int trigeris, int atbalss) {digitalWrite (trigeris, LOW); kavēšanāsMikrosekundes (2); digitalWrite (trigeris, HIGH); kavēšanāsMikrosekundes (10); digitalWrite (trigeris, LOW); time_taken = pulseIn (atbalss, AUGSTS); dist = laiks paņemts * 0,034 / 2; ja (dist> 50) dist = 50; }
Galvenās cilpas iekšpusē mēs pārbaudām attāluma vērtību un veicam iepriekš minētās darbības. Pirms tam mēs izmantojam divus mainīgos lielumus distL un distR, kas tiek atjaunināti ar pašreizējo attāluma vērtību.
aprēķināt attālumu (trigeris1, atbalss1); distL = dist; // iegūt kreisā sensora attālumu aprēķināt_tālums (trigeris2, atbalss2); distR = dist; // iegūt labā sensora attālumu
Tā kā mēs zinām attālumu starp abiem sensoriem, tagad mēs varam to salīdzināt ar iepriekš definētām vērtībām un sasniegt noteiktas darbības. Piemēram, ja abas rokas ir novietotas 40 mc attālumā, mēs atskaņojam / pauzējam video. Šeit vārds “Atskaņot / Pauze” tiks izsūtīts caur seriālo portu
if ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Noteikt abas rokas {Serial.println ("Play / Pause"); kavēšanās (500);}
Ja tikai labā roka ir novietota pirms moduļa, mēs strauji virzāmies uz priekšu video ar vienu soli un, ja tas ir kreisais, mēs pārtināmies par vienu soli. Pamatojoties uz darbību, šeit vārds “Pāriet atpakaļ” vai “Pārsūtīt” tiks izsūtīts caur seriālo portu
if ((distL> 40 && distL <50) && (distR == 50)) // Detektēt kreiso roku {Serial.println ("Pāriet atpakaļ"); kavēšanās (500);} if ((distR> 40 && distR <50) && (distL == 50)) // Labās rokas noteikšana {Serial.println ("Pārsūtīt"); kavēšanās (500);}
Lai izvairītos no viltus iedarbības, mēs izmantojam citu metodoloģiju, lai kontrolētu skaļumu un trasi. Lai kontrolētu skaļumu, kreisā roka jānovieto apm. 15 cm attālumā jūs varat vai nu pārvietot to uz sensoru, lai samazinātu skaļumu, pārvietojiet to prom no sensora, lai palielinātu skaļumu. Tālāk ir parādīts tā paša kods. Pamatojoties uz darbību, šeit vārds “Vup” vai “Vdown” tiks izsūtīts caur seriālo portu
// Bloķēt pa kreisi - vadības režīms, ja (distL> = 13 && distL <= 17) {aizkave (100); // Rokas turēšanas laika aprēķināšanas_tālums (trigeris1, atbalss1); distL = dist; if (distL> = 13 && distL <= 17) {Serial.println ("Bloķēts pa kreisi"); while (distL <= 40) {aprēķināt_attālums (trigeris1, atbalss1); distL = dist; if (distL <10) // Roka iebīdīta {Serial.println ("Vup"); kavēšanās (300);} if (distL> 20) // Roka izvilkta {Serial.println ("Vdown"); kavēšanās (300);}}}}
To pašu metodi mēs varam izmantot arī labās puses sensoram, lai kontrolētu video ierakstu. Tas ir, ja mēs virzīsim labo roku pret sensoru, tas ātri virzīs filmu uz priekšu, un, ja jūs attālināsiet to no sensora, tas pārtīs filmu. Pamatojoties uz darbību, šeit vārds “Pāriet atpakaļ” vai “Pārsūtīt” tiks izsūtīts caur seriālo portu
Tagad jūs varat izlasīt pilnu šī žesta kontrolētā datora kodu, kas norādīts lapas beigās, mēģināt to nepietiekami novērtēt kopumā un pēc tam nokopēt to savā Arduino IDE.
Python programmēšana:
Šī projekta python programma ir ļoti vienkārša. Mums vienkārši ir jāizveido sērijveida sakari ar Arduino, izmantojot pareizo datu pārraides ātrumu, un pēc tam jāveic dažas pamata tastatūras darbības. Pirmais solis ar pitonu būtu moduļa p yautogui instalēšana. Pārliecinieties, ka izpildāt šo soli, jo programma nedarbosies bez pyautogui moduļa.
Pyautogui moduļa instalēšana logiem:
Veiciet tālāk norādītās darbības, lai instalētu pyautogui logiem. Ja izmantojat citas platformas, arī darbības būs vairāk vai mazāk līdzīgas. Pārliecinieties, vai jūsu dators / klēpjdators ir savienots ar internetu, un veiciet tālāk norādītās darbības
1. solis: Atveriet Windows komandu uzvedni un nomainiet direktoriju uz mapi, kurā esat instalējis python. Pēc noklusējuma komandai jābūt
cd C: \ Python27
2. solis: Python direktorijā izmantojiet komandu python –m pip install –upgrade pip, lai jauninātu savu pip. Pip ir rīks pitonā, kas palīdz mums viegli uzstādīt python moduļus. Kad šis modulis ir jaunināts (kā parādīts attēlā zemāk), pārejiet pie nākamās darbības.
python –m pip install –jaunināt pip
3. solis: Izmantojiet komandu “ python –m pip install pyautogui ”, lai instalētu pyautogui moduli. Kad process ir veiksmīgs, jums vajadzētu redzēt ekrānu, kas ir līdzīgs šim zemāk.
python –m pip install –jaunināt pip
Tagad, kad pyautogui modulis un pyserial modulis (instalēts iepriekšējā apmācībā) ir veiksmīgi instalēts kopā ar pitonu, mēs varam turpināt programmu Python. Pilnīga python kods ir dota beigās, apmācība, bet izskaidrojums pats ir šāds.
Importēsim visus trīs nepieciešamos moduļus šim projektam. Tie ir pyautogui, sērijveida pitons un laiks.
importēt sērijas # sēriju, kas importēta sērijveida sakaru importēšanas laikam # Nepieciešams izmantot aizkaves funkcijas importēt pyautogui
Tālāk mēs izveidojam savienojumu ar Arduino, izmantojot COM portu. Manā datorā Arduino ir savienots ar COM 18. Izmantojiet ierīces pārvaldnieku, lai atrastu, kuram COM portam ir pievienots jūsu Arduino, un attiecīgi izlabojiet šo rindu.
ArduinoSerial = serial.Serial ('com18', 9600) # Izveidojiet sērijas porta objektu ar nosaukumu arduinoSerialData time.sleep (2) #gaidiet 2 sekundes, līdz sakari tiek izveidoti
Infinite while loop iekšpusē mēs atkārtoti klausāmies COM portu un salīdzinām atslēgas vārdus ar visiem iepriekš izdomātajiem darbiem un attiecīgi veicam taustiņu paneļa nospiešanu.
savukārt 1: ienākošais = str (ArduinoSerial.readline ()) # lasiet sērijas datus un izdrukājiet tos kā ienākošo rindiņu, ja ienākošajā spēlē “Atskaņot / Pauze”: pyautogui.typewrite (, 0,2), ja ienākošajā gadījumā: “Pārtīt” karsto taustiņu ('ctrl', 'kreisais'), ja 'Pārsūtīt' ienākošajā: pyautogui.hotkey ('ctrl', 'pa labi'), ja 'Vup' ienākošajā: pyautogui.hotkey ('ctrl', 'uz leju'), ja ' Vdown 'ienākošajā: pyautogui.hotkey (' ctrl ',' augšup ')
Kā redzat, lai nospiestu taustiņu, mums vienkārši jāizmanto komanda “pyautogui.typewrite (, 0.2)”, kas nospiedīs taustiņu atstarpi 0,2 sekundes. Ja jums ir nepieciešami karstie taustiņi, piemēram, ctrl + S, varat izmantot karsto taustiņu komandu “pyautogui.hotkey ('ctrl', 's').
Esmu izmantojis šīs kombinācijas, jo tās darbojas VLC multivides atskaņotājā. Jūs varat tās kniebināt, kā vien vēlaties izveidot savas lietojumprogrammas, lai ar žestiem kontrolētu jebko datorā.
Ar žestu kontrolēts dators darbībā:
Veiciet savienojumus, kā noteikts iepriekš, un augšupielādējiet Arduino kodu savā Arduino dēlī. Pēc tam izmantojiet zemāk esošo pitona skriptu un palaidiet programmu savā klēpjdatorā / datorā.
Tagad jūs varat atskaņot jebkuru filmu savā datorā, izmantojot VLC multivides atskaņotāju, un izmantojiet savu roku, lai kontrolētu filmu, kā parādīts zemāk sniegtajā videoklipā.
Ceru, ka sapratāt projektu un patika ar to spēlēt. Šī ir tikai demonstrācija, un jūs varat izmantot savu radošumu, lai izveidotu daudz vairāk atdzist žestu kontrolētu lietu ap šo. Informējiet mani, vai tas bija noderīgi un ko jūs izveidosiet, izmantojot komentāru sadaļā, un es priecāšos to uzzināt.