Skip to main content

Grove - Sensor de Nivel de Agua

pir

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.

pir

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ámetroValor
Voltaje de entrada3.3V / 5V
Precisión de Medición±5mm
Rango de Temperatura de Trabajo-40°C a 105°C
Direcciones I2C0x78 y 0x77
InterfazI2C
Dimensiones20mm x 133mm

Descripción General del Hardware

Plataformas Compatibles

ArduinoRaspberry Pi

pir

pir

Comenzando

Jugar con Arduino

Materiales requeridos

Seeeduino V4.2Base ShieldGrove - Sensor de Nivel de Agua

pir

pir

pir

Obtener UNO AhoraObtener UNO AhoraObtener 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.

pir

Software

note

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í.

pir

Visor de Esquemático en Línea

Recursos

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.

Loading Comments...