ARDUINO
Shield per
controller Joystick

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


 

Schema del Joystick

Shield per il collegamento

joystick_07.jpg

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);
}

Programma test.ino

homotix

PCBA

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

joystick_05.jpg joystick_02.gif joystick_01.gif
Foto dell'interno del Joystick Dimensioni del componente Misure delle forature per il CS

 Foto dell'utilizzo dello shield

Utilizzo dello shield per pilotare un dispositivo Pan & Tilt con un Joystik

Utilizzo dello shield per pilotare un dispositivo Pan & Tilt con un controller Nunchuck

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
Private Policy Cookie Policy