SMDByte LAB 1 · Humedad del suelo con OLED
Construye una estación de humedad de suelo con ESP32-C3, sensor capacitivo y pantalla OLED. Pulsa el botón para iniciar las mediciones; púlsalo otra vez para pausarlas. El valor también se envía al monitor serie del computador y en la pantalla OLED.
Qué aprenderás
Leer una señal analógica, calibrar dos puntos del sustrato, mostrar datos por I2C y gestionar un pulsador con antirrebote.
Componentes disponibles en SMDByte
Sensor capacitivo HW-390 V2.0Entrega la lectura de humedad del suelo.Ver producto →
ESP32-C3 Super MiniLee el sensor y controla la pantalla y el pulsador.Ver producto →
Pantalla OLED SSD1306Muestra la lectura y el estado del sustrato.Ver producto →
Placa perforada 5 × 7 cmPermite soldar y fijar los componentes del montaje.Ver producto →
Conexiones del prototipo
| Componente | Terminal | ESP32-C3 |
|---|---|---|
| Sensor capacitivo | GND | GND |
| Sensor capacitivo | VCC | 3V3 |
| Sensor capacitivo | AOUT | GPIO4 (ADC) |
| OLED | GND | GND |
| OLED | VDD | 3V3 |
| OLED | SDA | GPIO6 |
| OLED | SCL | GPIO10 |
| Pulsador | Una terminal | GPIO5 |
| Pulsador | Otra terminal | GND |
Comprueba las etiquetas impresas en tus módulos. Con USB desconectado, verifica continuidad y que 3V3 no esté en corto permanente con GND. Mantén la electrónica y el conector de la sonda fuera del sustrato húmedo.
Calibración usada en esta prueba
En este montaje se midieron aproximadamente 3400 ADC en seco y 1500 ADC en húmedo. El aviso inicial «Revisar riego» aparece si ADC > 2450. El porcentaje está interpolado y limitado a 0–100 entre esos dos valores: no es un porcentaje absoluto de agua ni indica por sí mismo que toda planta necesite riego. Calibra con tu propio sustrato.
Programa Arduino
Instala las bibliotecas Adafruit GFX y Adafruit SSD1306. Selecciona la placa ESP32-C3 correspondiente y abre el monitor serie a 115200 baudios.
Ver código completo del LAB 1Cerrar código⌄
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
const int SENSOR = 4, BOTON = 5, SDA_OLED = 6, SCL_OLED = 10;
const int SECO = 3400, HUMEDO = 1500, UMBRAL = 2450;
Adafruit_SSD1306 oled(128, 64, &Wire, -1);
bool activo = false;
int ultima = HIGH, estable = HIGH;
unsigned long cambio = 0, muestra = 0;
void setup() {
Serial.begin(115200);
pinMode(BOTON, INPUT_PULLUP);
analogReadResolution(12);
Wire.begin(SDA_OLED, SCL_OLED);
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED no detectada en 0x3C");
while (true) delay(1000);
}
oled.clearDisplay(); oled.display();
oled.ssd1306_command(SSD1306_DISPLAYOFF);
Serial.println("Listo: pulsa para iniciar");
}
void loop() {
unsigned long ahora = millis();
int valorBoton = digitalRead(BOTON);
if (valorBoton != ultima) cambio = ahora;
if (ahora - cambio > 45 && valorBoton != estable) {
estable = valorBoton;
if (estable == LOW) {
activo = !activo;
if (activo) {
oled.ssd1306_command(SSD1306_DISPLAYON);
muestra = ahora - 1000;
Serial.println("Medicion iniciada");
} else {
oled.clearDisplay(); oled.display();
oled.ssd1306_command(SSD1306_DISPLAYOFF);
Serial.println("Medicion pausada");
}
}
}
ultima = valorBoton;
if (!activo || ahora - muestra < 1000) return;
muestra = ahora;
int adc = analogRead(SENSOR);
int porcentaje = constrain(map(adc, SECO, HUMEDO, 0, 100), 0, 100);
bool revisarRiego = adc > UMBRAL;
Serial.printf("ADC=%d | Humedad estimada=%d%% | %s\n",
adc, porcentaje, revisarRiego ? "Revisar riego" : "Humedad adecuada");
oled.clearDisplay(); oled.setTextColor(SSD1306_WHITE);
oled.setTextSize(1); oled.setCursor(0, 0); oled.print("HUMEDAD DEL SUELO");
oled.setTextSize(2); oled.setCursor(0, 17); oled.print(porcentaje); oled.print("%");
oled.setTextSize(1); oled.setCursor(0, 43);
oled.print(revisarRiego ? "REVISAR RIEGO" : "HUMEDAD ADECUADA");
oled.setCursor(0, 55); oled.print("ADC: "); oled.print(adc);
oled.display();
}
Prueba funcional
- Al conectar el USB, la pantalla queda apagada y el monitor serie indica que el LAB está listo.
- Pulsa una vez: aparecen el valor ADC, un porcentaje estimado y el estado del sustrato en pantalla y por USB.
- Introduce solo la parte sensible de la sonda en tierra. Observa cómo cambia el valor respecto a la lectura en seco.
- Pulsa otra vez: se pausan las lecturas y se apaga la OLED. El ESP32-C3 continúa conectado al USB.