ultimo aggiornamento 11 febbraio 2012


JLCPCB - 10 PCB per $ 2 (100 * 100 mm, 2-layer)
Il più grande produttore di PCB in Cina, oltre 600.000 clienti e oltre 10.000 ordini online al giorno
Produzione veloce in sole 24 ore e preventivo online gratuito: https://jlcpcb.com/quote



Controller per console per Playstation 2

Per impartire i comandi ad un robot è possibile utilizzare un controller che di solito è utilizzato nella console per videogiochi tipo Playstation 2 della Sony
Per pilotare ArduinoBOT può essere utilizzato qualunque controller compatibile con la versione originale.

OurPCB, your most reliable PCB and PCBA supplier.

Su di esso sono presenti sedici pulsanti di cui quattro formano un pad direzionale e quattro tasti (identificati dai simboli triangolo, cerchio, croce e quadrato) verranno utilizzati per il movimento della telecamera, sono poi presenti due joystick analogici

Anche se ogni tasto può essere configurato per eseguire un'azione specifica, tutti funzionano sullo stesso principio. Ogni pulsante è un interruttore che completa un circuito quando è premuto; come già detto sono presenti due joystick analogici che sono realizzati con due potenziometri (resistenze variabili) posti ad angolo retto tra loro sotto il joystick.
In base alla posizione, il joystick varia la resistenza del potenziometro interno e, di conseguenza, anche la tensione in uscita. Leggendo questa tensione con un convertitore analogico, è possibile determinare l'angolo in cui si trova il joystick, e determinare la risposta appropriata sulla base di tale angolo.
Un'altra particolarità del controller (se è della serie Dual Shock), è il force feedback che fornisce una stimolazione tattile. Il Force feedback è realizzato attraverso l'uso di un dispositivo molto comune: un semplice motore elettrico, inserito in ogni impugnatura. Sull'albero di ciascun motore è montato un peso sbilanciato. Quando l'alimentazione è fornita al motore, il peso inizia a girare.
Poiché il peso è sbilanciato, il motore cerca di oscillare ma, essendo il motore bloccato all'interno del controller, l'oscillazione si traduce in una vibrazione del controller stesso. l’azionamento dei motori è controllato da un processore che li codifica e li trasmette tramite una linea seriale a 8bit.
L’uscita è rappresentata da uno speciale connettore a 9 pin Figura 15) le cui funzioni dei pin sono riportate nella Tabella

Pin Nome Descrizione

1

DATA Questo pin porta il segnale che il controllore invia ad Arduino ogni volta che si preme un tasto.
Si tratta di una trasmissione seriale a 8-bit.

2

COMMAND Questo pin è utilizzato da Arduino per inviare informazioni al controller.
Tali informazioni possono azionare i motori in un controller Dual Shock al momento opportuno.
Si utilizza una trasmissione seriale a 8 bit.

3

NON USATO  

4

MASSA  

5

ALIMENTAZIONE Questo pin fornisce l’alimentazione che può variare dai 3 ai 5V.

6

 ATT Questo pin è utilizzato da Arduino per avvertire il controller che sta per trasmettere dei dati. ATT è usato per ottenere l'attenzione del controller.
Questo segnale andrà a livello basso per la durata di una trasmissione.

7

CLOCK Usato per mantenere le unità in sincronia. Segnale inviato dalla scheda Arduino.

8

NON USATO  

9

ACKNOWLEDGE Questo pin invia un segnale alla scheda Arduino dal controller dopo ogni comando che si riceve sul pin 2.

 

Cavo interfaccia controller-Shield

Come abbiamo visto il controller ha uno speciale connettore per il collegamento alla console di gioco. Per evitare di dover tagliare il cavo è possibile utilizzare un apposito adattatore reperibile sul sito Lynxmotion con il codice PS2C-01.
Il cavo presenta da un lato lo speciale connettore mentre all’altro capo i cavi sono raggruppati in 4 connettori secondo lo schema riportato sotto.

Esempio di utilizzo del controllo sul mio robot ArduinoBOT

Utilizzo delle librerie

Per l'interpretazione dei comandi forniti dal controller verso Arduino sono disponibili due tipologie di librerie: GPSX e PSX.
La prima denominata GPSX è più completa poiché permette anche di monitorare i joystick analogici e il controllo dei due motori che forniscono il force feedback.
La seconda PSX è più semplice e fornisce solo l’indicazione dei tasti premuti.
 

Libreria GPSX

La libreria GPSX può essere scaricata a questo indirizzo http://pspunch.com/pd/files/library/GPSX.zip ( https://github.com/madsci1016/Arduino-PS2X) è in grado di gestire 2 joypad. I tasti che possono essere premuti sul joypad e definiti dalla libreria, sono:

  • SELECT(padNo)

  • LEFT(padNo)

  • DOWN(padNo)

  • RIGHT(padNo)

  • UP(padNo)

  • START(padNo)

  • STICK_RIGHT(padNo)

  • STICK_LEFT(padNo)

  • SQUARE(padNo)

  • CROSS(padNo)

  • CIRCLE(padNo)

  • TRIANGLE(padNo)

  • R1(padNo)

  • L1(padNo)

  • R2(padNo)

  • L2(padNo)

I pulsanti sono considerati in 3 casi:

ANALOG_RIGHT_X(padNo); ANALOG_RIGHT_Y(padNo);  ANALOG_LEFT_X(padNo);  ANALOG_LEFT_Y(padNo)

Nelle manopole della playstation 2 ci sono 2 motori (Dual Shock) ed è possibile abilitarli e disabilitarli. Un motore da una vibrazione più forte mentre l'altro da una vibrazione più lieve.

