Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Smart Herb Box: Sistema de Cultivo Interior con Alexa y Arduino

Componentes y materiales

Componente Cantidad
Amazon Alexa Echo Dot 1
Arduino UNO 1
Espressif ESP8266 ESP-01 1
Arduino Proto Shield 1
Arduino 4 Relays Shield 1
Bomba de agua (Aqua Pump) 2
Lámpara de cultivo para plantas 1
Adaptador 220V DC 1
Adaptador 12V DC 1
Cargador USB + cable 1
Manguera de aire 1
Cables jumper genéricos 1 set

Aplicaciones y servicios online

Sobre el proyecto

Mis plantas siempre sufrían por exceso o falta de riego, y como uso muchas hierbas en la cocina, decidí crear un sistema de riego automático configurable. La caja debe funcionar en modo automático o manual, con interfaz web para configuración y gráficos de humedad. El último paso fue integrar control por voz con Amazon Alexa para consultar humedad, encender/apagar lámpara de cultivo y activar riego manual.

Empecé con la parte técnica: Arduino, controlador WiFi, sensores de humedad, bombas, lámpara y hardware adicional (shield de relés para separar circuitos de 5V, 12V y 230V, cables y madera de haya para la estructura). El código Arduino se proporciona aquí; el código web/API no se incluye salvo gran demanda.

Paso 1: Sensor de humedad

Primer hito: leer humedad con Arduino. Sensor YL-69: VCC a GPIO (pin 6), GND a GND, A0 a pin analógico (A1).

byte vccPin = 6;
byte dataPin = A1;

void setup() {
  pinMode(vccPin, OUTPUT);
  digitalWrite(vccPin, LOW);
  Serial.begin(9600);
  while (!Serial);
}

int readHumidity() {
  digitalWrite(vccPin, HIGH);
  delay(500); // Tiempo de pre-alimentación
  int value = analogRead(dataPin);
  digitalWrite(vccPin, LOW);
  return 1023 - value; // Invertir: más humedad = valor mayor
}

void loop() {
  Serial.print("Nivel humedad (0-1023): ");
  Serial.println(readHumidity());
  delay(10000);
}

Paso 2: Relés para bombas y lámpara

Shield de 4 relés para separar circuitos: Arduino (5V), bombas (12V), lámpara (230V). El shield se alimenta de 5V y GND del Arduino. Cada relé necesita un GPIO. Importante: mi shield activa con LOW en el pin. Al definir pin como OUTPUT, se activa automáticamente. Para apagar: poner pin en INPUT y LOW. Por defecto, pines Arduino son INPUT/LOW.

byte pump1 = 11;
byte pump2 = 10;

void setup() {
  Serial.begin(9600);
  while (!Serial);
  pinMode(pump1, OUTPUT);
  digitalWrite(pump2, LOW);
}

void loop() {
  digitalWrite(pump1, HIGH); // Bomba 1 OFF
  pinMode(pump2, INPUT);     // Bomba 2 OFF
  delay(1000);
  digitalWrite(pump1, LOW);  // Bomba 1 ON
  pinMode(pump2, OUTPUT);    // Bomba 2 ON
  delay(1000);
}

Paso 3: WiFi con ESP-01

Conectar ESP8266 ESP-01 a Arduino fue lo más difícil. Conexiones: VCC=3.3V, GND=GND, CH_PD=3.3V, TX=Pin 2, RX=Pin 3. Recomendable conversor de nivel 5V→3.3V para pines 2 y 3.

Ambos microcontroladores comunican por serie. Arduino UNO usa pines 0/1 para RX/TX (también para USB), así que usamos SoftwareSerial.h en pines personalizados.

#include <SoftwareSerial.h>
SoftwareSerial espSerial(3, 2); // RX, TX

void setup() {
  Serial.begin(9600);
  espSerial.begin(115200); // Cambiar a 9600 tras AT+UART_DEF=9600,8,1,0,0
  while (!Serial);
}

void loop() {
  if (espSerial.available()) Serial.write(espSerial.read());
  if (Serial.available()) espSerial.write(Serial.read());
}

