Sommario:
- Passaggio 1: hardware
- Passaggio 2: software
- Passaggio 3: informazioni sul software
- Passaggio 4: il "progetto in arrivo"
- Passaggio 5: Prossimo: ingresso analogico sonda di temperatura NTP ESP32 con correzione Steinhart-Hart
Video: Ingresso tattile capacitivo ESP32 utilizzando "tappi per fori metallici" per i pulsanti: 5 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:02
Mentre stavo finalizzando le decisioni di progettazione per un imminente progetto basato su ESP32 WiFi Kit 32 che richiedeva l'input di tre pulsanti, un problema evidente era che il WiFi Kit 32 non possiede un singolo pulsante meccanico, ma solo tre pulsanti meccanici per l'input. Tuttavia, il WiFi Kit 32 ha molti ingressi tattili capacitivi, quindi ho trascorso un po' di tempo ad assemblare hardware, scrivere software e testare un design di ingresso a tre pulsanti utilizzando la funzione di ingresso tattile capacitivo ESP32 e tre "tappi per fori metallici" da 3/8" per pulsanti.
Come ha scoperto chiunque abbia sperimentato gli input tattili capacitivi ESP32, gli input tattili sono sicuramente abbastanza rumorosi da richiedere il filtraggio per un rilevamento affidabile degli input. Per ridurre al minimo il conteggio totale delle parti per il progetto imminente, ho determinato che un semplice filtro digitale guidato da interrupt (più un "antirimbalzo" che un filtro, ma sto divagando), invece di aggiungere hardware di filtro esterno, potrebbe calmare gli ingressi rumorosi. E dopo i test, è diventato evidente che gli ingressi capacitivi ESP32, tre tappi per fori metallici da 3/8" e alcuni software di "filtraggio" digitale, avrebbero effettivamente fornito un ingresso affidabile a tre pulsanti per il design.
Quindi, se sei interessato a testare l'input capacitivo con filtraggio digitale su un ESP32, ho incluso il codice sorgente "Buttons.ino" nel formato dell'ambiente Arduino insieme alle istruzioni di assemblaggio e programmazione, oltre a una breve descrizione del codice sorgente, per quello che ho scoperto essere un input a tre pulsanti altamente affidabile.
E come al solito, probabilmente ho dimenticato un file o due o chissà cos'altro, quindi se hai domande, non esitare a chiedere perché faccio molti errori.
E un'ultima nota, non ricevo alcun compenso in alcuna forma, inclusi ma non limitati a campioni gratuiti, per nessuno dei componenti utilizzati in questo progetto
Passaggio 1: hardware
Il design utilizza il seguente hardware:
- Uno, kit Wi-Fi 32.
- Tre tappi per fori metallici da 3/8".
- Tre lunghezze di 4" di cavo 28awg.
Per assemblare l'hardware, ho eseguito i seguenti passaggi:
- Spelato e stagnato le estremità di ogni lunghezza di filo da 4 "come mostrato.
- Saldato il primo filo al pin 13 dell'ESP32 (il TOUCH4, o "T4", input).
- Saldare il secondo filo al pin 12 dell'ESP32 (il TOUCH5, o "T5", input).
- Saldare il terzo filo al pin 14 dell'ESP32 (l'ingresso TOUCH6 o "T6").
- Saldare uno di ciascuno dei tre tappi per fori metallici da 3/8" alle estremità libere delle tre lunghezze di filo.
Passaggio 2: software
Il file "Buttons.ino" è un file di ambiente Arduino contenente il software per la progettazione. Oltre a questo file, avrai bisogno della libreria grafica "U8g2lib" per il display OLED WiFi Kit32 (vedi https://github.com/olikraus/u8g2/wiki per ulteriori informazioni su questa libreria).
Con la libreria grafica U8g2lib installata nella directory Arduino e "Buttons.ino" caricato nell'ambiente Arduino, compila e scarica il software in ESP32.
Una volta scaricato e avviato, la riga superiore del display dovrebbe indicare "Pulsanti" con la seconda riga del display "1 2 3" come indicatori dei pulsanti. Sotto ciascuno degli indicatori del pulsante 1, 2, 3 ci sono i valori di lettura del tocco non filtrati e sotto ciascuno di questi ci sono gli indicatori della pressione del pulsante ("1" per premuto, "0" per non premuto). Come si può vedere nel video (e come confermato dai test a lungo termine), il filtro software fornisce un rilevamento affidabile dell'ingresso del pulsante senza falsi trigger.
Passaggio 3: informazioni sul software
Il software contiene tre sezioni di codice principali; l'Arduino richiedeva le sezioni "setup()" e "loop()" e una sezione "Interrupt". La sezione setup() contiene il codice necessario per inizializzare OLED e interrompere i servizi. Le funzioni di configurazione OLED sono descritte nel collegamento sopra. Le funzioni di impostazione del servizio di interrupt sono le seguenti:
- "timerLoopSemaphore = xSemaphoreCreateBinary()" crea un semaforo per "InterruptService()" (la routine del servizio di interrupt) per informare loop() quando è il momento di eseguire un passaggio del ciclo.
- "timerInterruptService = timerBegin(0, 80, true)" crea un timer utilizzando il timer hardware 0 con una prescala di 80.
- "timerAttachInterrupt(timerInterruptService, & InterruptService, true)" collega InterruptService() al timer.
- "timerAlarmWrite(timerInterruptService, 1000, true)" imposta la frequenza del servizio di interrupt a 1000hz.
- "timerAlarmEnable(timerInterruptService)" avvia l'allarme timer e quindi interrompe il servizio.
Con l'installazione completata, viene inserito loop() e si ferma immediatamente alla riga:
if(xSemaphoreTake(timerLoopSemaphore, portMAX_DELAY) == pdTRUE), il che significa che loop() aspetterà a questo punto fino all'arrivo del semaforo da InterruptService(). Quando arriva il semaforo, viene eseguito il codice loop(), aggiornando il display OLED con i dati del pulsante, quindi tornando all'inizio per attendere nuovamente il semaforo successivo. Con InterruptService() in esecuzione a 1000 hz e un valore LOOP_DELAY di 30, loop() viene eseguito ogni 30 ms o con una frequenza di aggiornamento del display di 33,333 hz. Sebbene si tratti di una frequenza di aggiornamento del display superiore a quella richiesta per la maggior parte delle applicazioni ESP32, ho utilizzato questa impostazione per illustrare la reattività del filtro. Ho testato e determinato che il tempo necessario per eseguire un singolo passaggio di loop() era di 20 ms.
InterruptService() viene chiamato dal timer creato in setup() a una frequenza di 1000 hz. Quando viene chiamato, aggiorna due contatori alla rovescia, nLoopDelay e nButtonDelay. Quando nLoopDelay viene contato alla rovescia fino a zero, invia il semaforo consentendo a loop() di eseguire un singolo passaggio, quindi ripristina nLoopDelay. Quando nButtonDelay viene contato alla rovescia fino a zero, anch'esso viene reimpostato, quindi viene eseguito il pulsante "filtri".
Ogni filtro pulsante ha un contatore di filtri univoco (ad es. nButton1Count, nButton2Count e nButton3Count). Finché il valore dell'input tocco assegnato al pulsante è maggiore o uguale al valore di soglia definito (BUTTON_THRESHHOLD), il contatore del filtro assegnato al pulsante e al pulsante rimangono zero. Se il valore dell'input tocco assegnato al pulsante è inferiore alla soglia definita, il contatore del filtro assegnato al pulsante viene incrementato di uno ogni 20 ms. Quando il contatore del filtro supera il valore del filtro del pulsante (BUTTON_FILTER), il pulsante viene considerato "premuto". L'effetto di questo metodo è creare un filtro che richiede 80 ms (20 ms nButtonDelay * 4 ms nButtonCountN dove N è il numero del pulsante) di valori di input tocco continui al di sotto della soglia definita per considerare il pulsante effettivamente premuto. Ogni volta che meno di 80 ms è considerato un "glitch" e viene rifiutato dal filtro.
Data questa breve descrizione, se avete domande, non esitate a chiedere e farò del mio meglio per rispondervi.
Spero ti sia piaciuto!
Passaggio 4: il "progetto in arrivo"
Il prossimo progetto, "Intelligrill® Pro", è un monitor per fumatori a doppia sonda con:
- Calcoli della sonda di temperatura Steinhart-Hart (al contrario delle tabelle "look-up") per una maggiore precisione.
- Tempo predittivo per il completamento sulla sonda 1 che incorpora la maggiore precisione derivata dai calcoli Steinhart-Hart.
- Una seconda sonda, sonda 2, per il monitoraggio della temperatura dell'affumicatore (limitata da 32 a 399 gradi).
- Controlli di input touch capacitivi (come in questo Instructable).
- Monitoraggio remoto basato su WIFI (con un indirizzo IP fisso, consente il monitoraggio dei progressi del fumatore da qualsiasi luogo sia disponibile una connessione Internet).
- Intervallo di temperatura esteso (di nuovo da 32 a 399 gradi).
- Allarmi sonori di completamento sia all'interno del trasmettitore Intelligrill® che sulla maggior parte dei dispositivi di monitoraggio compatibili con WiFi.
- Visualizzazione della temperatura in gradi F o gradi C.
- Formato dell'ora in HH:MM:SS o HH:MM.
- Visualizzazione della batteria in volt o % di carica.
- E presto, uscita PID per fumatori a coclea.
"Intelligrill® Pro" sta testando per diventare l'Intelligrill® basato su HTML più accurato, ricco di funzionalità e affidabile che ho progettato.
È ancora in fase di test, ma con i pasti che sta aiutando a preparare durante i test, ho guadagnato più di qualche chilo.
Ancora una volta, spero che ti piaccia!
Passaggio 5: Prossimo: ingresso analogico sonda di temperatura NTP ESP32 con correzione Steinhart-Hart
Preparati a rispolverare i tuoi libri di algebra per questo.
Consigliato:
Ventola portatile Arduino con interruttore tattile capacitivo.: 6 passaggi
Ventola portatile Arduino con interruttore tattile capacitivo.: In questo tutorial impareremo come accendere e spegnere la ventola della batteria del palmare utilizzando il sensore tattile capacitivo, il modulo relè e Visuino. Guarda un video dimostrativo
Giochi a 4 pulsanti che utilizzano un ingresso analogico: 6 passaggi (con immagini)
Giochi a 4 pulsanti che utilizzano un ingresso analogico: questa istruzione si concentra sull'utilizzo di una linea di ingresso analogico per più pulsanti che possono essere rilevati indipendentemente l'uno dall'altro. E per evidenziare l'uso di questi pulsanti è incluso il software per giocare a quattro diversi giochi a 4 pulsanti. Tutti i giochi (8 in t
Usa 1 ingresso analogico per 6 pulsanti per Arduino: 6 passaggi
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 si trovavano le persone
Inizia con il kit tattile capacitivo: 4 passaggi
Inizia con Capacitive Touch Kit: Per il mio prossimo progetto utilizzerò un touchpad capacitivo e, prima di rilasciarlo, ho deciso di fare un piccolo tutorial sul kit che ho ricevuto per DFRobot
Albero della vita (sensore tattile capacitivo Arduino che guida il servomotore): 6 passaggi (con immagini)
Albero della vita (sensore tattile capacitivo Arduino che guida il servomotore): per questo progetto abbiamo realizzato un albero che dà il riso che comprendeva un sensore tattile capacitivo e un servomotore. Toccando il tappetino, il servomotore si attiverebbe e il riso (o qualunque cosa tu voglia metterci dentro) verrà rilasciato. Ecco un breve video