Tabla de contenido:

Sensor de notificación de lavadora: 6 pasos (con imágenes)
Sensor de notificación de lavadora: 6 pasos (con imágenes)

Video: Sensor de notificación de lavadora: 6 pasos (con imágenes)

Video: Sensor de notificación de lavadora: 6 pasos (con imágenes)
Video: 🤔 MODO DIAGNOSTICO LAVADORA SAMSUNG / MODO de PRUEBA LAVADORA SAMSUNG 2024, Mes de julio
Anonim
Image
Image
Prototipo
Prototipo

Este sensor de lavadora se encuentra en la parte superior de mi lavadora y usa un acelerómetro para detectar la vibración de la máquina. Cuando detecta que el ciclo de lavado ha terminado, me envía una notificación en mi teléfono. Construí esto porque la máquina ya no suena cuando está terminada y estaba cansado de olvidar sacar la ropa.

El código se puede encontrar aquí:

Lista completa de piezas:

  • WEMOS LOLIN32
  • Protoboard de tamaño medio (para la creación de prototipos)
  • Caja de Proyecto ABS con Tablero Matrix 59x88x30mm
  • Sparkfun LIS3DH - Acelerómetro de triple eje Breakout
  • 1x MOSFET de canal P ZVP3306A, 160 mA, 60 V, línea E de 3 pines
  • 1x Transistor NPN BC549B TO92 30V
  • LED azul de 5 mm 68 mcd
  • 1 resistencia CF de 100 k 0,125 W
  • 1 resistencia CF de 330 k 0,125 W
  • Resistencia CF de 2x 10k 0.250W
  • 1x 100 resistencia CF de 0,250 W
  • Cable tipo PH JST hembra de 2 pines (14 cm)
  • 4x M1219-8 Disco magnético de neodimio de 6x4 mm

Paso 1: prototipo

Prototipo
Prototipo

El dispositivo utiliza un microcontrolador ESP32. En este caso, estoy usando la placa de desarrollo Lolin32 de Wemos que puedes comprar en AliExpress por unos 7 dólares. El acelerómetro es el Sparkfun LIS3DH; es importante que el acelerómetro sea digital en lugar de analógico, como verá más adelante. La batería la saqué de un viejo par de altavoces bluetooth.

El ESP32 se conecta al acelerómetro a través de I2C. La primera versión del código simplemente sondeó los tres ejes de aceleración (x, y y z) para el valor de aceleración medido cada 20 ms. Colocando el prototipo de tablero en la lavadora y produje el gráfico anterior que muestra picos de aceleración durante varias fases del ciclo de lavado. Los picos en los que la aceleración absoluta fue superior a 125 mg (125 milésimas de la gravedad normal) se muestran en naranja. Queremos detectar estos periodos y utilizarlos para determinar el estado de la lavadora.

¿Cómo determinar si la máquina está encendida o apagada?

Uno de los objetivos de la construcción de este dispositivo era que fuera completamente pasivo. Es decir. no es necesario presionar ningún botón; simplemente funcionaría. También debería ser de muy baja potencia, ya que en mi caso no era posible extender los cables de alimentación a la lavadora.

Afortunadamente, el acelerómetro LIS3DH tiene una función en la que puede activar una interrupción cuando la aceleración excede un umbral determinado (tenga en cuenta que esto requiere el uso del filtro de paso alto incorporado en el acelerómetro; consulte el código en Github para obtener más detalles) y el ESP32 se puede activar. salir de su modo de sueño profundo a través de una interrupción. Podemos utilizar esta combinación de funciones para crear un modo de suspensión de muy bajo consumo que se activa con el movimiento.

El pseudocódigo se vería así:

# Dispositivo despertador

notification_threshold = 240 counter = 10 accelerometer.set_threshold (96) # 96mg while counter> 0: if acelerometer.above_threshold (): counter ++ else: counter-- if counter> notification_threshold: # ciclo de centrifugado final detectado sueño (1 segundo) acelerómetro.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt () esp32.deep_sleep ()