Ejecutando esto, puedes enviar comandos AT desde el monitor serie. Bajé baud rate a 9600 para mayor estabilidad. Librerías útiles: WiFiEsp (consume mucha memoria), MemoryFree.

El script usa HTTP 1.0 (HTTP 1.1 incluye bytes en respuesta). Cuidado con saltos de línea tras AT+CIPSEND.

Paso 4: La caja de madera

Estructura para guardar electrónica y 3 macetas de supermercado. Medí componentes y diseñé posiciones. Madera de haya (resistente a gotas sin barniz). Círculos cortados con sierra de calar en mesa casera. Soportes de macetas pegados con silicona caliente. Lados encolados con cola D3 (resistente al agua). Sin tornillos ni clavos salvo panel inferior.

Todos los circuitos, cables y tubos dentro; sensores y tubos de depósito exterior. Antes de cerrar, añadí platillos para evitar agua en electrónica.

Paso 5: Web/API

Basada en jQuery, Bootstrap, X-editable (formularios AJAX inline) y Chart.js (gráficos), en PHP. Permite configurar Arduino (pines sensores, intervalo, bombas por planta, pines VCC) y ver humedad actual + histórico.

Configuración vía JSON para Arduino. La caja consulta ajustes al inicio y periódicamente. Para parsear JSON: librería ArduinoJson. Para intervalos: StensTimer.

Paso 6: Integración Alexa

La web provee API para Alexa: recibe JSON de Alexa, traduce a JSON personalizado para Arduino (lámpara on, regar planta 1, etc.). Arduino sondea y ejecuta acciones.

Como las peticiones de voz son complejas, implementé Alexa Skill (no Smart Home). AWS Lambda reenvía JSON a mi API, que parsea intents.

var https = require('https');
exports.handler = (event, context, callback) => {
  var postData = JSON.stringify(event);
  var options = {
    host: '<MI-SERVIDOR>',
    path: '<MI-API-ENDPOINT>',
    port: 443,
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Content-Length': postData.length,
    }
  };
  var postRequest = https.request(options, function(res) {
    res.setEncoding('utf8');
    res.on('data', function(chunk) {
      console.log('Response: ' + chunk);
      callback(null, JSON.parse(chunk));
    });
  });
  postRequest.write(postData);
  postRequest.end();
};

Intents implementados (multilingüe ES/EN):

Resultado

Caja de madera para macetas de supermercado, tubos de agua y sensores en tierra, depósito externo. Comandos de voz:

Funciones planificadas

Actualización 23/03/2018

Nuevos intents: "Qué plantas están secas" y "Cuándo fue el último riego" (importante para futuros Nanos externos).

Código

Archivos del proyecto Arduino:

Arquitectura: StensTimer para tareas periódicas (actualizar API cada 60s, leer acciones cada 1s). SoftwareSerial para ESP-01. ArduinoJson para parseo. Clases implementan IStensTimerListener.

Esquemáticos

Diagrama de comunicación e interfaces. Todos los intents implementados con respuestas (multilingüe). Parsing inicial de JSON de Alexa.

Proceso de manufactura

  1. Sistema de Iluminación DMX Controlado por Web – Controlador Maestro Arduino
  2. Construye un Spybot controlado por Bluetooth con Arduino
  3. SERENA: Sistema de Alarma Personalizado Arduino Mega 2560 con Pantalla TFT LCD Táctil
  4. Estación meteorológica compacta: Arduino Nano y ESP8266 con sensor BMP280 y pantalla OLED/Nokia LCD
  5. Sistema de Ventilación Inteligente para Sótanos: Control de Humedad con Arduino
  6. Sistema de control de asistencia RFID en tiempo real con Arduino y Google Sheets
  7. Shield de Programación Inalámbrica para Arduino con HC-05 Bluetooth – Sin Cable USB
  8. Sistema Avanzado de Alerta de Colisión con Arduino – Alertas Visuales y Sonoras para Seguridad Vehicular
  9. Pantalla TFT Shield de Alto Rendimiento 2.8” para Arduino Nano – Display SPI 320×240
  10. Shield de Reloj Nixie NCS314 para Arduino UNO/MEGA – Compatibilidad IN‑14/IN‑12
  11. Controlador GrowBox Arduino - Firmware y Hardware Open Source