Taula de continguts:

Entrada tàctil capacitiva ESP32 mitjançant "Endolls de forat metàl·lic" per a botons: 5 passos (amb imatges)
Entrada tàctil capacitiva ESP32 mitjançant "Endolls de forat metàl·lic" per a botons: 5 passos (amb imatges)

Vídeo: Entrada tàctil capacitiva ESP32 mitjançant "Endolls de forat metàl·lic" per a botons: 5 passos (amb imatges)

Vídeo: Entrada tàctil capacitiva ESP32 mitjançant
Vídeo: Sensor táctil capacitivo 2024, De novembre
Anonim
Image
Image
Maquinari
Maquinari

Quan estava ultimant les decisions de disseny d’un proper projecte basat en el kit ESP32 WiFi 32 que requereix tres botons d’entrada, un problema notable va ser que el kit WiFi 32 no posseïa un sol botó mecànic, però només tres botons mecànics, per a l’entrada. No obstant això, el kit WiFi 32 té moltes entrades tàctils capacitives, de manera que vaig passar un temps muntant maquinari, escrivint programari i provant un disseny d’entrada de tres botons mitjançant la funció d’entrada tàctil capacitiva ESP32 i tres taps de 3/8 "" forats metàl·lics "per botons.

Com ha descobert qualsevol persona que hagi experimentat amb les entrades tàctils capacitives ESP32, les entrades tàctils són certament prou sorolloses com per requerir un filtratge per a una detecció d’entrada fiable. Per minimitzar el recompte total de peces per al proper projecte, he determinat que un simple filtre digital impulsat per interrupcions (més un "rebounce" que un filtre, però divago), a diferència d'afegir maquinari de filtre extern, podria calmar les entrades sorolloses. I després de fer les proves, es va fer evident que les entrades capacitives ESP32, tres taps de forat metàl·lic de 3/8 "i alguns programes digitals de" filtrat "proporcionarien una entrada de tres botons fiable per al disseny.

Per tant, si esteu interessats a provar l'entrada capacitiva amb filtratge digital en un ESP32, he inclòs el codi font "Buttons.ino" al format d'entorn Arduino juntament amb les instruccions de muntatge i programació, a més d'una breu descripció del codi font, per a el que vaig descobrir que era una entrada de tres botons molt fiable.

I, com de costum, probablement he oblidat un fitxer o dos o qui sap què més, així que si teniu alguna pregunta, no dubteu a preguntar-ho, ja que faig molts errors.

I una nota final, no rebo cap compensació de cap forma, inclosa, entre d'altres, mostres gratuïtes, per a cap dels components utilitzats en aquest disseny

Pas 1: maquinari

Maquinari
Maquinari
Maquinari
Maquinari
Maquinari
Maquinari

El disseny utilitza el següent maquinari:

  • Un, el kit WiFi 32.
  • Tres taps forats metàl·lics de 3/8 ".
  • Tres, 4 "de longitud de filferro de 28awg.

