Monitor de nivel de sumidero DIY con Arduino Nano, MPXV5010DP y pantalla OLED
Componentes y materiales
| Componente | Cantidad |
|---|---|
| Arduino Nano R3 | 1 |
| Sensor presión diferencial Freescale MPXV5010DP (0-10 kPa, 0-5V) | 1 |
| Pantalla OLED 0.96" I2C | 1 |
| Conversor DAC MCP4725 (I2C) | 1 |
| Relé (salida contacto seco) | 1 |
| Condensadores SMD (1µF, 0.01µF, 470pF) | Varios |
| Caja plástica transparente 110x85mm | 1 |
| Tubo Tygon 3/32" | 1 |
Sobre el proyecto
Este monitor de nivel de sumidero se diseñó para trabajar con una placa de entrada Ecobee RSM-01 o de forma autónoma. Se buscaba algo más fiable y fácil de instalar que un sensor ultrasónico. El MPXV5010DP entrega 0-5V para 0-10 kPa (≈1020 mm de columna de agua).


Para indicación local se usó una pantalla OLED bicolor. Se añadió:
- Relé para salida de contacto seco (alarma).
- DAC MCP4725 para salida analógica 0-5V con más corriente que el sensor, protegiéndolo.
- Comunicación I2C para fácil expansión.

El sensor se conecta mediante tubo Tygon a un tubo de cobre que baja al sumidero, permitiendo montar el monitor lejos del agua.
Código (Sump Level Monitor)
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <Adafruit_MCP4725.h>
#include <math.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
Adafruit_MCP4725 dac;
int relayPin = 5;
int analogPin = 0; // lectura salida DAC
int v1 = 0; // ADC sensor MPXV5010
int v2 = 0; // escalado para DAC
int v3 = 0; // mm
int v4 = 0; // % profundidad
int v5 = 0; // lectura DAC
int v6 = 0; // mV
float v7 = 0; // pulgadas
int v8 = 0; // pulgadas redondeadas
int offSet = 40; // 0 kPa en ADC
int maxSet = 1015; // 10 kPa en ADC
int maxHeight = 1020; // mm fondo sumidero
int ranging = (maxHeight * 0.8) + offSet;
int alarmHeight = 12; // pulgadas alarma
int analogPin2 = 1;
float divisor = 25.4; // mm a pulgadas
void setup() {
Serial.begin(9600);
Serial.println("DAC test with DP sensor");
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
dac.begin(0x60);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, HIGH); // relé activo en LOW
}
void loop() {
v1 = analogRead(analogPin2);
delay(1000);
if (v1 < offSet) v1 = offSet;
v2 = map(v1, offSet, maxSet, 0, 4095); // para DAC
dac.setVoltage(v2, false);
v3 = (v1 - offSet) / 0.8; // mm
v7 = v3 / divisor; // pulgadas
v8 = round(v7); // entero
v4 = map(v1, offSet, ranging, 0, 100); // %
v5 = analogRead(analogPin); // 0-1023
v6 = map(v5, 0, 1023, 0, 5000); // mV
printoled();
serial();
}
void printoled() {
display.clearDisplay();
if (v8 > alarmHeight) {
display.invertDisplay(true);
digitalWrite(relayPin, LOW); // activa alarma
} else {
display.invertDisplay(false);
digitalWrite(relayPin, HIGH);
}
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("SUMP LEVEL");
display.setTextSize(4);
display.print(v8);
display.setTextSize(2);
display.println(" inches");
display.display();
delay(500);
}
void serial() {
Serial.print(" PS analog input: "); Serial.print(v1);
Serial.print(" Height: "); Serial.print(v3); Serial.print(" mm ");
Serial.print(v4); Serial.print(" %");
Serial.print(" Converted voltage: "); Serial.print(v6); Serial.println(" mV");
}
Esquemático
Diseñado con Eagle 6.5.0: sump%20level.sch

Proceso de manufactura
- Monitor de presión arterial: Diseño, fabricación y tendencias futuras
- Construya una estación meteorológica y de calidad del aire con Raspberry Pi, InfluxDB y Grafana
- Instalar Google Assistant en MATRIX Voice Raspberry Pi: guía paso a paso
- Monitor Meteorológico – Estación Meteorológica DIY con Raspberry Pi y Subida a Dropbox
- Sistema de Monitorización Remota de Frecuencia Cardíaca con Alertas AWS IoT
- Construye un Rover con Windows IoT Core en Raspberry Pi 2 – Guía de Principiante a Avanzado
- Extensión de GoPiGo v2 en Windows 10 IoT Core para Raspberry Pi 3
- JW Machine: Servicios de Fabricación por Contrato CNC de Precisión
- Nivelación Precisa de Torno: Guía Profesional
- Entendiendo el ámbito de variables en C#: Nivel de clase, método y bloque
- Modelado a nivel de puertas: Puentes entre esquemas de hardware y código Verilog