Grove - Sensor de Nivel de Agua
El Sensor de Nivel de Agua Grove es un sensor muy preciso que puede ser útil en aplicaciones de detección de nivel de agua. Es completamente impermeable y utiliza almohadillas capacitivas para detectar niveles de agua de hasta 10cm.
Utilizamos almohadillas capacitivas en la PCB del módulo e hicimos un recubrimiento conformal sobre la PCB para hacer que el sensor se proteja contra la humedad, el polvo, los químicos y las altas temperaturas. Creemos que esta técnica te permitirá hacer mediciones precisas del nivel de agua (precisión de ±5mm) fácilmente.
Características
- Fácil de usar (Usa conector Grove sin soldadura)
- Basado en detección capacitiva
- Impermeable
- Recubrimiento Conformal
- Resistente a la Corrosión
- Detecta niveles de agua de hasta 10cm
- Interfaz I2C
Especificaciones
Parámetro | Valor |
---|---|
Voltaje de entrada | 3.3V / 5V |
Precisión de Medición | ±5mm |
Rango de Temperatura de Trabajo | -40°C a 105°C |
Direcciones I2C | 0x78 y 0x77 |
Interfaz | I2C |
Dimensiones | 20mm x 133mm |
Descripción General del Hardware
Plataformas Compatibles
Arduino | Raspberry Pi |
---|---|
Comenzando
Jugar con Arduino
Materiales requeridos
Seeeduino V4.2 | Base Shield | Grove - Sensor de Nivel de Agua |
---|---|---|
Obtener UNO Ahora | Obtener UNO Ahora | Obtener UNO Ahora |
Además, puedes considerar nuestro nuevo Seeeduino Lotus M0+, que es equivalente a la combinación de Seeeduino V4.2 y Baseshield.
Conexión de Hardware
-
Paso 1. Conecta el Grove - Sensor de Nivel de Agua al puerto I2C del Grove - Base Shield.
-
Paso 2. Conecta el Grove - Base Shield al Seeeduino.
-
Paso 3. Conecta el Seeeduino a una PC mediante un cable USB.
Software
Si esta es la primera vez que trabajas con Arduino, te recomendamos encarecidamente que veas Comenzando con Arduino antes de empezar.
- Paso 1. Abre el IDE de Arduino y crea un nuevo archivo, luego copia el siguiente código en el nuevo archivo.
#include <Wire.h>
#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
#define SERIAL SerialUSB
#else
#define SERIAL Serial
#endif
unsigned char low_data[8] = {0};
unsigned char high_data[12] = {0};
#define NO_TOUCH 0xFE
#define THRESHOLD 100
#define ATTINY1_HIGH_ADDR 0x78
#define ATTINY2_LOW_ADDR 0x77
void getHigh12SectionValue(void)
{
memset(high_data, 0, sizeof(high_data));
Wire.requestFrom(ATTINY1_HIGH_ADDR, 12);
while (12 != Wire.available());
for (int i = 0; i < 12; i++) {
high_data[i] = Wire.read();
}
delay(10);
}
void getLow8SectionValue(void)
{
memset(low_data, 0, sizeof(low_data));
Wire.requestFrom(ATTINY2_LOW_ADDR, 8);
while (8 != Wire.available());
for (int i = 0; i < 8 ; i++) {
low_data[i] = Wire.read(); // receive a byte as character
}
delay(10);
}
void check()
{
int sensorvalue_min = 250;
int sensorvalue_max = 255;
int low_count = 0;
int high_count = 0;
while (1)
{
uint32_t touch_val = 0;
uint8_t trig_section = 0;
low_count = 0;
high_count = 0;
getLow8SectionValue();
getHigh12SectionValue();
Serial.println("low 8 sections value = ");
for (int i = 0; i < 8; i++)
{
Serial.print(low_data[i]);
Serial.print(".");
if (low_data[i] >= sensorvalue_min && low_data[i] <= sensorvalue_max)
{
low_count++;
}
if (low_count == 8)
{
Serial.print(" ");
Serial.print("PASS");
}
}
Serial.println(" ");
Serial.println(" ");
Serial.println("high 12 sections value = ");
for (int i = 0; i < 12; i++)
{
Serial.print(high_data[i]);
Serial.print(".");
if (high_data[i] >= sensorvalue_min && high_data[i] <= sensorvalue_max)
{
high_count++;
}
if (high_count == 12)
{
Serial.print(" ");
Serial.print("PASS");
}
}
Serial.println(" ");
Serial.println(" ");
for (int i = 0 ; i < 8; i++) {
if (low_data[i] > THRESHOLD) {
touch_val |= 1 << i;
}
}
for (int i = 0 ; i < 12; i++) {
if (high_data[i] > THRESHOLD) {
touch_val |= (uint32_t)1 << (8 + i);
}
}
while (touch_val & 0x01)
{
trig_section++;
touch_val >>= 1;
}
SERIAL.print("water level = ");
SERIAL.print(trig_section * 5);
SERIAL.println("% ");
SERIAL.println(" ");
SERIAL.println("*********************************************************");
delay(1000);
}
}
void setup() {
SERIAL.begin(115200);
Wire.begin();
}
void loop()
{
check();
}
-
Paso 3. Sube la demostración. Si no sabes cómo subir el código, por favor revisa Cómo subir código.
-
Paso 4. Abre el Monitor Serie del IDE de Arduino haciendo clic en Herramienta-> Monitor Serie. O presiona las teclas
ctrl
+shift
+m
al mismo tiempo. Establece la velocidad de baudios a 115200. -
Paso 5. El resultado debería ser así cuando el sensor esté en agua:

FAQ
P1# ¿Aplicaciones útiles?
R1: Aquí se proporciona una aplicación simple usando el Grove - Sensor de Nivel de Agua con Buzzer y módulo LED para detectar el nivel de agua. Por favor revisa el código completo aquí.
Visor de Esquemático en Línea
Recursos
- [ZIP] Archivo de esquemático del Grove - Sensor de Nivel de Agua (10CM)
- [PDF] ATtiny1616-1617-Automotive-Data-Sheet
Soporte Técnico y Discusión de Productos
Actualizable a Sensores Industriales
Con el controlador S2110 y el registrador de datos S2100 de SenseCAP, puedes convertir fácilmente el Grove en un sensor LoRaWAN®. Seeed no solo te ayuda con el prototipado, sino que también te ofrece la posibilidad de expandir tu proyecto con la serie SenseCAP de sensores industriales robustos.
La carcasa IP66, configuración Bluetooth, compatibilidad con la red global LoRaWAN®, batería integrada de 19 Ah y el potente soporte de la APP hacen del SenseCAP S210x la mejor opción para aplicaciones industriales. La serie incluye sensores para humedad del suelo, temperatura y humedad del aire, intensidad de luz, CO2, EC y una estación meteorológica 8 en 1. Prueba el último SenseCAP S210x para tu próximo proyecto industrial exitoso.