Necesito un interruptor que no solo detecte abrir/cerrar, sino que también envíe un pulso para activar un ESP8266 cada vez que cambie el estado (rebote)

Mi aplicación es que estoy tratando de crear un dispositivo alimentado por "batería de botón" muy pequeño para detectar la apertura y el cierre de un interruptor y enviar cambios de estado a través de WiFi a otro dispositivo en la red. Usaré un ESP8266 (ESP-03) que tiene un pin de reinicio (RST) y un modo de suspensión profunda.

Según tengo entendido, el software puede iniciar el modo de suspensión profunda. Luego, el pin RST en el ESP debe estar bajo durante al menos 100 us (pero preferiblemente menos de 0,1 segundos) para despertarlo. En ese momento, puede verificar una de las entradas GPIO para ver si el interruptor está abierto (alto) o cerrado (bajo) y luego volver a ponerlo en suspensión hasta el próximo evento de apertura/cierre.

Para aclarar con un ejemplo, una aplicación sería enviar una notificación cada vez que se abre o cierra una caja, que debe incluir el estado actual. Por ejemplo, se encuentra cerrado en un estante. Cuando alguien lo abre, el ESP se despierta, envía una señal de "está abierto" y luego vuelve a dormir. Cuando la caja se cierra, se despierta de nuevo, envía una señal de "está cerrado" y vuelve a dormir. La caja puede estar abierta o cerrada durante mucho tiempo, por lo que solo queremos que se envíe la señal de pulso de reinicio cuando cambie el estado.

He visto algunos otros artículos que hablan de situaciones similares, pero no parece haber ningún comentario de "esto funcionó" o los casos son ligeramente diferentes. El flip flop monoestable parece prometedor ( http://www.bowdenshobbycircuits.info/page9.htm ), pero ¿lo estoy entendiendo correctamente? Además, ¿drenará la batería?

Estoy tratando de mantener este dispositivo lo más pequeño y eficiente posible.

¿Necesita saber si el botón está alto o bajo, o simplemente que ha sido presionado? Si solo le importa presionar los botones, entonces podría funcionar un interruptor momentáneo bajo activo conectado a la línea RST. Esta sería la energía más eficiente ya que solo hay corriente de fuga a través del pin ESP8266, que es pequeño.
Necesito saber si el boton esta alto o bajo. Una situación de ejemplo sería enviar una notificación cada vez que se abre o cierra una caja, que debe incluir el estado actual. Por ejemplo, se encuentra cerrado en un estante. Cuando alguien lo abre, el ESP se despierta, envía una señal de "está abierto" y luego vuelve a dormir. Cuando la caja se cierra, se despierta nuevamente, envía una señal de "está cerrado" y vuelve a dormir. La caja puede estar abierta o cerrada durante mucho tiempo, por lo que solo queremos que se envíe la señal cuando cambie el estado.
Ponga la información añadida de sus comentarios en la pregunta. ASEGÚRESE de que la especificación sea necesaria y suficiente para describir lo que desea. Cuando lo sea, díganos y aconséjele una ~~~= solución óptima.
Russell, he actualizado la pregunta. No sabía que era correcto hacer eso. Espero que lo que tengo ahora sea más claro.
Ver mi adición de puerta XOR. Puede obtener circuitos integrados XOR de puerta única de paquete muy pequeño que harán lo que desee. El consumo de corriente no operativa puede ser de unos pocos microamperios.

Respuestas (2)

Agregado:

Se puede usar una puerta XOR (OR exclusivo) (o XNOR) para producir un pulso de salida en los flancos ascendentes o descendentes de una señal de entrada. Una 'tabla de verdad' XOR es:

En fuera

00 0
01 1
10 1
11 0

es decir, la salida es alta cuando una sola entrada es alta. Ambas entradas bajas o ambas entradas altas producen una salida baja.

En el siguiente diagrama, la combinación RC actúa como un retardo que hace que cualquier cambio de nivel de entrada se retrase en el tiempo de llegada a la entrada RC conectada en relación con la entrada directamente conectada. Cuando se ingresa un nivel alto o bajo continuo, ambas entradas XOR tienen la misma polaridad y la salida es baja.
Cuando el nivel de entrada cambia, hay un período de aproximadamente t = R1 x C1 cuando las dos entradas no son iguales y se produce un pulso de salida.
Idealmente, se utilizarían entradas activadas por Schmitt, pero las entradas estándar "funcionan bien", sujeto a que no haya transitorios de entrada.

El RC solo consume energía cuando el capacitor se carga o descarga y esto puede ser muy pequeño, por lo que el circuito logra un consumo de energía extremadamente bajo. Las compuertas CMOS cuando no están cambiando consumen corrientes de submicroamperios.

Puede obtener compuertas XOR individuales en un paquete tan pequeño que es casi un peligro para la respiración. Uno de muchos es 74AHCT1G86SE-7

esquemático

simular este circuito : esquema creado con CircuitLab

______________________________

Algo tan simple como esto puede funcionar para usted dependiendo de la aplicación general (ya que a veces los "extras" no específicos complican el requisito).

Esto muestra el principio general y es posible que tenga que "jugar" un poco.

Se supone que /RST tiene un pullup interno para Vdd. Si no, se puede agregar uno.

Inicialmente, SW1 abierto = uC durmiendo.
SW1 cerrado = /RST bajo y Cd está cargado bajo. SW1 libera comunicados /RST y el procesador sale del modo de suspensión.
El nivel de CD se puede leer a través de GPIO.
El nivel de Cd vuelve a Vdd = alto después de un período > t= RdCd.

Si el interruptor es lo único que saca al procesador del modo de suspensión, entonces el GPIO lee y no se necesita ningún circuito excepto aparte del interruptor y un pullup para /RST (interno o externo).

esquemático

simular este circuito

Gracias por la sugerencia, pero ¿tengo razón al entender que esto solo activa el microcontrolador para que se active cuando el interruptor SW1 pasa del estado cerrado al estado abierto? También necesito que se active cuando el SW1 pasa del estado abierto al cerrado. Creo que este circuito tampoco funcionaría mientras SW1 está cerrado porque /RST permanecería bajo.
Russell, ¿podría volver a visitar esto o marcar su respuesta para que esta pregunta no aparezca respondida? Intenté actualizar la pregunta para que quede más clara, pero nadie la ha revisado. Su respuesta no abordó el problema que estaba tratando de preguntar.
¡Russell, la sugerencia con la puerta XOR es genial! Como necesito Vout invertido, supuse que podría usar una puerta NOT después del XOR, pero luego me di cuenta de que funcionaba una puerta XNOR. Si es así, esta es una solución muy simple. También buscaré crear esto como un disparador Schmitt, aunque creo que si dimensiono el pulso T (por ejemplo, R x C) a 150 ms, entonces debería "rebotar" por sí mismo. De nuevo, gran sugerencia... ¡gracias!

Agregando mi respuesta ya que he tenido la misma pregunta. He encontrado algunas respuestas, pero no ninguna completa con todas las partes y que han sido probadas.

Este es un prototipo de trabajo que hice. Puede ver más detalles sobre las piezas, modificarlas y pedir las suyas propias si lo desea.

Este es el esquema:
esquemático

Aquí hay un enlace a mi proyecto en jlcpcb: https://easyeda.com/jakibsgaard/low-powered-rising-and-falling-power-on-circuit

También tengo una pregunta abierta donde quiero mejorar el circuito que he hecho. Pero eso no es obligatorio. Esto tiene mucha más información sobre el circuito que hice. Detector de borde mejorado con circuito de enganche para esp8266

Diseño muy interesante... gracias!!!