Matrix button box - Aggiungere led di stato a interruttori

Ciao a tutti,
sto realizzando una button box per un simulatore di guida, ho creato un sistema a matrice con dei pulsanti e interruttori e tutto funziona correttamente.

A questo punto, vorrei poter inserire dei led collegati agli interrutori (6 in totale) tali per cui quando l'interruttore è posizionato su ON il led si accende.

Ho provato a collegare il led (bianco in alto a sinistra) con il catodo collegato a GRN e l'anodo sul pin arancione del primo interruttore in alto a sinistra.
Tra i due pin dell'interrutore in questione (arancione e blu) c'è una tensione di 2.8V ma penso che la corrente sia inesistente o estremamente bassa, infatti si intravede solo un puntino luminoso (mooolto poco luminoso) all'interno del led.

Presumo che debba alimentare a +5v i led collegandoli a VCC, ma ho paura di fare qualche cavolata e bruciare la scheda.
Ovviamente non ho competenze elettroniche ma solo un'infarinatura di base, mi potreste aiutare?

La scheda utilizzata è una Pro Micro Atmega32U4 5V 16MHz, ho utilizzato mmjoy2 per configurare la matrix e programmare la periferica.

Buongiorno,

essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il succitato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nel rispetto del suddetto regolamento nessuno ti risponderà (eventuali risposte verrebbero temporaneamente nascoste), quindi ti consiglio di farla al più presto. :wink:

Devi sempre tenere a mente che ogni pin di Arduino (UNO/MEGA/Leonardo/Yún)può dare al massimo, a Vcc, 40 mA (... ma quello è veramente un limite, nel normale funzionamento occorre stare al 60-70% di detto valore ... sui 20mA max) ed inoltre la somma di tutti i pin e dell'assorbimento del chip, non deve superare al massimo i 200 mA (... e anche qui massimo va considerato come valore limite, ma nel normale funzionamento occorre stare al 60-70% di detto valore). Assorbimenti oltre detti limiti possono danneggiare irrimediabilmente il chip.

Detto questo, occorre vedere come usi i vari pin di Arduino che sono collegati a quella matrice perché, se fai delle scansoni, comunque avrai un segnale solo per un tempo molto breve (dato dalla velocità di scansione) e il LED comunque non si illuminerà a sufficienza.

Spiega un po' meglio come leggi quegli inerruttori che vedo connessi a dei pin, ma, dall'immagine, non si capisce neanche a quali.

Guglielmo

Pulsanti e interruttori sono collegati a matrice e vengono continuamente scansionati per righe e colonne, quindi non puoi semplicemente mettere dei LED sui relativi collegamenti, perché si accenderebbero (a brevi impulsi) qualunque pulsante della stessa colonna venga premuto.

@gpb01

ecco qui un'immagine più ingrandinta dei collegamenti ai pin


A3; A2; A1 sono le righe della mia matrix
A0; 13; 12; 11; 10; 9 ;8; 7; 6; 5 sono le mie colonne
Li ho collegati semplicemente andando in ordine, prima righe e poi colonne, partendo da A3 e andando in senso antiorario (nell'immagine). Va per caso rispettato un ordine ben preciso?
Gli interruttori sono collegati (partendo da in alto a sinistra e poi scendendo da sinistra a destra):

  1. blu e arancione (A1 / A0)
  2. ciano arancione (A2 / A0)
  3. ciano viola (A2 / 13)
  4. ciano giallo (A2 / 12)
  5. ciano rosa (A2 / 11)
  6. ciano marrone (A2 / 10)

Ad ogni interruttore ho inserito un diodo in corrispondenza del collegamento con la riga per evitare problemi di ghosting nel caso vengano premuti altri pulsanti sulla stessa riga/colonna.

é una button box che si interfaccia con un simulatore di guida e i comandi possono servire per:
abilitare / disabilitare una funzione (esempio: accendere spegnere le luci, cambiare vista)
oppure per aumentare e diminuire un parametro (esempio: aumentare la forza dell'abs oppure un altro tasto per diminuire la forza dell'abs)
Tutti i comandi sono letti dal gioco come dei semplici pulsanti (come se venissero premuti da tastiera) quindi nel caso delle luci, alla prima pressione si accendono, alla successiva pressione si spengono.
Tuttavia, per una migliore fedeltà, per quei comandi che rimangono stazionari, ho voluto inserire degli interruttori che comandano:
Accensione batteria
Accensione luci
Accensione luce posteriore pioggia etc. etc.
Per ovviare al problema di tenere il contatto continuamente chiuso (quindi come se il pulsante fosse continuamente premuto), all'interno del software mmjoy2 ho impostato un tempo di 200ms dopo il quale il comando inviato con l'interruttore viene stoppato e alla disattivazione dell'interrutore viene dato un altro segnale uguale (comando ON-ON) in questo modo la prima volta che premo l'interruttore delle luci mi si accendono le luci della macchina, dopo 200ms il segnale "svanisce" ma in gioco non si spengono e io ho visivamente l'interruttore su ON, quando le devo spegnere, schiaccio l'interrutore dal lato opposto portandolo su OFF ma la scheda lo legge come un secondo comando ON difatto spegnendo le luci nel gioco.

Sempre al fine della fedeltà e di un migliore feedback visivo volevo aggiungere dei led, in modo che fosse chiaro che quel determinato interrutore è attivato (o spento, e quindi con il led che si accende quando l'interruttore viene posizionato su ON e che si spengne quando viene posizionato su OFF)

Inizialmente ho pensato di collegare il led all'interrutore, in modo che venga alimentato solo quando il circuito si chiude e quindi l'interruttore è su ON (vedi immagine sopra) collegando il catodo al GND della scheda e l'anodo dopo resistenza di 220ohm al pin dell'interruttore.
Tuttavia la luce emessa dal led è bassisima, si vede un micro pallino luminoso (solo sul led trasparente, su quelli coloranti non si riesce nemmeno a vedere), come dicevi tu "il led non si illuminerà a sufficienza"

non ho ben capito la frase:

Citazione ogni pin di Arduino può dare al massimo, a Vcc, 40 mA

Ho letto che Vcc è 5v 40mA, cosa intendi con "ogni pin a Vcc" ? Nel senso che Vcc può essere collegata ai pin ? (tenendo in considerazione di non eccedere con i 20mA)

A seguito del problema della scarsa illuminazione, ho pensato che l'anodo del led debba essere alimentato a Vcc, e il catodo collegato al pin dell'interrutore, ma ho paura che in questo modo vengano difatto collegati Vcc e i pin della scheda (A0; 13; 12 etc) andando a bruciare la scheda (?) - per questo motivo ho voluto scrivere qui, non avendo sufficiente conoscenza, prima di fare qualche boiata...

@Datman non essendo praticabile questa configurazione, esiste un altro metodo tale per cui possa avere l'accensione di un led a seguito della posizione "ON" di un interruttore all'interno della matrix?

No, la frase effettivamente è poco chiara, si intende che ogni pin è in grado di erogare al massimo 40mA ma che comunque occorre stare al 60/70%, quindi NON più di 20/25 mA.

Dato che usi una tecnica a multiplexer, NON puoi accendere i LED collegati con gli interruttori ... ho idea che devi usare dei pin dedicati solo per l'accensione di quest'ultimi.

Vediamo se Datman ha una qualche altra idea ... :roll_eyes:

Guglielmo

1 Like

Cercando su google mi sono imbattuto in questo schema:

è uno schema corretto? Quello che non mi è chiaro (date le mie scarse nozioni) è cosa succede se il led messo in parallelo all'interrutore viene alimentato con Vcc (come sembra suggerire lo schema qui allegato) Vcc non va in qualche modo anche al pin ad esso collegato? non rischia di danneggiare la scheda? oppure la resistenza da 1k evita questo problema?

Ciao, ho dato uno sguardo a mmjoy2 nella speranza di trovare il codice sorgente ma non lo trovo. Trovo solo il firmware per cui non è possibile dire come collegare i led, dovresti semmai rivolgerti a chi ha sviluppato il firmware.

Ciao.

@Maurotec Ciao, immagino tu abbia guardato la loro pagina su github giusto?

Ad ogni modo ho usato questo software per semplicità di utilizzo poichè non sono capace di programmare e l'ho trovato molto più user friendly.
Qualora ci fosse la possibilità di realizzare quello di cui necessito scrivendo a mano il codice posso anche abbandonare mmjoy2 e scrivere manualmente il codice.

Interessante

Senza mettere la resistenza disegnata a mano da 1k, che non capisco cosa sia li a fare...

Quando si tengono alte le colonne si possono leggere le righe in multiplex (forse è meglio mettere delle pulldown)
Quando si si tengono basse le colonne, con le righe alte si possono multiplare i led
Dati i diodi sulle colonne di pulsanti siamo sicuri che il pulsante premuto non cortocircuita l'uscita

Avevo fatto qualcosa del genere nel mio "per qualche lucina in più"
Li oltretutto avevo invertito i sensi delle correnti per evitare le pulldown, a sensi invertiti si possono usare le pullup interne

Quindi questo conferma che per i novizi conviene sempre (sempre) dare uno sguardo alle discussioni in Sticky...

Ah, comunque...

Quello schema non è adatto ad essere usato con interruttori invece di pulsanti, ovvero non si possono premere più pulsanti contemporaneamente

anzi, se la moderazione volesse riaprire la discussione "per qualche lucina in più..." io aggiungerei la modifica per accettare pressioni multiple (che non era un'opzione prevista per il "lavoro originale" per il quale avevo sviluppato il meccanismo

Grazie

Fatto ... hai altri 6 mesi di tempo :grin:

Guglielmo

Grassie grassie sior...

Stasera pc spento
Ma domani...

Ho fatto ulteriori ricerche e ho trovato un video tutorial che mostra questo tipo di collegamento:

Potrei togliere i miei interruttori dalla matrix e collegarli separatamente come mostrato in questo schema.
Non so se si capisce dall'immagine, comunque viene posizionata la resistenza da 220 sul led e una resistenza da 10k prima della connessione a GND. Un polo dell'interrutore va a Vcc e l'altro al led.
Cosa ne pensate? è una soluzione percorribile?

Allora, per prima cosa io metterei gli interruttori (che poi dallo schema sono deviatori) su linee separate da quelle dei pulsanti anche perché hanno spesso gestioni diverse.
Secondo, per risolvere qualsiasi problema userei deviatori DPDT ossia doppi contatti: uno per Arduino ed uno per il LED.

PS: io realizzai tempo fa un pannello del Boeing 737NG per Flight Simulator che, anche se non prevedevo led, puoi anche prendere spunti QUI

Ma no...

Ne abbiamo già discusso

Il gruppo LED e sua resistenza di limitazione funziona molto bene come pull-down, doppio contatto non serve, anzi complicazione inutile e dannosa: come diceva Ford (Henry, non Harrison) "quello che non c'è non si rompe"

Certo, ma per evitare di sovraccaricare le uscite di Arduino, con il doppio deviatore i LED si possono alimentare separatamente... Io farei così, poi Ford può dire quello che vuole, non è un dogma.. :wink:

Quelli sono "ingressi" non uscite

E ignorare le idee di uno dei massimi esponenti del progresso tecnico e industriale non è mai una buona scelta

Ma tanto non è lavoro mio convincerti...

Anche perché cosa fare io lo ho indicato, quindi non ho più bisogno di dire nulla...

Comunque l'ultimo schema mostrato è concettualmente sbagliato

Invece noi per un altro boeing (un 767 in realtà) avevamo fatto il dimmer luci di cabina...

Ma AMI non lo ha accettato (se ben ricordo)
Hanno comunque preferito quello del KC46