Datalogger con módulo lector microSD y sensor DHT11

Datalogger con módulo lector microSD y sensor DHT11

En este tutorial se mostrará cómo utilizar un datalogger para almacenar datos en una microSD los cuales los obtendremos de un sensor y en esta ocasión utilizaremos el sensor de temperatura DHT11 para mostrar el funcionamiento básico de este módulo, un datalogger o registrador de datos es un dispositivo que registra datos por medio ya sea de instrumentos o sensores, varían entre el propósito general  para una amplia gama de aplicaciones.

Tener un datalogger en nuestro proyecto nos ayudará a hacer un registro de datos que obtengamos de algún proceso del programa y podremos visualizar en alguna computadora ya que nos creará un archivo de texto donde guardará nuestros datos obtenidos.

Realiza conexiones entre tu tarjeta de desarrollo y este lector microSD para establecer comunicación directa entre dispositivos, es ideal para la carga  de código, datalogger entre muchas mas aplicaciones. Esta interfaz soporta tarjetas Micro SD y Micro SDHC. La tarjeta ya incluye una etapa de conversión de niveles para ajustar los 3.3V de la memoria con 5V del dispositivo maestro. Se alimenta con 5v o 3.3V, utiliza el protocolo SPI para comunicación entre dispositivos. Podrás agregarla  a tus proyectos ya que por su tamaño es muy fácil de instalar y dejarla fija.



Utilizaremos el sensor de temperatura DHT11 para hacer pruebas de datalogger, de este sensor obtendremos la temperatura y la humedad del ambiente donde se encuentra si quieres saber más sobre el manejo de este sensor puedes visitar el tutorial donde solo utilizamos este sensor, una vez que obtengamos datos del sensor los almacenaremos en la microSD. Este sensor tiene como características: voltaje de alimentación: 3V-5.5V, corriente de Alimentación: en medición de 0.5mA-2.5mA, alcance de medición: 20-90% humedad/ 0-50°C, temperatura de precisión: ±2°C.         

Sensor DHT11 y Modulo microSD

Sensor DHT11 y Modulo microSD (Datalogger)

Material necesario

Material utilizado

Material utilizado

Conexión

Visto lo anterior comenzamos realizando la conexión entre el datalogger, DHT11 y Arduino, se muestra a continuación la tabla de conexiones y un gráfico de los dispositivos conectados

Diagrama de conexión datalogger y DHT11

Diagrama de conexión datalogger y DHT11

Tabla de conexiones

Tabla de conexiones

Una vez conectado todo y de asegurarse que todo está bien podemos proseguir con la programación en el IDE de Arduino.



Programación

Antes de realizar el código que utilizaremos debemos tener en cuenta que necesitamos librerías para el IDE de Arduino,la más importante es la de la SD ya que la librería del sensor varía según lo que utilizaras, de igual manera dejamos en esta sección las librerías que usamos para este tutorial: SDmaster y DHT11. Una vez cargadas las librerías podemos proseguir con el código.

Iniciamos agregando librerias y de variables necesarias junto con la configuración del serial a 9600, dentro de esta parte del código es necesario que establezcamos la comunicación con la SD y para estar seguro que si se realizó la comunicación podemos mostrarlo en el serial como se muestra en el código de igual manera es importante saber que pin es el que estamos usando y que esté conectado adecuadamente. Indicamos de igual manera que se crea el archivo donde lo almacena.

#include <SPI.h>
#include <DHT11.h>
#include <SD.h>

const int chipSelect = 10; // sd
int pin=2; //DHT
DHT11 dht11(pin);
void setup()
{
//Comunicacion
Serial.begin(9600);
while (!Serial) {
; 
}
Serial.println("HeTPro");
Serial.print("Iniciando SD...");
//Inicializamos la sd 
pinMode(10, OUTPUT);
// verifica si hay SD
if (!SD.begin(chipSelect)) {
Serial.println("Falla en tarjeta, o no insertada");
return;
}
Serial.println("SD inicializada");
Serial.println("Creando archivo...");
}


En la primer parte del void loop comenzamos con una declaración de una cadena para la unión de datos, después de esto comenzamos con la parte de código del sensor DHT11 esta parte es la que puedes cambiar por el dispositivo que utilices y como mencionamos si tienes dudas sobre el funcionamiento puedes visitar el tutorial del mismo que tenemos aqui.


void loop()
{
//Hacemos una cadena para la union de datos
String dataString = "";
//Programa de sensor
int err;
float temp, hum;
if((err=dht11.read(hum, temp))==0)
{
Serial.print("Temperatura: ");
Serial.print(temp);
Serial.print(" Humedad: ");
Serial.print(hum);
Serial.println();
}
else
{
Serial.println();
Serial.print("Error Num :");
Serial.print(err);
Serial.println();
}
delay(1000); 

Terminada la parte del sensor continuamos con la parte del datalogger donde crea el archivo y verifica que no esté utilizándose,  en esta parte asignamos el nombre del archivo y declaramos en esta parte las variables que tomaremos del proceso para almacenar en el archivo. Las siguientes líneas las usamos para tomar los valores y pasarlos a cadenas que son las que guardará y se podrán mostrar después.


// Abre al archivo 
// Cierra si es que hay uno abierto
File dataFile = SD.open("datalog.txt", FILE_WRITE); //nombre de archivo
int sensor = temp; //Declara para almacenar
int sensor2 = hum; //Declara para almacenar
dataString += (" ") ; 
dataString += String (" Temperatura ") + String(sensor) + String (" C") ; //escribir
dataString += String (" Humedad ") + String(sensor2) + String (" ") ; //escribir

En esta sección utilizamos un condicional que si el archivo está disponible mostramos los datos que almacena y en caso que no lo esté mostrará un mensaje que el archivo no está disponible.


// Si el archivo esta disponible escribe
if (dataFile) {
Serial.println(" Dato almacenado: ");
dataFile.println(dataString);
dataFile.close();
// Imprime lo registrado
Serial.println(dataString);
} &amp;nbsp;
// Si no esta almacenado el archivo 
else {
Serial.println("Error abriendo datalog.txt");
} 
}

Mostramos aquí el archivo y el mismo abierto para corroborar que si se está creando y almacena los datos que queríamos. La ultima imagen demuestra el error que marcaria si la microSD no se detecta o no esta conectada.

Archivo creado

Archivo obtenido del datalogger

Datos obtenidos de datalogger

Datos obtenidos de datalogger

 

error serial

Error de datalogger

La idea de este tutorial es aprender a utilizar el módulo SD y aprovechar de sus funciones como datalogger y almacenar datos de algún dispositivo lo cual nos ayuda a lograr a utilizarlos en algún otro proceso o solo realizar un respaldo de los datos, esperamos que se de gran ayuda este tutorial no dudes preguntar si surgen dudas.

 

Codigo completo

 
#include <SPI.h>
#include <DHT11.h>
#include <SD.h>

const int chipSelect = 10; // sd
int pin=2; //DHT
DHT11 dht11(pin);
void setup()
{
//Comunicacion
Serial.begin(9600);
while (!Serial) {
; 
}
Serial.println("HeTPro");
Serial.print("Iniciando SD...");
//Inicializamos la sd 
pinMode(10, OUTPUT);
// verifica si hay SD
if (!SD.begin(chipSelect)) {
Serial.println("Falla en tarjeta, o no insertada");
return;
}
Serial.println("SD inicializada");
Serial.println("Creando archivo...");
}
void loop()
{
//Hacemos una cadena para la union de datos
String dataString = "";
//Programa de sensor
int err;
float temp, hum;
if((err=dht11.read(hum, temp))==0)
{
Serial.print("Temperatura: ");
Serial.print(temp);
Serial.print(" Humedad: ");
Serial.print(hum);
Serial.println();
}
else
{
Serial.println();
Serial.print("Error Num :");
Serial.print(err);
Serial.println();
}
delay(1000); 
// Abre al archivo 
// Cierra si es que hay uno abierto
File dataFile = SD.open("datalog.txt", FILE_WRITE); //nombre de archivo
int sensor = temp; //Declara para almacenar
int sensor2 = hum; //Declara para almacenar
dataString += (" ") ; 
dataString += String (" Temperatura&amp;nbsp; ") + String(sensor) + String (" C") ; //escribir
dataString += String (" Humedad ") + String(sensor2) + String (" "); //escribir
// Si el archivo esta disponible escribe
if (dataFile) {
Serial.println(" Dato almacenado: ");
dataFile.println(dataString);
dataFile.close();
// Imprime lo registrado
Serial.println(dataString);
} &amp;nbsp;
// Si no esta almacenado el archivo 
else {
Serial.println("Error abriendo datalog.txt");
} 
}



One Response

  1. Arturo Llanas junio 28, 2017

Escríbenos tus dudas o comentarios