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
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
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");
}
}
Datalogger analógico en tarjeta SD