Tabla de contenido:

Sensor de puerta inalámbrico - Energía ultrabaja: 5 pasos
Sensor de puerta inalámbrico - Energía ultrabaja: 5 pasos

Video: Sensor de puerta inalámbrico - Energía ultrabaja: 5 pasos

Video: Sensor de puerta inalámbrico - Energía ultrabaja: 5 pasos
Video: ✅ ESP32 es el mejor? Por Qué yo no lo uso? 2024, Noviembre
Anonim
Sensor de puerta inalámbrico - Energía ultrabaja
Sensor de puerta inalámbrico - Energía ultrabaja
Sensor de puerta inalámbrico - Energía ultrabaja
Sensor de puerta inalámbrico - Energía ultrabaja
Sensor de puerta inalámbrico - Energía ultrabaja
Sensor de puerta inalámbrico - Energía ultrabaja
Sensor de puerta inalámbrico - Energía ultrabaja
Sensor de puerta inalámbrico - Energía ultrabaja

¡¡Otro sensor de puerta más !! Bueno, la motivación para mí para crear este sensor fue que muchos de los que vi en Internet tenían una limitación u otra. Algunos de los objetivos del sensor para mí son:

1. El sensor debe ser muy rápido, preferiblemente menos de 5 segundos.

2. El sensor debe funcionar con una batería de iones de litio de 3,7 V, ya que tengo docenas de ellas por ahí

3. El sensor debería funcionar durante muchos meses con una sola carga de la batería. Debe consumir <10uA en modo de suspensión

4. El sensor debe poder activarse para transmitir datos críticos como el estado de la batería, incluso cuando la puerta no se opera durante mucho tiempo.

5. El sensor debe transmitir datos a un tema MQTT cuando se abre la puerta y cuando se cierra la puerta.

6. El sensor debe consumir la misma cantidad de energía independientemente del estado de la puerta

Funcionamiento del sensor:

El sensor tiene 2 controladores principales. El primero es un pequeño microcontrolador ATiny 13A. El segundo es el ESP que generalmente está en modo de suspensión y se activa solo cuando el ATiny lo habilita. Todo el circuito también se puede hacer solo con el ESP usándolo en el modo de suspensión, pero la corriente que consume es mucho mayor de la necesaria para que una batería dure meses, por lo que el ATTiny viene al rescate. Solo sirve para despertarse cada N segundos, buscar un evento de puerta o un evento de control de salud, si lo hay, mantiene el pin CH_PD del ESP en ALTO y envía la señal adecuada del tipo de evento al ESP. Su papel termina ahí.

Luego, el ESP toma el control, lee el tipo de señal, se conecta a WiFi / MQTT, publica los mensajes requeridos, incluido el nivel de la batería, y luego se apaga devolviendo el pin EN a BAJO.

Al usar estos chips de esta manera, aprovecho la baja corriente de reposo del ATtiny y la corriente inactiva cero del ESP cuando el chip está desactivado a través del pin CH_PD.

Suministros

Prerrequisito:

- Conocimiento de la programación de un ATTiny y ESP 01

- Conocimiento de la soldadura de componentes en una placa de circuito impreso.

ESP-01 (o cualquier ESP)

ATTiny 13A - AVR

LDO 7333-A - Regulador de voltaje de baja caída

Resistencias - 1K, 10K, 3K3

Condensadores: 100 uF, 0,1 uF

Interruptor de botón, micro interruptor de ENCENDIDO / APAGADO - (ambos opcionales)

Diodo - IN4148 (o cualquier equivalente)

Batería de iones de litio

Interruptor de láminas

Un caso para albergarlo todo

Soldadura, PCB, etc.

Paso 1: esquemas y código fuente

Esquemas y código fuente
Esquemas y código fuente

Los esquemas se muestran en el diagrama adjunto.

He incluido un MOSFET de canal P para protección contra polaridad inversa. Si no lo necesita, puede omitirlo. Cualquier MOSFET de canal P con un Rds bajo ENCENDIDO servirá.

En la actualidad, el ESP no tiene la capacidad de OTA, pero eso se debe mejorar en el futuro.

Código fuente sensor de puerta inteligente

Paso 2: funcionamiento del circuito

ATTiny flujo de trabajo

La magia aquí ocurre en cómo el ATTiny monitorea la posición del interruptor de la puerta.

La opción normal sería conectar una resistencia pull up al interruptor y seguir monitoreando su estado. Esto tiene la desventaja de que la resistencia pull up consume corriente constante. La forma en que esto se ha evitado aquí es que he usado dos pines para monitorear el interruptor en lugar de uno. He usado PB3 y PB4 aquí. PB3 se define como entrada y PB4 como salida con un INPUT_PULLUP interno en PB3. Normalmente, PB4 se mantiene en ALTO cuando ATtiny está en modo de suspensión. Esto asegura que no haya flujo de corriente a través de la resistencia pull up de entrada, independientemente de la posición del interruptor de lengüeta. es decir. Si el interruptor está cerrado, tanto PB3 como PB4 están en ALTO y, por lo tanto, no fluye corriente entre ellos. Si el interruptor está abierto, no hay camino entre ellos y, por lo tanto, la corriente es cero. Cuando el ATtiny se despierta, escribe un BAJO en PB4 y luego verifica el estado de PB3. Si PB3 está ALTO, entonces el interruptor de láminas está ABIERTO; de lo contrario, está CERRADO. Luego escribe un ALTO en PB4.

