Monitor de distancia ultrasónica y temperatura con Arduino y LCD con sistema de alarma
Componentes y suministros
| Componente | Cantidad |
|---|---|
| Arduino UNO | 1 |
| LCD Estándar Adafruit 16x2 Blanco sobre Azul | 1 |
| Sensor ultrasónico HC-SR04 (genérico) | 1 |
| Termómetro digital DS18B20 1-Wire (Maxim Integrated) | 1 |
| Resistencia 4.75k ohm | 1 |
| Pulsador 12mm (SparkFun) | 1 |
| Potenciómetro mono-vuelta 10k ohm | 1 |
| Zumbador (buzzer) | 1 |
| LEDs | 3 |
| Resistencia 221 ohm | 3 |
| Protoboard (genérica) | 1 |
| Cables puente (genéricos) | 1 |
Aplicaciones y servicios en línea
- Arduino IDE
Sobre este proyecto
Este proyecto me da la información que necesito sobre el nivel de agua en un tanque. Cuando el nivel es bajo, el LED verde está ENCENDIDO. Cuando el nivel es medio, el LED amarillo está ENCENDIDO. Cuando el nivel es ALTO el LED rojo parpadea al mismo tiempo con sonido de zumbador. La distancia del sensor al nivel de agua se mide por el sensor ultrasónico y se muestra en el LCD junto con la temperatura en ese tanque.
Este proyecto es parte de un proyecto mayor. La segunda parte serán 6 LEDs en persecución montados en círculo para indicar que la bomba está bombeando. Ver: proyecto de LEDs en persecución. La tercera parte arrancará la bomba cuando el nivel sea alto y la parará cuando el nivel sea bajo (en construcción). Para el proyecto real uso un sensor ultrasónico resistente al agua, esto no cambiará el cableado ni el código. No sé qué pasará con las lecturas cuando el sensor esté mojado (humedad), así que este proyecto es solo para darme información, el tercer proyecto se usará para las actividades de la bomba y se hará con contactos magnéticos.
Código
Archivo sin título (C/C++)
#include <LiquidCrystal.h> // Cargar librería Liquid Crystal
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 6 // Cable de datos conectado al pin 6 del Arduino
OneWire oneWire(ONE_WIRE_BUS); // Configurar instancia oneWire para comunicar con dispositivos OneWire
DallasTemperature sensors(&oneWire); // Pasar referencia oneWire a Dallas Temperature
LiquidCrystal LCD(12, 11, 5, 4, 3, 2); // Crear objeto Liquid Crystal llamado LCD
int trigPin = 9; // Pin Trigger del sensor conectado al pin 9 de Arduino
int echoPin = 7; // Pin Echo del sensor conectado al pin 7 de Arduino
int myCounter = 0; // Declarar variable myCounter y poner a 0
float pingTime; // Tiempo para que el ping viaje del sensor al objetivo y vuelta
float targetDistance; // Distancia al objetivo en Centímetros
float speedOfSound = 776.5; // Velocidad del sonido en millas por hora
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
LCD.begin(16, 2); // Decirle a Arduino que inicie tu LCD 16x2
LCD.setCursor(0, 0); // Poner cursor LCD en esquina sup. izq., columna 0, fila 0
LCD.print("Distance:"); // Imprimir mensaje en primera fila
sensors.begin(); // Iniciar la librería
pinMode(8, OUTPUT); // pines 8, 10, 13 como salida
pinMode(10, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(trigPin, LOW); // Poner pin trigger a LOW
delayMicroseconds(2000); // Dejar asentar la señal
digitalWrite(trigPin, HIGH); // Poner trigPin a HIGH
delayMicroseconds(15); // Retardo en estado HIGH
digitalWrite(trigPin, LOW); // Ping enviado
delayMicroseconds(10); // Retardo en estado HIGH
pingTime = pulseIn(echoPin, HIGH); // pingTime en microsegundos
pingTime = pingTime / 1000000; // Convertir pingTime a segundos dividiendo por 1000000
pingTime = pingTime / 3600; // Convertir pingTime a horas dividiendo por 3600
targetDistance = speedOfSound * pingTime; // Esto será en millas
targetDistance = targetDistance / 2; // El ping viaja ida y vuelta, dividir por 2 para distancia real
targetDistance = targetDistance * 160934.4; // Convertir millas a centímetros multiplicando por 160934.4
sensors.requestTemperatures(); // Enviar comando para obtener lecturas de temperatura
LCD.setCursor(10, 0); // Poner cursor en columna 10 de primera fila
LCD.print(" "); // Imprimir espacios para limpiar la fila
LCD.setCursor(10, 0); // Poner cursor de nuevo en columna 10 de primera fila
LCD.print((int) (targetDistance + 0.5)); // Imprimir distancia medida
LCD.print("cm "); // Imprimir unidades
LCD.setCursor(0, 1); // Poner cursor en primera columna de segunda fila
LCD.print(" "); // Imprimir espacios para limpiar la fila
LCD.setCursor(0, 1); // Poner cursor de nuevo en primera columna de segunda fila
if (targetDistance > 40) {
LCD.print("LEV LOW ");
LCD.print(sensors.getTempCByIndex(0));
LCD.print((char)223);
LCD.print("C");
} else if (targetDistance < 40 && targetDistance > 20) {
LCD.print("LEV MED ");
LCD.print(sensors.getTempCByIndex(0));
LCD.print((char)223);
LCD.print("C");
} else if (targetDistance < 20) {
LCD.print("LEV HIGH ");
LCD.print(sensors.getTempCByIndex(0));
LCD.print((char)223);
LCD.print("C");
}
delay(2000);
if (targetDistance > 40) {
digitalWrite(13, HIGH); // LED Verde ENCENDIDO
} else {
digitalWrite(13, LOW); // LED Verde APAGADO
}
if (targetDistance < 40 && targetDistance > 20) {
digitalWrite(8, HIGH); // LED Amarillo ENCENDIDO
} else {
digitalWrite(8, LOW); // LED Amarillo APAGADO
}
if (targetDistance < 20) {
digitalWrite(10, HIGH); // LED Rojo ENCENDIDO
delay(2000);
digitalWrite(10, LOW); // LED Rojo APAGADO
} else {
digitalWrite(10, LOW); // LED Rojo APAGADO
}
}
Esquemas
Archivo de esquema Fritzing: lcd_pot_led_buzz_pb_distsens_temp_EHVdF6S1L7.fzz
Proceso de manufactura
- Sistema de control de acceso integrado con QR, RFID y verificación de temperatura
- Conectar múltiples sensores DS18B20 1‑Wire a Raspberry Pi para monitorización precisa de temperatura
- Construya un sensor de temperatura remoto con Raspberry Pi y Python – Guía paso a paso
- Construya un Sistema de Monitorización de Temperatura y Luz Multi‑Sensor con Raspberry Pi y DS18B20
- Construye un sistema aeropónico automatizado con Raspberry Pi y sensor de humedad
- Monitor de temperatura casero con Raspberry Pi, MCP9808, InfluxDB y Grafana
- Integración de sensor termopar con Arduino Portenta H7 usando MAX6675
- Proyecto Sensor DHT11 Temperatura y Humedad con Indicadores LED y Altavoz Piezo
- Sistema de Sensor de Temperatura Multiposición para Integración en Hogar Inteligente
- Construye un reloj despertador fiable con RTC DS1302 y Arduino UNO
- Sensor Lab-On-Chip de NASA Goddard Ofrece Monitoreo en Tiempo Real de Flujo y Temperatura