Tabla de contenido:

Entrada táctil capacitiva ESP32 con "tapones metálicos" para botones: 5 pasos (con imágenes)
Entrada táctil capacitiva ESP32 con "tapones metálicos" para botones: 5 pasos (con imágenes)

Video: Entrada táctil capacitiva ESP32 con "tapones metálicos" para botones: 5 pasos (con imágenes)

Video: Entrada táctil capacitiva ESP32 con
Video: 🔴 ESP32 Sensores táctiles 2024, Mes de julio
Anonim
Image
Image
Hardware
Hardware

Mientras estaba ultimando las decisiones de diseño para un próximo proyecto basado en ESP32 WiFi Kit 32 que requiere la entrada de tres botones, un problema notable fue que el WiFi Kit 32 no posee un solo botón mecánico, sino solo tres botones mecánicos, para la entrada. Sin embargo, el WiFi Kit 32 tiene muchas entradas táctiles capacitivas, así que pasé un tiempo ensamblando hardware, escribiendo software y probando un diseño de entrada de tres botones utilizando la función de entrada táctil capacitiva ESP32 y tres tapones de orificio metálico de 3/8 para botones.

Como ha descubierto cualquiera que haya experimentado con las entradas táctiles capacitivas ESP32, las entradas táctiles son ciertamente lo suficientemente ruidosas como para requerir un filtrado para una detección de entrada confiable. Para minimizar el recuento total de piezas para el próximo proyecto, determiné que un simple filtro digital impulsado por interrupciones (más un "rebote" que un filtro, pero estoy divagando), en lugar de agregar hardware de filtro externo, podría silenciar las entradas ruidosas. Y después de la prueba, se hizo evidente que las entradas capacitivas ESP32, tres tapones de orificios metálicos de 3/8 "y algún software de" filtrado "digital, de hecho proporcionarían una entrada confiable de tres botones para el diseño.

Entonces, si está interesado en probar la entrada capacitiva con filtrado digital en un ESP32, he incluido el código fuente "Buttons.ino" en el formato de entorno Arduino junto con instrucciones de ensamblaje y programación, además de una breve descripción del código fuente, para lo que descubrí que es una entrada de tres botones altamente confiable.

Y, como de costumbre, probablemente olvidé uno o dos archivos o quién sabe qué más, así que si tiene alguna pregunta, no dude en preguntar, ya que cometo muchos errores.

Y una nota final, no recibo compensación de ninguna forma, incluidas, entre otras, muestras gratuitas, por cualquiera de los componentes utilizados en este diseño.

Paso 1: hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

El diseño utiliza el siguiente hardware:

  • Uno, Kit WiFi 32.
  • Tres tapones metálicos para orificios de 3/8 ".
  • Tres longitudes de 4 "de cable de 28 awg.

Para ensamblar el hardware, realicé los siguientes pasos:

  • Pele y estañe los extremos de cada cable de 4 "de largo como se muestra.
  • Soldado el primer cable al pin 13 del ESP32 (la entrada TOUCH4, o "T4").
  • Soldado el segundo cable al pin 12 del ESP32 (la entrada TOUCH5, o "T5").
  • Soldado el tercer cable al pin 14 del ESP32 (la entrada TOUCH6 o "T6").
  • Soldar uno de cada uno de los tres tapones de orificios metálicos de 3/8 "a los extremos libres de las tres longitudes de cable.

Paso 2: software

Software
Software

