ESP8266 - Sensor de Água

Estes tutoriais ensinam como usar o sensor de água com o ESP8266. Vamos aprender:

Hardware Necessário

1×ESP8266 NodeMCU ESP-12F
1×Alternatively, ESP8266 D1 Mini NodeMCU ESP-12F
1×Alternatively, ESP8266 NodeMCU ESP-12E (Uno-form)
1×Micro USB Cable
1×Alternatively, ESP8266 NodeMCU ESP-12F (SMD-form)
1×Cabo USB Tipo-A para Tipo-C (para PC com USB-A)
1×Cabo USB Tipo-C para Tipo-C (para PC com USB-C)
1×Water level sensor
1×Fios Jumper
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para ESP8266

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

Sobre o Sensor de Nível de Água

Pinagem do Sensor de Nível de Água

O sensor de nível de água tem 3 pinos:

  • O pino S (Signal) é uma saída analógica que deve ser conectada a uma das entradas analógicas do seu ESP8266.
  • O pino + (VCC) fornece energia ao sensor e é sugerido usar uma tensão entre 3.3V – 5V.
  • O pino - (GND) é uma conexão de terra.
pinagem do sensor de água

Como o Sensor de Nível de Água Funciona

Em resumo, a tensão de saída no pino de sinal aumenta à medida que o sensor é exposto a mais água.

Vamos olhar com mais detalhe.

Esta seção traz um conhecimento mais aprofundado. NÃO se preocupe se você não entender. Pule esta seção se ela parecer difícil demais e volte outro dia. Continue lendo as próximas seções.

O sensor tem um conjunto de dez trilhas de cobre expostas, sendo cinco trilhas de alimentação e as outras cinco trilhas de sensoriamento. As trilhas são dispostas em paralelo, com uma trilha de sensoriamento entre cada duas trilhas de alimentação. A menos que estejam submersas em água, essas trilhas não estão conectadas.

As trilhas funcionam como um resistor variável (assim como um potenciômetro) cuja resistência varia de acordo com o nível de água:

  • A resistência das trilhas é inversamente proporcional à altura da água.
  • Quanto maior a quantidade de água em que o sensor está imerso, melhor é a condutividade, resultando em uma resistência menor.
  • Quanto menor a quantidade de água em que o sensor está imerso, pior é a condutividade, resultando em uma resistência maior.
  • A tensão de saída do sensor é determinada pela resistência.

Avaliar a tensão pode ser usado para determinar o nível de água.

Diagrama de Ligação

Em teoria, os pinos VCC e GND do sensor podem ser conectados aos pinos 5v e GND do ESP8266, respectivamente, para fornecer energia ao sensor.

No entanto, não é recomendado usar esse método na prática. Se o ambiente for úmido, fornecer energia ao sensor constantemente fará com que ele se corroa eletroquimicamente mais rápido, reduzindo sua vida útil. Para evitar isso, sugerimos alimentar o sensor somente quando você precisar ler o valor dele. Isso pode ser feito conectando o pino VCC do sensor a um pino digital de um ESP8266 e colocando o pino do Arduino em HIGH antes da leitura e em LOW depois.

diagrama de ligação do Sensor de Água com ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Para mais informações, veja Pinagem do ESP8266 e como alimentar o ESP8266 e outros componentes.

Código ESP8266 - Lendo o Valor do Sensor de Água

/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-water-sensor */ #define POWER_PIN D7 #define SIGNAL_PIN A0 int value = 0; // variable to store the sensor value void setup() { Serial.begin(9600); pinMode(POWER_PIN, OUTPUT); // Configure D7 pin as an OUTPUT digitalWrite(POWER_PIN, LOW); // turn the sensor OFF } void loop() { digitalWrite(POWER_PIN, HIGH); // turn the sensor ON delay(10); // wait 10 milliseconds value = analogRead(SIGNAL_PIN); // read the analog value from sensor digitalWrite(POWER_PIN, LOW); // turn the sensor OFF Serial.print("Sensor value: "); Serial.println(value); delay(1000); }

Passos Rápidos

Para começar com o ESP8266 na Arduino IDE, siga estes passos:

  • Confira o tutorial como configurar o ambiente para ESP8266 na Arduino IDE se esta for a sua primeira vez usando o ESP8266.
  • Ligue os componentes como mostrado no diagrama.
  • Conecte a placa ESP8266 ao seu computador usando um cabo USB.
  • Abra a Arduino IDE no seu computador.
  • Escolha a placa ESP8266 correta, como (por exemplo, NodeMCU 1.0 (ESP-12E Module)), e a respectiva porta COM.
  • Copie o código e abra-o com a Arduino IDE.
  • Clique no botão Upload da Arduino IDE para compilar e fazer upload do código para o ESP8266.
  • Abaixe o sensor com cuidado em um copo de água.
  • Veja o resultado no Serial Monitor; o valor deve ser 0 quando o sensor não está em contato com nada.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
Sensor value: 0 Sensor value: 0 Sensor value: 0 Sensor value: 25 Sensor value: 97 Sensor value: 284 Sensor value: 428 Sensor value: 435 Sensor value: 441 Sensor value: 455 Sensor value: 467 Sensor value: 521 Sensor value: 528 Sensor value: 553
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2

