Uniendo Excel con Arduino

.

 


No cabe duda, que poder disponer de los datos adquiridos de nuestra placa de arduino en Excel resulta de lo más interesante. Una vez alli, graficar, crear canales matemáticos,... es facilísimo!!!
(link foro arduino donde fue escrito originalmente => http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1230677761 )

Para ello, podemos usar el objeto NETCommOCX (similar el MSComm).
http://home.comcast.net/~hardandsoftware/NETCommOCX.htm

Veamos un ejemplo:






Por la parte Arduino, necesitamos algo así:
int serialByte;
 if (Serial.available()>0)  serialByte=Serial.read();

 // Si recibe una C,envia datos de forma continua
 if (serialByte==67){        //Letra C mayuscula
   while (1)
   {
     analog5=analogRead(5);
     // Convierto a milivoltios
     fanalog5=(analog5)*(5000.0/1023);
     Serial.print(millis());
     Serial.print(",");
     Serial.println (fanalog5,DEC);
     if (PIND & B00100000)  break;
   }

 }
 // Si recibe un D,envia un dato
 if (serialByte==68){        //Letra D mayuscula
   analog5=analogRead(5);
   // Convierto a milivoltios
   fanalog5=(analog5)*(5000.0/1023);
   Serial.print(millis());
   Serial.print(",");
   Serial.println (fanalog5,DEC);
 }


Simplemente, si recibe una "C" por el puerto serie, empieza a mandar el dato de la entrada analógica de forma continua hasta que pulse el boton de mi hardware (leo todo el puerto D y aplico mascara para saber si he pulsado el botón).
Si recibe una "D" manda un dato individual (esto es lo que uso para Excel).
Los datos que envio son de la forma:
tiempo,valor_en_mv con CR+CF


En la parte EXCEL, lo que hago es añadir el objeto NETComm (en el codigo es NETComm2) a mi hoja. Para esto puedes ver culquier ejemplo con MSComm, que es similar.
El único truco, es realizar una especie de Timer en excel. Es decir, que cada cierto tiempo,realice una acción. Para esto uso una llamada a una API de windows que te devuelve el tiempo en ms desde que inicio Windows.

Private Declare Function timeGetTime Lib "winmm.dll" () As Long

tiempo_inicial = timeGetTime()
   Hoja2.Range("L3").FormulaR1C1 = 1
   While (Hoja2.Range("L3").FormulaR1C1 <> "0")
       tiempo_actual = timeGetTime()
       If (tiempo_actual - tiempo_inicial) >= 200 Then
           tiempo_inicial = timeGetTime()
           NETComm2.Output = "D"
       End If
       kk = DoEvents()
   Wend

Como ves, cada 200 ms aproximadamente, envio una D por el puerto serie. Uso la casilla L3 de control, mientras no haya un 0, estoy enviando una D cada 200 ms.

Luego, el objeto NETComm tiene un evento cada vez que recibe un dato por el puerto serie. Lo que hago es configurarlo para que entre cada vez que recibo un byte, y separo tiempo y dato. Lo pongo en dos casillas diferente. Luego no tengo más que añadir gráficos en Excel que esten vinculados a estas casillas.....






Puedes ver otro ejemplo basado en este trabajo realizado por Nicolas:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1230677761




( http://ingenegros.com.ar/Microcontroladores/graficar-con-el-excel-mediciones-tomadas-por-arduino.html )




Saludos!!
.
.
Igor R.
.
.
.

10 comentarios:

  1. 2 palabras....im-presionante.
    Enhorabuena y tomo nota

    ResponderEliminar
  2. Bom Dia !

    Grato pelos exemplos .
    Voces teriam exemplos como esses, mas que fosse o Excel enviando informações para o Arduino?
    Queria ver se controlava um motor de passe pelo Excel.

    Atenciosamente,
    Renato - Brasil

    ResponderEliminar
  3. ¿y como se hace para enviar números desde excel hasta arduino?

    ResponderEliminar
    Respuestas
    1. Boa dia !

      Eu tinha perdido o contato.
      Grato pela resposta.
      Seria algo como por exemplo, se em determinada celula (B2), o valor fosse maior que 1000, ligaria um led.
      Grato
      Renato - Brasil

      Eliminar
  4. hola! un ejemplo genial! yo utilizo PLX para enviar datos de arduino a excel, pero tengo q enviar en bluetooth - aqui PLX no sirve. sabeis si esta solucion mostrada aqui (NETCommOCX ) se puede utilizar con bluetotoh tambien??
    gracias!
    Konrad

    ResponderEliminar
  5. Alguno podria decirme como editar la parte en que se imprime la celda F9 y G9, para que me imprima de corrida hacia las cedas de abajo en excel pls (llevo horas intentandolo, no lo pillo) xD

    ResponderEliminar
  6. bueno adjunto un link donde muestro dos archivos resumidos del codigo original de igor, en el segundo archivo qe se muestra en el video, se logran imprimir los valores en celdas diferentes hacia abajo (concatenando una variable en F y G), y una suma A + 1, el drama es que se me imprime de a 16 o 17, pero yo solo le he puesto incrementar de a 1

    bueno, si aguien puede entiende, estare encatada !, saludos
    https://mega.co.nz/#!YdtlRDoa!4nzZ-QRw3QVnS9ygGpk9wbcXCQiMbyGIZDVHrPAEKJI

    ResponderEliminar
  7. bueno ya lo consegui :B gracias igual ppsdpapsda

    ResponderEliminar
  8. muy bueno, por favor necesito ayuda para entradas digitales de arduino y colocar los datos en excel, nada de conversiones analogicas, muchas gracias si me pueden colaborar

    ResponderEliminar