Tutto è iniziato con un piccolo gioco dei secoli bui chiamato "Mario", fin dal momento in cui ero un piccoletto che saltava sulle anatre per salvare la mia principessa fino ad essere un bel principe mascolino che vagava in Persia (Prince of Persia) combattendo contro l'oscurità per salvare il mio mondo alle spalle sono stato un grande fan dei videogiochi e sono cresciuto giocando a loro. Ma a volte si annoiano e io mi sento meno coinvolto. Oggi, le console di gioco avanzate consentono il gioco virtuale e ci aiutano a sentire il gioco molto meglio di quanto possano fare una tastiera o un mouse.
Essendo un appassionato di Arduino, mi sono stancato di giocare al famoso gioco chiamato "Angry Birds" utilizzando tastiera e mouse e ho deciso di costruire il mio controller di gioco utilizzando un sensore Flex e un potenziometro. Quando il sensore di flessione viene tirato, anche l'uccello sulla catapulta verrà tirato e puoi usare il potenziometro per impostare la direzione in cui dovrebbe essere lanciato. Quindi quando rilasci il sensore di flessione l'uccello verrà lanciato. Mi è piaciuto molto farlo, quindi se hai intenzione di creare qualcosa di molto simile, questo tutorial sarà utile. Questo tutorial sarà utile anche per controllare il cursore del mouse usando il potenziometro.
Requisiti software e hardware:
Software:
- IDE Arduino
- Elaborazione IDE
- Gioco Angry Birds sul computer
Hardware:
- Arduino (qualsiasi versione)
- Potenziometro
- Sensore di flessione
- Resistenza da 47K ohm
- Collegamento dei cavi
- Breadboard
Concetto dietro:
La scheda Arduino legge i valori dal Potenziometro e dal Flex Senor e li trasmette al laptop / PC tramite la porta COM USB tramite la normale funzione Serial.write () . Quindi leggiamo queste informazioni usando Processing e controlliamo il cursore del mouse usando la classe Robot in Java che è supportata da Processing IDE. Abbiamo programmato l'IDE di elaborazione in modo tale che quando viene tirato il sensore Flex verrà fatto un clic del mouse e in base a quanto viene tirato il puntatore del mouse si muoverà in direzione X. Quindi in base al valore del potenziometro muoveremo il cursore del mouse in direzione Y, in questo modo possiamo impostare la direzione in cui deve essere lanciato l'uccello.
Schema elettrico:
Il circuito per riprodurre l'Angry Bird utilizzando Flex Sensor e Potentiometer è semplice.
Abbiamo semplicemente collegato un potenziometro e un sensore di flessione agli ingressi analogici (A0, A1) di Arduino. Anche l'uscita del sensore Flex viene ridotta utilizzando un resistore pull down da 47K.
Puoi collegarlo direttamente su breadboard o saldarlo a una scheda Perf e assemblarlo su guanti o qualcosa per renderlo più creativo. Ho semplicemente usato una breadboard per eseguire le mie connessioni come mostrato di seguito:
Programma Arduino:
Il codice Arduino completo viene fornito alla fine del tutorial. Di seguito vengono spiegate alcune linee importanti.
Inizializziamo il programma per lavorare con 9600 baud rate e iniziamo a leggere i valori dal sensore Flex e dal potenziometro. Come sappiamo, la funzione serial.write () può inviare solo un byte di dati alla volta. Poiché un byte è di 8 bit e 2 ^ 8 = 256. Saremo in grado di inviare valori da 0 a 256. Quindi dobbiamo comprimere i valori dell'uscita del sensore Flex e dell'uscita del potenziometro da 0 a 256.
Per farlo usiamo la funzione map () in Arduino. Tutti i valori del sensore di flessione vengono convertiti da 5 a 100, quindi quando pieghiamo il sensore aumenterà da 5 e quando rilasciato tornerà a 5. Per menzionare il clic del mouse, viene utilizzato il valore 1 e 0. Quando viene inviato 1, il mouse viene premuto e quando viene inviato 0 il mouse viene rilasciato.
se (FlexValue> = 65 && FlexValue <= 120) // il mio sensore di flessione varia da 65 a 120, il tuo potrebbe essere diverso {FlexValue = map (FlexValue, 120,65,0,100); // basato sulla flessione converte da 0 a 100 se (FlexValue> = 5) // 1 e 0 sono usati per il clic del mouse, quindi inizia da 5 {Mclick = true; Serial.write (1); // 1 viene inviato per fare clic con il pulsante sinistro del mouse su Serial.write (FlexValue); // Il valore Flex è la distanza alla quale spostare il mouse in direzione X} else {Mclick = false; Serial.write (0);}}
Allo stesso modo i valori del potenziometro vengono convertiti da 101 a 200 tramite la funzione map () e vengono inviati alla porta COM dei laptop facendo causa alla funzione Serial.write () come mostrato di seguito.
if (potValue <= 200) {potValue = map (potValue, 0,200,101,201); // Basato a sua volta, converte da 101 a 201 Serial.write (potValue); // Il valore del vaso è la distanza per muovere il mouse in direzione Y}
Il resto del programma viene spiegato utilizzando i commenti.
Codice elaborazione:
Processing è un'applicazione di sviluppo Open-Source e può essere facilmente scaricata e utilizzata per sviluppare progetti interessanti utilizzando Arduino o altri microcontrollori. Abbiamo già realizzato alcuni progetti utilizzando Processing e puoi verificarli facendo clic sui collegamenti sottostanti.
- Radio FM fai da te utilizzando l'elaborazione
- Realtà virtuale / controllo gestuale utilizzando Arduino
- Chat room privata utilizzando Arduino.
- Sistema radar Arduino con APP di elaborazione e sensore a ultrasuoni
- Rilevamento e monitoraggio dei volti in tempo reale utilizzando Arduino
- Tachimetro fai-da-te utilizzando Arduino e Processing
- Ping Pong Game con Arduino Accelerometer
- Robot bipede che utilizza Arduino
- Fotocamera per immagini termiche Arduino fai-da-te
In questo progetto abbiamo utilizzato l'IDE di elaborazione per leggere i valori della porta COM e controllare il puntatore del mouse in base ai valori ricevuti tramite la porta COM. Il codice di elaborazione completo per questo controller di gioco Angry Bird può essere scaricato dal link sottostante:
- Codice di elaborazione per questo controller di gioco Angry Bird (clic destro e "Salva collegamento con nome")
Il programma Arduino può essere trovato alla fine di questo tutorial. Il codice di elaborazione è stato modificato per adattarsi al nostro scopo dal codice fornito da yoggy sulla sua pagina GitHub.
I dati provenienti dalla porta COM dovrebbero essere letti con lo stesso baud rate con cui sono stati inviati da Arduino. Controlla anche quale porta COM è collegata al tuo Arduino utilizzando Gestione dispositivi. Il mio Arduino era collegato a COM3 ed era la 0a porta del mio computer e la velocità di trasmissione in Arduino era 9600 quindi il codice è il seguente
port = new Serial (this, Serial.list (), 9600);
Una volta che iniziamo a leggere i valori lo distinguiamo riconoscendolo in base al suo valore su come lo abbiamo inviato da Arduino. I valori vengono nuovamente mappati da 0 a 100 in modo che saremo in grado di controllare il mouse in base a quel valore.
if (port.available ()> 0) {data = port.read (); println (dati); // Leggi i dati dalla porta COM e salvali in data} if (data> = 101 && data <= 201) // Se il valore è compreso tra 101 e 201, allora deve provenire da Potentiometer {Turn = int (map (data, 101.201.0.100)); // Usa quel valore per trasformare il catapullt} if (data> = 5 && data <= 100) // Se il valore è compreso tra 5 e 100, allora deve provenire dal Flex Sensor {Pull = int (map (data, 5,100, 0,100));} // Usa quel valore per tirare la catapulta if (data == 1) click = true; // Usa quel valore per premere il pulsante del mouse se (data == 0) click = false; // Usa quel valore per rilasciare il pulsante del mouse
Una volta classificati i dati, possiamo quindi controllare il mouse utilizzando la classe Java Robot in elaborazione. Il comando robot.mouseMove (crntX-Pull, crntY + Turn); può essere utilizzato per spostare il mouse in qualsiasi posizione desiderata e le linee robot.mousePress (InputEvent.BUTTON1_DOWN_MASK); e robot.mouseRelease (InputEvent.BUTTON1_DOWN_MASK); può essere utilizzato rispettivamente per premere o rilasciare il pulsante del mouse.
if (click == false) // quando Flex Sesnor non viene estratto {crntX = (int) p.getX (); crntY = (int) p.getY (); if (Pull> 50) robot.mouseRelease (InputEvent.BUTTON1_DOWN_MASK); // Rilascia il pulsante del mouse} if (click == true) // quando Flex Sesnor viene estratto {robot.mousePress (InputEvent.BUTTON1_DOWN_MASK); // Premi il pulsante del mouse robot.mouseMove (crntX-Pull, crntY + Turn); // Sposta il mouse in base al valore Flex e POT}}
L'IDE di elaborazione all'avvio mostrerà anche una piccola finestra di dialogo in cui puoi trovare i valori di Pull, Turn e lo stato del clic del mouse come mostrato di seguito
Questo dettaglio può essere utilizzato per eseguire il debug del Programma o correggere i dati richiesti.
Lavorando:
Per far funzionare questo Angry Bird Project utilizzando il codice fornito, assembla l'hardware secondo lo schema del circuito e carica il codice Arduino fornito. Quindi nota a quale porta COM è collegato il tuo Arduino e apporta le modifiche necessarie nel codice di elaborazione e avvia lo schizzo di elaborazione.
Ora, avvia semplicemente il gioco dell'uccello arrabbiato e posiziona il cursore vicino alla catapulta e tira il sensore di flessione per tirare l'uccello e impostare la direzione usando il potenziometro. Una volta impostata la direzione, rilascia il sensore Flex
EEEEWWWWWEEEEEEEEEE !!!!!!!!!!……………
Il tuo uccello verrà lanciato in aria e BOOMM !! Sui maialini. La lavorazione completa si trova nel video sotto riportato.
Spero ti sia piaciuto il progetto e sei riuscito a costruire qualcosa di simile. Se hai dei dubbi puoi contattarmi nella sezione commenti o pubblicare la tua domanda sul forum per domande tecniche.
Ora, è ora di schiantarci contro quei salvadanai e riprenderci le uova degli uccelli !!!!