Sensor e Controlador Inteligente de Nível de Fluido com Arduino e Ultrassônico HC-SR04
Componentes e Materiais
| Arduino UNO | × | 1 |
| Sensor Ultrassônico HC-SR04 (Genérico) | × | 1 |
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
O diagrama abaixo mostra o sensor ultrassônico e o Arduino. O modelo construído foi apenas para fins de apresentação.
Introdução
Indicadores de nível são usados em praticamente todos os setores industriais. Também podemos implementar o mesmo para aplicações de pequena escala ou domésticas. Construímos um sensor de nível de fluido que permite leitura contínua de dados, indicando quanto fluido ocupa o tanque. O sistema criado é um sistema de realimentação que não apenas informa a quantidade de fluido, mas também o controla usando bomba.
Construção
A figura acima é um diagrama de blocos simplificado do sistema criado. O Arduino é o microcontrolador utilizado. O sensor ultrassônico HC-SR04 conecta-se ao Arduino. O sensor é montado no topo do tanque. Usei duas bombas submersíveis para o modelo. As bombas são unidirecionais, ou seja, transportam fluido apenas em uma direção. Poderíamos usar uma bomba bidirecional operável em ambos os sentidos. Ambas as bombas recebem sinal do Arduino. As bombas requerem 12V para operar, portanto um driver de motor também é necessário (não mostrado no diagrama de blocos).
Funcionamento
Para melhor entendimento, dividimos o modelo em seções:
- Sistema de sensoriamento
- Sistema de controle
Sensoriamento
O sistema de sensoriamento usa o sensor ultrassônico HC-SR04. A faixa ultrassônica vai acima de 20 kHz. Este sensor tem um Transmissor e um Receptor. O transmissor produz frequência de 40 kHz; esta onda ultrassônica reflete na superfície do fluido e é captada pelo receptor. O sensor tem 4 pinos: GND ao GND do Arduino, VCC a 3.3V ou 5V. O pino Trigger dispara o transmissor. O pino Echo recebe o eco do ultrassom. Obtemos assim o período de tempo da ida e volta do ultrassom. Precisamos converter tempo em distância:
duration = pulseIn(echoPin, HIGH); // Tempo de ida e volta em microssegundos
distance = duration * 0.034 / 2; // Distância em cm (velocidade som ~340 m/s)
Sistema de Controle
O Arduino recebe os dados do sensor e envia o sinal desejado às bombas. Podemos definir o nível desejado no código. Se o nível cruza o limiar superior, a bomba no tanque é acionada e bombeia água para fora até ficar abaixo do limiar. Quando o nível cai abaixo do limiar inferior, a bomba no reservatório começa a bombear fluido para o tanque. No modelo final, usa-se apenas o tanque e uma bomba.
Melhorias Futuras
Podemos melhorar a eficiência do projeto com:
- Usar bomba bidirecional fora do tanque, necessitando de apenas uma bomba.
- Exibir resultado em tela OLED ou LCD.
- Armazenar dados na nuvem se conectado a IoT.
- Controlar e monitorar nível de fluido via aplicativo se conectado a IoT.
- Adicionar buzzer de segurança para transbordamento; modificar código para evitar overflow do tanque.
Código
Controlador de Nível de Água Arduino
int tankPump = 3;
int reserviorPump = 2;
int trigPin = 9; // branco
int echoPin = 10; // marrom
long duration;
int distance;
void setup() {
Serial.begin(9600);
pinMode(tankPump, OUTPUT);
pinMode(reserviorPump, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
ultrasound();
pump();
}
void ultrasound() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
Serial.print("Distance:");
Serial.println(distance);
delay(1000);
}
void pump() {
// Nível alto: esvaziar tanque (distância > 10cm = nível baixo = tanque vazio? Lógica original)
if (distance > 10) {
digitalWrite(tankPump, HIGH);
digitalWrite(reserviorPump, LOW);
} else {
digitalWrite(tankPump, LOW);
}
// Nível baixo: encher tanque (distância < 6cm = nível alto = tanque cheio? Lógica original)
if (distance < 6) {
digitalWrite(reserviorPump, HIGH);
digitalWrite(tankPump, LOW);
} else {
digitalWrite(reserviorPump, LOW);
}
}
Nota: A lógica do código original parece invertida (distância maior = nível mais baixo). Ajuste os limiares conforme a geometria do seu tanque: distância medida do sensor ao fluido. Quanto mais cheio, menor a distância.
Esquemáticos
Processo de manufatura
- Sensor de Pressão Arterial: Como Funciona e Principais Aplicações
- Sensores de Tensão: Como Funcionam e Aplicações-Chave em Sistemas de Energia Modernos
- Sensores Arduino: Tipos, Aplicações e Projetos do Mundo Real
- Fluido de Transmissão Explicado: Função, Importância e Guia de Manutenção
- Construa um Sensor de Temperatura Remoto com Raspberry Pi e Python – Guia Passo a Passo
- Construa um Sistema de Monitoramento de Temperatura e Luz Multi-Sensor com Raspberry Pi e DS18B20
- Dominando Controle de Sensores e Atuadores no Raspberry Pi: Acelerômetro, Servo e Streaming de Dados
- Construa um Sistema Aeropônico Automatizado com Raspberry Pi e Sensor de Umidade
- Verifique e Calibre Seu Sensor de Umidade para Medições Precisas
- Monitoramento Preciso de Temperatura e Umidade com SHT15 no Windows 10 IoT Core