- Prerequisiti:
- Concetto alla base del progetto:
- Schema elettrico:
- Programmare il tuo Arduino:
- Programmare il tuo Python:
- Computer controllato tramite gesti in azione:
Recentemente i laptop oi computer controllati tramite gesti stanno diventando molto famosi. Questa tecnica è chiamata Leap motion che ci permette di controllare alcune funzioni sul nostro computer / laptop semplicemente agitando la mano davanti ad esso. È molto bello e divertente farlo, ma questi laptop hanno un prezzo davvero molto alto. Quindi in questo progetto proviamo a costruire il nostro laptop / computer con controllo gestuale combinando la potenza di Arduino e Python.
Useremo due sensori a ultrasuoni per determinare la posizione della nostra mano e controllare un lettore multimediale (VLC) in base alla posizione. L'ho usato per dimostrazione, ma una volta compreso il progetto, puoi fare qualsiasi cosa semplicemente cambiando poche righe di codice e controllare la tua applicazione preferita nel tuo modo preferito.
Prerequisiti:
Abbiamo già coperto alcuni progetti che combinano Arduino con Python. Quindi presumo che tu abbia già installato Python e la sua libreria seriale e abbia provato con successo alcuni progetti di base come il LED lampeggiante. In caso contrario, non preoccuparti, puoi tornare a questo tutorial sul controllo di Arduino-Python e andare d'accordo. Quindi assicurati di aver installato Python e la libreria pyserial prima di procedere.
Concetto alla base del progetto:
Il concetto alla base del progetto è molto semplice. Posizioneremo due sensori a ultrasuoni (US) sulla parte superiore del nostro monitor e leggeremo la distanza tra il monitor e la nostra mano utilizzando Arduino, in base a questo valore di distanza eseguiremo determinate azioni. Per eseguire azioni sul nostro computer utilizziamo la libreria Python pyautogui. I comandi da Arduino vengono inviati al computer tramite porta seriale (USB). Questi dati verranno quindi letti da Python in esecuzione sul computer e in base ai dati letti verrà eseguita un'azione.
Schema elettrico:
Per controllare il PC con i gesti delle mani, basta collegare i due sensori ad ultrasuoni con Arduino. Sappiamo che i sensori statunitensi funzionano con 5V e quindi sono alimentati dal regolatore di tensione di bordo di Arduino. L'Arduino può essere collegato al PC / Laptop per alimentare il modulo e anche per la comunicazione seriale. Una volta completati i collegamenti, posizionarli sul monitor come mostrato di seguito. Ho usato un nastro biadesivo per attaccarlo al mio monitor, ma puoi usare la tua creatività. Dopo averlo fissato in un luogo possiamo procedere con la programmazione.
Programmare il tuo Arduino:
L'Arduino dovrebbe essere programmato per leggere la distanza della mano dal sensore USA. Il programma completo è riportato alla fine di questa pagina; appena sotto ho dato la spiegazione del programma. Se sei nuovo al sensore a ultrasuoni, passa attraverso Arduino e Misurazione della distanza basata su sensori a ultrasuoni.
Leggendo il valore della distanza possiamo arrivare a determinate azioni da controllare con i gesti, ad esempio in questo programma ho programmato 5 azioni come demo.
Azione 1: quando entrambe le mani sono posizionate davanti al sensore a una distanza particolare, il video nel lettore VLC dovrebbe essere riprodotto / messo in pausa.
Azione 2: quando la mano destra è posizionata davanti al sensore a una distanza particolare, il video dovrebbe avanzare rapidamente di un passo.
Azione 3: quando la mano sinistra è posizionata davanti al sensore a una distanza particolare, il video dovrebbe riavvolgere di un passo.
Azione 4: Quando la mano destra viene posizionata davanti al sensore a una particolare distanza ravvicinata e quindi se viene spostata verso il sensore, il video dovrebbe avanzare velocemente e se spostato il video dovrebbe riavvolgere.
Azione 5: Quando la mano sinistra viene posizionata davanti al sensore ad una particolare distanza ravvicinata e quindi se spostata verso il sensore il volume del video dovrebbe aumentare e se spostata il volume dovrebbe diminuire.
Vediamo come è scritto il programma per eseguire le azioni di cui sopra. Quindi, come tutti i programmi, iniziamo con la definizione dei pin I / O come mostrato di seguito. I due sensori US sono collegati ai pin digitali 2,3,4 e 5 e sono alimentati dal pin + 5V. I pin trigger sono pin di uscita e i pin Echo sono pin di ingresso.
La comunicazione seriale tra Arduino e python avviene a una velocità di trasmissione di 9600.
const int trigger1 = 2; // Trigger pin del primo Sesnor const int echo1 = 3; // Echo pin del primo Sesnor const int trigger2 = 4; // Pin trigger del 2 ° Sesnor const int echo2 = 5; // Pin Echo del 2 ° Sesnor void setup () {Serial.begin (9600); pinMode (trigger1, OUTPUT); pinMode (echo1, INPUT); pinMode (trigger2, OUTPUT); pinMode (echo2, INPUT); }
Dobbiamo calcolare ogni volta la distanza tra il sensore e la mano prima di concludere qualsiasi azione. Quindi dobbiamo farlo molte volte, il che significa che questo codice dovrebbe essere usato come una funzione. Abbiamo scritto una funzione chiamata calcola_distanza () che ci restituirà la distanza tra il sensore e la mano.
/ * ### Funzione per calcolare la distanza ### * / void calcola_distanza (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; se (dist> 50) dist = 50; }
All'interno del nostro principale anello che controlliamo per il valore della distanza e eseguire le azioni di cui sopra. Prima di ciò usiamo due variabili distL e distR che vengono aggiornate con il valore corrente della distanza.
calcola_distanza (trigger1, echo1); distL = dist; // ottiene la distanza del sensore sinistro calcola_distanza (trigger2, echo2); distR = dist; // ottenere la distanza del sensore destro
Poiché conosciamo la distanza tra entrambi i sensori, ora possiamo confrontarla con valori predefiniti e arrivare a determinate azioni. Ad esempio, se entrambe le mani sono posizionate a una distanza di 40 mc, riproduciamo / mettiamo in pausa il video. Qui la parola "Riproduci / Pausa" verrà inviata tramite porta seriale
if ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Rileva entrambe le mani {Serial.println ("Play / Pause"); ritardo (500);}
Se la sola mano destra è posizionata prima del modulo, avanza velocemente il video di un passo e se è la mano sinistra riavvolgiamo di un passo. In base all'azione, qui la parola "Rewind" o "Forward" verrà inviata tramite porta seriale
if ((distL> 40 && distL <50) && (distR == 50)) // Rileva mano sinistra {Serial.println ("Rewind"); delay (500);} if ((distR> 40 && distR <50) && (distL == 50)) // Rileva mano destra {Serial.println ("Forward"); ritardo (500);}
Per il controllo dettagliato del volume e della traccia, utilizziamo una metodologia diversa in modo da prevenire falsi trigger. Per controllare il volume dobbiamo posizionare la mano sinistra a ca. Ad una distanza di 15 cm, è quindi possibile spostarlo verso il sensore per diminuire il volume oppure allontanarlo dal sensore per aumentare il volume. Il codice per lo stesso è mostrato di seguito. In base all'azione, qui la parola "Vup" o "Vdown" verrà inviata tramite porta seriale
// Blocca a sinistra - Modalità di controllo if (distL> = 13 && distL <= 17) {delay (100); // Hand Hold Time calcola_distanza (trigger1, echo1); distL = dist; if (distL> = 13 && distL <= 17) {Serial.println ("Left Locked"); while (distL <= 40) {calcola_distanza (trigger1, echo1); distL = dist; if (distL <10) // Inserito a mano {Serial.println ("Vup"); delay (300);} if (distL> 20) // Tirato fuori a mano {Serial.println ("Vdown"); ritardo (300);}}}}
Possiamo usare lo stesso metodo anche per il sensore del lato destro, per controllare la traccia del video. Cioè, se spostiamo la mano destra verso il sensore, il film avanza velocemente e se lo allontani dal sensore riavvolgerà il film. In base all'azione, qui la parola "Rewind" o "Forward" verrà inviata tramite porta seriale
Ora puoi leggere il codice completo per questo PC controllato tramite gesti fornito alla fine della pagina e provare a sottostimarlo nel suo insieme e quindi copiarlo sul tuo IDE Arduino.
Programmare il tuo Python:
Il programma Python per questo progetto è molto semplice. Non ci resta che stabilire una comunicazione seriale con Arduino attraverso il baud rate corretto e quindi eseguire alcune azioni di base della tastiera. Il primo passo con python sarebbe installare il modulo p yautogui . Assicurati di seguire questo passaggio perché il programma non funzionerà senza il modulo pyautogui.
Installazione del modulo pyautogui per Windows:
Segui i passaggi seguenti per installare pyautogui per Windows. Se stai utilizzando altre piattaforme anche i passaggi saranno più o meno simili. Assicurati che il tuo computer / laptop sia connesso a Internet e procedi con i passaggi seguenti
Passaggio 1: apri il prompt dei comandi di Windows e cambia la directory nella cartella in cui hai installato python. Per impostazione predefinita, il comando dovrebbe essere
cd C: \ Python27
Passaggio 2: all'interno della directory python, utilizzare il comando python –m pip install –upgrade pip per aggiornare il pip. Pip è uno strumento in Python che ci aiuta a installare facilmente i moduli Python. Una volta aggiornato questo modulo (come mostrato nell'immagine sotto), procedere al passaggio successivo.
python –m pip install –upgrade pip
Passaggio 3: utilizzare il comando " python –m pip install pyautogui " per installare il modulo pyautogui. Una volta che il processo ha esito positivo, dovresti vedere una schermata simile a questa di seguito.
python –m pip install –upgrade pip
Ora che il modulo pyautogui e il modulo pyserial (installati nel tutorial precedente) sono stati installati con successo con il python, possiamo procedere con il programma python. Il codice Python completo viene fornito alla fine del tutorial, ma la spiegazione per lo stesso è la seguente.
Importiamo tutti e tre i moduli richiesti per questo progetto. Sono pyautogui, pitone seriale e tempo.
import serial #Serial importato per comunicazione seriale import time #Required to use delay functions import pyautogui
Successivamente stabiliamo la connessione con Arduino tramite la porta COM. Nel mio computer Arduino è connesso a COM 18. Usa Gestione dispositivi per trovare a quale porta COM è connesso il tuo Arduino e correggi di conseguenza la riga seguente.
ArduinoSerial = serial.Serial ('com18', 9600) #Crea l'oggetto porta seriale chiamato arduinoSerialData time.sleep (2) # aspetta 2 secondi per stabilire la comunicazione
All'interno del ciclo while infinito, ascoltiamo ripetutamente la porta COM e confrontiamo le parole chiave con qualsiasi lavoro preimpostato e facciamo pressioni sulla tastiera di conseguenza.
while 1: incoming = str (ArduinoSerial.readline ()) # legge i dati seriali e stampali come linea print incoming se 'Play / Pause' in incoming: pyautogui.typewrite (, 0.2) if 'Rewind' in incoming: pyautogui. hotkey ('ctrl', 'left') se 'Forward' in arrivo: pyautogui.hotkey ('ctrl', 'right') se 'Vup' in arrivo: pyautogui.hotkey ('ctrl', 'down') if ' Vdown 'in arrivo: pyautogui.hotkey (' ctrl ',' up ')
Come puoi vedere, per premere un tasto dobbiamo semplicemente usare il comando “pyautogui.typewrite (, 0.2)” che premerà lo spazio del tasto per 0.2sec. Se hai bisogno di tasti di scelta rapida come ctrl + S, puoi utilizzare il comando di scelta rapida "pyautogui.hotkey ('ctrl', 's')".
Ho usato queste combinazioni perché funzionano su VLC media player, puoi modificarle nel modo che preferisci per creare le tue applicazioni per controllare qualsiasi cosa nel computer con i gesti.
Computer controllato tramite gesti in azione:
Effettua i collegamenti come sopra definito e carica il codice Arduino sulla tua scheda Arduino. Quindi usa lo script python di seguito e avvia il programma sul tuo laptop / computer.
Ora puoi riprodurre qualsiasi film sul tuo computer utilizzando il lettore multimediale VLC e utilizzare la mano per controllare il film come mostrato nel video riportato di seguito.
Spero che tu abbia capito il progetto e ti sia piaciuto giocarci. Questa è solo una demo e puoi usare la tua creatività per costruire molte più cose interessanti controllate dai gesti attorno a questo. Fammi sapere se questo è stato utile e cosa creerai usando questo nella sezione commenti e sarò felice di saperlo.