Datalogger analógico en tarjeta SD

18 de enero de 2019 por
Datalogger analógico en tarjeta SD
Bernat Garcia

Introducción

En este post veremos cómo utilizar un M-Duino 21+ como registrador de datos analógico. Los datos analógicos se recopilarán de un potenciómetro y se almacenarán en la tarjeta SD interna del M-Duino 21+. Aparte de eso, también usaremos la biblioteca Defiltro para filtrar el valor analógico tomando algunas muestras.

Requisitos

Ethernet PLC: Ethernet PLC 

Filter Library:  Filter Library  

Industrial Shields boards:  Cómo utilizar los pines de mapeo de las placas de Industrial Shields 

Una tarjeta SD

Descripción y conexiones

En primer lugar vamos a insertar la tarjeta SD en el M-Duino y nos aseguraremos de que esté configurado correctamente. Echa un vistazo a este post para asegurarte de que has conectado bien la tarjeta SD y los interruptores M-Duino colocados correctamente: Cómo conectar una tarjeta SD a un PLC Ethernet de Industrial Shields 

El conmutador SD/Q2.0 debe colocarse en la posición OFF y la arquitectura del sistema de archivos de la tarjeta SD será FAT32 o FAT16.

La conexión es muy simple. El potenciómetro está conectado a la I0.12 y es la alimentación suministrada por 5V.  Por lo tanto, el controlador Arduino recibirá un valor entre 0-5V y será interpretado por ADC como un valor entre 0 a 512. Recuerde que la escala completa de las unidades de la familia M-Duino está entre 0-10V o 0-1024 para el ADC. 


Software

Este sketch nos permite realizar lecturas analógicas del potenciómetro. La Librería Filter.h tomará 5 muestras y hará la media aritmética cada 10ms. Estos parámetros se pueden configurar en la inicialización del AnalogFilter.
Cada 3 segundos el valor filtrado del potenciómetro se mostrará en el monitor de serie y se almacenará en la tarjeta SD. 

Echa un vistazo al video que se muestra a continuación para ver los resultados

/*

   Copyright (c) 2018 Boot&Work Corp., S.L. All rights reserved


Este programa es software libre: puedes redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General Reducida de GNU publicada por la Fundación para el Software Libre, ya sea la versión 3 de la Licencia, o (a su elección) cualquier versión posterior.

Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; ni siquiera la garantía implícita de COMERCIALIZACIÓN o ADECUACIÓN A UN PROPÓSITO PARTICULAR.  Consulta la Licencia Pública General Reducida de GNU para más detalles.

Deberías haber recibido una copia de la Licencia Pública General Reducida de GNU junto con este programa.  Si no es así, consulta <http://www.gnu.org/licenses/>.

 */


////////////////////////////////////////////////////////////////////////////////////////////////////

#include <Filter.h>

#include <SD.h>


Sd2Card card;

SdVolume volume;


AnalogFilter<5, 2> aFilter;


//En este ejemplo, el tiempo de muestreo es de 2ms y el número de muestras es de
5.


void setup() {

    Serial.begin(9600L);

    Serial.println("microsd started");

   

    // since we're just testing if the card is working!

    if (!SD.begin(53)) {

        Serial.println("Card failed, or not present");

        // don't do anything more:

        while (1);

    }

    Serial.println("card initialized.");

}


/////////////////////////////////////////////////////////////////////////////////////////////////


void loop() {

    int input = analogRead(I0_12);

    int filtered = aFilter.update(input);

    static uint32_t lastPrint = millis();

    if (millis() - lastPrint > 3000) {

        Serial.println(filtered);

        logToSd(filtered);

        lastPrint = millis();

    }

}


////////////////////////////////////////////////////////////////////////////////////////////////


void logToSd(int value){

  // Abrir el archivo. Tenga en cuenta que sólo se puede abrir un archivo a la vez,

  // por lo que hay que cerrar esta antes de abrir otra.

  File dataFile = SD.open("datalog.txt", FILE_WRITE);


  // si el archivo está disponible, escribe en él:

  if (dataFile) {

        dataFile.println(value);

        dataFile.close();

  }

  

  // si el archivo no está abierto, aparece un error:

  else {

        Serial.println("error opening datalog.txt");

  }

}

Buscar en nuestro blog

Datalogger analógico en tarjeta SD
Bernat Garcia 18 de enero de 2019
Compartir

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


Industrial PLC comparison >>>