Puede ver aquí que usamos un contador para detectar cuántos segundos de aceleración hemos detectado durante el período de activación actual. Si el contador cae a cero, podemos volver a poner el dispositivo en reposo. Si el contador llega a 240 (el umbral de notificación), eso significa que hemos detectado 4 minutos de vibración. Podemos modificar los valores de estos umbrales para asegurarnos de que el dispositivo detecta correctamente el ciclo de centrifugado final. Una vez que se detecta suficiente vibración, simplemente podemos dormir durante otros 5 minutos (en mi caso, este es el tiempo que tarda hasta que se completa el lavado) antes de enviar una notificación.

Paso 2: enviar una notificación a través de Blynk

Envío de una notificación a través de Blynk
Envío de una notificación a través de Blynk

Blynk es un servicio diseñado para permitir la interacción con dispositivos IoT con una aplicación en su teléfono. En este caso, estoy usando la API de notificaciones push que se activa mediante un simple HTTP POST a la API de Blynk.

Paso 3: medir el consumo de energía y estimar la vida útil de la batería

Medición del consumo de energía y estimación de la vida útil de la batería
Medición del consumo de energía y estimación de la vida útil de la batería

Se anuncia que el chip ESP32 tiene un consumo de energía muy bajo cuando está en sueño profundo (tan bajo como 5uA). Desafortunadamente, los circuitos de las diferentes placas de desarrollo proporcionan características de consumo de energía muy diferentes; no todas las placas de desarrollo ESP32 son iguales. Por ejemplo, cuando comencé este proyecto por primera vez, usé Sparkfun ESP32 Thing que consumiría alrededor de 1 mA de energía en el modo de suspensión profunda (incluso después de deshabilitar el LED de encendido). Desde entonces he estado usando el Lolin32 (no la versión Lite) en el que medí una corriente de 144.5uA mientras estaba en modo de suspensión profunda. Para hacer esta medición, simplemente conecté un multímetro en serie con la batería y el dispositivo. Sin duda, esto es más fácil de hacer mientras se crea un prototipo con una placa de pruebas. También medí el uso actual cuando el dispositivo está despierto:

  • Sueño profundo: 144.5uA
  • Despierto: 45mA
  • Wifi habilitado: 150mA

Suponiendo que uso la máquina dos veces por semana, calculé los siguientes tiempos para el tiempo que el sensor pasa en cada estado:

  • Sueño profundo: 604090 segundos (~ 1 semana)
  • Despierto: 720 segundos (12 minutos)
  • Wifi habilitado: 10 segundos

A partir de estas cifras, podemos estimar cuánto va a durar la batería. Usé esta práctica calculadora para obtener un consumo de energía promedio de 0.2mA. ¡La duración estimada de la batería es de 201 días o aproximadamente 6 meses! En realidad, he descubierto que el dispositivo dejará de funcionar después de aproximadamente 2 meses, por lo que podría haber algunos errores en las mediciones o en la capacidad de la batería.

Paso 4: medir el nivel de la batería

Medición del nivel de la batería
Medición del nivel de la batería
Medición del nivel de la batería
Medición del nivel de la batería

Pensé que sería bueno si el dispositivo pudiera decirme cuando la batería se está agotando para saber cuándo cargarla. Para medir esto necesitamos medir el voltaje de la batería. La batería tiene un rango de voltaje de 4,3 V a 2,2 V (el voltaje de funcionamiento mínimo del ESP32). Desafortunadamente, el rango de voltaje de los pines ADC del ESP32 es 0-3.3V. Esto significa que debemos reducir el voltaje de la batería de su máximo de 4.3 a 3.3 para evitar sobrecargar el ADC. Esto se puede hacer con un divisor de voltaje. Simplemente conecte dos resistencias con los valores apropiados de la batería a tierra y mida el voltaje en el medio.

Desafortunadamente, un circuito divisor de voltaje simple agotará la energía de la batería incluso cuando no se esté midiendo el voltaje. Puede mitigar esto utilizando resistencias de alto valor, pero el lado negativo es que es posible que el ADC no pueda extraer suficiente corriente para realizar una medición precisa. Decidí usar resistencias con valores de 100kΩ y 330kΩ que bajarán 4.3V a 3.3V de acuerdo con la fórmula de este divisor de voltaje. Dada una resistencia total de 430kΩ, esperaríamos un consumo de corriente de 11.6uA (usando la ley de Ohm). Dado que nuestro uso actual de sueño profundo es 144uA, es un aumento razonablemente significativo.

Como solo queremos medir el voltaje de la batería una vez justo antes de enviar una notificación, tiene sentido apagar el circuito divisor de voltaje durante el tiempo en que no estamos midiendo nada. Afortunadamente, podemos hacer esto con un par de transistores conectados a uno de los pines GPIO. Usé el circuito dado en esta respuesta de intercambio de pila. Puede verme probando el circuito con un Arduino y una placa en la foto de arriba (tenga en cuenta que hay un error en el circuito que es la razón por la que estoy midiendo un voltaje más alto de lo esperado).

Con el circuito anterior en su lugar, utilizo el siguiente pseudo código para obtener un valor de porcentaje de batería:

porcentaje de batería():

# habilitar el circuito de voltaje de la batería gpio_set_level (BATTERY_EN_PIN, HIGH) # El nivel de la batería se devuelve como un número entero entre 0 y 4095 adc_value = adc1_get_value (ADC_PIN) # habilitar el circuito de voltaje de la batería gpio_set_level (BATTERY_EN_PIN, LOW) float adc_95 # voltaje El divisor usa resistencias de 100k / 330k ohmios # 4.3V -> 3.223, 2.4 -> 1.842 esperado_máx = 4.3 * 330 / (100 + 330) esperado_mín = 2.4 * 330 / (100 + 330) nivel_de_batería = (adc_voltaje-esperado_min) / (esperado_máx -expected_min) return battery_level * 100.0

Paso 5: haciéndolo más bonito

Haciéndolo más bonito
Haciéndolo más bonito
Haciéndolo más bonito
Haciéndolo más bonito
Haciéndolo más bonito
Haciéndolo más bonito

Si bien la versión de tablero funciona bien, quería ponerla en un paquete que fuera más ordenado y confiable (sin cables que puedan aflojarse o cortocircuitarse). Me las arreglé para encontrar la caja de proyecto perfecta para mis necesidades que tenía el tamaño correcto, incluía un tablero de clavijas, soportes de montaje y tornillos para unirlo todo. Además, era muy barato por menos de 2 libras esterlinas. Después de recibir la caja, todo lo que tuve que hacer fue soldar los componentes en el tablero de clavijas.

Quizás la parte más complicada de esto fue colocar todos los componentes del circuito de voltaje de la batería en el pequeño espacio al lado del Lolin32. Afortunadamente, con un poco de póquer y las conexiones apropiadas hechas con soldadura, el circuito encaja perfectamente. Además, dado que el Wemos Lolin32 no tiene un pin para exponer el terminal positivo de la batería, tuve que soldar un cable desde el conector de la batería al tablero de pines.

También agregué un LED que parpadea cuando el dispositivo detecta movimiento.

Paso 6: Toques finales

Image
Image
Últimos retoques
Últimos retoques
Últimos retoques
Últimos retoques

Superpegué 4 imanes de neodimio de 6 mm x 4 mm a la base de la caja, lo que permite que se adhiera de forma segura a la parte superior de metal de la lavadora.

La caja del proyecto ya viene con un pequeño orificio para proporcionar acceso a los cables. Afortunadamente, pude colocar la placa ESP32 cerca de este orificio para dar acceso al conector micro USB. Después de agrandar el orificio con una navaja, el cable encajó perfectamente para permitir una fácil carga de la batería.

Si está interesado en alguno de los detalles de este proyecto, no dude en dejar un comentario. Si desea ver el código, compruébelo en Github:

github.com/alexspurling/washingmachine

Recomendado: