Índice:

Sensor de notificação de máquina de lavar: 6 etapas (com imagens)
Sensor de notificação de máquina de lavar: 6 etapas (com imagens)

Vídeo: Sensor de notificação de máquina de lavar: 6 etapas (com imagens)

Vídeo: Sensor de notificação de máquina de lavar: 6 etapas (com imagens)
Vídeo: Como funciona umas máquina de lavar louça por dentro? 2024, Julho
Anonim
Image
Image
Protótipo
Protótipo

Este sensor de máquina de lavar fica em cima da minha máquina de lavar e usa um acelerômetro para detectar a vibração da máquina. Quando percebe que o ciclo de lavagem terminou, ele me envia uma notificação no meu telefone. Eu construí isso porque a própria máquina não emite mais bipes quando termina e eu estava cansada de esquecer de tirar a roupa.

O código pode ser encontrado aqui:

Lista completa de peças:

  • WEMOS LOLIN32
  • Breadboard de meio tamanho (para prototipagem)
  • Caixa de projeto ABS com placa de matriz 59x88x30mm
  • Sparkfun LIS3DH - Breakout do acelerômetro de eixo triplo
  • 1x MOSFET de canal P ZVP3306A, 160 mA, 60 V, linha E de 3 pinos
  • 1x BC549B TO92 30V NPN Transistor
  • 5mm LED Azul 68 mcd
  • 1x 100k 0.125W CF Resistor
  • 1x 330k 0.125W CF Resistor
  • 2 resistores CF de 10k 0,250 W
  • 1x 100 resistor CF 0,250W
  • Cabo fêmea JST estilo PH de 2 pinos (14 cm)
  • 4x M1219-8 ímã de disco de neodímio 6x4mm

Etapa 1: protótipo

Protótipo
Protótipo

O dispositivo usa um microcontrolador ESP32. Neste caso, estou usando a placa de desenvolvimento Lolin32 da Wemos, que você pode comprar no AliExpress por cerca de US $ 7. O acelerômetro é o Sparkfun LIS3DH - é importante que o acelerômetro seja digital em vez de analógico, como você verá mais tarde. A bateria que tirei de um antigo conjunto de alto-falantes bluetooth.

O ESP32 se conecta ao acelerômetro via I2C. A primeira versão do código simplesmente consultou os três eixos de aceleração (x, y e z) para o valor de aceleração medido a cada 20 ms. Colocando o protótipo da placa de ensaio na máquina de lavar, produzi o gráfico acima, que mostra picos de aceleração durante várias fases do ciclo de lavagem. Os picos em que a aceleração absoluta foi superior a 125 mg (125 milésimos de gravidade normal) são mostrados em laranja. Queremos detectar esses períodos e usá-los para determinar o estado da máquina de lavar.

Como determinar se a máquina está ligada ou desligada?

Um dos objetivos da construção desse dispositivo era que ele fosse totalmente passivo. Ou seja, nenhum botão deve ser pressionado; simplesmente funcionaria. A energia também deve ser muito baixa, pois, no meu caso, não foi realmente possível estender os cabos de energia para a máquina de lavar.

Felizmente, o acelerômetro LIS3DH tem um recurso onde pode desencadear uma interrupção quando a aceleração excede um determinado limite (note, isso requer o uso do filtro passa-alta integrado do acelerômetro - veja o código no Github para detalhes) e o ESP32 pode ser ativado acima de seu modo de hibernação por meio de uma interrupção. Podemos usar essa combinação de recursos para criar um modo de hibernação de muito baixo consumo de energia que é acionado por movimento.

O pseudocódigo seria mais ou menos assim:

# Despertar do dispositivo

notification_threshold = 240 counter = 10 accelerometer.set_threshold (96) # 96mg while counter> 0: if accelerometer.above_threshold (): counter ++ else: counter-- if counter> notification_threshold: # ciclo de rotação final detectado hibernação (1 segundo) accelerometer.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt () esp32.deep_sleep ()