PSX.motorEnable(padNo, Motor1Enable, Motor2Enabl

Dove:

padNo = PSX_PAD1 | PSX_PAD2
Motor1Enable = MOTOR1_ENABLE | MOTOR1_DISABLE
Motor2Enable = MOTOR2_ENABLE | MOTOR2_DISABLE

La vibrazione è regolabile via software con una semplice istruzione.

PSX.motor(padNo, Motor1OnOff, uint8_t Motor2Speed)

Dove:

padNo = PSX_PAD1 | PSX_PAD2
• Motor1OnOff = MOTOR1_ON | MOTOR1_OFF
• Motor2Speed = uint8_t che assumerà il valore zero se sarà uguale a 0x00 fino ad arrivare a 255 se posto uguale a 0xFF.

Possiamo infine decidere via software, se usare la manopola in modalità digitale, (quindi il joystick sinistrò avrà lo stesso effetto di freccia sù, freccia giù, sinistra destra, e il joystick sinistro avrà lo stesso effetto di triangolo, cerchio quadrato e x), oppure in modalità analogica quindi i joystick, se mossi, restituiranno un valore analogico come visto nella funzione precedente ANALOG_xxx_YYY_asse(padNo)).

•PSX.mode(padNo, mode, lock)

Dove:

• padNo = PSX_PAD1 | PSX_PAD2
• mode = MODE_DIGITAL | MODE_ANALOG
• lock = MODE_UNLOCK | MODE_LOCK
 

Utilizzo della libreria

Per utilizzare i comandi bisognerà prima di tutto scaricare la libreria da questo link:  http://pspunch.com/pd/files/library/GPSX.zip  Il file andrà poi scompattato all’interno della cartella GPSX a sua volta posta nella cartella delle librerie Arduino.    Dentro questa cartella troverete i seguenti files:

GPSX.c
GPSX.h
GPSXClass.cpp
GPSXClass.h
keywords.txt
README_en.txt
README_ja.txt
Schematic.bmp

Compresa una cartella denominata “Example” al cui interno troverete un programma “interface_pad1.pde” per testare il controller.    Prima di utilizzare il programma occorrerà editare la libreria GPSX.c con un editor di testo (notepad andrà benissimo), e una volta aperto il file sostituite nelle righe #define il numero del pin effettivamente utilizzato.   Per cui le linee:

#define DAT_PIN 7 // CTL1 Data
#define CMD_PIN 6 // CTL2 Command
// CTL3 9V for Motor (Optional)
// CTL4 GND
// CTL5 VCC
#define AT1_PIN 5 // CTL6 Attention (PAD1)
#define CLK_PIN 4 // CTL7 Clock
// CTL8 N/C
#define ACK_PIN 3 // CTL9 ACK
#define AT2_PIN 2 // CTL6 Attention (PAD2) per un eventuale secondo joypad

Diventano nella nostra applicazione:

#define DAT_PIN 2 // CTL1 Data
#define CMD_PIN 3 // CTL2 Command
// CTL3 9V for Motor (Optional)
// CTL4 GND
// CTL5 VCC
#define AT1_PIN 4 // CTL6 Attention (PAD1)
#define CLK_PIN 5 // CTL7 Clock
// CTL8 N/C
#define ACK_PIN 6 // CTL9 ACK
#define AT2_PIN 7 // CTL6 Attention (PAD2)

Una volta fatta la modifica, salvate il file e assicuratevi che l'estensione sia sempre .c Ora potete aprire il programma Arduino e controllare se la libreria è stata installata correttamente.

 

LibreriaPSX
Anche questa libreria permette ad Arduino di interfacciarsi con uno controller digitale standard Playstation (o suoi cloni). Ciascun pulsante è definito nella libreria, i tasti riconosciuti sono: Left, Down, Right, Up, Strt, Slct, Squ, X, O, Tri, R1, L1, R2, L2.

Utilizzo della libreria

Per l'installazione bisognerà scaricare la libreria da questo link: http://arduino.cc/playground/uploads/Main/Psx.zip  Si dovrà poi decomprimere il pacchetto nella directory Arduino \ librerie. Dentro questa cartella troverete i seguenti files:

.DS_Store
gpl.txt
keywords.txt
Psx.cpp
Psx.h

Compresa una cartella denominata “Example” al cui interno troverete un programma “Psx.pde” per testare il controller.  L'uso della biblioteca è semplice, richiedendo solo un’inizializzazione, un’assegnazione dei pin e un comando di lettura.
 

Comandi:

Psx ()
Usato per inizializzare la libreria: Es: Psx Psx;

setupPins (dataPin, cmndPin, attPin, clockPin, ritardo)
Definisce i pin di Arduino a cui è collegato il controller, così come il ritardo per cui il clock rimane alto o basso: Ex: Psx.setupPins (2, 3, 4, 5, 10)

read ()
Legge i dati pulsante dal controller playstation.: Es: data = Psx.read ();
I dati sono restituiti come numeri interi senza segno, e ogni bit rappresenta un pulsante specifico. Può essere testati utilizzando un semplice if.: Es: If (dati & psxUp)

Ciascun pulsante è definito nella libreria, quindi non c'è bisogno di usare codici esadecimali durante il test.  I tasti riconosciuti sono riportati nella tabella sotto riportata

psxLeft

 0x0001

psxDown

 0x0002

psxRight

 0x0004

psxUp

 0x0008

psxStrt

 0x0010

psxSlct

 0x0080

psxSqu

 0x0100

psxX

 0x0200

psxO

 0x0400

psxTri

 0x0800

psxR1

 0x1000

psxL1

 0x2000

psxR2

 0x4000

psxL2

 0x8000

Dual Stick Gamepad - Transparent GM-1520T

 

Elenco revisioni
11/02/2012 Emissione preliminare