You are on page 1of 5

http://www.educachip.

com/enviar-datos-arduino-a-excel-tiempo-real/
Cmo Enviar Datos De Arduino A Excel En Tiempo
Real
Si ests leyendo esto seguramente no haga falta que te hable de las bondades de Excel. A la
hora de trabajar con datos, Excel te proporciona una gran versatilidad y mejor presentacin de
la informacin. Es por eso que en este post te voy a ensear cmo enviar datos de Arduino
a Excel en tiempo real.
Contenidos de este post [ocultar]
1 Cmo Enviar Datos De Arduino A Excel En Tiempo Real
o 1.1 Exportar Datos De Arduino A Excel.
1.1.1 Cmo Configurar Arduino Para Mandar Informacin A Excel.
1.1.1.1 Cdigo Para Mandar El Valor De Un Sensor De Arduino A

Excel.
1.1.2 Cmo Configurar Excel Para Recibir Informacin Por El USB.
1.1.2.1 Cmo Poner La Librera En Una Hoja De Excel Habilitada

Para Macros.
1.1.2.2 Cmo Implementar Funciones En VBA Para Leer El Puerto

USB.
1.1.2.3 Qu Funciones Crear Para Leer Los Datos Enviados De

Arduino A Excel.
1.1.3 Libro De Excel Que Lee La Informacin Enviada De Arduino A Excel.
1.1.4 Informacin Adicional.
1.1.4.1 19 Comentarios

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 mayora de las veces lo que la gente suele hacer es utilizar programas externos para
gestionar el envo. Estos programas son en muchas ocasiones de pago y, adems, no dejas
de tener un elemento ms trabajando (a parte de tener que configurarlo).
La idea de este post es mostrarte que no necesitas todo eso para mandar informacin
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 programacin 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
cdigos necesarios, as como la informacin que necesitas para adaptarlos a tu propio
proyecto y un Excel ya hecho. Sin complicaciones! smile
Cmo Configurar Arduino Para Mandar Informacin 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 funcin adecuada. En este caso, la funcin Serial.print().
La informacin que Excel va a ser capaz de leer por el puerto USB son cadenas de
caracteres. Es por eso que tendrs que transformar tu informacin en Strings antes de
enviarla desde Arduino a Excel.
Como supongo que lo que ms te puede interesar es leer el valor de un sensor y mandrselo
a Excel, te voy a explicar tambin como transformar el valor.
Cdigo Para Mandar El Valor De Un Sensor De Arduino A Excel.
El cdigo es el siguiente:
/* Envo 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 comunicacin serie a 9600 baudios.
}
void loop() {
//Se leen voltajes en la entrada analgica A0.
V_Previo = analogRead(A0);
//Se convierte la entrada tipo int en float en funcin de la resolucin de Arduino.
Datos = V_Previo * (5.0 / 1023.0);
//Funcin que permite la conversin 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 envan 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 ledos por Arduino tienen formato int. Esos valores se
transforman en tipo float utilizando una pequea frmula (que seguramente hayas visto ms
de una vez). Una vez tienes los valores en el formato float, la funcin dtostrf() se encarga de
transformar el valor en una cadena de caracteres.
En este caso, los parmetros de la funcin dtostrf() estn fijados para que se almacenen 5
valores, con una precisin de 3 decimales. Considerando el punto . para separar enteros de
decimales, tu valor se enviar de Arduino a Excel con 4 dgitos.
Si tu sensor te proporciona tambin nmeros negativos, tendrs que ajustar la funcin. 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 informacin.
Como puedes ver, muy facilito todo. Vamos ahora con Excel. smile

Cmo Configurar Excel Para Recibir Informacin Por El


USB.
El problema est en que Excel no est preparado para recibir informacin por el USB. Hay
que ensearle. tongue
Para ensear a Excel cmo recibir informacin por el USB hay que comunicarlo con Windows.
Para ensear a Excel cmo comunicarse con Windows hay que programarlo. Por ltimo, para
programar Excel hay que utilizar Macros.

Las Macros son bsicamente 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,
permitindote 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 librera 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 ms que mostrarles
mi gratitud a estos autnticos profesionales. Lo nico que yo he hecho es utilizar su trabajo (al
cul, por cierto, se le puede sacar mucho ms partido del que le he sacado yo).
Y ya que estoy de agradecimientos, tengo que decir que los chicos de Arduino.cc tambin
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 dnde estaba el error
de uno de los cdigos que estuve probando As que si lo veis por ah dadle un saludo de mi
parte! smile
Cmo Poner La Librera En Una Hoja De Excel Habilitada Para Macros.
Como te acabo de comentar, este pequeo trabajo de enviar informacin de Arduino a Excel
se basa en el gran trabajo de David M. Hitchner. El primer paso ser aadir su librera a tu
libro de Excel.
Para incorporar la librera a tu hoja de Excel debes descargrtela. Para ello tienes dos
opciones:
1. Descargarte la librera desde la web de Hal Evensen: sta debera ser tu opcin
principal. Aunque solo sea por ver su trabajo y proporcionarle algo ms de trfico a su web.
2. Si no te manejas bien con el ingls, te dejo el archivo aqu: vba_com_port. Me gustara
que utilizases esta opcin 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, vers que se trata de un documento con extensin .bas.
En l encontrars implementadas las funciones que se utilizarn en el proyecto (ms unos
cuantos aadidos). Para agregarlas en tu libro de Excel basta con que vayas a la seccin
Desarrollador > Importar y selecciones el archivo .bas. A partir de ese momento
podrs ver la informacin dndole al botn Visual Basic.

Si abres la librera vers todas las funciones que tiene implementadas. Si te fijas, vers
que dispones de herramientas no solo para enviar datos de Arduino a Excel, sino
tambin para recibirlos.
Originalmente quera hacer un post ensendote tanto a enviar informacin de Arduino a
Excel como al revs. sta librera no solo lo permite, sino que lo deja fcil. Te permite incluso
ver el estado de los pines habituales en el envo y recepcin de datos por el puerto serie.
El problema est en que estas facilidades que te proporciona la librera no te las proporciona
Arduino. Tuve problemas de sincronizacin. 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 informacin de Arduino a Excel y de Excel a
Arduino. smile
Cmo Implementar Funciones En VBA Para Leer El Puerto USB.
Si has abierto la librera (y sabes algo de VBA), seguramente te habrs 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 informacin 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 ms o menos igual. Entre que no tengo mucha experiencia
con el lenguaje de programacin y los problemas de sincronizacin 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 pestaa Desarrollador > Insertar > Controles de ActiveX > Botn de comando. Una
vez pulses sobre esa opcin, podrs dibujar tu botn.
Cuando tengas el botn dibujado, puedes hacer click derecho sobre l y darle a la opcin Ver
Cdigo para agregarle funciones al botn. Ten en cuenta que para hacer esto tendrs que
tener la opcin Modo Diseo activada. Cuando vayas a enviar informacin de Arduino a
Excel y quieras leerla, tendrs que desactivar este modo.

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


Bueno primero quiero repetirte que esto de los botones es la opcin a la que he recurrido
yo. Puedes enviar la informacin de Arduino a Excel con botones o sin botones. Lo
nico que tienes que hacer es utilizar las funciones de la librera.
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 revs, necesitars cuatro funciones:
1. Funcin para abrir el puerto serie: CommOpen (nmerodelpuertoaabrir, COM,
formatoquetendrlainformacin).
2. Funcin para cerrar el puerto serie: CommClose(nmerodelpuertoacerrar).
3. Funcin para capturar la informacin enviada de Arduino a Excel:
CommRead(nmerodelpuerto, variableparaguardarlosdatos,
nmerodecaracteresquesevanaleer).
4. Funcin para limpiar la informacin del puerto antes de enviar ms:
CommFlus(nmerodelpuerto).
Entiendo que todo esto puede bastante complicado si no tienes algo de experiencia con VBA y
le dedicas un rato a la librera. No te preocupes, te voy a dar un Excel ya hecho y que
funciona con el cdigo de Arduino que te mostr antes.

Libro De Excel Que Lee La Informacin Enviada De Arduino


A Excel.
Seguro que despus 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
Tambin te voy a mostrar una imagen para que veas cmo luce el resultado. Espero que te
guste.
sta es mi versin, pero es muy optimizable. Si te animas a mejorarlo y te queda algo bueno,
envamelo y lo publicamos. smile

Informacin Adicional.
Por si todava no te has saturado de Excel, te cuento ms cosas. smile
Como te he dicho, he tenido bastantes problemas para hacer esto. Te presento este modelo
porque es el ms estable, pero tambin el ms simpln.
La verdad es que subo este contenido con mal sabor de boca. Tena muchas y muy buenas
ideas sobre cmo mejorar el envo y recepcin 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 motivacin. A lo mejor ms adelante. smile
Te cuento algunas de las cosas que he probado al intentar gestionar la informacin de Arduino
a Excel por si quieres mejorar mi proyecto: smile
Familiarzate con las funciones Serial.flush() para gestionar el Buffer de Arduino.
Utiliza Serial.read() para limpiar el Buffer de Arduino si vas a enviarle informacin.
while(Serial.available()==){} puede serte til para hacer que Arduino espere a que se le
enve un dato.
No olvides que tanto Arduino como Excel tienen que estar trabajando a los mismos
baudios.
Recuerda cambiar el cdigo 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 ms de un dato por celda o no se
copian bien.
Modifica la funcin dtostrf() para que se ajuste al tipo de dato que quieres mandar de
Arduino a Excel.
La funcin MsgBox puede serte til para encontrar errores en el Excel. Tambin 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 informacin 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 librera. Puede que ah est tu solucin.
La informacin relativa al envo de seales con RS-232 es bastante similar a lo que
ests haciendo. Puede serte til mirar la teora.
Ten paciencia si no te sale bien a la primera. La clave siempre est en los
detalles.