- Voorwaarden:
- Concept achter het project:
- Schakelschema:
- Programmeren van uw Arduino:
- Programmering van uw Python:
- Gebaargestuurde computer in actie:
Onlangs gebarengestuurde laptops of computers worden erg beroemd. Deze techniek wordt Leap-motion genoemd en stelt ons in staat om bepaalde functies op onze computer / laptop te bedienen door er simpelweg met onze hand voor te zwaaien. Het is erg gaaf en leuk om te doen, maar deze laptops zijn echt erg hoog geprijsd. Dus laten we in dit project proberen onze eigen laptop / computer met gebarenbesturing te bouwen door de kracht van Arduino en Python te combineren.
We zullen twee ultrasone sensoren gebruiken om de positie van onze hand te bepalen en een mediaspeler (VLC) aan te sturen op basis van de positie. Ik heb dit gebruikt voor demonstraties, maar als je eenmaal het project hebt begrepen, kun je alles doen door slechts een paar regels code te veranderen en je favoriete applicatie op je favoriete manier te besturen.
Voorwaarden:
We hebben al enkele projecten behandeld die Arduino combineren met Python. Dus ik neem aan dat je Python en zijn seriële bibliotheek al hebt geïnstalleerd en met succes een paar basisprojecten hebt uitgeprobeerd, zoals een knipperende LED. Zo niet, maak je dan geen zorgen, je kunt terugvallen op deze Arduino-Python Led Controlling-zelfstudie en ermee overweg. Zorg er dus voor dat u Python en pyserial-bibliotheek hebt geïnstalleerd voordat u doorgaat.
Concept achter het project:
Het concept achter het project is heel eenvoudig. We plaatsen twee ultrasone (US) sensoren bovenop onze monitor en zullen de afstand tussen de monitor en onze hand lezen met Arduino, op basis van deze afstand zullen we bepaalde acties uitvoeren. Om acties op onze computer uit te voeren, gebruiken we Python pyautogui- bibliotheek. De opdrachten van Arduino worden via de seriële poort (USB) naar de computer gestuurd. Deze gegevens worden vervolgens gelezen door python die op de computer draait en op basis van de gelezen gegevens wordt een actie uitgevoerd.
Schakelschema:
Om de pc met handgebaren te besturen, verbindt u de twee ultrasone sensoren met Arduino. We weten dat Amerikaanse sensoren werken met 5V en daarom worden ze aangedreven door de ingebouwde spanningsregelaar van Arduino. De Arduino kan worden aangesloten op de pc / laptop voor het voeden van de module en ook voor seriële communicatie. Zodra de verbindingen zijn gemaakt, plaatst u ze op uw monitor zoals hieronder wordt weergegeven. Ik heb een dubbelzijdige tape gebruikt om het op mijn monitor te plakken, maar je kunt je eigen creativiteit gebruiken. Nadat we het op een plaats hebben vastgezet, kunnen we doorgaan met het programmeren.
Programmeren van uw Arduino:
De Arduino moet worden geprogrammeerd om de afstand van de hand tot de Amerikaanse sensor te lezen. Het volledige programma staat aan het einde van deze pagina; net hieronder heb ik de uitleg voor het programma gegeven. Als u nog niet bekend bent met ultrasone sensoren, gaat u gewoon door Arduino en ultrasone sensorgebaseerde afstandsmeting.
Door de waarde van de afstand af te lezen kunnen we tot bepaalde acties komen die met gebaren bestuurd moeten worden, zo heb ik in dit programma bijvoorbeeld 5 acties geprogrammeerd als demo.
Actie 1: Wanneer beide handen op een bepaalde grote afstand voor de sensor worden geplaatst, moet de video in de VLC-speler afspelen / pauzeren.
Actie 2: Wanneer de rechterhand op een bepaalde grote afstand voor de sensor wordt geplaatst, moet de video één stap vooruitspoelen.
Actie 3: Wanneer de linkerhand op een bepaalde grote afstand voor de sensor wordt geplaatst, moet de video één stap terugspoelen.
Actie 4: Wanneer de rechterhand op een bepaalde korte afstand voor de sensor wordt geplaatst en vervolgens naar de sensor wordt bewogen, moet de video snel vooruitspoelen en als de video wordt weggeschoven, moet de video terugspoelen.
Actie 5: Als de linkerhand op een bepaalde korte afstand voor de sensor wordt geplaatst en vervolgens naar de sensor wordt bewogen, zou het videovolume moeten toenemen en als het volume zou moeten worden verlaagd als u de camera weg bewoog.
Laten we eens kijken hoe het programma is geschreven om de bovenstaande acties uit te voeren. Dus, net als alle programma's, beginnen we met het definiëren van de I / O-pinnen, zoals hieronder weergegeven. De twee Amerikaanse sensoren zijn verbonden met digitale pinnen 2,3,4 en 5 en worden gevoed door een + 5V-pin. De triggerpennen zijn outputpennen en echopinnen zijn invoerpennen.
De seriële communicatie tussen Arduino en python vindt plaats met een baudrate van 9600.
const int trigger1 = 2; // Trigger pin van 1st Sesnor const int echo1 = 3; // Echo-pin van 1e Sesnor const int trigger2 = 4; // Trigger pin van 2nd Sesnor const int echo2 = 5; // Echo pin van 2nd Sesnor void setup () {Serial.begin (9600); pinMode (trigger1, OUTPUT); pinMode (echo1, INPUT); pinMode (trigger2, OUTPUT); pinMode (echo2, INPUT); }
We moeten de afstand tussen de sensor en de hand elke keer berekenen voordat we een handeling afronden. We moeten het dus vaak doen, wat betekent dat deze code als een functie moet worden gebruikt. We hebben een functie geschreven met de naam bereken_afstand () die ons de afstand tussen de sensor en de hand teruggeeft.
/ * ### Functie om afstand te berekenen ### * / void bereken_afstand (int trigger, int echo) {digitalWrite (trigger, LOW); delayMicroseconds (2); digitalWrite (trigger, HIGH); delayMicroseconds (10); digitalWrite (trigger, LOW); time_taken = pulseIn (echo, HIGH); dist = time_taken * 0.034 / 2; if (dist> 50) dist = 50; }
Binnen onze hoofdlus controleren we de waarde van de afstand en voeren we de hierboven genoemde acties uit. Daarvoor gebruiken we twee variabelen distL en distR die worden bijgewerkt met de huidige afstandswaarde.
bereken_afstand (trigger1, echo1); distL = dist; // verkrijg de afstand van de linker sensor bereken_afstand (trigger2, echo2); distR = dist; // verkrijg afstand van de juiste sensor
Omdat we de afstand tussen beide sensoren kennen, kunnen we deze nu vergelijken met vooraf gedefinieerde waarden en tot bepaalde acties komen. Als bijvoorbeeld beide handen op een afstand van 40 mc worden geplaatst, dan spelen / pauzeren we de video. Hier wordt het woord "Play / Pause" verzonden via de seriële poort
if ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Detecteer beide handen {Serial.println ("Play / Pause"); vertraging (500);}
Als alleen de rechterhand voor de module wordt geplaatst, spoelen we de video één stap vooruit en als het de linkerhand is, spoelen we één stap terug. Op basis van de actie wordt hier het woord "Terugspoelen" of "Doorsturen" verzonden via de seriële poort
if ((distL> 40 && distL <50) && (distR == 50)) // Detect Linkerhand {Serial.println ("Rewind"); delay (500);} if ((distR> 40 && distR <50) && (distL == 50)) // Detect Rechterhand {Serial.println ("Forward"); vertraging (500);}
Voor gedetailleerde controle van volume en track gebruiken we een andere methodologie om valse triggers te voorkomen. Om het volume te regelen moeten we de linkerhand ca. Op een afstand van 15 cm kunt u het ofwel naar de sensor bewegen om het volume te verlagen, of het weg van de sensor om het volume te verhogen. De code hiervoor wordt hieronder weergegeven. Op basis van de actie wordt hier het woord "Vup" of "Vdown" verzonden via de seriële poort
// Lock Left - Control Mode if (distL> = 13 && distL <= 17) {delay (100); // Handhoudtijd bereken_afstand (trigger1, echo1); distL = dist; if (distL> = 13 && distL <= 17) {Serial.println ("Left Locked"); while (distL <= 40) {bereken_afstand (trigger1, echo1); distL = dist; if (distL <10) // Hand ingedrukt in {Serial.println ("Vup"); delay (300);} if (distL> 20) // Hand trok {Serial.println ("Vdown"); vertraging (300);}}}}
We kunnen dezelfde methode ook gebruiken voor de sensor aan de rechterkant om de track van de video te besturen. Dat wil zeggen dat als we de rechterhand naar de sensor bewegen, de film snel vooruitspoelt en als je hem van de sensor af beweegt, wordt de film teruggespoeld. Op basis van de actie wordt hier het woord "Terugspoelen" of "Doorsturen" verzonden via de seriële poort
U kunt nu de volledige code voor deze gebarengestuurde pc aan het einde van de pagina lezen en proberen deze als geheel te onderschatten en vervolgens naar uw Arduino IDE te kopiëren.
Programmering van uw Python:
Het python-programma voor dit project is heel eenvoudig. We hoeven alleen maar een seriële communicatie met Arduino tot stand te brengen via de juiste baudrate en vervolgens enkele basale toetsenbordacties uit te voeren. De eerste stap met python zou zijn om de p yautogui- module te installeren. Zorg ervoor dat u deze stap volgt, want het programma zal niet werken zonder de pyautogui-module.
Pyautogui-module voor Windows installeren:
Volg de onderstaande stappen om pyautogui voor Windows te installeren. Als u andere platforms gebruikt, zullen de stappen ook min of meer vergelijkbaar zijn. Zorg ervoor dat uw computer / laptop is verbonden met internet en ga verder met de onderstaande stappen
Stap 1: Open de Windows-opdrachtprompt en verander de map naar de map waarin u Python hebt geïnstalleerd. Standaard zou de opdracht moeten zijn
cd C: \ Python27
Stap 2: Gebruik in je python-map het commando python –m pip install –upgrade pip om je pip te upgraden. Pip is een tool in python die ons helpt om eenvoudig python-modules te installeren. Zodra deze module is geüpgraded (zoals weergegeven in onderstaande afbeelding), gaat u verder met de volgende stap.
python –m pip install –upgrade pip
Stap 3: Gebruik het commando “ python –m pip install pyautogui ” om de pyautogui-module te installeren. Zodra het proces succesvol is, zou u een scherm moeten zien dat er ongeveer zo uitziet als hieronder.
python –m pip install –upgrade pip
Nu de pyautogui- module en pyserial- module (geïnstalleerd in de vorige tutorial) succesvol zijn geïnstalleerd met de python, kunnen we doorgaan met het python-programma. De volledige python-code wordt aan het einde van de tutorial gegeven, maar de uitleg hiervoor is als volgt.
Laten we alle drie de vereiste modules voor dit project importeren. Ze zijn pyautogui, seriële python en tijd.
import serienummer # Serie geïmporteerd voor seriële communicatie importtijd #Vereist om vertragingsfuncties te gebruiken import pyautogui
Vervolgens maken we verbinding met de Arduino via de COM-poort. Op mijn computer is de Arduino aangesloten op COM 18. Gebruik apparaatbeheer om te zien op welke COM-poort je Arduino is aangesloten en corrigeer de volgende regel dienovereenkomstig.
ArduinoSerial = serial.Serial ('com18', 9600) #Create Serial port-object met de naam arduinoSerialData time.sleep (2) # 2 seconden wachten tot de communicatie tot stand is gebracht
Binnen de oneindige while- lus luisteren we herhaaldelijk naar de COM-poort en vergelijken we de sleutelwoorden met vooraf getinte werken en laten we het toetsenbord dienovereenkomstig indrukken.
while 1: incoming = str (ArduinoSerial.readline ()) #lees de seriële gegevens en print deze als regel print inkomend als 'Play / Pause' in inkomend: pyautogui.typewrite (, 0.2) if 'Rewind' in inkomend: pyautogui. sneltoets ('ctrl', 'links') als 'Doorsturen' in inkomend: pyautogui.hotkey ('ctrl', 'rechts') als 'Vup' in inkomend: pyautogui.hotkey ('ctrl', 'omlaag') als ' Vdown 'in inkomend: pyautogui.hotkey (' ctrl ',' up ')
Zoals je kunt zien, hoeven we alleen maar het commando "pyautogui.typewrite (, 0.2)" te gebruiken om een toets in te drukken gedurende 0.2 sec. Als je sneltoetsen zoals ctrl + S nodig hebt, kun je het sneltoetscommando "pyautogui.hotkey ('ctrl', 's')" gebruiken.
Ik heb deze combinaties gebruikt omdat ze werken op de VLC-mediaspeler, je kunt ze op elke gewenste manier aanpassen om je eigen applicaties te maken om alles op de computer met gebaren te bedienen.
Gebaargestuurde computer in actie:
Maak de verbindingen zoals hierboven gedefinieerd en upload de Arduino-code naar je Arduino-bord. Gebruik dan het onderstaande python-script en start het programma op je laptop / computer.
Nu kunt u elke film op uw computer afspelen met behulp van de VLC-mediaspeler en uw hand gebruiken om de film te bedienen, zoals weergegeven in de onderstaande video.
Ik hoop dat je het project hebt begrepen en ermee hebt gespeeld. Dit is slechts een demo en je kunt je creativiteit gebruiken om hier nog veel meer coole gebarengestuurde dingen omheen te bouwen. Laat me weten of dit nuttig was en wat je ermee gaat maken in het commentaargedeelte en ik zal het graag weten.