jueves, 27 de noviembre de 2014

Módulo Shield Data Logging SD - Reseña


En ECDA vuelven los tutoriales pero esta vez con un nuevo formato. Mientras nuesta nueva plataforma se pone a punto, hemos decido modificar un poco el formato de nuestros tutoriales. 

Hoy vamos a hacer una reseña sobre una Shield Data Logging SD cedida por nuestra tienda colaboradora Electrohobby. Quizás estemos acostumbrados a ver este tipo de shields de otra manera pero bien es cierto que la que nos proporciona nuestro compañero de Electrohobby no tiene desperdicio. 

Echemos un ojo de cerca a esta shield:

La shield nos ofrece muchas posibilidades y combinaciones distintas. Partimos de que nuestra shield viene de pase con todos los pines soldados y éste ya es el primer quebradero de cabeza que nos ahorramos.

Además, gracias al perfecto acoplamiento con nuestro Arduino UNO, consigue mantener ese grado de familiaridad para que no implique una barrera a la hora de programarlo.

La shield dispone de un espacio protoboard para ejecutar tus proyectos permanentes, muy útil para las aplicaciones que después veremos. La ranura de nuestra tarjeta de memoria es SD y por tanto eso nos proporciona versatilidad a la hora de decidir si queremos usar una micro SD + Adaptador o sencillamente una SD convencional. La shield lleva un pila de botón de 3V para disponer de una alimentación constante.

Por último en este primer apartado recomendaros esta Shield en Electrohobby dado que, como todos sus productos, funcionan a la perfección, tienen buenos precios y están adaptados para que su uso sea sencillo.

Hoy, con esta reseña queremos enseñaros cómo funciona este módulo y qué aplicaciones puede tener. Así pues, realizaremos un tutorial sencillo dónde almacenaremos datos de Luz en nuestra SD mediante un sensor LDR (ver tutoriales sobre este sensor)

¿Qué necesitaremos para este tutorial?
- Arduino UNO
- Shield Data Logging SD de Electrohobby
- Una resistencia de 1K
- Cables
- Un sensor LDR
- Protoboard

Os enseñaremos en primer lugar el esquema eléctrico:


Dado que la shield que vamos a usar hoy es bastante nueva en los repositorios de componentes de nuestro programa de esquemas.

Así pues hemos decido usar un Arduino UNO por su parecido con nuestro shield SD y así poder acercar un poco más los periféricos como este al alcance de cualquier usuario.




De todas formas queremos ir por pasos en el montaje para poder explicar las conexiones.

En la imagen de la izquierda tenéis todo lo necesario para realizar nuestro tutorial.
Tranquilos, la pila de botón también viene con nuestra shield.



Nuestro primer paso será acoplar nuestra shield con nuestro Arduino UNO. Sabéis que la Shield dispone del mismo número de pines que las entradas que tiene nuestro Arduino.

Una vez ensamblada, conectaremos nuestros 3.3V de la Shield a nuestra línea de la protoboard para facilitarnos el montaje.

La siguiente conexión será AREF con 3.3V. Realmente para nuestro tutorial este paso no haría falta pero si decidimos que en vez de medir luz, queremos medir temperatura esta conexión nos facilitará poder definir la tensión constante para realizar nuestros cálculos para el cambio de unidades.




Seguidamente, conectaremos nuestro LDR y nuestra resistencia como muestra nuestro esquema eléctrico del principio. Sabemos, que nuestro LDR necesita estar conectado con la tensión, para ello el cable rojo lo conectaremos con la pata izquierda de nuestro sensor de luz. De nuestro sensor también deberá salir un cable para poder leer los datos. El cable naranja conectará con nuestro puerto A0. Por último conectaremos después de la resistencia el cable negro que irá conectado a GND.

Hemos acabado con las conexiones, ahora vayamos a por el código.

// Incluimos las librerias necesarias para trabajar con SD
#include <SPI.h>
#include <SD.h>
int photocellPin = A0;     // El sensor lleva una resistencia de 1K
int photocellReading;  // Lectura analogica del sensor

#define redLEDpin 2
#define greenLEDpin 3

// En nuestra shield el pin SD es el 10.
const int chipSelect = 10;

void setup()
{
 // Abrimos el Puerto de Serie para monitorizar el movimiento de nuestro sensor
  Serial.begin(9600);
   while (!Serial) {
    ; 
  }

  pinMode(redLEDpin, OUTPUT);
  pinMode(greenLEDpin, OUTPUT);
  
  #if WAIT_TO_START
  Serial.println("Type any character to start");
  while (!Serial.available());
#endif //WAIT_TO_START

  Serial.print("Initializing SD card...");
  // Comprobamos que la SD esta preparada para realizar la copia de datos:
  pinMode(10, OUTPUT);
  
  // visualiza si existe SD y si esta bien inicializada:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // Si responde con fallo el programa no haria nada mas:
    return;
  }
  Serial.println("card initialized.");
}

void loop()
{

 photocellReading = analogRead(photocellPin);  
  
  Serial.print("Lectura de Luz = ");
  Serial.print(photocellReading);     // Leemos datos en el pin
  
  // Categorias
  if (photocellReading < 10) {
    Serial.println(" - Oscuro");
  } else if (photocellReading < 200) {
    Serial.println(" - Poco Luminoso");
  } else if (photocellReading < 500) {
    Serial.println(" - Luminoso");
  } else if (photocellReading < 800) {
    Serial.println(" - Muy Luminoso");
  } else {
    Serial.println(" - Demasiado Luminoso");
  }
  delay(1000);
 


  // Abrimos el fichero. Nota: solo se puede abrir un fichero a la vez. Para abrir un segundo fichero hay que cerrar el anterior.
  File dataFile = SD.open("datalog.txt", FILE_WRITE);

  // si el fichero esta disponible escribir en el:
  if (dataFile) {
    dataFile.println(photocellReading);
    dataFile.close();
    // escribe tambien en el Serial:
    Serial.println(photocellReading);
  }  
  // Si el fichero no se ha abierto, lanzar un mensaje de error:
  else {
    Serial.println("error opening datalog.txt");
  } 
    digitalWrite(redLEDpin, HIGH);
  dataFile.flush();
  digitalWrite(redLEDpin, LOW);
}


Una vez hemos acabado con el código, lo hemos verificado, compilado y subido a nuestro Arduino UNO, debemos proceder a abrir el Monitor de Serie. Una vez abierto veremos como se produce la inicialización de la SD y veremos un muestreo de nuestro sensor de Luz. Enhorabuena, tu SD ya está almacenando datos!

Cuando haya transcurrido el tiempo necesario para nuestro experimento, desconectamos nuestro Arduino y extraemos nuestra SD de la Shield. Ahora la montamos en el ordenador y aparecerá un fichero con extensión .txt como el siguiente:

Ahora, para que estos datos me puedan resultar útiles los trasladaremos a una hoja de excel. Procederemos a abrir Excel y seguiremos la secuencia Archivo>Importar.

Tras seguir el asistente de importación de archivos podremos trabajar con nuestros datos creando gráficas, operando con ellos buscando máximos o mínimos...etc.


¿Qué utilidad tiene esto?

Por ejemplo en nuestro caso, queremos automatizar las luces de nuestra casa. Mediante este sistema podemos recoger la evolución de la cantidad de luz y así tener un muestreo para hacer más fiable esa automatización. 

Otros ejemplos podrían ser: Uso de lector de temperaturas para saber si un ventilador de un ordenador o impresora 3D está refrigerando bien.

Y hemos llegado al final de nuestra Reseña-Tutorial de hoy. De nuevo gracias a Electrohobby por el componente y gracias a todos vosotros que seguís ahí haciendo que el Cajón de Arduino cada vez cuente con más seguidores.

Un saludo y como siempre, esperamos vuestras dudas e inquietudes en los comentarios de abajo.

C.