Principiante15 min

Arduino Uno + Sensor de humedad resistivo

Código completo y diagrama de conexión para enviar lecturas a Bloomit vía Serial USB desde el navegador, sin necesidad de WiFi en la placa.

Hardware necesario

  • Arduino Uno, Nano o Mega
  • Sensor de humedad resistivo YL-69 o FC-28
  • LED de 5mm (cualquier color)
  • Resistencia de 220Ω
  • Protoboard y cables jumper
  • Cable USB tipo A-B (Arduino)
  • PC con Chrome 89+ o Edge 89+

Cómo funciona

Arduino Uno no tiene WiFi, así que no puede enviar datos directamente a internet. En cambio, usa el puerto Serial USB para comunicarse con la PC. Bloomit tiene un proxy Serial integrado en el panel: abrís bloomit.app/devices/test en Chrome o Edge, conectás al puerto USB del Arduino, y el navegador actúa de puente entre la placa y la API.

El Arduino imprime JSON por Serial. Bloomit lo lee en tiempo real y reenvía los datos a la API automáticamente. Sin drivers adicionales, sin configuración de red en la placa.

El LED indica cada ciclo de lectura y envío, igual que en el tutorial de ESP32.

Diagrama de conexión

GNDArduinoUno (o Nano / Mega)5VGNDA0Pin 9Sensor HumedadResistivo (YL-69 / FC-28)SondasVCCGNDAO220ΩLEDVCC (5V)GNDSeñal analógicaControl LED
ArduinoComponentePinCable
5VSensor YL-69VCCRojo
GNDSensor YL-69GNDNegro
A0Sensor YL-69AO (Analog Out)Amarillo
Pin 9Resistencia 220Ω →Ánodo LED (+)Azul
GNDCátodo LED (−)Negro

Nota: el Arduino usa 5V lógico. El sensor YL-69 funciona bien a 5V. El pin DO (salida digital del sensor) no se usa en este tutorial.

Obtener el device token

Antes de cargar el código, registrá el dispositivo desde bloomit.app y copiá el deviceToken. Podés hacerlo desde el panel web o via curl:

# 1. Login → userToken
curl -X POST https://user.api.bloomit.app/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"tu@email.com","password":"tupassword"}'

# 2. Registrar dispositivo → deviceToken
curl -X POST https://device.api.bloomit.app/register \
  -H "Authorization: Bearer <userToken>" \
  -H "Content-Type: application/json" \
  -d '{"name":"Arduino Nano Laboratorio"}'

# → { "deviceToken": "eyJhbGci...", "deviceId": "abc123" }
# Pegá el deviceToken en DEVICE_TOKEN del sketch

Código completo

No requiere librerías externas. El JSON se arma manualmente con concatenación de strings, lo que lo hace compatible con cualquier versión de Arduino IDE.

// ── Configuración ──────────────────────────────────────
const char* DEVICE_TOKEN = "eyJhbGci..."; // tu deviceToken de bloomit.app

const int LED_PIN    = 9;   // PWM pin — cualquier pin digital sirve
const int SENSOR_PIN = A0;  // pin analógico

// Calibración del sensor resistivo
// Arduino tiene ADC de 10 bits: valores de 0 a 1023
const int SENSOR_DRY = 1023;  // valor en aire → 0% humedad
const int SENSOR_WET = 300;   // valor en agua → 100% humedad

// ── Helpers para enviar datos por Serial ───────────────
void sendSensorReading(const char* sensorType, int value) {
  // El panel de Bloomit en bloomit.app/devices/test
  // lee estas líneas JSON y las reenvía a la API
  Serial.print(F("{"token":""));
  Serial.print(DEVICE_TOKEN);
  Serial.print(F("","cmd":"sense","sensorType":""));
  Serial.print(sensorType);
  Serial.print(F("","value":"));
  Serial.print(value);
  Serial.println(F("}"));
}

void sendLog(const char* type, const String& message) {
  Serial.print(F("{"token":""));
  Serial.print(DEVICE_TOKEN);
  Serial.print(F("","cmd":"log","type":""));
  Serial.print(type);
  Serial.print(F("","message":""));
  Serial.print(message);
  Serial.println(F(""}"));
}

// ── Lectura del sensor ─────────────────────────────────
int readHumidity() {
  // Promediamos 5 lecturas para estabilizar
  long sum = 0;
  for (int i = 0; i < 5; i++) {
    sum += analogRead(SENSOR_PIN);
    delay(10);
  }
  int raw = sum / 5;
  int humidity = map(raw, SENSOR_DRY, SENSOR_WET, 0, 100);
  return constrain(humidity, 0, 100);
}

// ── Setup ──────────────────────────────────────────────
void setup() {
  Serial.begin(9600); // Bloomit espera 9600 baud por defecto
  pinMode(LED_PIN, OUTPUT);

  // Señal de inicio: 2 parpadeos largos
  for (int i = 0; i < 2; i++) {
    digitalWrite(LED_PIN, HIGH); delay(500);
    digitalWrite(LED_PIN, LOW);  delay(300);
  }

  sendLog("info", "Arduino iniciado — conectá el panel en bloomit.app/devices/test");
}

// ── Loop ───────────────────────────────────────────────
void loop() {
  // Parpadeo simple: iniciando lectura
  digitalWrite(LED_PIN, HIGH); delay(200);
  digitalWrite(LED_PIN, LOW);

  int humidity = readHumidity();

  // Enviar lectura por Serial → el panel web lo recibe y lo reenvía a la API
  sendSensorReading("soil_humidity", humidity);

  // Log de debug visible en la consola del panel
  sendLog("info", "Humedad: " + String(humidity) + "%");

  // 3 parpadeos rápidos: dato enviado
  for (int i = 0; i < 3; i++) {
    digitalWrite(LED_PIN, HIGH); delay(100);
    digitalWrite(LED_PIN, LOW);  delay(100);
  }

  // Esperar 1 hora
  // Con plan free (25 lecturas/dispositivo/día) una por hora es ideal
  delay(3600000UL);
}

Conectar el panel Serial en Bloomit

Con el código cargado y el Arduino conectado por USB, seguí estos pasos:

  1. Abrí Chrome o Edge (Firefox y Safari no soportan Web Serial API todavía).
  2. Ingresá a bloomit.app/devices/test (requiere login).
  3. Hacé click en Conectar dispositivo, seleccioná el puerto COM del Arduino en el popup que abre el navegador.
  4. Elegí el baud rate 9600 (igual que el código).
  5. Cuando el Arduino imprima el JSON, lo vas a ver aparecer en la consola del panel. Si el token es válido, el dato también aparece en el dashboard del dispositivo.

Importante: el proxy Serial funciona solo mientras la pestaña de bloomit.app esté abierta y conectada. Para monitoreo desatendido 24/7 sin PC, migrá al tutorial de ESP32 con WiFi directo.

Señales del LED

  • 2 parpadeos lentos (500ms)
    InicioEl programa arrancó correctamente
  • 1 parpadeo (200ms)
    Leyendo sensorCapturando la lectura analógica
  • 3 parpadeos rápidos (100ms)
    Dato enviadoEl JSON fue escrito por Serial al panel

Calibrar el sensor

El Arduino usa un ADC de 10 bits (0–1023), diferente al ESP32 (0–4095). Para calibrar:

  1. Cargá el sketch y abrí el Monitor Serial o la consola del panel de Bloomit.
  2. Dejá el sensor en el aire y anotá el valor raw que imprime → SENSOR_DRY.
  3. Sumergí las sondas en agua y anotá el nuevo rawSENSOR_WET.
  4. Actualizá las constantes y recargá el sketch.

Para ver el raw, agregá esta línea al final de readHumidity() antes del return:

sendLog("info", "raw: " + String(raw) + "  humedad: " + String(humidity) + "%");

Cargar a la placa

  1. En Arduino IDE, seleccioná Tools → Board → Arduino AVR Boards → Arduino Uno.
  2. Seleccioná el puerto COM en Tools → Port.
  3. No se necesitan librerías externas — el código es Arduino puro.
  4. Hacé click en Upload (→).
  5. Al terminar, el LED parpadea 2 veces y el Arduino empieza a imprimir JSON por Serial.

¿Te trabaste en algún paso?

Sumate al grupo de Telegram de Bloomit: ahí te ayudamos a resolver errores de cableado, compilación o conexión. Hay gente armando los mismos proyectos que vos.

Unirme al grupo

Bloomit

¿Todo funcionando? Abrí el panel

Registrá tu cuenta gratis, conectá el dispositivo y los datos aparecen en tiempo real. Hardware Bloomit listo para usar en bloomit.com.ar.