La comunicación entre ATtiny y ESP ocurre a través de dos pines PB1 / PB2 conectados a Tx / RX de ESP. He definido la señal como

PB1 PB2 ====== Tx Rx

0 0 ====== WAKE_UP (verificación de estado)

0 1 ====== SENSOR_OPEN

1 0 ====== SENSOR_CERRADO

1 1 ====== SIN UTILIZAR

Además de enviar la señal al ESP, también envía un pulso ALTO en PB0 que está conectado al pin ESP CH_PD. Esto despierta el ESP. Lo primero que hace ESP es mantener GPIO0 HIGH que está conectado a CH_PD asegurando así su encendido incluso si ATTiny quita el PB0 HIGH. El control ahora está con el ESP para determinar cuándo quiere apagarse.

Luego se conecta a WiFi, MQTT, publica el mensaje y se apaga escribiendo LOW en GPIO0.

ESP 01 Flujo de trabajo:

El flujo de ESP es sencillo. Se despierta y lee los valores de los pines Tx / Rx para determinar qué tipo de mensaje se publicará. Se conecta a WiFi y MQTT, publica el mensaje y se apaga solo.

Antes de apagarlo, vuelve a comprobar los valores de los pines de entrada para ver si han cambiado desde la última lectura. Esto es para cuidar una rápida apertura y cierre de la puerta. Si no tiene esta verificación, en algunos casos puede perder el cierre de la puerta si se cierra dentro de los 5-6 segundos posteriores a la apertura. Un escenario práctico en el que la puerta se abre y se cierra en aproximadamente 2 segundos queda bien capturado por el bucle while que sigue publicando los mensajes siempre que el estado actual de la puerta sea diferente al anterior. El único escenario que puede pasar por alto al registrar todo el evento de apertura / cierre es cuando la puerta se abre / cierra repetidamente dentro de una ventana de 4-5 segundos, lo cual es un caso muy poco probable, probablemente un caso de algún niño jugando con la puerta.

Paso 3: verificación de estado

También necesitaba una forma de tener un mensaje de verificación de estado del ESP donde también envía el nivel de batería del ESP para garantizar que el sensor esté funcionando bien sin una inspección manual. Para ello, ATTiny envía una señal WAKE_UP cada 12 horas. Se puede configurar mediante la variable WAKEUP_COUNT en el código ATtiny. Esto es muy útil para puertas o ventanas que rara vez se abren y, por lo tanto, es posible que no sepa si algo anda mal con el sensor o su batería.

En caso de que no necesite la funcionalidad de verificación de estado, entonces no es necesario el concepto completo de usar ATTiny. En ese caso, puede encontrar otros diseños que la gente ha creado donde el suministro al ESP se alimenta a través de un MOSFET y, por lo tanto, puede lograr un consumo de corriente cero cuando la puerta no está siendo operada. Hay otras cosas que se deben tener en cuenta, como que el consumo de corriente sea el mismo en la posición de puerta abierta y puerta cerrada; por eso, en algún lugar vi un diseño que utilizaba un interruptor de lengüeta de 3 estados en lugar del estado habitual de 2.

Paso 4: Medidas de energía y duración de la batería

He medido el consumo de corriente del circuito y tarda ~ 30uA cuando está durmiendo y alrededor. Siguiendo las hojas de datos de ATTiny, debería ser de alrededor de 1-4 uA para todo el circuito, incluida la corriente de reposo del LDO, pero luego mis medidas muestran 30. El MOSFET y el LDO consumen una corriente insignificante.

Por lo tanto, una batería de 800 mAH debería durar mucho tiempo. No tengo estadísticas exactas, pero lo he estado usando en 2 de mis puertas durante más de un año y cada celda 18650 con alrededor de 800 mAH restante dura aproximadamente 5-6 meses en mi puerta principal que se abre y se cierra en al menos 30 veces al día. El de la puerta del techo que se abre solo unas pocas veces en una semana, dura 7-8 meses.

Paso 5: Mejoras futuras

1. El ESP no reconoce la entrega del mensaje MQTT. El programa se puede mejorar suscribiéndose al tema que publica el mensaje para confirmar la entrega o se puede usar una biblioteca Async MQTT para publicar un mensaje con QoS 1.

2. Actualización OTA: el código ESP se puede modificar para leer un tema MQTT para una actualización y así entrar en un modo OTA para recibir un archivo.

3. ESP01 se puede reemplazar con ESP-12 para tener acceso a más PIN de entrada y así poder conectar más sensores al mismo. En ese caso, la comunicación a través del método de 2 bits no es posible. Esto puede mejorarse para implementar la comunicación I2C entre ATtiny y ESP. Esto es un poco complicado pero viable. Lo tengo funcionando en otra configuración donde un ATTiny envía valores de codificador rotatorio al ESP a través de la línea I2C.

4. El circuito de corriente monitorea el Vcc interno del ESP. Si usamos ESP12, esto se puede modificar para leer el nivel real de la batería a través del pin ADC.

5. En el futuro también publicaré una modificación a esto que se puede utilizar como un sensor independiente sin la necesidad de un MQTT o cualquier sistema de domótica. El sensor funcionará de forma independiente y puede realizar una llamada telefónica cuando se active; por supuesto, necesita una conexión a Internet para esto.

6. Y la lista continúa …

7. Protección de batería inversa: HECHO (las imágenes reales del dispositivo son antiguas y, por lo tanto, no reflejan el MOSFET)

Recomendado: