Bienvenido al blog del noroeste de Mesopotamia! Aquí hablamos de todo:
Política, Dios, ciencia y tecnología, fe, Linux, Latex, Fails,etc.
Siéntase libre de comentar los artículos!

lunes, 14 de noviembre de 2011

[How to] Comunicar Arduino con Matlab corriendo sobre Linux

Si se trata de construir proyectos de microcontroladores algo muy útil es poder obtener información del mismo para poder procesarla con un computador. Seguramente, la mayoría de lectores ya saben que es Matlab, sus funcionalidades, potencia y flexibilidad para trabajar con matemáticas. Además, como cuenta con herramientas estadísticas y gráficas, permite hacer estudios de conjuntos de datos, lo cual podría ser algo de utilidad al momento de construir un proyecto de microcontroladores.

En esta ocasión voy a mostrar como leer datos desde un microcontrolador Arduino Mega y capturarlos en Matlab bajo una distribución Linux. Asumiré que Matlab ya está instalado en el PC de destino de los datos. Manos a la obra.


  1. Se debe iniciar la comunicación serie en el microcontrolador Arduino, para ello se debe hacer lo siguiente:

    void setup(){
    Serial.begin(9600);
    }
  2. Luego se puede crear una función para el envío de los datos, o bien dentro de la misma función loop. Yo creé una nueva función llamada send, como sigue:

    void send(){
    Serial.println(dato);
    }


    Eso hará que se envíe el dato por el puerto serie y lo reciba Matlab.
  3. Finalmente, el código completo queda más o menos así:

    long data=0;
    void setup(){
        Serial.begin(115200);
    }

    void loop(){
        delay(20);
        data=data+1;
        send();
    }

    void send(){
        Serial.println(data);
    }
Es importante mencionar que el número dentro de Serial.begin corresponde a la velocidad de transferencia y es fundamental que en ambos equipos, tanto en el receptor como en el transmisor dichas velocidades sean iguales. Ahora, en Matlab se debe hacer lo siguiente:
  1. Se debe abrir el puerto serie creando un objeto tipo serial, pero antes de crear dicho objeto haremos un truco primero. En la consola de Linux ejecutar el siguiente comando como root:

    ln -s /dev/ttyACM0 /dev/ttyUSB4

    Esa instrucción mapea el dispositivo del Arduino, que supondremos que es /dev/ttyACM0 en /dev/ttyUSB4 (se puede visualizar que dispositivo está usando Arudino a través de la instrucción dmesg), esto lo hago ya que Matlab entregaba un error al intentar utilizar el mismo dispositivo para abrir el puerto serie. Ahora si creamos el objeto serial en Matlab, como sigue:

    S=serial('/dev/ttyUSB4','BaudRate',115200,'StopBits',1,'Terminator','CR/LF','DataBits',8,'Parity','none','Timeout',3);
  2. Abrir el puerto serie de la siguiente manera:

    fopen(S);

    Y con eso tenemos abierto el puerto serie. Solamente nos falta leer la información que Arduino está enviando a través de send().
  3. Leer la información enviada por Arduino como sigue:

    dato=fscanf(S,'%d');

  4. Y con eso estamos. Es importante mencionar que si necesitan obtener un gran volúmen de datos desde el Arduino, necesitarán algún tipo de ciclo para estar constantemente leyendo la información. Posiblemente también sea necesario graficar los datos, por lo que recomiendo consultar la ayuda del comando plot.
    Abrazo!!

1 comentario:

  1. gracias por el tutorial no conseguia como hacer que aceptara el puerto com muchas gracias por tomarte la molestia de hacer el tutorial

    ResponderEliminar

Ingresa un comentario