Hojas de cálculo y Arduino

Al trabajar con arduino y los sensores una de la tareas mas recurrentes es poder registrar los valores que se registran para luego hacer algún tipo de análisis con ellos.

Esto resulta extremadamente sencillo si utilizamos un dispositivo que se conecte a la nube, como ESP8266 o el NodeMCU, puesto que con plataformas como thingspeak, es muy fácil, basta agregar algunas lineas de código a nuestro programa y todos los datos que se registren van a la base de datos de thingspeak y luego la podes descargar para analizarlo. Esto lo veremos más adelante en otro articulo.

La cosa cambia si estamos utilizando alguna versión mas modesta de Arduino (en nuestro caso utilizaremos un Arduno Nano) puesto que solo tenemos la salida por puerto serie y de alguna forma tenemos que capturar estos datos.

Para ello hacemos uso de un sencillo programa en Python, que abre el puerto serie, reconoce las columnas y guarda registro a registro en una planilla de calculo.

Puede descargar desde aquí:
https://github.com/gsampallo/serialToExcel

En el arduino tenemos un sencillo programa, que su única tarea es leer el valor del puerto analógico A0 e imprimirlo en el puerto serie. Es el siguiente:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int sensorPin = A0;
int sensorValue = 0;

void setup() {
  Serial.begin(115200);
}

int i = 0;
void loop() {
  sensorValue = analogRead(sensorPin);
  Serial.print(i);
  Serial.print(",");
  Serial.print(sensorValue);
  Serial.println(";");
  i = i + 1;

  delay(10);
}

Se puede encontrar el archivo aquí, como ven es una modificación del ejemplo de Arduino para leer datos analógicos. Lo que se debe tener en cuenta es la forma en la que se envían los campos en el puerto serie, utilizar algún carácter para separar los campos, en el ejemplo utilizamos la coma.

Dentro del repositorio podemos encontrar un archivo llamado example.py que contiene un sencillo ejemplo de como utilizar la clase para guardar en un excel:


1
2
3
4
5
6
7
8
9
10
from serialToExcel import SerialToExcel

serialToExcel = SerialToExcel("COM36",115200)
serialToExcel.setColumns(["Nro Lectura","Valor"])
serialToExcel.setRecordsNumber(10)


serialToExcel.readPort()

serialToExcel.writeFile("archivo1.xls")

Como se puede ver es bastante sencillo, podemos dividirlo en tres etapas que se producen luego de importar la libreria:

  1. Se instancia la clase SerialToExcel, pasando como parámetros el puerto y la velocidad. También indicamos cuales son los nombres de las columnas y la cantidad de registros que deseamos guardar.
  2. readPort() comienza la lectura de datos desde el dispositivo. Hay que tener en cuenta que el proceso puede demorar, dependiendo de cada cuanto tiempo el dispositivo envie datos y la cantidad de registros que deseamos guardar.
  3. writeFile() guarda la planilla de calculo en el archivo cuyo nombre pasamos como argumento a la función.

El programa aún tiene mucho por mejorar, pero para realizar registros de datos es totalmente funcional.