ARDUINO ultimo aggiornamento 20 aprile 2013 |
|
Questo è un joystick molto simile a quello
"analogico" montato sulla PS2 controller (PlayStation 2).
Il rilevamento dei movimenti direzionali è eseguito semplicemente da due
potenziometri - uno per ogni asse dal valore di 10 kΏ ciascuna. , il loro
valore può essere letto tramite delle porte Analogiche.
Questo joystick ha anche un pulsante di selezione che viene azionato quando
viene premuto il tasto di navigazione verso il basso.
Il joystick e la basetta sono forniti dalla
SPARKFUN codice
COM-09032
e BOB
09110
Per il suo utilizzo è possibile utilizzare
un apposito shield la cui costruzione è riportata in questa pagina
Downloads & Risorse:
Schema
(.pdf)
Eagle Files
(.zip)
|
Per leggere i valori forniti dal joystick si utilizzano i pin analog che possono leggere tensioni variabili da 0 a 5v, che Arduino trasforma in valori da 0 a 1023.
Pin Analogici
La Uno ha 6 ingressi analogici, etichettati da A0 ad A5, ognuno dei quali fornisce 10 bit di risoluzione (in pratica 1024 valori diversi). Per impostazione predefinita possono misurare una tensione di 5V riferita a massa, anche se è possibile cambiare l'estremità superiore del loro intervallo utilizzando il pin AREF e la funzione analogReference(). Inoltre, come per i pin digitali alcuni piedini hanno funzionalità specifiche:
Connettore Pin Analogici
I pin A4 (SDA) e A5 (SCL). permettono di realizzare una comunicazione nello standard I2C a due fili, in abbinamento alla libreria Wire
Il potenziometro è un sensore analogico.
Fisicamente è composto da 3 piedini ed al suo interno è presente una
striscia di materiale resistente: nel nostro caso il potenziometro è da
10KΩ, per cui in totale quella striscia resiste 10KΩ; i piedini laterali
sono collegati alle estremità della striscia, mentre quello centrale è
collegato ad un perno che può muoversi a contatto viene ruotato
l'albero. Elettronicamente, il potenziometro è un partitore
di tensione: se lo si alimenta dai piedini laterali, collegandolo ai pin
di alimentazione di Arduino, dal piedino centrale si potrà leggere
collegando a uno dei pin di ingresso analogico di Arduino il valore di
tensione.
A lato è riportato uno sketch di esempio (viene letto il il A2) in qui
dopo averlo caricato e aperto il serial monitor di Arduino, verrà
mostrata la tensione letta sul piedino. Ruotando da una parte
il Joystick si potrà incrementare fino a 5v, mentre ruotandolo
dall'altra decresce fino a 0.
Per leggere il sensore si utilizza la funzione analogRead(sensore),
che legge il
valore campionato dal convertitore analogico digitale del microchip. Il
convertitore analogico digitale (ADC) ha una risoluzione a 10 bit:
questo significa che converte la tensione 0-5v in valori 0-1023. Per
scoprire il valore originario della tensione presente sul piedino basta
fare una semplice proporzione, svolta in automatico dalla funzione map.
const short sensore = 2; void setup() { Serial.begin(9600); } void loop() { Serial.print("Lettura: "); Serial.print(map(analogRead(sensore),0,1023,0,5)); Serial.println(" V"); delay(200); }
Schema elettrico dello shield e filmato del test di prova
Alcune foto del test del Joystick per il comando di un dispositivo Pan & Tilt
Foto dello stampato per il montaggio del Joystick
Foto dell'interno del Joystick | Dimensioni del componente | Misure delle forature per il CS |
Foto dell'utilizzo dello shield
|
|
|||
Foto dello shield di collegamento
Programma di gestione
Il programma qui presentato permette di azionare un dispositivo Pan & Tilt che può essere auto costruito seguendo le indicazioni riportate in questa pagina
Programma test_Joystick_sparkfun.ino
/* Programma:test_Joystick_sparkfun.ino Versione: 1.0 Comando dispositivo Pan & Tilt tramite Nunchuk Porte utilizzate Pin +5V -> Alimentazione servo Pin GND -> Alimentazione Porta D5 servo Rotazione telecamera Porta D6 servo Rotazione base Porta A2 Lettura potenziometro orizzontale Porta A3 Lettura potenziometro verticale Creato il 08/4/2013 da Adriano Gandolfo <https://www.adrirobot.it> This example code is in the public domain. */ #include <Servo.h> Servo horzServo; // Crea l'oggetto servo per il servo per il movimento pan (orizzontale) Servo vertServo; // Crea l'oggetto servo per il servo per il movimento tilt (verticale) int horzPin = 2; // Input analogico per il joystick asse orizzontale int vertPin = 3; // Input analogico per il joystick asse verticale int horzVal; // Legge il valore dell'asse orizzontale int vertVal; // Legge il valore dell'asse verticale void setup() { horzServo.attach(5); // Si utilizza il pin 5 PWM per il servo orizzontale vertServo.attach(6); // Si utilizza il pin 6 PWM per il servo verticale } void loop() { horzVal = analogRead(horzPin); // Legge la posizione del joystick orizzontale horzVal = map(horzVal, 0, 1023, 0, 179); // Scala di lettura per soddisfare il servo horzServo.write(horzVal); // Sposta il servo alla posizione richiesta vertVal = analogRead(vertPin); // Legge la posizione del joystick verticale vertVal = map(vertVal, 0, 1023, 0, 179); // Scala di lettura per soddisfare il servo vertServo.write(vertVal); // Sposta il servo alla posizione richiesta delay(15); // Pausa di attesa per raggiungere la posizione } |
Progetto doppio JOYSTICK
Sotto è visibile il progetto di un doppio JOYSTICK ad opera di boldinid visibile sul sito GRIX nell'articolo Joystick per XE164
Elenco revisioni | |
20/04/2013 | Emissione preliminare |