Para obtener medidas de la temperatura del suelo de nuestro huerto urbano tuve que echar manos de un sensor de temperatura DS18B20 en la versión que viene insulado para poder ser sumergido en líquidos y tomar la temperatura de estos. Este mismo sensor si es enterrado registrará lecturas de la temperatura de nuestro suelo, bastantes confiables. Aunque lo ideal sería contar con un sensor especializado para esta tarea.
Importancia de la temperatura del suelo

Esta variable puede que no parezca tan importante para el desarrollo de nuestro huerto, pues la mayoría de veces con solo saber que nuestras plantas son compatibles con la temperatura del aire es suficiente.
Pero en realidad es importante medirla, porque está variable tiene impacto en la cantidad de nutrientes que nuestro huerto puede llegar a recibir, el tamaño al que pueden alcanzar las raíces de nuestras plantas, en la cantidad de humedad que el suelo es capaz de retener, en cómo el oxígeno se mueve a través del sistema de raíces, influye en la capacidad que tiene la planta para absorber nutrientes y en la germinación de las semillas.
El dispositivo para medir temperatura del suelo.

Este dispositivo comparte la mayoría de sus partes con los dispositivos que utilizamos para medir tanto la exposición a la luz, como la temperatura y humedad relativa del aire. La idea es poder utilizar varias veces los mismos componentes, esto con la idea de poder recopilar la mayor cantidad de información sobre las variables atmosféricas. Así solo tenemos que ir cambiando los sensores con los cuales capturamos la data; de esta manera nos mantenemos amigables con el presupuesto.
Para capturar los datos, el dispositivo tiene un sensor de temperatura DS18B20 el cual está encapsulado para su aislamiento de los elementos externos, esto lo hace ideal para tomar la temperatura de líquidos y/o, como lo haremos nosotros, medir la temperatura del suelo. Ya que este tipo de sensor tiene una buena resolución, aunque no este diseñado para este tipo de tarea, si registrará datos de la temperatura del suelo.
Metodología
Para este ejercicio se utilizará la misma metodología empleada en la medición de las otras variables de nuestro huerto urbano. Se desplegará nuestro dispositivo durante varios días. Posteriormente descargamos los datos recopilados en la tarjeta de memoria SD y los analizaremos con un programa para hojas de cálculo y de esta manera podremos determinar el comportamiento de la variable durante las diferentes horas del día.
Partes necesarias
| Partes | Precio |
|---|---|
| Placa Arduino UNO precio | USD 15.00 |
| Sensor DS18B20 en su versión de sonda impermeable | USD 9.00 |
| Un módulo RTC DS3231 | USD 6.00 |
| Módulo lector de tarjetas SD SPI | USD 5.80 |
| Breadboard mini de 4.5×3.5cm | USD 2.00 |
| Cables dupont para hacer las conexiones | USD 1.00 |
| Un contenedor o caja, de preferencia resistente a la intemperie para hacer el despliegue del dispositivo en campo | USD 4.95 |
| Total | USD 43.75 |
La mayoría de las piezas de este dispositivo son las mismas que utilice en el dispositivo para medir la temperatura y la humedad relativa del aire y la exposición a la luz. Por lo tanto, si haces la inversión para construir estos dispositivos, pueden reutilizar las mismas piezas, sin tener que comprar todo nuevamente.
Código y cableado para medir temperatura del suelo

Tanto el cableado como el código para el dispositivo, nuevamente, es muy similar con el utilizado para los demás dispositivos colectores de datos. De igual forma aquí dejo la forma en que ha sido cableado y el código que utilice. En estos dispositivos lo único que cambia prácticamente es el tipo de sensor que hemos utilizado.
#include <SPI.h> // para el modulo tarjeta SD
#include <SD.h> // para la tarjeta SD
#include <OneWire.h> // para el sensor de temperatura
#include <DallasTemperature.h> // para el sensor de temperatura
#include <RTClib.h> // para el RTC
// cambiar esto segun el shield de SD que se utilice;
// Arduino Ethernet shield y modulos: pin 4
// Data loggin SD shields y modulos: pin 10
// Sparkfun SD shield: pin 8
const int chipSelect = 4;
OneWire ourWire = 5;
int input_val = 0;
DallasTemperature sensors(&ourWire);
float Celsius = 0;
// Creamos un archivo para guardar nuestra data
File myFile;
// RTC
RTC_DS1307 rtc;
void setup() {
// inicializamos el monitor serial
Serial.begin(9600);
// configuracion para para el RTC
while (!Serial); // para un Leonardo/Micro/Zero
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
else {
// esta linea establece el RTC a la hora y fecha en que se compilo este sketch
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
}
// configuracion para la tarjeta SD
Serial.print("Initializing SD card...");
if (!SD.begin(chipSelect)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
// abrimos el archivo
myFile = SD.open("DATA.txt", FILE_WRITE);
// si el archivo se abrio bien escribir:
if (myFile) {
Serial.println("File opened ok");
// se imprimen las cabeceras de nuestra data
myFile.println("Fecha,Tiempo,Temperatura Suelo C");
}
myFile.close();
}
void loggingTime() {
DateTime now = rtc.now();
myFile = SD.open("DATA.txt", FILE_WRITE);
if (myFile) {
myFile.print(now.year(), DEC);
myFile.print('/');
myFile.print(now.month(), DEC);
myFile.print('/');
myFile.print(now.day(), DEC);
myFile.print(',');
myFile.print(now.hour(), DEC);
myFile.print(':');
myFile.print(now.minute(), DEC);
myFile.print(':');
myFile.print(now.second(), DEC);
myFile.print(",");
}
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.println(now.day(), DEC);
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.println(now.second(), DEC);
myFile.close();
delay(300000);
}
void loggingSueloTemp() {
sensors.requestTemperatures();
Celsius = sensors.getTempCByIndex(0);
// verifica si alguna lectura fallo y termina para volver a intentar
if (isnan(Celsius) /*|| isnan(f)*/) {
Serial.println("Failed to read from LDR sensor!");
return;
}
// para depurar cualquier error
Serial.print("Temperatura es: ");
Serial.print(Celsius);
Serial.println(" C");
myFile = SD.open("DATA.txt", FILE_WRITE);
if (myFile) {
Serial.println("open with success");
myFile.print(Celsius);
myFile.print(" C");
myFile.println(",");
}
myFile.close();
}
void loop() {
loggingTime();
loggingSueloTemp();
delay(300000);
}
Temperatura del Suelo: resultados de prueba de campo
El comportamiento que tiene la temperatura del suelo es muy similar al que muestra la temperatura del aire; únicamente que con la temperatura del suelo es algunos grados más baja que la que registra el aire, en el mismo momento del día.

A medida que el día va corriendo la temperatura del suelo va en aumento, llegando a su punto más alto alrededor de las 3pm, con una temperatura máxima promedio de 28.8 °C. A partir de la hora antes señalada, la temperatura comienza a descender, hasta alcanzar su punto más bajo a alrededor de las 6am, con un temperatura de 23.5°C.
Conclusión
Luego de analizar los datos colectados durante la prueba de campo, es inevitable darse cuenta que la temperatura del aire esta directamente relacionado con la temperatura que se registra en el suelo de nuestro huerto urbano. Notando que esta siempre está un par de grados por debajo de la temperatura que se registra en el aire, esto debido a que la tierra es considerablemente más densa que el aire y tarda más en reaccionar a los cambios.
Saludos.-
Israel es un Xennial entusiasta del PC Case Modding y del hardware en general. Ha surfeado la web desde 1995 y ha pasado toda su vida rodeado de PCs, Legos y Nintendos. Siempre aprendiendo algo fuera de las aulas. Cree firmemente que si el hardware no se puede modificar, en realidad no te pertenece y que las computadoras tienen el corazón de quien las diseña y construye.

