- Prerequisiti
- Schema elettrico
- Flusso di processo per Air Mouse
- Programmazione di Arduino per Air Mouse
- Script del driver Python
- Testare Arduino Air Mouse
Ti sei mai chiesto come si sta muovendo il nostro mondo verso la realtà immersiva. Siamo costantemente alla ricerca di nuovi modi e metodi per interagire con ciò che ci circonda utilizzando la realtà virtuale, la realtà mista, la realtà aumentata, ecc. Nuovi dispositivi escono ogni giorno con queste tecnologie di ritmo veloce per impressionarci con le loro nuove tecnologie interattive.
Queste tecnologie immersive vengono utilizzate nei giochi, nelle attività interattive, nell'intrattenimento e in molte altre applicazioni. In questo tutorial, conosceremo un tale metodo interattivo che ti offre un nuovo modo di interagire con il tuo sistema invece di usare un mouse noioso. I nostri fanatici dei giochi devono sapere che alcuni anni fa Nintendo, una società di giochi, vende l'idea di un metodo interattivo 3D per interagire con le loro console con l'aiuto di un controller portatile noto come controller Wii. Utilizza l' accelerometro per individuare i tuoi gesti per un gioco e inviarlo al sistema in modalità wireless. Se vuoi saperne di più su questa tecnologia puoi controllare il loro brevetto EP1854518B1, questo ti darà un'idea completa di come funziona questa tecnologia.
Ispirati da questa idea creeremo un "Air mouse", per interagire con i sistemi semplicemente spostando la console in aria, ma invece di utilizzare riferimenti di coordinate tridimensionali, useremo solo riferimenti di coordinate bidimensionali possiamo imitare le azioni del mouse del computer poiché il mouse funziona in due dimensioni X e Y.
Il concetto alla base di questo Wireless 3D Air Mouse è molto semplice, useremo un accelerometro per ottenere il valore dell'accelerazione delle azioni e dei movimenti del "Air mouse" lungo gli assi xey, quindi in base ai valori di l'accelerometro controlleremo il cursore del mouse ed eseguiremo determinate azioni con l'aiuto dei driver del software python in esecuzione sul computer.
Prerequisiti
- Arduino Nano (qualsiasi modello)
- Modulo accelerometro ADXL335
- Modulo Bluetooth HC-05
- Premi i pulsanti
- Computer installato Python
Per saperne di più sull'installazione di Python nel computer, segui il tutorial precedente sul controllo LED Arduino-Python.
Schema elettrico
Per controllare il tuo computer con i movimenti della tua mano hai bisogno di un accelerometro che dia l'accelerazione lungo gli assi X e Y e per rendere wireless l'intero sistema viene utilizzato un modulo Bluetooth per trasferire il segnale in modalità wireless al tuo sistema.
Qui viene utilizzato un accelerometro ADXL335, è un modulo a tre assi basato su MEMS che emette l'accelerazione lungo gli assi X, Y e Z ma come detto in precedenza per il controllo del mouse avremmo solo bisogno dell'accelerazione solo lungo gli assi X e Y. Ulteriori informazioni sull'utilizzo dell'accelerometro ADXL335 con Arduino con i nostri progetti precedenti:
- Sistema di allarme per incidenti automobilistici basato su Arduino con GPS, GSM e accelerometro
- Ping Pong Game con Arduino e Accelerometro
- Robot controllato con gesti della mano basato su accelerometro utilizzando Arduino
- Allarme rilevatore di terremoti utilizzando Arduino
Qui i pin Xout e Yout dell'accelerometro sono collegati ai pin Analog, A0 e A1 di Arduino e per trasmettere i segnali da Arduino al sistema qui viene utilizzato il modulo Bluetooth HC-05, poiché il Bluetooth funziona su Tx e Rx connessioni pin, quindi usiamo pin seriali software D2 e D3. È collegato tramite seriale software perché se colleghiamo il Bluetooth con la seriale hardware e iniziamo a ricevere le letture sulla console python mostrerebbe errori per la velocità di trasmissione non corrispondente poiché il Bluetooth comunicherebbe con il python sulla propria velocità di trasmissione. Scopri di più sull'utilizzo del modulo Bluetooth passando attraverso vari progetti basati su Bluetooth utilizzando diversi microcontrollori tra cui Arduino.
Qui abbiamo usato tre pulsanti: uno per attivare il mouse Air e altri due per il clic sinistro e destro, come mostrato nell'immagine sottostante:
Flusso di processo per Air Mouse
Il diagramma di flusso mostra il flusso di processo di Air Mouse basato su Arduino:
1. Il sistema controlla continuamente che il grilletto meccanico venga premuto finché non viene premuto, possiamo lavorare normalmente con il mouse del computer.
2. Quando il sistema rileva la pressione del pulsante, il controllo del mouse viene trasferito all'air mouse.
3. Quando si preme il pulsante di attivazione, il sistema inizia a trasferire le letture del mouse al computer. La lettura del sistema è costituita dalle letture dell'accelerometro e dalle letture per il clic sinistro e destro.
4. Le letture del sistema sono costituite dal flusso di dati di 1 byte o 8 bit, in cui i primi tre bit sono costituiti dalle coordinate X, i secondi tre bit sono costituiti dalle coordinate Y, il penultimo bit è il bit di stato per ottenere lo stato del clic sinistro del mouse e l'ultimo bit è il bit di stato per ottenere lo stato del clic destro.
5. Il valore dei primi tre bit, ovvero la coordinata X, può variare da 100 <= Xcord <= 999, mentre il valore per la coordinata Y può variare da 100 <= Ycord <= 800. I valori per il clic destro e il clic sinistro sono i valori binari 0 o 1 in cui 1 indica che il clic è stato effettuato e 0 che il clic non è stato effettuato dall'utente.
6. Per evitare che il rimbalzo del pulsante influenzi la posizione del cursore, viene mantenuto un ritardo noto di 4 secondi dopo ogni clic del pulsante di attivazione del mouse.
7. Per il clic destro e sinistro nell'air mouse, dobbiamo prima premere il pulsante sinistro o destro, dopodiché dobbiamo premere il pulsante di attivazione per spostarci nella posizione del mouse aereo dove vogliamo.
Programmazione di Arduino per Air Mouse
L'Arduino dovrebbe essere programmato per leggere i valori di accelerazione negli assi X e Y. Il programma completo è fornito alla fine, di seguito sono riportati i frammenti importanti del codice.
Impostazione delle variabili globali
Come detto in precedenza collegheremo il modulo Bluetooth con i pin seriali del software. Quindi per impostare il software seriale dobbiamo dichiarare la libreria del software seriale e impostare i pin per Tx e Rx. In Arduino Nano e Uno Pin 2 e 3 possono funzionare come un software seriale. Successivamente, dichiariamo l'oggetto Bluetooth dalla libreria seriale del software per impostare il pin per Tx e Rx.
#includere
Void setup ()
Nella funzione setup , imposteremo le variabili per dire al programma se agiranno come input o output. Il pulsante di attivazione sarebbe impostato come pull-up di input ei clic sinistro e destro sono dichiarati come input e impostati come High per farli agire come pullup di input.
Impostare anche la velocità in baud per la comunicazione seriale e Bluetooth su 9600.
void setup () { pinMode (x, INPUT); pinMode (y, INPUT); pinMode (trigger, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); pinMode (led, OUTPUT); digitalWrite (lclick, HIGH); digitalWrite (rclick, HIGH); Serial.begin (9600); bluetooth.begin (9600); }
Void loop ()
Poiché avremmo bisogno del pulsante di attivazione per indicare quando è necessario inviare al sistema il flusso di dati, quindi abbiamo impostato l'intero codice all'interno del ciclo while che monitorerà continuamente lo stato digitale del trigger di pull-up, man mano che va basso lo farà passarlo ulteriormente per l'elaborazione.
Poiché abbiamo collegato un LED per farci sapere lo stato del sistema quando viene premuto il pulsante di attivazione, inizialmente impostiamo il led su basso al di fuori del ciclo while come condizione predefinita e alto all'interno del ciclo while che accenderà il led ogni volta che si preme il pulsante di attivazione.
Per leggere lo stato dei pulsanti sinistro e destro abbiamo dichiarato globalmente due variabili lclick e rclick i cui valori inizialmente erano impostati a 0.
E nel ciclo , impostare il valore di quelle variabili in base allo stato digitale dei pulsanti di clic sinistro e destro per verificare se i pulsanti sono premuti o meno.
Leggeremmo i valori dei pin di uscita X e Y dell'accelerometro usando la funzione analogRead e mapperemmo quei valori alla dimensione dello schermo per far muovere il puntatore del mouse su tutto lo schermo. Poiché la dimensione dello schermo è i pixel nello schermo, dobbiamo impostarla di conseguenza e poiché abbiamo bisogno che il valore di output sia di tre cifre, abbiamo deliberatamente impostato l'intervallo per la X come 100 <= X <= 999 e allo stesso modo il valore per Y come 100 <= Y <= 800. Ricorda, i pixel vengono letti dall'angolo in alto a sinistra, cioè l'angolo in alto a sinistra ha il valore (0,0), ma poiché abbiamo dichiarato tre cifre per xey, i nostri valori sarebbero letti dal punto (100,100).
Inoltre, stampa il valore delle coordinate e lo stato del clic su seriale e Bluetooth con l'aiuto delle funzioni Serial.print e bluetooth.print che aiutano a ottenere i valori sul monitor seriale e sul tuo sistema tramite Bluetooth.
Infine, a causa del rimbalzo di un pulsante può essere ripetuto un singolo valore che farebbe indugiare il cursore del mouse su una singola posizione, quindi per eliminare questo dobbiamo aggiungere questo ritardo.
void loop () { digitalWrite (led, LOW); while (digitalRead (trigger) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analogRead (x); yh = analogRead (y); xcord = mappa (xh, 286.429.100.999); ycord = mappa (yh, 282.427.100.800); Serial.print (xcord); Serial.print (ycord); if (lstate == LOW) Serial.print (1); altro Serial.print (0); if (rstate == LOW) Serial.print (1); altro Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); if (lstate == LOW) bluetooth.print (1); altro bluetooth.print (0); if (rstate == LOW) bluetooth.print (1); altro bluetooth.print (0); ritardo (4000); }}
Script del driver Python
A partire da ora, abbiamo completato con l'hardware e la sua parte firmware, ora per far funzionare il mouse aereo abbiamo bisogno di uno script del driver che possa decodificare i segnali dal mouse aereo nei movimenti del cursore, quindi per questo abbiamo scelto Pitone. Python è un linguaggio di scripting e con lo scripting qui intendiamo che ci aiuta a ottenere il controllo dell'altro programma, poiché qui stiamo controllando il cursore del mouse.
Quindi apri la tua shell python e installa le seguenti librerie utilizzando i comandi seguenti:
pip installa pip seriale installa pyautogui
La seriale è una libreria per python che ci aiuta a ottenere i dati da interfacce seriali come le porte com e ci consente anche di manipolarli mentre pyautogui è una libreria per python per ottenere il controllo sulle funzionalità della GUI, in questo caso, il mouse.
Veniamo ora al codice per i driver, la prima cosa che dobbiamo fare è importare le librerie seriale e pyautogui, e poi dalla libreria seriale, dobbiamo impostare la porta com per la comunicazione con un baud rate di 9600, il uguale a Bluetooth.serial in cui opera. Per questo devi connettere il modulo Bluetooth al tuo sistema e quindi nelle impostazioni di sistema devi controllare a quale porta com è connesso.
La prossima cosa è leggere la comunicazione seriale dal Bluetooth al sistema e per mantenerla continuamente mantenere il resto del codice in un ciclo continuo con l'aiuto di while 1.
Come detto in precedenza, Arduino sta inviando 8 bit, i primi 6 per le coordinate e gli ultimi due per lo stato dei pulsanti di clic. Quindi leggi tutti i bit con l'aiuto di ser.read e imposta la sua lunghezza su 8 bit.
Quindi, dividi i bit per le coordinate del cursore e fai clic tagliandoli, quindi affetta ulteriormente i bit del cursore in coordinate X e Y separatamente. Lo stesso vale per il clic sinistro e destro.
Ora dalla comunicazione, otteniamo una stringa di byte e dobbiamo convertirla in un numero intero in modo che possano adattarsi alle coordinate, lo facciamo decodificandole e quindi digitandole in numeri interi.
Ora per spostare il cursore usiamo la funzione pyautogui moveto , che prende come argomenti quelle coordinate intere e sposta il cursore in quella posizione.
Successivamente controlla i clic, lo facciamo utilizzando gli ultimi due bit e la funzione clic di pyautogui, il suo clic predefinito è quello sinistro, tuttavia possiamo impostarlo a destra dichiarando il valore del pulsante a destra, possiamo anche definire il numero di clic per impostarlo su un doppio clic impostando il parametro clicks su 2.
Di seguito è riportato il codice Python completo da eseguire sul computer:
import serial import pyautogui ser = serial.Serial ('com3', 9600) mentre 1: k = ser.read (8) cursore = k clic = k x = cursore y = cursore l = clic r = clic xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor) if l == 49: pyautogui.click (clicks = 2) elif r = = 49: pyautogui.click (pulsante = 'destra', clic = 2)
Testare Arduino Air Mouse
Quindi, per utilizzare l'Air Mouse, collegare una fonte di alimentazione ad esso. Può provenire dallo slot USB Arduino Nano o dall'alimentatore regolato 5v utilizzando 7805 IC. Quindi esegui lo script del driver python impostando la porta com a cui è connesso il tuo Bluetooth. Mentre lo script viene eseguito, vedrai un ritardo nel lampeggiare del Bluetooth, significa che è connesso al tuo sistema. Quindi per azionarlo fare clic sul pulsante di attivazione e si vedrebbe che la posizione delle coordinate cambierebbe e se si desidera il clic sinistro o destro, quindi premere prima il pulsante sinistro o destro e il pulsante di attivazione insieme, vedrai l'azione del clic su una posizione del cursore modificata.
Controlla il video di lavoro dettagliato di seguito.