- Materiale richiesto
- Capire il modulo joystick:
- Schema elettrico:
- Programmazione per l'interfacciamento del joystick:
- Visualizzazione simulazione:
- Hardware e funzionamento:
I dispositivi di input svolgono un ruolo fondamentale in qualsiasi progetto di elettronica. Questi dispositivi di input aiutano l'utente a interagire con il mondo digitale. Un dispositivo di input può essere semplice come un pulsante o complicato come un touch screen; varia in base alle esigenze del progetto. In questo tutorial impareremo come interfacciare un joystick con il nostro microcontrollore PIC, un joystick è un modo fantastico per interagire con il mondo digitale e quasi tutti ne avrebbero usato uno per giocare ai videogiochi nella loro età adolescenziale.
Un joystick potrebbe sembrare un dispositivo sofisticato, ma in realtà è solo una combinazione di due potenziometri e un pulsante. Quindi è anche molto facile interfacciarsi con qualsiasi MCU a condizione che sappiamo come utilizzare la funzione ADC di tale MCU. Abbiamo già imparato come usare ADC con PIC, quindi sarebbe solo un aggiramento per interfacciare il Joystick. Per le persone che sono nuove a scegliere, si consiglia di imparare il progetto ADC di cui sopra e il progetto di sequenza di lampeggiamento LED per rendere più facile la comprensione del progetto.
Materiale richiesto
- PicKit 3 per la programmazione
- Modulo Joy Stick
- PIC16F877A IC
- 40 - Porta IC pin
- Scheda Perf
- OSC in cristallo da 20 MHz
- Perni Bergstik
- Resistenza da 220ohm
- 5 LED di qualsiasi colore
- 1 kit di saldatura
- IC 7805
- Adattatore 12V
- Cavi di collegamento
- Breadboard
Capire il modulo joystick:
I joystick sono disponibili in diverse forme e dimensioni. Un tipico modulo Joystick è mostrato nella figura seguente. Un Joystick non è altro che un paio di potenziometri e pulsanti montati su una disposizione meccanica intelligente. Il potenziometro viene utilizzato per tenere traccia del movimento X e Y del joystick e il pulsante viene utilizzato per rilevare se il joystick viene premuto. Entrambi i Potenziometri emettono una tensione analogica che dipende dalla posizione del joystick. E possiamo ottenere la direzione del movimento interpretando questi cambiamenti di tensione usando un microcontrollore. In precedenza abbiamo interfacciato Joystick con AVR, Joystick con Arduino e Raspberry Pi.
Prima di interfacciare qualsiasi sensore o modulo con un microcontrollore è importante sapere come funziona. Qui il nostro joystick ha 5 pin di uscita di cui due per l'alimentazione e tre per i dati. Il modulo dovrebbe essere alimentato con + 5V. I pin dei dati sono denominati VRX, VRY e SW.
Il termine "VRX" sta per tensione variabile sull'asse X e il termine "VRY" sta per tensione variabile sull'asse Y e "SW" sta per interruttore.
Quindi, quando spostiamo il joystick a sinistra oa destra, il valore di tensione su VRX varierà e quando lo cambiamo in su o in giù, VRY varierà. Allo stesso modo, quando lo spostiamo in diagonale, sia VRX che VRY varieranno. Quando premiamo l'interruttore, il pin SW sarà collegato a massa. La figura seguente ti aiuterà a comprendere molto meglio i valori di output
Schema elettrico:
Ora che sappiamo come funziona il Joy stick, possiamo arrivare alla conclusione che avremo bisogno di due pin ADC e un pin di ingresso digitale per leggere tutti e tre i pin dati del modulo Joystick. Lo schema elettrico completo è mostrato nella figura sotto
Come puoi vedere nello schema elettrico, al posto del joystick abbiamo usato due potenziometri RV1 e RV3 come ingressi di tensione analogici e un ingresso logico per l'interruttore. È possibile seguire le etichette scritte in colore viola per abbinare i nomi dei pin ed effettuare i collegamenti di conseguenza.
Notare che i pin analogici sono collegati ai canali A0 e A1 e l'interruttore digitale è collegato a RB0. Avremo anche 5 luci LED collegate come uscita, in modo che possiamo accenderne una in base alla direzione in cui viene spostato il joystick. Quindi questi pin di uscita sono collegati alla PORTA C da RC0 a RC4. Una volta eseguito il panning del nostro schema circuitale, possiamo procedere con la programmazione, quindi simulare il programma su questo circuito quindi costruire il circuito su una breadboard e quindi caricare il programma sull'hardware. Per darti un'idea del mio hardware dopo aver effettuato i collegamenti di cui sopra è mostrato di seguito
Programmazione per l'interfacciamento del joystick:
Il programma per interfacciare il joystick con il PIC è semplice e diretto. Sappiamo già a quali pin è collegato il Joystick e qual è la loro funzione, quindi dobbiamo semplicemente leggere la tensione analogica dai pin e controllare i LED di uscita di conseguenza.
Il programma completo per farlo è fornito alla fine di questo documento, ma per spiegare le cose sto suddividendo il codice in piccoli frammenti significativi di seguito.
Come sempre il programma viene avviato impostando i bit di configurazione, non discuteremo molto sull'impostazione dei bit di configurazione perché l'abbiamo già imparato nel progetto LED Blinking ed è lo stesso anche per questo progetto. Una volta impostati i bit di configurazione, dobbiamo definire le funzioni ADC per l'utilizzo del modulo ADC nel nostro PIC. Queste funzioni sono state apprese anche nel tutorial su come utilizzare ADC con PIC. Dopodiché, dobbiamo dichiarare quali pin sono input e quali sono pin di output. Qui il LED è collegato a PORTC in modo che siano pin di uscita e il pin Switch del Joystick è un pin di ingresso digitale. Quindi usiamo le seguenti righe per dichiarare lo stesso:
// ***** Configurazione I / O **** // TRISC = 0X00; // PORT C viene utilizzata come porte di output PORTC = 0X00; // Rende tutti i pin bassi TRISB0 = 1; // RB0 viene utilizzato come ingresso // *** Fine della configurazione I / O ** ///
I pin ADC non devono essere definiti come pin di ingresso perché quando si utilizza la funzione ADC verranno assegnati come pin di ingresso. Una volta definiti i pin, possiamo chiamare la funzione ADC_initialize che abbiamo definito in precedenza. Questa funzione imposterà i registri ADC richiesti e preparerà il modulo ADC.
ADC_Initialize (); // Configura il modulo ADC
Ora, entriamo nel nostro ciclo while infinito. All'interno di questo loop dobbiamo monitorare i valori di VRX, VRY e SW e in base ai valori dobbiamo controllare l'output del led. Possiamo iniziare il processo di monitoraggio leggendo la tensione analogica di VRX e VRY utilizzando le righe seguenti
int joy_X = (ADC_Read (0)); // Leggi l'asse X del joystick int joy_Y = (ADC_Read (1)); // Leggi l'asse Y del joystick
Questa riga salverà il valore di VRX e VRY rispettivamente nella variabile joy_X e joy_Y . La funzione ADC_Read (0) significa che stiamo leggendo il valore ADC dal canale 0 che è il pin A0. Abbiamo collegato VRX e VRY ai pin A0 e A1 e quindi leggiamo da 0 e 1.
Se puoi ricordare dal nostro tutorial ADC sappiamo che leggiamo il voltaggio analogico, essendo il PIC un dispositivo digitale lo leggerà da 0 a 1023. Questo valore dipende dalla posizione del modulo joystick. È possibile utilizzare il diagramma delle etichette sopra per sapere quale valore aspettarsi per ogni posizione del joystick.
Qui ho usato il valore limite di 200 come limite inferiore e un valore di 800 come limite superiore. Puoi usare tutto quello che vuoi. Quindi usiamo questi valori e iniziamo ad accendere i LED di conseguenza. Per fare questo dobbiamo confrontare il valore di joy_X con i valori predefiniti utilizzando un loop IF e rendere i pin del LED alti o bassi come mostrato di seguito. Le righe di commento ti aiuteranno a capire meglio
if (joy_X <200) // Joy è salito {RC0 = 0; RC1 = 1;} // LED superiore acceso altrimenti se (joy_X> 800) // Joy si è spostata in basso {RC0 = 1; RC1 = 0;} // LED inferiore bagliore else // Se non spostato {RC0 = 0; RC1 = 0;} // Spegni entrambi i led
Allo stesso modo possiamo fare lo stesso anche per il valore dell'asse Y. Dobbiamo solo sostituire la variabile joy_X con joy_Y e controllare anche i prossimi due pin LED come mostrato di seguito. Notare che quando il joystick non viene spostato spegniamo entrambe le luci LED.
if (joy_Y <200) // Joy si è spostata a sinistra {RC2 = 0; RC3 = 1;} // LED acceso a sinistra else if (joy_Y> 800) // Joy si è spostata a destra {RC2 = 1; RC3 = 0;} // LED acceso a destra else // Se non spostato {RC2 = 0; RC3 = 0;} // Spegne entrambi i LED
Ora abbiamo un'ultima cosa da fare, dobbiamo controllare se l'interruttore è premuto. Il pin dell'interruttore è collegato a RB0 in modo da poter utilizzare nuovamente if loop e verificare se è acceso. Se viene premuto spegneremo il LED per indicare che l'interruttore è stato premuto.
if (RB0 == 1) // Se viene premuto Joy RC4 = 1; // LED centrale bagliore altrimenti RC4 = 0; // LED centrale spento
Visualizzazione simulazione:
Il progetto completo può essere simulato utilizzando il software Proteus. Una volta scritto il programma compila il codice e collega il codice hex della simulazione al circuito. Quindi dovresti notare le luci LED che si accendono in base alla posizione dei potenziometri. La simulazione è mostrata di seguito:
Hardware e funzionamento:
Dopo aver verificato il codice utilizzando la simulazione, possiamo costruire il circuito su una breadboard. Se hai seguito i tutorial PIC, avresti notato che usiamo la stessa scheda perf che ha il circuito PIC e 7805 saldato su di essa. Se sei anche interessato a crearne uno in modo da usarlo con tutti i tuoi progetti PIC, allora salda il circuito su una scheda perf. Oppure puoi anche costruire il circuito completo su una breadboard. Una volta che l'hardware è fatto, sarebbe qualcosa del genere di seguito.
Ora carica il codice sul microcontrollore PIC usando PICkit3. Puoi fare riferimento al progetto LED Blink come guida. Dovresti notare che la luce gialla si alza non appena il programma viene caricato. Ora usa il joystick e varia la manopola, per ogni direzione del joystick noterai che il rispettivo LED si accende. Quando viene premuto l'interruttore al centro, il LED al centro si spegne.
Questo lavoro è solo un esempio, su di esso puoi costruire molti progetti interessanti. Il funzionamento completo del progetto si trova anche nel video riportato alla fine di questa pagina.
Spero che tu abbia capito il progetto e ti sia piaciuto realizzarlo, se hai qualche problema nel farlo sentiti libero di pubblicarlo nella sezione commenti qui sotto o scrivilo sui forum per ottenere aiuto.