El archivo "Buttons.ino" es un archivo de entorno Arduino que contiene el software para el diseño. Además de este archivo, necesitará la biblioteca de gráficos "U8g2lib" para la pantalla OLED WiFi Kit32 (consulte https://github.com/olikraus/u8g2/wiki para obtener más información sobre esta biblioteca).

Con la biblioteca de gráficos U8g2lib instalada en su directorio Arduino y "Buttons.ino" cargado en el entorno Arduino, compile y descargue el software en el ESP32.

Una vez descargado y funcionando, la línea superior de la pantalla debe leer "Botones" y la segunda línea de la pantalla debe leer "1 2 3" como los indicadores de los botones. Debajo de cada uno de los indicadores de botón 1, 2, 3 están los valores de lectura táctil sin filtrar, y debajo de cada uno de estos están los indicadores de presión de botón ("1" para presionado, "0" para no presionado). Como se puede ver en el video (y como se confirmó en las pruebas a largo plazo), el filtro de software proporciona una detección de entrada de botón confiable sin disparos falsos.

Paso 3: Acerca del software

El software contiene tres secciones principales de código; el Arduino requería las secciones "setup ()" y "loop ()", y una sección de "Interrupciones". La sección setup () contiene el código necesario para inicializar OLED e interrumpir los servicios. Las funciones de configuración OLED se describen en el enlace anterior. Las funciones de configuración del servicio de interrupción son las siguientes:

  • "timerLoopSemaphore = xSemaphoreCreateBinary ()" crea un semáforo para "InterruptService ()" (la rutina de servicio de interrupción) para informar a loop () cuando es el momento de ejecutar un pase de bucle.
  • "timerInterruptService = timerBegin (0, 80, true)" crea un temporizador utilizando el temporizador de hardware 0 con una preescala de 80.
  • "timerAttachInterrupt (timerInterruptService, & InterruptService, true)" adjunta InterruptService () al temporizador.
  • "timerAlarmWrite (timerInterruptService, 1000, true)" establece la tasa de servicio de interrupción en 1000 Hz.
  • "timerAlarmEnable (timerInterruptService)" inicia la alarma del temporizador y, por lo tanto, interrumpe el servicio.

Con la configuración completa, se ingresa loop () y se detiene inmediatamente en la línea:

si (xSemaphoreTake (timerLoopSemaphore, portMAX_DELAY) == pdTRUE), lo que significa que loop () esperará en este punto hasta que llegue el semáforo de InterruptService (). Cuando llega el semáforo, se ejecuta el código loop (), actualizando la pantalla OLED con los datos del botón, luego regresa a la parte superior para esperar nuevamente el siguiente semáforo. Con InterruptService () ejecutándose a 1000 hz y un valor LOOP_DELAY de 30, loop () se ejecuta cada 30 ms, o con una frecuencia de actualización de pantalla de 33,333 hz. Si bien esta es una frecuencia de actualización de pantalla más alta que la requerida para la mayoría de las aplicaciones ESP32, utilicé esta configuración para ilustrar la capacidad de respuesta del filtro. Probé y determiné que el tiempo requerido para ejecutar un solo pase de bucle () era de 20 ms.

InterruptService () es llamado por el temporizador creado en setup () a una velocidad de 1000 Hz. Cuando se llama, actualiza dos contadores regresivos, nLoopDelay y nButtonDelay. Cuando nLoopDelay tiene una cuenta regresiva hasta cero, envía el semáforo que permite que loop () ejecute una sola pasada y luego reinicia nLoopDelay. Cuando nButtonDelay se cuenta regresivamente a cero, también se reinicia y luego se ejecuta el botón "filtros".

Cada filtro de botón tiene un contador de filtro único (por ejemplo, nButton1Count, nButton2Count y nButton3Count). Siempre que el valor de entrada táctil asignado al botón sea mayor o igual al valor de umbral definido (BUTTON_THRESHHOLD), el contador de filtro asignado al botón y al botón permanecerán en cero. Si el valor de entrada táctil asignado al botón es menor que el umbral definido, el contador de filtro asignado al botón se incrementa en uno cada 20 ms. Cuando el contador del filtro excede el valor del filtro del botón (BUTTON_FILTER), el botón se considera "presionado". El efecto de este método es crear un filtro que requiere 80ms (20ms nButtonDelay * 4ms nButtonCountN donde N es el número de botón) de valores de entrada táctil continua por debajo del umbral definido para considerar el botón realmente presionado. Cualquier momento inferior a 80 ms se considera un "error" y el filtro lo rechaza.

Dada esta breve descripción, si tiene alguna pregunta, no dude en hacerla y haré todo lo posible para responderla.

¡Espero que lo hayas disfrutado!

Paso 4: El "próximo proyecto"

los
los

El próximo proyecto, "Intelligrill® Pro", es un monitor fumador con sonda de temperatura dual que incluye:

  • Cálculos de la sonda de temperatura Steinhart-Hart (a diferencia de las tablas de "consulta") para una mayor precisión.
  • Tiempo predictivo hasta la finalización en la sonda 1 que incorpora la mayor precisión derivada de los cálculos de Steinhart-Hart.
  • Una segunda sonda, sonda 2, para monitorear la temperatura del fumador (limitada a 32 a 399 grados).
  • Controles de entrada táctil capacitiva (como en este Instructable).
  • Monitoreo remoto basado en WIFI (con una dirección IP fija, permite monitorear el progreso del fumador desde cualquier lugar donde haya una conexión a Internet disponible).
  • Rango de temperatura extendido (nuevamente 32 a 399 grados).
  • Alarmas audibles de finalización tanto dentro del transmisor Intelligrill® como en la mayoría de los dispositivos de monitoreo con capacidad WiFi.
  • Visualización de temperatura en grados F o grados C.
  • Formato de hora en HH: MM: SS o HH: MM.
  • Visualización de la batería en voltios o% de carga.
  • Y próximamente, salida PID para fumadores con sinfín.

"Intelligrill® Pro" se está probando para convertirse en el Intelligrill® basado en HTML más preciso, lleno de funciones y confiable que he diseñado.

Todavía está bajo prueba, pero con las comidas que está ayudando a preparar durante la prueba, he ganado más de unas pocas libras.

Una vez más, ¡espero que lo disfruten!

Paso 5: Siguiente paso: Entrada analógica de la sonda de temperatura ESP32 NTP con corrección Steinhart-Hart

Esté preparado para desempolvar sus libros de álgebra para este.

Recomendado: