Sommario:

Usa 1 ingresso analogico per 6 pulsanti per Arduino: 6 passaggi
Usa 1 ingresso analogico per 6 pulsanti per Arduino: 6 passaggi

Video: Usa 1 ingresso analogico per 6 pulsanti per Arduino: 6 passaggi

Video: Usa 1 ingresso analogico per 6 pulsanti per Arduino: 6 passaggi
Video: Tre modi per collegare un pulsante ad Arduino #17 2024, Luglio
Anonim
Usa 1 ingresso analogico per 6 pulsanti per Arduino
Usa 1 ingresso analogico per 6 pulsanti per Arduino

Mi sono spesso chiesto come avrei potuto ottenere più ingressi digitali per il mio Arduino. Di recente mi è venuto in mente che dovrei essere in grado di utilizzare uno degli ingressi analogici per inserire più ingressi digitali. Ho fatto una rapida ricerca e ho scoperto dove le persone erano in grado di farlo, ma che consentivano di premere un solo pulsante alla volta. Voglio poter avere qualsiasi combinazione di pulsanti da premere SIMULTANEAMENTE. Quindi, con l'aiuto di TINKERCAD CIRCUITS, ho deciso di farlo accadere.

Perché dovrei volere la pressione simultanea dei pulsanti? Come illustrato nella progettazione dei circuiti TinkerCad, potrebbe essere utilizzato per gli ingressi degli interruttori DIP per la selezione di diverse modalità all'interno del programma.

Il circuito che ho creato utilizza la sorgente 5V disponibile da Arduino e utilizza 7 resistori e 6 pulsanti o interruttori.

Passaggio 1: il circuito

Il circuito
Il circuito

Gli Arduino hanno ingressi analogici che accettano un ingresso da 0V a 5V. Questo ingresso ha una risoluzione a 10 bit, il che significa che il segnale è suddiviso in 2^10 segmenti o 1024 conteggi. Sulla base di questo, il massimo che potremmo mai inserire in un ingresso analogico consentendo pressioni simultanee sarebbe 10 pulsanti su 1 ingresso analogico. Ma questo non è un mondo perfetto. C'è resistenza nei conduttori, rumore proveniente da fonti esterne e potenza imperfetta. Quindi, per darmi molta flessibilità, ho pianificato di progettarlo per 6 pulsanti. Ciò è stato, in parte, influenzato dal fatto che TinkerCAD Circuits aveva un oggetto DIP Switch a 6 interruttori, che avrebbe semplificato i test.

Il primo passo nel mio progetto è stato quello di assicurarmi che ogni pulsante, se premuto singolarmente, fornisse una tensione unica. Ciò escludeva che tutte le resistenze avessero lo stesso valore. Il passo successivo era che i valori di resistenza, se aggiunti in parallelo, non potevano avere la stessa resistenza di un singolo valore di resistenza. Quando i resistori sono collegati in parallelo, la resistenza risultante può essere calcolata con Rx=1/[(1/R1)+(1/R2)]. Quindi, se R1=2000 e R2=1000, Rx=667. Ho ipotizzato che raddoppiando la dimensione di ciascun resistore, non avrei visto la stessa resistenza per nessuna delle combinazioni.

Quindi, il mio circuito fino a questo punto doveva avere 6 interruttori, ognuno con il proprio resistore. Ma c'è un altro resistore richiesto per completare questo circuito.

L'ultimo resistore ha 3 scopi. Innanzitutto, funge da resistore di pull-down. Senza la resistenza, quando non vengono premuti pulsanti il circuito è incompleto. Ciò consentirebbe alla tensione all'ingresso analogico di Arduino di fluttuare su qualsiasi potenziale di tensione. Un resistore di pull-down essenzialmente riduce la tensione a 0 V. Il secondo scopo è limitare la corrente di questo circuito. La legge di Ohm afferma che V=IR, o Tensione = Corrente moltiplicata per Resistenza. Con una data sorgente di tensione, maggiore è il resistore significa che la corrente sarebbe minore. Quindi, se un segnale da 5 V è stato applicato a un resistore da 500 ohm, la corrente più grande che potremmo vedere sarebbe 0,01 A o 10 mA. Il terzo scopo è fornire la tensione del segnale. La corrente totale che scorre attraverso l'ultimo resistore sarebbe: i=5V / Rtotal, dove Rtotal = Rlast + {1/[(1/R1)+(1/R2)+(1/R3)+(1/R4)+ (1/R5)+(1/R6)]}. Tuttavia, includere solo 1/Rx per ogni resistore che ha il pulsante corrispondente premuto. Dalla corrente totale, la tensione fornita all'ingresso analogico sarebbe i*Rlast o i*500.

Passaggio 2: prova - Excel

Dimostrazione - Excel
Dimostrazione - Excel

Il modo più rapido e semplice per dimostrare che avrei ottenuto resistenze uniche e quindi tensioni uniche con questo circuito era utilizzare le funzionalità di Excel.

Ho impostato tutte le possibili combinazioni di ingressi di commutazione e li ho organizzati in sequenza seguendo schemi binari. Un valore di "1" indica che l'interruttore è acceso, uno spazio vuoto indica che è spento. Nella parte superiore del foglio di calcolo, ho inserito i valori di resistenza per ciascun interruttore e per il resistore pull-down. Ho quindi calcolato la resistenza equivalente per ciascuna delle combinazioni, tranne quando tutti i resistori sono spenti poiché questi resistori non avranno alcun effetto senza avere una fonte di alimentazione che li fornisca. Per semplificare i miei calcoli in modo da poter copiare e incollare su ciascuna combinazione, ho incluso tutte le combinazioni nel calcolo moltiplicando ciascun valore dell'interruttore (0 o 1) per il suo valore di resistenza invertito. In questo modo si eliminava la sua resistenza dal calcolo se l'interruttore era spento. L'equazione risultante può essere vista nell'immagine del foglio di calcolo, ma Req = Rx+1/(Sw1/R1 + Sw2/R2 + Sw3/R3 + Sw4/R4 + Sw5/R5 + Sw6/R6). Usando Itotal = 5V / Req, determiniamo la corrente totale attraverso il circuito. Questa è la stessa corrente che passa attraverso il resistore di pull-down e ci fornisce la tensione al nostro ingresso analogico. Questo è calcolato come Vin = Itotal x Rx. Esaminando sia i dati Req che i dati Vin, possiamo vedere che abbiamo effettivamente valori univoci.

A questo punto, sembra che il nostro circuito funzionerà. Ora per capire come programmare Arduino.

Passaggio 3: programmazione Arduino

Programmazione Arduino
Programmazione Arduino
Programmazione Arduino
Programmazione Arduino
Programmazione Arduino
Programmazione Arduino

Quando ho iniziato a pensare a come programmare Arduino, inizialmente avevo pianificato di impostare intervalli di tensione individuali per determinare se un interruttore fosse acceso o spento. Ma, mentre ero a letto una notte, mi venne in mente che avrei dovuto trovare un'equazione per farlo. Come? ECCELLERE. Excel è in grado di calcolare equazioni per adattare al meglio i dati in un grafico. Per fare ciò, vorrò un'equazione del valore intero degli interruttori (binario) rispetto all'ingresso di tensione corrispondente a quel valore. Nella mia cartella di lavoro di Excel, ho inserito il valore intero sul lato sinistro del foglio di calcolo. Ora per determinare la mia equazione.

Ecco un breve tutorial su come determinare l'equazione di una linea in Excel.

1) Seleziona una cella che non contiene dati. Se hai selezionato una cella che contiene dati, Excel proverà a indovinare di cosa vuoi fare tendenza. Ciò rende molto più difficile impostare una tendenza, perché Excel raramente prevede correttamente.

2) Selezionare la scheda "Inserisci" e selezionare un grafico "Dispersione".

3) Fare clic con il pulsante destro del mouse nella casella del grafico e fare clic su "Seleziona dati…". Verrà visualizzata la finestra "Seleziona origine dati". Selezionare il pulsante Aggiungi per continuare a selezionare i dati.

4) Dagli un nome di serie (opzionale). Selezionare l'intervallo per l'asse X facendo clic sulla freccia su e quindi selezionando i dati di tensione. Selezionare l'intervallo per l'asse Y facendo clic sulla freccia su e quindi selezionando i dati interi (0-63).

5) Fare clic con il pulsante destro del mouse sui punti dati e selezionare "Aggiungi linea di tendenza…" Nella finestra "Formato linea di tendenza", selezionare il pulsante Polinomio. Guardando la tendenza, vediamo che l'Ordine di 2 non corrisponde del tutto. Ho selezionato un ordine di 3 e ho ritenuto che fosse molto più accurato. Seleziona la casella di controllo "Visualizza equazione sul grafico". L'equazione finale ora viene visualizzata sul grafico.

6) Fatto.

OK. Torna al programma Arduino. Ora che abbiamo l'equazione, programmare Arduino è facile. Il numero intero che rappresenta le posizioni dell'interruttore viene calcolato in 1 riga di codice. Utilizzando la funzione "bitread", possiamo prendere il valore di ogni singolo bit e conoscere così lo stato di ogni pulsante. (VEDI FOTO)

Passaggio 4: circuiti TinkerCAD

Circuiti TinkerCAD
Circuiti TinkerCAD

Se non hai verificato i circuiti TinkerCAD, fallo ora. ASPETTARE!!!! Finisci di leggere il mio Instructable e poi dai un'occhiata. TinkerCAD Circuits rende molto semplice testare i circuiti Arduino. Include diversi oggetti elettrici e Arduino, consentendo anche di programmare Arduino per i test.

Per testare il mio circuito, ho impostato 6 interruttori utilizzando un pacchetto DIP switch e li ho collegati ai resistori. Per dimostrare che il valore della tensione nel mio foglio di calcolo Excel era corretto, ho visualizzato un voltmetro all'ingresso di Arduino. Tutto questo ha funzionato come previsto.

Per dimostrare che la programmazione Arduino ha funzionato, ho trasmesso gli stati degli interruttori ai LED, utilizzando le uscite digitali di Arduino.

Ho quindi cambiato ogni interruttore per ogni possibile combinazione e sono orgoglioso di dire "FUNZIONA"!!!

Passaggio 5: "Arrivederci e grazie per tutti i pesci". (rif.1)

Devo ancora provarlo utilizzando attrezzature reali, poiché attualmente sono in viaggio per lavoro. Ma, dopo averlo dimostrato con TinkerCAD Circuits, credo che funzionerà. La sfida è che i valori dei resistori che ho specificato non sono tutti valori standard per i resistori. Per aggirare questo problema, ho intenzione di utilizzare potenziometri e combinazioni di resistori per ottenere i valori di cui ho bisogno.

Grazie per aver letto il mio istruibile. Spero che ti aiuti con i tuoi progetti.

Per favore lascia commenti se hai tentato di affrontare questo stesso ostacolo e come lo hai risolto. Mi piacerebbe imparare più modi per farlo.

Passaggio 6: riferimenti

Non pensavi che avrei fornito una citazione senza fornire un riferimento alla sua fonte, vero?

rif. 1: Adams, Douglas. Addio, e grazie per tutto il pesce. (Il quarto libro della "trilogia" della Guida galattica per autostoppisti)

Consigliato: