ARDUINO ultimo aggiornamento 20 aprile 2013 |
|
Questo è un joystick molto simile a quello
"analogico" montato sulla PS2 controller (PlayStation 2).
|
Downloads & Risorse:
Schema
(.pdf) |
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:
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 |