Ir para o conteúdo
Eletrônica União
Monte sua lista e peça um orçamento — respondemos no mesmo dia pelo WhatsApp.Ver minha lista

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.

Segurança: Não abra a caixa d'água sem segurança (escada firme, alguém acompanhando). Mantenha a eletrônica fora da caixa, em local seco.

Esquema de ligações

12345678910111213JSN-SR04T5VGNDTrigEchoLCD I2CVCCGNDSDASCLResistor 220RABLEDânodocátodoBuzzer+-Arduino5VD3D2GNDD13D8A4A5

Vermelho = alimentação (+), preto = terra (GND/−). As etiquetas indicam ligação com a fonte ou bateria; os números correspondem à tabela abaixo.

#DeParaObservação
1JSN-SR04T: 5VArduino: 5V
2JSN-SR04T: GNDArduino: GND
3JSN-SR04T: TrigArduino: D3
4JSN-SR04T: EchoArduino: D2
5LCD I2C: VCCArduino: 5V
6LCD I2C: GNDArduino: GND
7LCD I2C: SDAArduino: A4
8LCD I2C: SCLArduino: A5
9Arduino: D13Resistor 220R: A
10Resistor 220R: BLED: ânodonível baixo
11LED: cátodoArduino: GND
12Buzzer: +Arduino: D8
13Buzzer: -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

  1. Instale a biblioteca LiquidCrystal I2C (Frank de Brabander) pelo Gerenciador de Bibliotecas.
  2. Ligue a placa do JSN-SR04T: 5V, GND, Trig no pino 3 e Echo no pino 2.
  3. 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.
  4. Meça a caixa com uma trena e ajuste DIST_FUNDO, DIST_CHEIA e CAPACIDADE_L no código.
  5. 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