Seleccionar página

Exportar Datos De Arduino A Excel.

Exportar datos de Arduino a Excel puede ser tan simple como pasarlos a una tarjeta SD y luego importarla en Excel. Yo mismo hice un post sobre esto. Si te interesa lo tienes aquí. Pero ¿Qué pasa si lo que necesitas es enviar los datos de Arduino a Excel en tiempo real? Lo cierto es que la cosa se complica un poco.

La mayoría de las veces lo que la gente suele hacer es utilizar programas externos para gestionar el envío. Estos programas son en muchas ocasiones de pago y, además, no dejas de tener un elemento más trabajando (a parte de tener que configurarlo).

La idea de este post es mostrarte que no necesitas todo eso para mandar información de Arduino a Excel. Pueden entenderse bien ellos solos. smile

La verdad es que no me ha resultado trivial enviar datos de Arduino a Excel. He tenido que dedicarle bastantes horas: aprender el lenguaje de programación VBA, encontrar una forma de comunicar Excel con los puertos serie… y, aun así, no te diré que estoy del todo satisfecho.

En cualquier caso, tú no tienes que preocuparte por todo esto. Te voy a proporcionar los códigos necesarios, así como la información que necesitas para adaptarlos a tu propio proyecto y un Excel ya hecho. ¡Sin complicaciones! smile

Cómo Configurar Arduino Para Mandar Información A Excel.

Vamos a empezar con la parte sencilla. Como todo lo relativo a Arduino, enviar datos a Excel es tan simple como utilizar la función adecuada. En este caso, la función Serial.print().

La información que Excel va a ser capaz de leer por el puerto USB son cadenas de caracteres. Es por eso que tendrás que transformar tu información en “Strings” antes de enviarla desde Arduino a Excel.

Como supongo que lo que más te puede interesar es leer el valor de un sensor y mandárselo a Excel, te voy a explicar también como transformar el valor.

Código Para Mandar El Valor De Un Sensor De Arduino A Excel.

El código es el siguiente:

/*    Envío de datos a Excel en tiempo real     */
/*                educachip.com                 */

int V_Previo;
float Datos;
char Se_Envia[10];

void setup() {
Serial.begin(9600); //Se inicia la comunicación serie a 9600 baudios.
}

void loop() {
//Se leen voltajes en la entrada analógica A0.
V_Previo = analogRead(A0);
//Se convierte la entrada tipo int en float en función de la resolución de Arduino.
Datos = V_Previo * (5.0 / 1023.0);
//Función que permite la conversión de float a String. Los datos se almacenan en Se_Envia.
//char* dtostrf (double _val, signed char _width, unsigned char _prec, char* _s)
dtostrf(Datos, 5 , 3 , Se_Envia);
//Se envían los datos por el puerto serie.
Serial.print(Se_Envia);
//Se da tiempo a que Excel capture los datos.
delay(30);
}

Si te fijas, los valores de tu sensor leídos por Arduino tienen formato “int”. Esos valores se transforman en tipo “float” utilizando una pequeña fórmula (que seguramente hayas visto más de una vez). Una vez tienes los valores en el formato “float”, la función dtostrf() se encarga de transformar el valor en una cadena de caracteres.

En este caso, los parámetros de la función dtostrf() están fijados para que se almacenen 5 valores, con una precisión de 3 decimales. Considerando el punto “.” para separar enteros de decimales, tu valor se enviará de Arduino a Excel con 4 dígitos.

Si tu sensor te proporciona también números negativos, tendrás que ajustar la función. Sea así o no, te recomiendo que le eches un vistazo.

Una vez tengas los datos listos para enviar, basta con que utilices un Serial.print() y un delay() para darle tiempo a Excel a coger la información.

Como puedes ver, muy facilito todo. Vamos ahora con Excel. smile

Cómo Configurar Excel Para Recibir Información Por El USB.

El problema está en que Excel no está preparado para recibir información por el USB. Hay que enseñarle. tongue

Para enseñar a Excel cómo recibir información por el USB hay que comunicarlo con Windows. Para enseñar a Excel cómo comunicarse con Windows hay que programarlo. Por último, para programar Excel hay que utilizar Macros.

 

Logotipo de Excel

Las Macros son básicamente programas escritos en VBA cuyas instrucciones pueden ser ejecutadas por Excel. Si te gusta trabajar con Excel, te recomiendo encarecidamente que le des una oportunidad a las Macros. Las Macros llevan a Excel al siguiente nivel, permitiéndote hacer cosas que ni te imaginas. ¡Hay un sin fin de posibilidades!

Volviendo al tema, a nosotros lo que nos interesa es enviar datos de Arduino a Excel. Para ello he utilizado una librería creada por David M. Hitchner y adaptada para trabajar con 64bits por Hal Evensen. El trabajo duro de verdad es el suyo, así que no puedo más que mostrarles mi gratitud a estos auténticos profesionales. Lo único que yo he hecho es utilizar su trabajo (al cuál, por cierto, se le puede sacar mucho más partido del que le he sacado yo).

… Y ya que estoy de agradecimientos, tengo que decir que los chicos de Arduino.cc también han puesto su granito de arena a la hora de ayudarme con esto de enviar datos de Arduino a Excel. Un usuario muy activo del foro de nick Lucario448 me ayudó ver dónde estaba el error de uno de los códigos que estuve probando… Así que si lo veis por ahí ¡dadle un saludo de mi parte! smile

Cómo Poner La Librería En Una Hoja De Excel Habilitada Para Macros.

Como te acabo de comentar, este pequeño trabajo de enviar información de Arduino a Excel se basa en el gran trabajo de David M. Hitchner. El primer paso será añadir su librería a tu libro de Excel.

Para incorporar la librería a tu hoja de Excel debes descargártela. Para ello tienes dos opciones:

  1. Descargarte la librería desde la web de Hal Evensen: Ésta debería ser tu opción principal. Aunque solo sea por ver su trabajo y proporcionarle algo más de tráfico a su web.
  2. Si no te manejas bien con el inglés, te dejo el archivo aquí: vba_com_port. Me gustaría que utilizases esta opción solo si no te ves capaz de manejarte en su web. Recuerda que el trabajo que vas a utilizar es suyo.

Una vez te descargues el archivo, verás que se trata de un documento con extensión “.bas”. En él encontrarás implementadas las funciones que se utilizarán en el proyecto (más unos cuantos añadidos). Para agregarlas en tu libro de Excel basta con que vayas a la sección Desarrollador > Importar y selecciones el archivo “.bas”. A partir de ese momento podrás ver la información dándole al botón Visual Basic.

Librerías Puerto Serie Arduino a Excel

Si abres la librería verás todas las funciones que tiene implementadas. Si te fijas, verás que dispones de herramientas no solo para enviar datos de Arduino a Excel, sino también para recibirlos.

Originalmente quería hacer un post enseñándote tanto a enviar información de Arduino a Excel como al revés. Ésta librería no solo lo permite, sino que lo deja fácil. Te permite incluso ver el estado de los pines habituales en el envío y recepción de datos por el puerto serie.

El problema está en que estas facilidades que te proporciona la librería no te las proporciona Arduino. Tuve problemas de sincronización. En cualquier caso, no desisto. Cuando solucione los problemas que tengo, te traigo el resultado. Eso sí, de momento me voy a tomar un descanso de puertos serie y de enviar información de Arduino a Excel y de Excel a Arduino. smile

Cómo Implementar Funciones En VBA Para Leer El Puerto USB.

Si has abierto la librería (y sabes algo de VBA), seguramente te habrás dado cuenta de que lo que he hecho para enviar datos de Arduino a Excel es bastante cutre teniendo en cuenta las herramientas disponibles.

Para sincronizar la información he utilizado un simple delay() de Arduino. Todo esto a pesar de que siempre te recomiendo que evites los delay() (puedes ver por qué aquí). Como te he dicho, no era la idea inicial. sad

En el caso de VBA, la cosa está más o menos igual. Entre que no tengo mucha experiencia con el lenguaje de programación y los problemas de sincronización… al final he optado por no complicarme mucho.

Lo que he hecho ha sido asociar funciones a botones de Excel. Si tú tampoco tienes amplios conocimientos de VBA y quieres aplicar el mismo procedimiento que yo, basta con que vayas a la pestaña Desarrollador > Insertar > Controles de ActiveX > Botón de comando. Una vez pulses sobre esa opción, podrás dibujar tu botón.

Cuando tengas el botón dibujado, puedes hacer click derecho sobre él y darle a la opción “Ver Código” para agregarle funciones al botón. Ten en cuenta que para hacer esto tendrás que tener la opción “Modo Diseño” activada. Cuando vayas a enviar información de Arduino a Excel y quieras leerla, tendrás que desactivar este modo.

Crear Botones Para Macros De Arduino a Excel

Qué Funciones Crear Para Leer Los Datos Enviados De Arduino A Excel.

Bueno… primero quiero repetirte que esto de los botones es la opción a la que he recurrido yo. Puedes enviar la información de Arduino a Excel con botones o sin botones. Lo único que tienes que hacer es utilizar las funciones de la librería.

Las funciones que debes utilizar dependen de lo que quieras hacer. Si, como es este ejemplo, solo quieres enviar datos de Arduino a Excel pero no al revés, necesitarás cuatro funciones:

  1. Función para abrir el puerto serie: CommOpen (númerodelpuertoaabrir, “COM”, formatoquetendrálainformación).
  2. Función para cerrar el puerto serie: CommClose(númerodelpuertoacerrar).
  3. Función para capturar la información enviada de Arduino a Excel: CommRead(númerodelpuerto, variableparaguardarlosdatos, númerodecaracteresquesevanaleer).
  4. Función para limpiar la información del puerto antes de enviar más: CommFlus(númerodelpuerto).

Entiendo que todo esto puede bastante complicado si no tienes algo de experiencia con VBA y le dedicas un rato a la librería. No te preocupes, te voy a dar un Excel ya hecho y que funciona con el código de Arduino que te mostré antes.

Libro De Excel Que Lee La Información Enviada De Arduino A Excel.

Seguro que después de tanto rollo como te he soltado estabas deseando que te lo diera hecho. wink

Ya te dije al principio del post que te iba a proporcionar todo lo necesario para enviar datos de Arduino a Excel. Te lo dejo en el link:

leer-datos-arduino-educachip

También te voy a mostrar una imagen para que veas cómo luce el resultado. Espero que te guste.

 

Libro de Excel a Arduino en Tiempo Real

Ésta es mi versión, pero es muy optimizable. Si te animas a mejorarlo y te queda algo bueno, envíamelo y lo publicamos. smile

Información Adicional.

Por si todavía no te has saturado de Excel, te cuento más cosas. smile

Como te he dicho, he tenido bastantes problemas para hacer esto. Te presento este modelo porque es el más estable, pero también el más simplón.

La verdad es que subo este contenido con mal sabor de boca. Tenía muchas y muy buenas ideas sobre cómo mejorar el envío y recepción de datos de Arduino a Excel… La cosa está en que ya le he dedicado demasiado tiempo, tengo otras cosas que hacer y he perdido un poco la motivación. A lo mejor más adelante. smile

Te cuento algunas de las cosas que he probado al intentar gestionar la información de Arduino a Excel… por si quieres mejorar mi proyecto: smile

  • Familiarízate con las funciones Serial.flush() para gestionar el Buffer de Arduino.
  • Utiliza Serial.read() para limpiar el Buffer de Arduino si vas a enviarle información.
  • while(Serial.available()==){} puede serte útil para hacer que Arduino espere a que se le envíe un dato.
  • No olvides que tanto Arduino como Excel tienen que estar trabajando a los mismos baudios.
  • Recuerda cambiar el código del puerto de los botones de Excel para que se ajuste al de tu placa (ID_Puerto). Por defecto es 3.
  • Juega con el valor del delay() si ves que se copia más de un dato por celda o no se copian bien.
  • Modifica la función dtostrf() para que se ajuste al tipo de dato que quieres mandar de Arduino a Excel.
  • La función MsgBox puede serte útil para encontrar errores en el Excel. También la variable estado.
  • Recuerda que primero debes abrir el puerto, luego leer y por último cerrarlo.
  • No leas el puerto hasta que Arduino no le esté enviando información a Excel.
  • Las funciones Left() y Mid() de VBA pueden serte útiles para gestionar las cadenas de caracteres.
  • Analiza el resto de herramientas de la librería. Puede que ahí esté tu solución.
  • La información relativa al envío de señales con RS-232 es bastante similar a lo que estás haciendo. Puede serte útil mirar la teoría.
  • Ten paciencia si no te sale bien a la primera. La clave siempre está en los detalles.

Pues eso ha sido todo sobre cómo enviar datos de Arduino a Excel.

Espero que te haya gustado el post y que disfrutes de tu nuevo Excel. smile

Si te gusta lo que hago, recuerda que puedes compartirlo en las redes sociales con los botones que tienes debajo.

Pregúntame las dudas que te vayan surgiendo e intentaré ayudarte.

Un abrazo, Enrique.

Actualmente me dedico, entre otras cosas, a crear contenidos sobre Arduino y otros dispositivos eléctricos. Me encanta todo lo relacionado con el “Universo Maker”.

Siempre estoy activo en los comentarios. Si tienes cualquier pregunta, no dudes en dejármela en los comentarios. Intentaré responderte lo antes posible… Un abrazo smile

Enrique Romero,

Autor del post.

¿No quieres perderte nada? ¡Suscríbete!

15 Comentarios

  1. Buenas, cuando pongo en el codigo mi puerto COM(COM7) e intento leer los datos que el tiene, excel me dice que el puerto no se puede leer o ya esta abierto

    Responder
    • Buenas Fernando,

      Puede pasarte si el puerto ya estaba abierto. Puedes probar a cerrarlo y volverlo a abrir.

      Un saludo, Enrique.

      Responder
  2. Cordial saludo, estoy tratando de probar el archivo de excel, pero no se como poner que el puerto es el 28 en mi caso, y aparece protegido y no me deja entrar a los macros. Como podría hacerlo?

    Responder
    • Buenas Harold,

      Eso es cosa del Excel. Puede que dependa de tu versión. A mí normalmente me aparece una opción al abrir el archivo para habilitar el modo edición. Si no ves esa opción puedes buscar cómo habilitarla en tu versión (googleando un poco).

      Un saludo, Enrique.

      Responder
  3. estoy usando tu diseño para lectura de un sensor de movimiento solo que se limita solo 100 datos de lectura y requiero aumentar la lectura de datos por menos a 800 podrias ayudarme como resolverlo

    Responder
    • Buenas Julio César,

      Si abres el código de VBA verás un código en el que se establece el número de veces que se repite el ciclo. Puedes cambiarlo directamente ahí.

      Un saludo, Enrique.

      Responder
  4. Hola, antes me había funcionado bien, pero ahora tengo un problema, no lee el puerto del arduino, ni lo abre y ni lo cierra, que puede ser?, ayuda por favor.

    Responder
    • Buenas Víctor,

      La verdad es que no me extraña porque está hecho un poco a lo bruto. La solución más fácil es cerrar el programa y volverlo a abrir. tongue

      Un saludo, Enrique.

      Responder
  5. ahora tengo otro problema,

    estoy leyendo una cadena de valores separados por comas,
    “Temp1,humedad, presion, temp2, Magx,Magy,Magz, Girox, Giroy,Giroz, Acelx, Acely, Acelz, Latitud y Longitud (chr13)”
    quiero leer toda la cadena, pero no siempre me la lee completa, a veces no llega ni al segundo valor
    alguna idea de como leer toda la cadena sin que se corte?

    estoy usando tu fichero de ejemplo.

    Responder
    • Buenas de nuevo,

      Para eso necesitas gestionar los bits de control. Arduino no te deja (hay que hacerlo en AVR).

      Otra opción es que implementes algo tipo: enviar un dato desde Arduino, decir desde Excel que el dato ha llegado, enviar siguiente dato…

      Un saludo, Enrique.

      Responder
  6. hola,

    he tratado de implementar el ejemplo que describes, pero al momento de tratar de importar vba_com_port.bas excel me dice que solo puede importar archivos xml, si lo “fuerzo” para abrir el archivo.bas entonces me marca error en la importacion XML.

    que debo hacer?

    gracias de antemano

    Responder
    • Buenas Felipe,

      Es difícil saber dónde está el problema sin ver paso a paso el procedimiento que sigues. Si puedes acceder al código VBA en Excel, siempre puedes simplemente copiar el contenido de la librería en él.

      Un saludo, Enrique.

      Responder
      • ese ya lo resolvi,
        hay que importar desde dentro del editor de “visual basic” y no en el munu ribon

  7. buenas, he probado el montaje que has escrito, el problema que tengo es que los valores que me pega en excel no son correctos, es como que algunas veces se perdiese y introdujese los valores tan rapido que los superpone .. sabes por que puede ser? GRACIAS

    Responder
    • Buenas Gonzalo,

      Se debe a que no hay un control del flujo de datos. Prueba incrementando el valor del delay() hasta que las lecturas funcionen.

      Un saludo, Enrique.

      Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Cómo Enviar Datos De Arduino A Excel En Tiempo Real was last modified: Diciembre 14th, 2016 by Enrique

¿Me ayudas?

Hey! Espero que te esté gustando el artículo. ¿Me ayudarías compartiéndolo con tus amigos? Un pequeño paso para ti, un gran paso para EducaChip. :) ¡Gracias!