Medidor de nível da caixa d'água com sensor à prova d'água e display
Sensores · Intermediário · Tempo: 3 horas
O sensor ultrassônico JSN-SR04T (à prova d'água) fica na tampa da caixa e mede a distância até a superfície da água.
Como funciona
O JSN-SR04T funciona como o HC-SR04, mas com o transdutor separado e vedado — ideal para a umidade da caixa. distância (cm) = duração do eco (µs) / 58. O programa faz 5 medições e usa a mediana, descartando ecos falsos.
Cálculo: com DIST_FUNDO (sensor até o fundo) e DIST_CHEIA (sensor até a água com a caixa cheia), o nível é (DIST_FUNDO − distância) / (DIST_FUNDO − DIST_CHEIA). Litros = nível × CAPACIDADE_L (aproximado: caixas cônicas não são lineares).
Zona morta: o sensor não mede abaixo de ~25 cm. Instale-o pelo menos 25 cm acima do nível máximo (do ladrão), apontado reto para baixo e longe da entrada de água da boia.
Abaixo de 20% o LED acende e o buzzer dá um bipe a cada minuto.
Esquema de ligações
Vermelho = alimentação (+), preto = terra (GND/−). As etiquetas indicam ligação com a fonte ou bateria; os números correspondem à tabela abaixo.
| # | De | Para | Observação |
|---|---|---|---|
| 1 | JSN-SR04T: 5V | Arduino: 5V | |
| 2 | JSN-SR04T: GND | Arduino: GND | |
| 3 | JSN-SR04T: Trig | Arduino: D3 | |
| 4 | JSN-SR04T: Echo | Arduino: D2 | |
| 5 | LCD I2C: VCC | Arduino: 5V | |
| 6 | LCD I2C: GND | Arduino: GND | |
| 7 | LCD I2C: SDA | Arduino: A4 | |
| 8 | LCD I2C: SCL | Arduino: A5 | |
| 9 | Arduino: D13 | Resistor 220R: A | |
| 10 | Resistor 220R: B | LED: ânodo | nível baixo |
| 11 | LED: cátodo | Arduino: GND | |
| 12 | Buzzer: + | Arduino: D8 | |
| 13 | Buzzer: - | Arduino: GND |
Código-fonte Arduino (C/C++)
// Nível da caixa d'água com JSN-SR04T + LCD 16x2 I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int TRIG = 3, ECHO = 2, LED = 13, BUZZER = 8;
const float DIST_FUNDO = 130.0; // cm: sensor até o fundo da caixa
const float DIST_CHEIA = 30.0; // cm: sensor até a água com a caixa cheia (mín. 25)
const float CAPACIDADE_L = 1000.0; // litros
const int ALERTA_PCT = 20;
LiquidCrystal_I2C lcd(0x27, 16, 2); // ou 0x3F
unsigned long ultimoBipe = 0;
float medirCm() {
digitalWrite(TRIG, LOW); delayMicroseconds(5);
digitalWrite(TRIG, HIGH); delayMicroseconds(20);
digitalWrite(TRIG, LOW);
unsigned long us = pulseIn(ECHO, HIGH, 30000); // até ~5 m
return us == 0 ? -1 : us / 58.0;
}
float medianaCm() {
float v[5];
for (int i = 0; i < 5; i++) { v[i] = medirCm(); delay(60); }
for (int i = 0; i < 4; i++) // ordenação simples
for (int j = i + 1; j < 5; j++)
if (v[j] < v[i]) { float t = v[i]; v[i] = v[j]; v[j] = t; }
return v[2];
}
void setup() {
pinMode(TRIG, OUTPUT); pinMode(ECHO, INPUT);
pinMode(LED, OUTPUT); pinMode(BUZZER, OUTPUT);
lcd.init();
lcd.backlight();
lcd.print("Nivel da caixa");
}
void loop() {
float d = medianaCm();
lcd.clear();
if (d < 0) {
lcd.print("Sem leitura");
lcd.setCursor(0, 1); lcd.print("Verifique sensor");
delay(2000);
return;
}
float pct = (DIST_FUNDO - d) / (DIST_FUNDO - DIST_CHEIA) * 100.0;
pct = constrain(pct, 0, 100);
lcd.print("Nivel: "); lcd.print((int) pct); lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("Litros: "); lcd.print((long) (CAPACIDADE_L * pct / 100.0));
bool baixo = pct < ALERTA_PCT;
digitalWrite(LED, baixo);
if (baixo && millis() - ultimoBipe > 60000UL) {
ultimoBipe = millis();
digitalWrite(BUZZER, HIGH); delay(200); digitalWrite(BUZZER, LOW);
}
delay(2000);
}
Referências
Circuito baseado na documentação oficial dos fabricantes e bibliotecas:
Montagem
- Instale a biblioteca LiquidCrystal I2C (Frank de Brabander) pelo Gerenciador de Bibliotecas.
- Ligue a placa do JSN-SR04T: 5V, GND, Trig no pino 3 e Echo no pino 2.
- Display I2C: SDA no A4, SCL no A5 (Nano/Uno). Se nada aparecer, gire o trimpot de contraste atrás do display ou troque o endereço 0x27 por 0x3F.
- Meça a caixa com uma trena e ajuste DIST_FUNDO, DIST_CHEIA e CAPACIDADE_L no código.
- Fure a tampa, prenda o transdutor com prensa-cabo e leve o cabo até a eletrônica (até ~2,5 m de cabo de fábrica).
Ferramentas
Computador com Arduino IDE
Trena
Furadeira com serra-copo 22 mm
