SmartAgro: Soluciones IoT Avanzadas para Agricultura de Precisión
Componentes y materiales
- Arduino MKR GSM 1400 – 1 ud.
- SIM IoT global SORACOM Air – 1 ud.
- Arduino MKR MEM Shield – 1 ud.
- Módulo temperatura/humedad GY-21 – 1 ud.
- Sensor UV SI1145 (Adafruit) – 1 ud.
- Sensor humedad suelo (SparkFun, con terminales tornillo) – 1 ud.
- Sensor temperatura estanco DS18B20 (Adafruit) – 1 ud.
- Cables jumper – 1 ud.
Herramientas necesarias
- Soldador genérico
Sobre el proyecto
Visión general
La tierra de cultivo es recurso vital para la sociedad moderna. La agricultura enfrenta retos: conseguir temperatura, humedad y luz adecuadas, y proteger el cultivo. El concepto smart farming (agricultura inteligente) permite supervisar remotamente el estado del cultivo, pero las soluciones actuales son caras para pequeñas fincas y no escalan bien a grandes extensiones.
SmartAgro crea una red de dispositivos fáciles de usar, colocados en el campo, que recogen datos atmosféricos, del suelo y luminosos, enviándolos a la nube para visualización en dashboard. Así cualquier explotación, sea cual sea su tamaño, puede entrar en la nueva era agrícola con una flota escalable que avisa de sequías inminentes.

Funcionalidad
SmartAgro permite desplegar fácilmente una flota de dispositivos en el campo. Estos toman muestras de los sensores a intervalos definidos.
Los datos se guardan en archivo .csv en tarjeta SD y se envían al backend para visualización en dashboard. El proyecto tiene front-end (dispositivos) y backend (Soracom).
Front-End (dispositivos de campo)
El MKR GSM recoge datos, los guarda en SD y los envía a Soracom para visualización.


Tarjeta SD: registra datos en datalog.csv (añade si existe, crea si no).

Alimentación: LiPo en puerto JST, power bank o batería en VIN. El dispositivo duerme entre lecturas para ahorrar energía.
Envío de datos: vía GSM a Soracom, payload JSON. Ejemplo:
{
"Latitude": 53.3570404,
"Longitude": -6.2609935,
"soilTemp": 20.56,
"soilHumidity": 40,
"atmoTemp": 22.12,
"atmoHumidity": 62,
"uvLight": 0.00,
"irLight": 257,
"deviceName": "device1"
}
Backend (Soracom)
Soracom recibe, procesa y muestra en dashboard (Soracom Lagoon). Soracom Air recibe datos, Harvest los almacena, Lagoon los consulta.

Dashboard: ubica cada dispositivo y grafica todos los sensores.

Alertas: configurable para recibir email si índice UV o humedad suelo son anómalos.
Beneficios
- Visualizar datos en cualquier momento y lugar desde el dashboard.
- Escalar fácilmente añadiendo más dispositivos.
- Coste inferior a soluciones comerciales habituales.
Construcción del proyecto
Paso 1: Material necesario
- 1× Arduino MKR GSM
- 1× Arduino MKR MEM Shield
- 1× GY-21 (temp/hum ambiente)
- 1× Sensor temperatura estanco (suelo)
- 1× SI-1145 (UV)
- 1× Sensor humedad suelo
- 1× Caja 2×AA (con pilas) o batería LiPo
- 1× SIM Soracom
- 1× Tarjeta SD
- Cables jumper

Paso 2: Conectar el circuito
Se necesita soldador para unir componentes. Esquemático en archivo Fritzing adjunto. ¡Recuerda acoplar el MEM shield a la placa!

Paso 3: Preparar MKR GSM
Alimenté la placa con 2 pilas AA por VIN. Fotos del montaje:











Paso 4: Entender el código
4 secciones principales:
- Preparar SD
- Recoger datos
- Grabar en SD
- Enviar a Soracom
Preparar SD
bool createFile() {
Serial.println("Creating File");
File dataFile = SD.open("datalog.csv", FILE_WRITE);
if (dataFile) {
Serial.println("OK - File Created");
Serial.println("OK - Appending Legend to File");
dataFile.println(legend);
dataFile.close();
return true;
} else {
Serial.println("Error - File Not Detected");
delay(5000);
return false;
}
}
void checkFile() {
if (SD.exists("datalog.csv")) {
Serial.println("OK - File Exists, Will Append");
} else {
Serial.println("OK - File Not Present, Creating");
while (!createFile()) {}
}
}
Recoger datos
void collectData() {
soilSens.requestTemperatures();
soilTemp = soilSens.getTempCByIndex(0);
soilHumidity = map(analogRead(A1), 1023, 0, 0, 100);
atmoTemp = gy21.readTemperature();
atmoHumidity = gy21.readHumidity();
visibleLight = uv.readVisible();
irLight = uv.readIR();
uvLight = uv.readUV() / 100.0;
// ... volcados a Serial para depuración
}
Grabar en SD
bool burnData(String data) {
File dataFile = SD.open("datalog.csv", FILE_WRITE);
if (dataFile) {
dataFile.println(data);
dataFile.close();
return true;
}
delay(5000);
return false;
}
Enviar a Soracom
void parseData(String dataToSend) {
if (client.connect(url, 80)) {
client.println("POST / HTTP/1.1");
client.println("Host: harvest.soracom.io");
client.println("User-Agent: Arduino/1.0");
client.println("Connection: close");
client.print("Content-Length: ");
client.println(dataToSend.length());
client.println();
client.println(dataToSend);
// leer respuesta...
}
}
Paso 5: Configurar variables
deviceName: nombre personalizado del dispositivo (identifica en flota).sleepTime: tiempo sueño entre lecturas (ms).proDebug:truepara depuración (requiere monitor serie activo),falseen campo.
Paso 6: Preparar tarjeta SD
Formatear como FAT32. Pasos en imágenes:


Paso 7: Subir código
Conectar MKR GSM, subir código (modo dispositivo = 1). Colocar sensores en agua, pulsar botón, esperar envío. Repetir para poblar Soracom Air.
Paso 8: Configurar Soracom
Dos secciones: (1) crear cuenta y registrar SIM; (2) configurar Soracom Harvest para recoger datos de Air. Si ya tienes cuenta, salta a sección 2.
Sección 1: Crear cuenta – capturas del proceso de registro en Soracom.
Sección 2: Grupos y Harvest – crear grupo, activar Harvest, configurar Lagoon.
Paso 9: Configurar Soracom Lagoon
Herramienta para visualizar datos y crear alertas por email. Pasos en capturas.
Librerías usadas
- ArduinoLowPower
- MKRGSM
- Wire
- OneWire
- DallasTemperature
- RTCZero
- SPI
- SD
Caja final
Diseñé una carcasa; preferible tapa transparente para sensor UV (yo lo puse fuera para evitar interferencias).


Nota sobre módulo SD: Usé MKR MEM shield por comodidad y tamaño. Un módulo SD genérico suele requerir 5 V; el MKR GSM da 3,3 V → hace falta conversor de nivel.
Contexto
La idea surgió viendo campos desde un autobús. Leí sobre dispositivos de monitorización agrícola pero sus costes son inasumibles para muchos agricultores. Decidí usar Arduino de bajo coste para monitorizar múltiples parámetros y permitir a cualquier explotación entrar en la era IoT.

Código
SmartAgro – Código completo
(El código completo está en el repositorio del proyecto.)
Esquemáticos
schematics_rrBJ3HiIfc.fzz
Proceso de manufactura
- Construya una Red de Sensores Inalámbrica Económica para su Hogar
- Sensor K30 CO₂: Monitorización en tiempo real de la calidad del aire interior
- Construye un estadiómetro digital: Controla tu altura con Arduino y sensor láser
- Sensor de obstáculos IR casero con Arduino – Tutorial fácil con LED IR y fotodiodo
- Integración del sensor de huella capacitivo DFRobot (ID809) con Arduino o ESP8266
- Construye una Torre de Sensores con Arduino Cloud: Temperatura, Movimiento y Gas
- Pistola de Agua Inteligente Activada por Movimiento con Arduino Nano
- Crea una Interfaz Web en PHP para Controlar tu Arduino Uno
- Sistema Radar Compacto con Arduino Nano, Sensor HC-SR04 y Pantalla 1.8"
- Envía Datos de Sensores Arduino a MySQL vía PHPMyAdmin: Guía Paso a Paso
- Sensores para Arduino: Tipos, Aplicaciones y Proyectos Reales