※ Nota:

O sensor não deve ficar completamente submerso; somente as trilhas expostas na PCB devem entrar em contato com a água. Tenha cuidado ao instalá-lo.

Como Detectar Vazamento de Água

Para identificar vazamento de água, chuva e transbordamento de tanque, só precisamos comparar o valor lido com um valor limite que é determinado na seção de calibração deste tutorial.

Vamos considerar um caso específico. Se água for detectada, o ESP8266 ativará um LED.

Diagrama de Ligação

diagrama de ligação do Sensor de Água e LED com ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Código ESP8266 - Detectando Vazamento de Água

/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-water-sensor */ #define LED_PIN D2 #define POWER_PIN D7 #define SIGNAL_PIN A0 #define THRESHOLD 300 int value = 0; // variable to store the sensor value void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); // Configure D2 pin as an OUTPUT pinMode(POWER_PIN, OUTPUT); // Configure D7 pin as an OUTPUT digitalWrite(POWER_PIN, LOW); // turn the sensor OFF digitalWrite(LED_PIN, LOW); // turn LED OFF } void loop() { digitalWrite(POWER_PIN, HIGH); // turn the sensor ON delay(10); // wait 10 milliseconds value = analogRead(SIGNAL_PIN); // read the analog value from sensor digitalWrite(POWER_PIN, LOW); // turn the sensor OFF if (value > THRESHOLD) { Serial.print("The water is detected"); digitalWrite(LED_PIN, HIGH); // turn LED ON } else { digitalWrite(LED_PIN, LOW); // turn LED OFF } }

Como Medir o Nível de Água

Se você quiser medir o nível atual de água dividindo a altura máxima em vários níveis, o código a seguir pode ser usado. Observe que a altura máxima da água é equivalente à altura do sensor. Este código divide a altura máxima em quatro níveis.

/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-water-sensor */ #define POWER_PIN 7 #define SIGNAL_PIN A5 #define SENSOR_MIN 0 #define SENSOR_MAX 521 int value = 0; // variable to store the sensor value int level = 0; // variable to store the water level void setup() { Serial.begin(9600); pinMode(POWER_PIN, OUTPUT); // Configure D7 pin as an OUTPUT digitalWrite(POWER_PIN, LOW); // turn the sensor OFF } void loop() { digitalWrite(POWER_PIN, HIGH); // turn the sensor ON delay(10); // wait 10 milliseconds value = analogRead(SIGNAL_PIN); // read the analog value from sensor digitalWrite(POWER_PIN, LOW); // turn the sensor OFF level = map(value, SENSOR_MIN, SENSOR_MAX, 0, 4); // 4 levels Serial.print("Water level: "); Serial.println(level); delay(1000); }

※ Nota:

  • SENSOR_MIN e SENSOR_MAX são determinados por meio do processo de calibração.
  • O método de mapeamento mencionado acima não é preciso. Mesmo assim, ele é adequado para muitas aplicações. Se você quiser deixar os resultados mais precisos, pode medir os valores limite de cada nível. Para mais informações, consulte a seção de calibração no final deste tutorial.

Calibração do Sensor de Nível de Água

O valor de saída do sensor é determinado por dois fatores: o nível de água e a condutividade da água. A água pura não é condutiva, mas, quando há minerais e impurezas presentes, ela se torna condutiva. Quanto mais condutiva é a água, maior é a sensibilidade do sensor. Além disso, o valor de saída também é afetado pela tensão fornecida ao pino VCC do sensor.

Para obter leituras precisas do sensor de água, sugerimos calibrá-lo para o tipo específico de água que você pretende monitorar.

Antes de definir o limite para iniciar uma ação, é necessário medir o valor real obtido do sensor por meio de um teste.

Instruções para o teste:

  • Utilize o sketch fornecido acima para ler o valor do sensor.
  • Mergulhe o sensor na água, certificando-se de que ele esteja no nível limite desejado.
  • Anote o valor informado pelo sensor no Serial Monitor.
  • Use esse valor como o limite para disparar uma determinada ação.

Pode ser necessário um pouco de experimentação para concluir este teste.

O teste também pode ser usado para descobrir:

  • O valor de SENSOR_MIN, quando o sensor não está submerso no líquido
  • O valor de SENSOR_MAX, quando o sensor está totalmente submerso no líquido
  • Um valor limite para detectar vazamento de água
  • Os valores de fronteira para cada estágio da sua escala de níveis.

※ Nota:

Este tutorial usa a função analogRead() para obter dados de um ADC (Conversor Analógico-Digital) conectado a um sensor ou a outra parte. O ADC do ESP8266 funciona bem para projetos em que você não precisa de leituras muito precisas. Mas lembre-se: o ADC do ESP8266 não é muito preciso para medições detalhadas. Se o seu projeto precisa ser muito preciso, você pode usar um ADC separado, como o ADS1115, com o ESP8266, ou usar um Arduino como o Arduino Uno R4 WiFi, que tem um ADC mais confiável.

Vídeo

Desafie-se

  • Ao detectar vazamento de água,
  • Envie um e-mail,
  • Envie uma mensagem SMS,
  • E faça um alarme sonoro.

Referências de Funções

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!