[Arduino Leonardo] - Interfaccia comandi per simulatore di volo - parte hardware

Salve a tutti. Dopo essermi presentato nell'apposita sezione ed aver descritto nella sezione Generale cosa vorrei fare, apro questo thread per chiedere assistenza sulla parte hardware. Aprirò anche un thread nella sezione software per discutere del programma. Come da oggetto, vorrei costruire un interfaccia per alcuni comandi del simulatore di volo con cui gioco (Digital Combat Simulator). Il simulatore richiede, come i simulatori in genere, parecchi comandi via tastiera, comandi non facili da gestire essendo normalmente le mani impegnate col joystick, relativa manetta e pulsanti. Vorrei allora costruire una sorta di consolle comandi da usare con la mano sinistra su cui raccogliere alcuni potenziometri e pulsanti e usare poi un Arduino Leonardo, configurato come tastiera usb, per "tradurre" i segnali elettrici nei "tasti" corrispondenti ai comandi, in modo che il simulatore "veda" i comandi come se fossero inviati da tastiera. Due o tre comandi saranno costituiti da potenziometri, gli altri da pulsanti e interruttori. Leggendo la scheda di Arduino Leonardo vedo che ci sono 20 pin di input/output, di cui 12, A0-A11, utilizzabili come ingressi analogici/digitali, 7 come uscite pwm. Un primo dubbio è sui 7 pin pwm: non mi è chiaro se sono riservati al pwm o se possono essere usati anche per input e quindi per leggere i pulsanti/interruttori/potenziometri. Per il collegamento è sufficiente applicare semplicemente i 5V ai pin via pulsanti/interruttori, eventualmente con una cella RC di debouncing, o è necessario adottare qualche accorgimento? Per quanto riguarda i potenziometri immagino che al pin di Arduino vada collegato il pin centrale del potenziometro, con gli atri due rispettivamente a 5V e a massa. Queste sono le prime cose che mi sono venute in mente. Grazie a tutti.

Un primo dubbio è sui 7 pin pwm: non mi è chiaro se sono riservati al pwm o se possono essere usati anche per input e quindi per leggere i pulsanti/interruttori/potenziometri.

Sono normali Pin digitali. Quindi usabili come ingressi o uscite, in più su detti Pin si puo’ usare la AnalogWrite() per gestire l’uscita come segnale PWM

Per il collegamento è sufficiente applicare semplicemente i 5V ai pin via pulsanti/interruttori, eventualmente con una cella RC di debouncing, o è necessario adottare qualche accorgimento?

Applicare +5V o GND dipende da che tipo di Debounce RC usi

Per quanto riguarda i potenziometri immagino che al pin di Arduino vada collegato il pin centrale del potenziometro, con gli atri due rispettivamente a 5V e a massa.

Esatto

debounce.png

Grazie molte per la risposta. Il debouncing della figura di destra sembra fare al caso mio, per me è più intuitivo avere il pin a 5V quando viene premuto il pulsante. Un'altra domanda al volo: Arduino sarà alimentato via PC USB e dato che tale tensione non è perfettamente 5V né è perfettamente stabile, vorrei chiedere se ciò può inflenzare l'adc nella lettura della tensione dei potenziometri.

Arduino sarà alimentato via PC USB e dato che tale tensione non è perfettamente 5V né è perfettamente stabile, vorrei chiedere se ciò può inflenzare l'adc nella lettura della tensione dei potenziometri.

Certamente che la tensione influenza il valore letto dall'ADC. Considera che quella fornita dall'USB ha normalmente una tolleranza del 5%. Comunque, visto che devi leggere dei potenziometri, non mi preoccuperei di questo, non e' che mentre stai giocando detta tensione fluttui continuamente e vista la risoluzione dell'ADC avrai sempre il bit meno significativo fluttuante

E' invece è meglio avere 0V quando premi. Usi la pull'up interna e devi collegare il pulsante a GND.

Per la lettura analogica puoi eseguire più letture consecutive e fare la media. Eseguire senza delay una di seguito all'altra sono velocissime e non comporta eccessivi ritardi.

EDIT: Hai fatto la conta dei pin? Quanti controlli vuoi collegare?

Ti consiglio l'acquisto di una screw shield --> http://www.robot-italy.com/it/screw-shield.html Cosi effettui i collegamenti di pulsanti e altri sensori al volo.

@Brunello: ok, grazie. Peraltro 10bit non mi servono, pensavo di shiftare a destra 2 bit e ridurre il risultatoa 8 bit, in questo modo dovrei ridurre l'influenza delle piccole variazioni di lettura, o sbaglio?

@PaoloP: non ho ancore le idee chiare in merito, anche perché dipende dagli aerei, in realtà penso che introdurrò un modo per scegliere una mappa dei tasti in funzione dll'aereo. Se fosse possibilie li userei tutti... a parte forse il pin 13 per il fatto che c'è collegato il led, non so se si può usare come input. E' meglio 0V? Mi manderà un po' in confusione... :o) bello lo screw shield, grazie

In confusione?
Collegi: Pin Arduino ------- Pulsante ------ GND.
Fatto.
Il debounce lo puoi fare anche via software. Considerando inoltre che hai a che fare spesso con pulsanti ON/OFF e non pulsanti che devi premere ripetutamente.
Al massimo un condensatore lo aggiungi al volo.