Sommario:

Ingresso tattile capacitivo ESP32 utilizzando "tappi per fori metallici" per i pulsanti: 5 passaggi (con immagini)
Ingresso tattile capacitivo ESP32 utilizzando "tappi per fori metallici" per i pulsanti: 5 passaggi (con immagini)

Video: Ingresso tattile capacitivo ESP32 utilizzando "tappi per fori metallici" per i pulsanti: 5 passaggi (con immagini)

Video: Ingresso tattile capacitivo ESP32 utilizzando
Video: How to use ESP32 WiFi and Bluetooth with Arduino IDE full details with examples and code 2024, Novembre
Anonim
Image
Image
Hardware
Hardware

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

Hardware
Hardware
Hardware
Hardware
Hardware
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

Software
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
Il

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: