Sommario:
- Passaggio 1: gli elementi essenziali (non proprio)
- Passaggio 2: il divisore di tensione
- Passaggio 3: scala del divisore di tensione
- Passaggio 4: riepilogo
Video: Come leggere molti switch con un pin MCU: 4 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:06
Ti è mai capitato di buttarti a capofitto in un progetto/i e il progetto continua a crescere e crescere, mentre aggiungi più cose ad esso (lo chiamiamo Creaturismo Feaping)? In un recente progetto, stavo costruendo un frequenzimetro e ho aggiunto un generatore di segnale/sintetizzatore di frequenza a cinque funzioni. Presto mi sono ritrovato con più interruttori di quanti mi fossero rimasti disponibili, quindi cosa deve fare un ragazzo?
Tuttavia, presto ho avuto altri sette interruttori sul mio Funbox (sì, è quello che ho chiamato il mio generatore di funzioni … lo so, non ho creatività) ed ecco un breve tutorial che ti mostra come puoi fare lo stesso. Non richiede registri a scorrimento o circuiti integrati specifici. In effetti, non richiede nemmeno un microcontrollore, se i semiconduttori discreti sono il modo in cui rotoli. Ecco un modo in cui puoi leggere/gestire più interruttori usando un singolo pin sul tuo AVR (o altro microcontrollore… ho sentito che ci sono altri microcontrollori oltre all'AVR, ma non riesco a immaginare…).:)
Passaggio 1: gli elementi essenziali (non proprio)
Per fare ciò, avrai bisogno di alcuni componenti. Aiuta ad avere una moltitudine di interruttori che devi gestire. Avrai anche bisogno di alcuni resistori e di un microcontrollore con ADC (conversione da analogico a digitale) o in qualche altro modo in cui vorresti indicare che c'era un interruttore attivato e quale interruttore era.
Se volessi potresti usare un oscillatore controllato in tensione per indicarlo, magari con delle luci intermittenti, o in alternativa, con il suono. In questo 'ble, fingerò di usare un AVR, ma nel tuo mondo puoi fingere qualunque cosa ti renda felice. Mi manca Bob Ross.
Passaggio 2: il divisore di tensione
In sostanza, il modo in cui lo faremo è usare una tecnica e un circuito chiamato divisore di tensione. I divisori di tensione, come avrai intuito, dividono la tensione V,, in,, per un valore determinato da te. Puoi dividere la tensione con diversi componenti, inclusi condensatori e induttori, ma qui lo farò con il buon vecchio resistore. L'idea Quello che stiamo facendo è mettere due componenti in serie che causeranno, ciascuno individualmente, una caduta di tensione ai capi del componente. Guarda la prima foto se non ho senso. C'è una differenza potenziale di 9V da un binario all'altro. Tra 9V e 0V ci sono due resistori in serie. Ognuno di questi sperimenterà una caduta di tensione su se stesso, a seconda della resistenza, come probabilmente ricorderai da V = IR. Se prendi una misura di tensione tra i due resistori, otterrai un valore compreso tra 9V e 0V, a seconda di quanta tensione è scesa sul primo resistore e di quanta ne rimane sul secondo resistore, prima di 0V. C'è una formula semplice per calcolare la caduta di tensione attraverso un resistore in questa situazione e sembra così. Lascia che la tensione sulla resistenza 1 (R1) sia V1 e la tensione sulla resistenza due (R2) sia V2. Dal momento che non posso più usare la formattazione, guarda l'immagine 2 sotto per la formula … Quindi, nel nostro divisore resistivo, la tensione Vout può essere determinata dalla nostra formula per V2 (poiché faremo riferimento a GND a 0V). Cosa ha a che fare questo con il rilevamento di un gruppo di interruttori da un pin? Bene, volta pagina e te lo mostro!
Passaggio 3: scala del divisore di tensione
Ora supponiamo di avere tutti i nostri interruttori, forse sei o otto o sedici, tutti collegati tramite resistori che agiscono ciascuno come un partitore di tensione in modo tale che quando lo stato del pin dell'interruttore cambia, la tensione viene letta e in base al livello di tensione, può sapere quale interruttore è stato appena attivato. Guarda sotto. Nell'immagine qui sotto, ho collegato due blocchi di interruttori. Il blocco più in alto ha due interruttori e il blocco più in basso ha cinque interruttori. Puoi collegare i tuoi interruttori a levetta separati, momentanei, tattili, ecc. allo stesso modo. La cosa importante da notare è la resistenza a cui è collegato il tuo interruttore. Nel mio esempio, ho quasi raddoppiato la resistenza del resistore successivo per creare un gap di tensione facile da misurare e da non confondere con l'interruttore prima o dopo. Se non l'hai notato prima, guarda di nuovo e renditi conto che siamo tornati al nostro vecchio amico, il partitore di tensione resistivo. Il primo resistore, il 10k ohm, è collegato a 5V e il secondo resistore - il resistore che determinerà Vfuori per il pin SWITCH_ADC, è connesso a ciascun interruttore e quindi ad ogni interruttore è associata una particolare tensione Vout che può essere letta dal pin ADC connesso a SWITCH_ADC. Quindi, determina il Vout previsto da ciascun interruttore in questo modo
Vout = Vin * (R2 / (R1 + R2))
per l'interruttore uno:
Vout = 5V * (500 / (10000 + 500)) = 5*0.048 = 0,24V o 240 mV
per l'interruttore due:
Vout = 5 V * (2200 / (10000 + 2200)) = 5 * 0,18 = 0,9 V o ~900 mV
e così via. Sentiti libero di sostituire R2 con i tuoi valori se hai solo determinati resistori a portata di mano… La cosa fondamentale qui è mantenere un intervallo di tensione sufficientemente ampio tra gli interruttori in modo che qualsiasi margine di errore sull'ADC vinca' t metterti nella tensione attesa da un interruttore vicino. Ho scoperto che la cosa più semplice da fare è costruire la scala del divisore e mettere un multimetro/voltmetro sul pin ADC e premere ciascun pin e vedere quali valori ottieni. Dovrebbero essere abbastanza precisi su ciò che calcoli. Una volta ottenuti tutti i valori di tensione previsti da ciascun interruttore utilizzando un particolare resistore, è possibile far leggere all'MCU il pin ADC e confrontarlo con i valori noti per determinare quale interruttore è stato premuto. Ad esempio, supponiamo che tu abbia registrato una routine di servizio di interruzione che verrà chiamata ogni volta che viene rilevata una modifica sul pin ADC. All'interno di quell'ISR, puoi leggere l'ADC e confrontare quel valore con la tua tabella di commutazione. Se stai usando un valore ADC a 8 bit, la tua tensione verrà convertita in un numero compreso tra 0 e 255 che corrisponde a una tensione tra 0V e 5V. Ciò presuppone che l'ADC sia configurato in questo modo.
Passaggio 4: riepilogo
Quindi, ora dovresti sapere come essere parsimonioso nell'usare i pin GPIO per gli interruttori. Ogni volta che stai esaurendo i pin GPIO, o non ne hai quasi nessuno con cui iniziare, o se ti rendi conto che utilizzerai un banco di interruttori, il divisore resistivo è la strada da percorrere per salvare i tuoi pin GPIO pur fornendo un meccanismo robusto per rilevare l'accesso allo switch.
Consigliato:
Come leggere più valori analogici utilizzando un pin analogico: 6 passaggi (con immagini)
Come leggere più valori analogici utilizzando un pin analogico: in questo tutorial, ti mostrerò come leggere più valori analogici utilizzando un solo pin di ingresso analogico
Come leggere il sensore di pressione differenziale MPX5010 con Arduino: 5 passaggi
Come leggere il sensore di pressione differenziale MPX5010 con Arduino: il modo in cui ho scritto il codice è tale che può essere facilmente modificato per adattarsi a un sensore di pressione diverso. Basta modificare le seguenti variabili const nel codice in base ai valori della scheda tecnica per qualsiasi sensore di pressione: "sensorOffset"
Come creare un ambiente e leggere una lampada con altoparlanti: 10 passaggi
Come creare un ambiente e leggere una lampada con altoparlanti: iniziare questo progetto è stato lento, abbiamo dovuto passare attraverso il processo di Design Thinking, questo processo è Empatia, definizione, ideazione, prototipazione e, infine, test. Abbiamo iniziato dal numero 1, Empathizing, e abbiamo attraversato una serie di interviste con
Modulo scheda SD con Arduino: come leggere/scrivere dati: 14 passaggi
Modulo scheda SD con Arduino: come leggere/scrivere dati: panoramicaLa memorizzazione dei dati è una delle parti più importanti di ogni progetto. Esistono diversi modi per archiviare i dati in base al tipo e alla dimensione dei dati. Le schede SD e micro SD sono una delle più pratiche tra i dispositivi di archiviazione, che vengono utilizzati in
Come pilotare molti LED da pochi pin del microcontrollore: 6 passaggi (con immagini)
Come pilotare molti LED da pochi pin del microcontrollore: sfruttando il fatto che molti pin del microcontrollore hanno tre stati (+V, GND o "alta impedenza", è possibile pilotare N*(N-1) LED da N pin Quindi il piccolo microcontrollore a 8 pin come un PIC12Fxxx o un ATtiny11 può pilotare 20 LED sui cinque disponibili