Per muntar el maquinari, he realitzat els passos següents:

  • Retireu i conserveu els extrems de cada cable de 4 "de longitud com es mostra.
  • S'ha soldat el primer cable al pin 13 de l'ESP32 (l'entrada TOUCH4 o "T4").
  • S'ha soldat el segon cable al pin 12 de l'ESP32 (l'entrada TOUCH5 o "T5").
  • S'ha soldat el tercer cable al pin 14 de l'ESP32 (l'entrada TOUCH6 o "T6").
  • Soldat un de cadascun dels tres taps metàl·lics de 3/8 "als extrems lliures de les tres longituds de filferro.

Pas 2: programari

Programari
Programari

El fitxer "Buttons.ino" és un fitxer d'entorn Arduino que conté el programari per al disseny. A més d’aquest fitxer, necessitareu la biblioteca de gràfics "U8g2lib" per a la pantalla OLED WiFi Kit32 (consulteu https://github.com/olikraus/u8g2/wiki per obtenir més informació sobre aquesta biblioteca).

Amb la biblioteca de gràfics U8g2lib instal·lada al directori Arduino i "Buttons.ino" carregat a l'entorn Arduino, compileu i descarregueu el programari a l'ESP32.

Un cop descarregada i executada, la línia superior de la pantalla hauria de llegir "Botons", amb la segona línia de la pantalla "1 2 3" com a indicadors de botó. A sota de cadascun dels indicadors de botó 1, 2, 3 hi ha els valors de lectura tàctil sense filtrar i, a sota de cadascun d’ells, hi ha els indicadors de pulsació de botó ("1" per prémer, "0" per no prémer). Com es pot veure al vídeo (i si es confirma la prova a llarg termini), el filtre de programari proporciona una detecció fiable d’entrada de botons sense activació falsa.

Pas 3: Quant al programari

El programari conté tres seccions principals de codi; l'Arduino requeria seccions "setup ()" i "loop ()" i una secció "Interromp". La secció setup () conté el codi necessari per inicialitzar els serveis OLED i interrompre els serveis. Les funcions de configuració OLED es descriuen a l'enllaç anterior. Les funcions de configuració del servei d’interrupció són les següents:

  • "timerLoopSemaphore = xSemaphoreCreateBinary ()" crea un semàfor per a "InterruptService ()" (la rutina del servei d'interrupcions) per informar loop () quan és hora d'executar una passada de bucle.
  • "timerInterruptService = timerBegin (0, 80, true)" crea un temporitzador mitjançant el temporitzador de maquinari 0 amb una escala prèvia de 80.
  • "timerAttachInterrupt (timerInterruptService, & InterruptService, true)" adjunta InterruptService () al temporitzador.
  • "timerAlarmWrite (timerInterruptService, 1000, true)" estableix la taxa de servei d'interrupció a 1000 Hz.
  • "timerAlarmEnable (timerInterruptService)" inicia l'alarma del temporitzador i, per tant, interromp el servei.

Quan la configuració s'ha completat, s'introdueix loop () i s'atura immediatament a la línia:

if (xSemaphoreTake (timerLoopSemaphore, portMAX_DELAY) == pdTRUE), meaning (loop) esperarà en aquest punt fins que arribi el semàfor d'InterruptService (). Quan arriba el semàfor, s'executa el codi loop (), actualitzant la pantalla OLED amb les dades del botó i tornant a la part superior per tornar a esperar el següent semàfor. Amb InterruptService () funcionant a 1000 Hz i un valor LOOP_DELAY de 30, loop () s’executa cada 30 ms, o amb una velocitat d’actualització de la pantalla de 33,333 Hz. Tot i que es tracta d’una freqüència d’actualització de la pantalla més alta que la requerida per a la majoria d’aplicacions ESP32, he utilitzat aquesta configuració per il·lustrar la capacitat de resposta del filtre. Vaig provar i vaig determinar que el temps necessari per executar una passada de bucle () era de 20 ms.

InterruptService () és cridat pel temporitzador creat a setup () a una velocitat de 1000 Hz. Quan es crida, actualitza dos comptadors descendents, nLoopDelay i nButtonDelay. Quan nLoopDelay es compta fins a zero, envia el semàfor que permet que loop () executi una sola passada i després restableix nLoopDelay. Quan nButtonDelay es compta fins a zero, també es restableix i s'executa el botó "filtres".

Cada filtre de botons té un comptador de filtres únic (per exemple, nButton1Count, nButton2Count i nButton3Count). Sempre que el valor d’entrada tàctil assignat al botó sigui superior o igual al valor llindar definit (BUTTON_THRESHHOLD), el comptador de filtre assignat al botó i al botó continuen sent zero. Si el valor d’entrada tàctil assignat al botó és inferior al llindar definit, el comptador de filtres assignat al botó s’incrementa un cada 20 ms. Quan el comptador del filtre supera el valor del filtre de botó (BUTTON_FILTER), el botó es considera "premut". L'efecte d'aquest mètode és crear un filtre que requereixi 80 ms (20 ms nButtonDelay * 4ms nButtonCountN on N és el nombre de botó) de valors d'entrada tàctils continus per sota del llindar definit per considerar el botó realment premut. Qualsevol temps inferior a 80 ms es considera un "error" i el filtre el rebutja.

Donada aquesta breu descripció, si teniu cap pregunta, no dubteu a fer-ho i faré tot el possible per respondre-les.

Espero que us hagi agradat!

Pas 4: el "proper projecte"

El
El

El proper projecte, "Intelligrill® Pro", és un monitor de fumador de sonda de temperatura dual que inclou:

  • Càlculs de la sonda de temperatura de Steinhart-Hart (a diferència de les taules de "cerca") per augmentar la precisió.
  • Temps predictiu fins a la finalització de la sonda 1 que incorpora la major precisió derivada dels càlculs de Steinhart-Hart.
  • Una segona sonda, la sonda 2, per controlar la temperatura del fumador (limitada de 32 a 399 graus).
  • Controls d'entrada tàctils capacitius (com en aquest manual instructiu).
  • Monitorització remota basada en WIFI (amb una adreça IP fixa, permet controlar el progrés del fumador des de qualsevol lloc on hi hagi una connexió a Internet disponible).
  • Rang de temperatura ampliat (de nou de 32 a 399 graus).
  • Alarmes de finalització sonores tant al transmissor Intelligrill® com a la majoria de dispositius de monitoratge capaços de connectar-se a WiFi.
  • Visualització de la temperatura en graus F o graus C.
  • Format d’hora en HH: MM: SS o HH: MM.
  • Visualització de la bateria en volts o en% de càrrega.
  • I properament, sortida PID per a fumadors basats en barres.

"Intelligrill® Pro" està provant per convertir-se en Intelligrill®, basat en HTML, més precís, ple de funcions i fiable.

Encara està en proves, però amb els menjars que m’ajuda a preparar durant la prova, he guanyat més d’alguns quilos.

De nou, espero que us agradi!

Pas 5: següent: Entrada analògica de la sonda de temperatura ESP32 NTP amb correcció de Steinhart-Hart

Prepareu-vos per treure la pols dels vostres llibres d’àlgebra.

Recomanat: