Bridge - Datalogger

Este ejemplo muestra cómo ingresar los datos de tres sensores analógicos en una tarjeta SD o en un pen-drive USB utilizando la biblioteca Bridge. La memoria no está conectada al microcontrolador, pero si al AR9331, por lo que se debe utilizar Bridge.

Preparar la memoria mediante la creación de una carpeta vacía en el directorio raíz denominado "Arduino". Cuando OpenWrt-Yun encuentra esta carpeta en un dispositivo de almacenamiento conectado, se crea un enlace a la memoria en la ruta "/ mnt / sd".

Puede quitar lel pen-drive mientras que Linux y el programa se están ejecutando, pero tenga cuidado de no retirarla mientras se escriben datos en la tarjeta.

Hardware necesario

Placa o escudo Yun 
Tarjeta micro-SD o pen-driver
Tres sensores analógicos conectados a los pines A0, A1 y A2


Circuito

No hay circuito para este ejemplo.





Código

Incluir el encabezado del archivo IO, para la comunicación con la tarjeta SD.


#include <FileIO.h>

En setup (), inicializar Bridge, la comunicación serie y sistema de archivos (para la comunicación con el sistema 
de archivos OpenWrt-Yun). Esperar una conexión serie activa antes de iniciar el resto del programa.


void setup() {
  // Initializa Bridge y el puerto serie
  Bridge.begin();
  Serial.begin(9600);
  FileSystem.begin();

  while (!SerialUSB); // espera a cque el puerto serie se conecte.
  SerialUSB.println("Registro de datos\n");
}
En loop(), cree una cadena que comienza con una marca de tiempo para organizar los datos que se van a registrar. 
Vamos a crear la función getTimestamp () a continuación.

 String dataString;
  dataString += getTimeStamp();
  dataString += " = ";
Leer los datos de los sensores y añadirlos a la cadena, separando los valores con una coma:
for (int analogPin = 0; analogPin < 3; analogPin++) {
    int sensor = analogRead(analogPin);
    dataString += String(sensor);
    if (analogPin < 2) {
      dataString += ","; 
    }
  }

Abra el archivo en el que va a escribir los datos usando un objeto File y FileSystem.open (). Con el modificador 
FILE_APPEND, se puede escribir información en el final del archivo. Si ya no existe el archivo, se creará. En este 
caso, va a crear y escribir en un archivo en el directorio raíz de la tarjeta SD llamado "datalog.txt".


File dataFile = FileSystem.open("/mnt/sd/datalog.txt", FILE_APPEND);

Si el archivo se abre correctamente, escriba la cadena en el mismo, cierre el archivo, e imprima la información en el monitor serie.


if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    // imprimir al puerto serie también:
    SerialUSB.println(dataString);
  }

Si hay un problema al abrir el archivo, se envía un error al monitor serie:


else {
    SerialUSB.println("Error abriendo datalog.txt");
  }

Por último, escriba la función getTimestamp () para recuperar el tiempo que se leyó anteriormente. Se devuelve una cadena. En primer lugar, crear una cadena para mantener la hora actual. También vamos a crear una instancia de Process llamado "time". iniciar el proceso y llamar a la aplicación "date". "date" es una utilidad de línea de comandos que devuelve la fecha actual y la hora. Usando time.addParameter (), deberá especificar los parámetros D y T, que devolverá la fecha (dd / mm / aa), y la hora actual (hh: mm: ss). Ejecutar el proceso y leer el resultado en la cadena.


String getTimeStamp() {
  String result;
  Process time;
  time.begin("date");
  time.addParameter("+%D-%T");  
  time.run(); 
  while (time.available() > 0) {
    char c = time.read();
    if (c != '\n') {
      result += c;
    }
  }

  return result;
}

Código del programa completo:



// Registrador de datos en tarjeta SD 

// En este ejemplo se muestra cómo ingresar los datos de tres
// sensores analógicos en una tarjeta SD montada en el Yún101 / YunShield / Yun 
// usando la biblioteca Bridge. 

// Circuito: 
// 3 Sensores analógicos en los pines analógicos 0, 1 y 2
// Tarjeta SD conectada al ranura para tarjetas SD de la Yún101 / YunShield / Yun 

// Prepare su tarjeta SD, cree una carpeta vacía en la raíz SD 
// llamada "Arduino". Esto asegurará que el Yun creará un 
// enlace a la SD con la ruta "/ mnt / sd". 

// Puede extraer la tarjeta SD, mientras que Linux y el programa 
// se están ejecutando, pero tenga cuidado de no quitarla 
// mientras el sistema está escribiendo en ella. 
//  creado el24 de Noviembre de 2010 
// modificado el 9 de Abril de 2012 por Tom Igoe 
// adaptado a la biblioteca Bridge Yun el 20 de Junio de 2013 
// por Federico Vanzati modificado el 21 de Junio de 2013 por 
// Tom Igoe 

// Este código es de dominio público.
// http://www.arduino.cc/en/Tutorial/YunDatalogger

#include <FileIO.h>

void setup() {
  // Initializa Bridge y el puerto serie
  Bridge.begin();
  Serial.begin(9600);
  FileSystem.begin();

  while (!SerialUSB); // espera a cque el puerto serie se conecte.
  SerialUSB.println("Registro de datos\n");
}

void loop() {
  // hace una cadena que comienza con una marca de tiempo para el 
  / montaje de los datos para iniciar la sesión:
  String dataString;
  dataString += getTimeStamp();
  dataString += " = ";

  // lee tres sensores y los anexa a la cadena:
  for (int analogPin = 0; analogPin < 3; analogPin++) {
    int sensor = analogRead(analogPin);
    dataString += String(sensor);
    if (analogPin < 2) {
      dataString += ",";  // separa los valores con una coma
    }
  }

// Abre el archivo. Tenga en cuenta que sólo un archivo puede ser abierto a la vez, 
// así que hay que cerrar éste antes de abrir otro. 
// El FileSystem de la  tarjeta montado como sigue 
"/ mnt /FileSystem1"
  File dataFile = FileSystem.open("/mnt/sd/datalog.txt", FILE_APPEND);

  // si el archivo está disponible, escribir en el:
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    // imprimir al puerto serie también:
    SerialUSB.println(dataString);
  }
  // Si el archivo no está abierto, aparecerá un error:
  else {
    SerialUSB.println("Error abriendo datalog.txt");
  }

  delay(15000);

}

// Esta función devuelve una cadena con la fecha y hora
String getTimeStamp() {
  String result;
  Process time;
  // Fecha es una utilidad de línea de comandos para obtener la fecha y la hora 
  // en diferentes formatos en función del parámetro adicional
  time.begin("date");
  time.addParameter("+%D-%T");  // parámetros: D para la fecha completa dd / mm / aa
  //  T para la hora hh:mm:ss
  time.run();  // ejecuta el comando

  // lee la salida del comando
  while (time.available() > 0) {
    char c = time.read();
    if (c != '\n') {
      result += c;
    }
  }

  return result;
}



No hay comentarios:

Publicar un comentario