Você pode ver aqui que usamos um contador para detectar quantos segundos de aceleração detectamos durante o período de vigília atual. Se o contador cair para zero, podemos colocar o dispositivo de volta no modo de hibernação. Se o contador atingir 240 (o limite de notificação), isso significa que detectamos 4 minutos de vibração. Podemos ajustar os valores desses limites para garantir que o dispositivo detecte corretamente o ciclo de rotação final. Assim que for detectada vibração suficiente, podemos simplesmente dormir por mais 5 minutos (no meu caso, é quanto tempo leva até que a lavagem realmente seja concluída) antes de enviar uma notificação.

Etapa 2: envio de notificação via Blynk

Enviando uma notificação via Blynk
Enviando uma notificação via Blynk

Blynk é um serviço projetado para permitir a interação com dispositivos IoT com um aplicativo em seu telefone. Neste caso, estou usando a API de notificação push, que é acionada por um simples HTTP POST para a API Blynk.

Etapa 3: Medir o consumo de energia e estimar a vida útil da bateria

Medir o consumo de energia e estimar a vida útil da bateria
Medir o consumo de energia e estimar a vida útil da bateria

O chip ESP32 é anunciado como tendo um consumo de energia muito baixo quando em sono profundo (tão baixo quanto 5uA). Infelizmente, os circuitos nas muitas placas de desenvolvimento diferentes fornecem características de consumo de energia muito diferentes - nem todas as placas de desenvolvimento ESP32 são criadas da mesma forma. Por exemplo, quando comecei este projeto, usei o Sparkfun ESP32 Thing que consumia cerca de 1mA de energia no modo de hibernação (mesmo após desativar o LED de energia). Desde então, tenho usado o Lolin32 (não a versão Lite) no qual medi uma corrente de 144,5uA durante o modo de sono profundo. Para fazer essa medição, simplesmente conectei um multímetro em série com a bateria e o dispositivo. Isso é certamente mais fácil de fazer durante a prototipagem com uma placa de ensaio. Também medi o uso atual quando o dispositivo está acordado:

  • Sono profundo: 144,5uA
  • Acordado: 45mA
  • Wifi habilitado: 150mA

Supondo que eu use a máquina duas vezes por semana, estimei os seguintes tempos para o tempo que o sensor passa em cada estado:

  • Sono profundo: 604090 segundos (~ 1 semana)
  • Acordado: 720 segundos (12 minutos)
  • Wifi habilitado: 10 segundos

A partir desses números, podemos estimar quanto tempo a bateria vai durar. Usei esta calculadora útil para obter um consumo médio de energia de 0,2 mA. A vida útil estimada da bateria é de 201 dias ou cerca de 6 meses! Na realidade, descobri que o dispositivo irá parar de funcionar após cerca de 2 meses, então pode haver alguns erros nas medições ou na capacidade da bateria.

Etapa 4: Medir o nível da bateria

Medindo o nível da bateria
Medindo o nível da bateria
Medindo o nível da bateria
Medindo o nível da bateria

Achei que seria bom se o dispositivo pudesse me dizer quando a bateria está fraca para que eu saiba quando carregá-la. Para medir isso, precisamos medir a tensão da bateria. A bateria tem uma faixa de voltagem de 4,3 V - 2,2 V (a voltagem mínima de operação do ESP32). Infelizmente, a faixa de tensão dos pinos ADC do ESP32 é 0-3,3V. Isso significa que precisamos reduzir a tensão da bateria de seu máximo de 4,3 para 3,3 para evitar sobrecarregar o ADC. Isso é possível fazer com um divisor de tensão. Simplesmente conecte dois resistores com os valores apropriados da bateria ao aterramento e meça a tensão no meio.

Infelizmente, um circuito divisor de tensão simples drena a energia da bateria mesmo quando a tensão não está sendo medida. Você pode atenuar isso usando resistores de alto valor, mas o lado ruim é que o ADC pode não ser capaz de extrair corrente suficiente para fazer uma medição precisa. Decidi usar resistores com valores de 100kΩ e 330kΩ que cairão de 4,3 V para 3,3 V de acordo com a fórmula do divisor de tensão. Dada uma resistência total de 430kΩ, esperaríamos um empate atual de 11,6uA (usando a lei de Ohm). Dado que nosso uso atual de sono profundo é 144uA, é um aumento razoavelmente significativo.

Como queremos medir a tensão da bateria apenas uma vez antes de enviar uma notificação, faz sentido desligar o circuito divisor de tensão durante o tempo em que não estamos medindo nada. Felizmente, podemos fazer isso com alguns transistores conectados a um dos pinos GPIO. Usei o circuito fornecido nesta resposta de troca de pilha. Você pode me ver testando o circuito com um Arduino e uma placa de ensaio na foto acima (observe que há um erro no circuito que é o motivo de estar medindo uma tensão mais alta do que o esperado).

Com o circuito acima instalado, uso o seguinte pseudocódigo para obter um valor percentual da bateria:

battery_percentage ():

# ativar o circuito de tensão da bateria gpio_set_level (BATTERY_EN_PIN, HIGH) # O nível da bateria é retornado como um número inteiro entre 0 e 4095 adc_value = adc1_get_value (ADC_PIN) # ativar o circuito de tensão da bateria gpio_set_level (BATTERY_EN_PIN, LOW) float adc_voltage * 3.3 / 4095 voltagem * divisor usa resistores de 100k / 330k ohm # 4,3 V -> 3,223, 2,4 -> 1,842 esperado_máx = 4,3 * 330 / (100 + 330) esperado_min = 2,4 * 330 / (100 + 330) nível_da_ bateria = (adc_voltage-esperado_min) / (máx_esperado -esperado_min) retornar nível_da_ bateria * 100,0

Etapa 5: Tornando-o mais bonito

Tornando-o mais bonito
Tornando-o mais bonito
Tornando-o mais bonito
Tornando-o mais bonito
Tornando-o mais bonito
Tornando-o mais bonito

Embora a versão breadboard funcione bem, eu queria colocá-la em um pacote que fosse mais limpo e confiável (sem fios que possam se soltar ou causar curto). Consegui encontrar a caixa de projeto perfeita para minhas necessidades, que era do tamanho certo, incluía um quadro de pinos, suportes de montagem e parafusos para montar tudo. Além disso, era muito barato, por menos de £ 2. Depois de receber a caixa, tudo que tive que fazer foi soldar os componentes na placa de pinos.

Talvez a parte mais complicada disso tenha sido encaixar todos os componentes do circuito de tensão da bateria no pequeno espaço ao lado do Lolin32. Felizmente, com um pouco de truque e as conexões apropriadas feitas com solda, o circuito se encaixa perfeitamente. Além disso, como o Wemos Lolin32 não tem um pino para expor o terminal positivo da bateria, tive que soldar um fio do conector da bateria à placa de pinos.

Também adicionei um LED que pisca quando o dispositivo detecta movimento.

Etapa 6: toques finais

Image
Image
Toques finais
Toques finais
Toques finais
Toques finais

Eu colei 4 ímãs de neodímio de 6 mm x 4 mm na base da caixa, o que permite que ela adira com segurança ao topo de metal da máquina de lavar.

A caixa do projeto já vem com um pequeno orifício para dar acesso aos cabos. Felizmente, consegui posicionar a placa ESP32 perto desse orifício para dar acesso ao conector micro USB. Depois de aumentar o orifício com uma faca artesanal, o cabo se encaixou perfeitamente para permitir o carregamento fácil da bateria.

Se você estiver interessado em algum dos detalhes deste projeto, sinta-se à vontade para deixar um comentário. Se você gostaria de ver o código, verifique-o no Github:

github.com/alexspurling/washingmachine

Recomendado: