Índice:

Sensor de nível do coletor de água alimentado por bateria: 7 etapas (com fotos)
Sensor de nível do coletor de água alimentado por bateria: 7 etapas (com fotos)

Vídeo: Sensor de nível do coletor de água alimentado por bateria: 7 etapas (com fotos)

Vídeo: Sensor de nível do coletor de água alimentado por bateria: 7 etapas (com fotos)
Vídeo: Sensor para detecção de líquidos 2024, Novembro
Anonim
Sensor de nível do coletor de água alimentado por bateria
Sensor de nível do coletor de água alimentado por bateria
Sensor de nível do coletor de água alimentado por bateria
Sensor de nível do coletor de água alimentado por bateria

Nossa casa tem um tanque de água alimentado pela chuva que cai no telhado e é usado para banheiro, máquina de lavar e rega de plantas do jardim. Nos últimos três anos, os verões foram muito secos, por isso ficamos de olho no nível da água no tanque. Até agora, usamos uma vara de madeira, que colocamos no tanque e marcamos o nível. Mas certamente deve ser possível melhorar isso!

É aqui que entra este projeto. A ideia é instalar um sensor ultrassônico de distância na parte superior do tanque. Este sensor funciona como um sonar emitindo ondas sonoras, que são então refletidas pela superfície da água. A partir do tempo que leva para as ondas voltarem e a velocidade do som, você pode calcular a distância até a superfície da água e determinar o quão cheio o tanque está.

Uma vez que não tenho ligação à rede perto do tanque, é fundamental que o aparelho completo funcione a pilhas. Isso significa que eu tive que estar ciente do consumo de energia de todas as peças. Para enviar de volta os dados, decidi usar o Wifi embutido de um microchip ESP8266. Embora o Wifi consuma bastante energia, ele tem uma vantagem sobre outro tipo de conexão de rádio: você pode se conectar diretamente ao roteador sem fio da sua casa sem ter que construir outro dispositivo que atue como um relé.

Para economizar energia, coloco o ESP8266 em hibernação na maior parte do tempo e faço uma medição a cada hora. Para o meu propósito de acompanhar o nível da água, isso é mais do que suficiente. Os dados serão enviados ao ThingSpeak e poderão ser lidos em um smartphone por meio de um aplicativo.

Mais um detalhe! A velocidade do som, essencial para a medição de distâncias, depende da temperatura e em menor medida da umidade. Para uma medição externa precisa ao longo das estações, vamos lançar um sensor BME280, que mede temperatura, umidade e pressão. Como um bônus, isso faz do nosso sensor de nível de água também uma mini estação meteorológica.

Partes:

  • 1x ESP8266 ESP-12F.
  • Placa adaptadora 1x ESP-12F.
  • 1x FT232RL FTDI: USB para adaptador serial.
  • 1x HC-SR04-P: módulo de medição de distâncias ultrassônicas. Observe que o P é importante, pois esta é a versão que possui uma baixa tensão mínima de operação de 3V.
  • 1x BME280 versão 3.3V: sensor de temperatura, pressão e umidade.
  • 1x IRL2203N: transistor MOSFET de canal n.
  • 1x MCP1700-3302E versão 3.3V: regulador de tensão.
  • 3 pilhas AA recarregáveis, por exemplo 2600mAh.
  • 1 suporte de bateria para 3 baterias.
  • 1 placa de ensaio.
  • Resistores: 1x 470K, 1x 100K, 4x 10K.
  • Capacitores: 2x cerâmicos 1uF.
  • 3x interruptor de alternância.
  • Fios da placa de ensaio em forma de U.
  • Fios de ligação.
  • Recipiente de plástico para sopa 1l.
  • Anel de fixação para o container.

Disponibilizei o código no GitHub.

Etapa 1: Conhecendo o Sensor Ultrassônico de Distância

Conhecendo o Sensor Ultrassônico de Distância
Conhecendo o Sensor Ultrassônico de Distância
Conhecendo o Sensor Ultrassônico de Distância
Conhecendo o Sensor Ultrassônico de Distância

Vamos medir a distância até a superfície da água com um sensor ultrassônico, o HC-SR04-P. Assim como um morcego, este sensor usa um sonar: ele envia um pulso sonoro com uma frequência muito alta para o ouvido humano, portanto ultrassônico, e espera que atinja um objeto, reflita e volte. A distância pode então ser calculada a partir do tempo que leva para receber o eco e a velocidade do som.

Concretamente, se o pino de disparo for puxado para cima por pelo menos 10 μs, o sensor envia uma rajada de 8 pulsos com uma frequência de 40 Hz. A resposta é então obtida no pino Echo na forma de um pulso com duração igual ao tempo entre o envio e o recebimento do pulso ultrassônico. Então temos que dividir por 2, já que o pulso ultrassônico está indo e voltando e precisamos do tempo de viagem unidirecional, e multiplicar pela velocidade do som, que é cerca de 340 m / s.

Mas espere um minuto! Na verdade, a velocidade do som depende da temperatura e, em menor medida, da umidade. Estou criticando ou isso é relevante? Usando uma ferramenta de cálculo, descobrimos que no inverno (levando -5 ° C) poderíamos ter 328,5 m / s, e no verão (levando 25 ° C) 347,1 m / s. Portanto, suponha que encontremos um tempo de viagem de ida de 3 ms. No inverno, isso significaria 98,55 cm e no verão 104,13 cm. É uma grande diferença! Portanto, para obter precisão suficiente ao longo das estações e até mesmo dia e noite, temos que adicionar um termômetro à nossa configuração. Decidi incluir o BME280, que mede temperatura, umidade e pressão. No código, usei na função speedOfSound uma fórmula que calcula a velocidade do som em termos de todos os três parâmetros, embora a temperatura seja realmente o fator mais importante. A umidade ainda tem um efeito menor, mas o impacto da pressão é desprezível. Poderíamos usar uma fórmula mais simples levando em consideração apenas a temperatura que implementei em speedOfSoundSimple.

Há mais um ponto importante no HC-SR04. Existem duas versões disponíveis: a versão padrão opera em 5V, enquanto o HC-SR04-P pode operar em uma faixa de tensões de 3V a 5V. Uma vez que as 3 baterias AA recarregáveis fornecem cerca de 3x1,25 V = 3,75 V, é importante obter a versão P. Alguns vendedores podem enviar o errado. Portanto, dê uma olhada nas fotos se você comprar um. As duas versões parecem diferentes tanto na parte traseira quanto na frente, conforme explicado nesta página. Na parte de trás da versão P, todos os três chips são horizontais, enquanto na versão padrão um é vertical. Na frente, a versão padrão tem um componente extra prateado.

No circuito eletrônico, usaremos um transistor como uma chave para desligar o sensor ultrassônico quando nossa configuração entrar em hibernação para economizar bateria. Caso contrário, ainda consumiria cerca de 2mA. O BME280, por outro lado, consome apenas cerca de 5 μ quando inativo, portanto, não é necessário desligá-lo com o transistor.

Etapa 2: Escolha da placa ESP8266

Escolha da placa ESP8266
Escolha da placa ESP8266

Para operar o sensor o maior tempo possível com bateria, temos que economizar no consumo de energia. Embora o Wifi do ESP8266 forneça uma maneira muito conveniente de conectar nosso sensor à nuvem, ele também consome bastante energia. Em operação, o ESP8266 consome cerca de 80mA. Portanto, com baterias de 2600 mAh, só conseguiríamos funcionar nosso dispositivo por no máximo 32 horas antes que elas se esgotassem. Na prática, será menor, já que não seremos capazes de usar a capacidade total de 2600 mAh antes que a tensão caia para um nível muito baixo.

Felizmente, o ESP8266 também tem um modo de hibernação, no qual quase tudo está desligado. Portanto, o plano é colocar o ESP8266 em hibernação na maior parte do tempo e acordá-lo com frequência para fazer uma medição e enviar os dados pelo Wifi para o ThingSpeak. De acordo com esta página, o tempo máximo de sono profundo costumava ser de cerca de 71 minutos, mas desde o núcleo do Arduino ESP8266 2.4.1 aumentou para cerca de 3,5 horas. No meu código, me conformei com uma hora.

Eu tentei primeiro a placa de desenvolvimento NodeMCU conveniente, mas que chatice, em sono profundo ela ainda consumia cerca de 9 mA, o que nos dá no máximo 12 dias de sono profundo puro, mesmo sem considerar os intervalos de despertar. Um culpado importante é o regulador de tensão AMS1117, que consome energia mesmo se você tentar contorná-lo conectando a bateria diretamente ao pino de 3,3V. Esta página explica como remover o regulador de tensão e o UART USB. Porém, nunca consegui fazer isso sem destruir minha prancha. Além disso, após remover o UART USB, você não pode mais se conectar ao ESP8266 para descobrir o que deu errado.

A maioria das placas de desenvolvimento ESP8266 parecem usar o regulador de tensão AMS1117, que é um desperdício. Uma exceção é o WEMOS D1 mini (foto à esquerda) que vem com o mais econômico ME6211. Na verdade, descobri que o WEMOS D1 mini usa cerca de 150 μA em sono profundo, que é mais parecido com isso. A maior parte é provavelmente devido ao UART USB. Com esta placa você mesmo terá que soldar os cabeçotes dos pinos.

No entanto, podemos fazer muito melhor usando uma placa simples como a ESP-12F (foto à direita), que não tem um UART USB ou um regulador de tensão. Alimentando o pino de 3,3 V, encontrei um consumo de sono profundo de apenas 22 μA!

Mas, para fazer o ESP-12F funcionar, prepare-se para um pouco de solda e um pouco mais de trabalho de programá-lo! Além disso, a menos que as baterias forneçam diretamente a tensão correta, que está entre 3 V e 3,6 V, precisamos fornecer nosso próprio regulador de tensão. Na prática, é difícil encontrar um sistema de bateria que forneça uma tensão nesta faixa durante todo o seu ciclo de descarga. Lembre-se de que também precisamos alimentar o sensor HC-SR04-P, que teoricamente pode funcionar com uma tensão tão baixa quanto 3 V, mas funciona com mais precisão se a tensão for mais alta. Além disso, no meu diagrama, o HC-SR04-P é ligado por um transistor, o que induz uma pequena queda extra de tensão. Usaremos o regulador de tensão MCP1700-3302E. A tensão máxima de entrada é de 6 V, então o alimentamos com até 4 baterias AA. Decidi usar 3 pilhas AA.

Etapa 3: Crie um canal ThingSpeak

Usaremos ThingSpeak, um serviço de nuvem IoT, para armazenar nossos dados. Vá para https://thingspeak.com/ e crie uma conta. Assim que estiver logado, clique no botão Novo Canal para criar um canal. Nas configurações do canal, preencha o nome e a descrição como desejar. Em seguida, nomeamos os campos do canal e os ativamos clicando nas caixas de seleção à direita. Se você usar meu código inalterado, os campos são os seguintes:

  • Campo 1: nível de água (cm)
  • Campo 2: nível da bateria (V)
  • Campo 3: temperatura (° C)
  • Campo 4: umidade (%)
  • Campo 5: pressão (Pa)

Para referência futura, anote o ID do canal, a chave de API de leitura e a chave de API de gravação, que podem ser encontradas no menu Chaves de API.

Você pode ler os dados do ThingSpeak em seu smartphone usando um aplicativo. No meu telefone Android, uso o widget IoT ThingSpeak Monitor. Você deve configurá-lo com o ID do canal e a chave de API de leitura.

Etapa 4: como programar o ESP-12F

Como programar o ESP-12F
Como programar o ESP-12F
Como programar o ESP-12F
Como programar o ESP-12F

Precisamos de uma placa básica para economizar bateria, mas a desvantagem é que ela é um pouco mais difícil de programar do que uma placa de desenvolvimento com UART USB embutido.

Usaremos o IDE Arduino. Existem outros Instructables que explicam como usá-lo, então serei breve aqui. As etapas para torná-lo pronto para o ESP8266 são:

  • Baixe o IDE do Arduino.
  • Instale o suporte para a placa ESP8266. No menu Arquivo - Preferências - Configurações, adicione o URL https://arduino.esp8266.com/stable/package_esp8266com_index.json aos URLs Adicionais do Gerenciador de Placa. Em seguida, no menu Ferramentas - Placa - Gerenciador de placas, instale o esp8266 pela comunidade esp8266.
  • Selecione como placa: Módulo ESP8266 genérico.

Para manusear o ESP-12F, usei uma placa adaptadora, comumente disponível em lojas online. Eu soldava o chip à placa e depois soldava os conectores à placa. Só então descobri que a placa adaptadora é muito larga para uma placa de ensaio padrão! Ele não deixa pinos livres na lateral para fazer as conexões.

A solução que escolhi é usar fios em forma de U e conectá-los como na imagem à direita antes de colocar o ESP8266 com a placa adaptadora na placa de ensaio. Assim, GND e VCC são conectados aos trilhos da placa de ensaio e os pinos restantes são disponibilizados mais abaixo na placa de ensaio. A desvantagem é que sua placa de ensaio ficará muito cheia de fios quando você terminar o circuito completo. Outra solução é encaixar duas placas de ensaio juntas, conforme mostrado neste vídeo.

Em seguida, para programar o ESP-12F através da porta USB do seu computador, precisamos de um adaptador USB para serial. Eu usei o programador FT232RL FTDI. O programador tem um jumper para selecionar entre 3,3V ou 5V. Deve ser colocado em 3,3 V para o ESP8266. Não se esqueça, pois 5V pode fritar seu chip! A instalação dos drivers deve ser automática, mas se a programação não funcionar, você pode tentar instalá-los manualmente a partir desta página.

O ESP8266 possui um modo de programação para carregar novo firmware para o flash e um modo flash para executar o firmware atual da memória flash. Para escolher entre esses modos, alguns pinos devem assumir um determinado valor no momento da inicialização:

  • Programação: GPIO0: baixo, CH-PD: alto, GPIO2: alto, GPIO15: baixo
  • Flash: GPIO0: alto, CH-PD: alto, GPIO2: alto, GPIO15: baixo

A placa adaptadora já se encarrega de puxar para cima o CH-PD e puxar para baixo o GPIO15 com resistores de 10K.

Portanto, em nosso circuito eletrônico ainda precisamos puxar o GPIO2. Também fornecemos um interruptor para colocar o ESP8266 em programação ou em modo flash e um interruptor para reiniciá-lo, o que é feito conectando o RST ao aterramento. Além disso, certifique-se de conectar o pino TX do FT232RL ao pino RXD do ESP8266 e vice-versa.

A sequência de programação é a seguinte:

  • Defina GPIO2 como baixo fechando a chave de programação.
  • Reinicialize o ESP8266 fechando e reabrindo o botão de reinicialização. O ESP8266 agora inicializa no modo de programação.
  • Defina o GPIO2 de volta para alto abrindo a chave de programação.
  • Faça upload do novo firmware do Arduino IDE.
  • Reinicialize o ESP8266 novamente fechando e reabrindo o botão de reinicialização. O ESP8266 agora inicializa em modo flash e executa o novo firmware.

Agora você pode testar se a programação funciona enviando o famoso esboço do Blink.

Se tudo isso funcionar, pelo menos os pinos GND, VCC, GPIO2, RST, TXD e RXD estão soldados e conectados corretamente. Que alivio! Mas antes de continuar, eu recomendo testar também os outros pinos com seu multímetro. Eu mesmo tive um problema com um dos pinos. Você pode usar este esboço, que define todos os pinos como altos, um por um, por 5 segundos, e depois coloca o ESP8266 em sono profundo por 20 segundos. Para permitir que o ESP8266 acorde após um sono profundo, você precisa conectar o RST ao GPIO16, que fornece o sinal de ativação.

Etapa 5: enviando o esboço

Disponibilizei o código no GitHub, é apenas um arquivo: Level-Sensor-Deepsleep.ino. Basta fazer o download e abri-lo no IDE do Arduino. Ou você pode selecionar Arquivo - Novo e apenas copiar / colar o código.

Existem algumas informações que você deve preencher no início do arquivo: o nome e a senha da WLAN a ser usada, os detalhes do IP estático e o ID do canal e a chave de API de gravação do canal ThingSpeak.

Seguindo a dica deste blog, em vez de DHCP onde o roteador atribui um IP dinamicamente, usamos IP estático, onde configuramos nós mesmos o endereço IP do ESP8266. Isso acaba sendo muito mais rápido, então economizamos tempo ativo e, portanto, energia da bateria. Portanto, temos que fornecer um endereço IP estático disponível, bem como o IP do roteador (gateway), a máscara de sub-rede e um servidor DNS. Se você não tiver certeza sobre o que preencher, leia sobre como configurar um IP estático no manual do seu roteador. Em um computador Windows conectado por Wifi ao seu roteador, inicie um shell (Windows botão-r, cmd) e digite ipconfig / all. Você encontrará a maioria das informações de que precisa na seção Wi-Fi.

Examinando o código, você vê que, ao contrário de outro código do Arduino, a maior parte da ação acontece na função de configuração em vez da função de loop. Isso ocorre porque o ESP8266 entra em hibernação após concluir a função de configuração (a menos que tenhamos iniciado no modo OTA). Depois de acordar, é como uma nova reinicialização e executa a instalação novamente.

Aqui estão as principais características do código:

  • Após o despertar, o código define switchPin (padrão GPIO15) para alto. Isso liga o transistor, que por sua vez liga o sensor HC-SR04-P. Antes de entrar em sono profundo, ele coloca o pino novamente em baixo, desligando o transistor e o HC-SR04-P, garantindo que ele não consuma mais nenhuma energia preciosa da bateria.
  • Se o modePIN (padrão GPIO14) for baixo, o código vai para o modo OTA em vez do modo de medição. Com OTA (atualização over-the-air), podemos atualizar o firmware por Wifi em vez da porta serial. Em nosso caso, isso é bastante conveniente, já que não precisamos mais conectar o adaptador serial para USB para atualizações futuras. Basta definir GPIO14 para baixo (com a chave OTA no circuito eletrônico), redefinir o ESP8266 (com a chave de reset) e deve ficar disponível no IDE do Arduino para upload.
  • No PIN analógico (A0), medimos a tensão da bateria. Isso nos permite desligar nosso dispositivo, também conhecido como sono profundo permanente, se a voltagem ficar muito baixa, abaixo de minVoltage, para proteger as baterias de sobre-descarga. A medição analógica não é muito precisa, fazemos medidas numMeasuresBattery (padrão 10) e pegamos a média para melhorar a precisão.
  • A medição da distância do sensor HC-SR04-P é feita na função distanceMeasurement. Para melhorar a precisão, a medição é repetida numMeasuresDistance (padrão 3) vezes.
  • Existe uma função para calcular o speedOfSound a partir da temperatura, umidade e pressão medida pelo sensor BME280. O endereço I2C padrão do BME280 é 0x76, mas se não funcionar, pode ser necessário alterá-lo para 0x77: bool bme280Started = bme280.begin (0x77);
  • Usaremos o BME280 no modo forçado, o que significa que ele faz uma medição e volta a hibernar para economizar energia.
  • Se você definir capacidade (l), distância total (cm) e área (m2), o código calcula o volume restante do tanque de água a partir da medição de distância: volume restante duplo = capacidade + 10,0 * (distância total) * área; e carregue isso para ThingSpeak. Se você mantiver os valores padrão, ele carrega a distância até a superfície da água em cm.

Etapa 6: Construindo o Circuito Eletrônico

Construindo o Circuito Eletrônico
Construindo o Circuito Eletrônico

Acima está o diagrama do circuito eletrônico. É muito grande para uma placa de ensaio, especialmente com a placa adaptadora de grandes dimensões e o truque com os fios em forma de U. Em algum momento, certamente desejei ter usado a alternativa de conectar duas placas de ensaio, mas no final consegui.

Aqui estão as características importantes do circuito:

  • Existem duas tensões que desempenham um papel: a tensão de entrada da bateria (cerca de 3,75 V) e a 3,3 V que alimenta o ESP8266 e o BME280. Coloquei 3,3 V no trilho esquerdo do breakboard e 3,75 V no trilho direito. O regulador de tensão converte 3,75 V em 3,3 V. Seguindo as instruções da ficha técnica, adicionei capacitores de 1 μF à entrada e à saída do regulador de tensão para aumentar a estabilidade.
  • GPIO15 do ESP8266 é conectado ao portão do transistor. Isso permite que o ESP8266 ligue o transistor e, portanto, o sensor ultrassônico quando ativo e desligue-o ao entrar em sono profundo.
  • GPIO14 está conectado a um switch, o switch OTA. Fechar a chave dá o sinal para o ESP8266 de que queremos iniciar no modo OTA a seguir, ou seja, depois de pressionar (fechar e abrir) a chave RESET e carregar um novo esboço over-the-air.
  • Os pinos RST e GPIO2 são conectados como no diagrama de programação. O pino RST agora também está conectado ao GPIO16 para permitir que o ESP8266 acorde de um sono profundo.
  • Os pinos TRIG e ECHO do sensor ultrassônico são conectados ao GPIO12 e GPIO13, enquanto os pinos SCL e SDA do BME280 são conectados ao GPIO5 e GPIO4.
  • Finalmente, o pino analógico ADC é feito por meio de um divisor de tensão conectado à tensão de entrada. Isso permite medir a tensão de entrada para verificar a carga das baterias. O pino ADC pode medir tensões entre 0 V e 1 V. Para o divisor de tensão, escolhemos resistores de 100K e 470K. Isso significa que a tensão no pino ADC é dada por: V_ADC = 100K / (100K + 470K) V_in. Considerando V_ADC = 1V, isso significa que podemos medir tensões de entrada até V_in = 570/100 V_ADC = 5,7V. Quanto ao consumo de energia, também há vazamento de corrente pelo divisor de tensão. Com V_in = 3,75 V das baterias, encontramos I_leak = 3,75 V / 570 K = 6,6 μA.

Mesmo quando o circuito está funcionando com baterias, é possível conectar o USB ao adaptador serial. Apenas certifique-se de desconectar o VCC do adaptador e conectar GND, RX e TX como no diagrama de programação. Isso possibilita abrir o Serial Monitor no Arduino IDE para ler as mensagens de depuração e garantir que tudo esteja funcionando conforme o esperado.

Para o circuito completo, medi um consumo de corrente de 50 μA em sono profundo, funcionando com baterias. Isso inclui o ESP8266, o BME280, o sensor ultrassônico (desligado pelo transistor) e vazamento através do divisor de tensão e talvez outros vazamentos. Então isso não é tão ruim!

Descobri que o tempo total ativo é de cerca de 7 segundos, dos quais 4,25 segundos para conectar ao Wifi e 1,25 segundos para enviar os dados ao ThingSpeak. Então, com uma corrente ativa de 80mA, encontrei 160 μAh por hora para o tempo ativo. Adicionando 50 μAh por hora para o estado de sono profundo, temos um total de 210 μAh por hora. Isso significa que as baterias de 2600 mAh teoricamente duram 12.400 horas = 515 dias. Este é o máximo absoluto se pudéssemos usar a capacidade total das baterias (o que não é o caso) e não há vazamentos que eu não encontrei com minhas medições atuais. Portanto, ainda estou para ver se isso realmente acontecerá.

Etapa 7: Concluindo o Sensor

Concluindo o Sensor
Concluindo o Sensor
Concluindo o Sensor
Concluindo o Sensor
Concluindo o Sensor
Concluindo o Sensor

Coloquei o sensor em um recipiente plástico de 1 litro, que costumava conter sopa. Na parte inferior fiz dois furos para encaixar os "olhos" do sensor HC-SR04-P. Além dos orifícios, o recipiente deve ser à prova d'água. Em seguida, é fixado à parede do tanque de água com um anel circular que normalmente é usado para um tubo de drenagem de água da chuva.

Divirta-se com o projeto!

Recomendado: