MATLAB + Arduino: Serial Port Communication

Tutorial para aprender a comunicar una placa Arduino con Matlab mediante comunicación Puerto Serial

MATLAB + Arduino: Serial Port Communication
arduino_mat

En este tutorial aprenderemos a comunicar nuestra placa Arduino con Matlab mediante comunicación Puerto Serial. ¿Qué es MATLAB?

MATLAB es un entorno de programación para el desarrollo de algoritmos, el análisis de datos, la visualización y el cálculo numérico. Con MATLAB, puede solucionar problemas de cálculo técnico más rápidamente que con lenguajes de programación tradicionales tales como C, C++ o Fortran.

Puede utilizar MATLAB en una gran variedad de aplicaciones, tales como procesamiento de señales e imágenes, comunicaciones, diseño de control, pruebas y medidas, modelado y análisis financiero o biología computacional. Para un millón de ingenieros y científicos de la industria y la educación, MATLAB es el lenguaje del cálculo técnico.

Como podemos ver en la descripción que nos presentan desde MathWorks, MATLAB es un entorno de programación con infinidad de posibilidades, que nos ayudará a resolver nuestros problemas de cálculo técnico incluso más rápidamente que otros lenguajes de programación. MATLAB es extremadamente potente, por lo que puede costar hacerse con él, pero, ya estoy yo aquí para ayudarte a programar tu propio Script para la comunicación con Arduino en tiempo real.

Bueno, ¿y este tutorial qué te puede aportar?

Muy simple y, en cuanto cojamos un poco de práctica, lo tendremos resuelto. Para comenzar, lo que queremos hacer es, leer con Arduino los datos de un potenciómetro que tenemos conectado al pin analógico número 0. Obtendremos valores entre 0 y 1023, los cuales enviaremos a través del Puerto Serial hacia MATLAB, que los recogerá y los procesará pasándolos a Voltios. Podemos decir, que vamos a realizar un muestreo de valores, los cuales vamos a representar en una gráfica.

Esta gráfica muestra los valores que Arduino ha obtenido del potenciómetro, el cual he ido moviendo para ver la variación en cada muestra. Arduino envía a Matlab valores entre 0 y 1023 pero, como ya he mendionado antes, desde Matlab he hecho el cambio a Voltios, aunque también se podría haber hecho desde Arduino.

Si ya te lo has descargado, podrás ver que es muy simple. Lo único que hay que programar es una lectura de valores analógicos con el pin que queramos, en mi caso del A0, y tras haber realizado la lectura, mandar los datos a través del Puerto Serial. Esto lo haremos cada 100 ms, pero cada uno puede modificar ese tiempo a su gusto, incluso ponerlo a 0.

Si manejas un poco el Arduino, este sketch no te presentará ningún problema.

¡Ahora viene lo bueno! ¡Vamos a comenzar a programar el script en MATLAB para establecer la comunicación Puerto Serie!

github

Para comenzar, he creado una función, a la que llamaremos desde la Ventana de Comandos (Command Window), para que se ejecute el script. A esta función le tenemos que pasar un parámetro, que será el número de muestras que queramos tomar.

Si, por ejemplo, queremos tomar 500 muestras, escribiremos:

A continuación, en el script, declararemos un vector, en el cual se almacenarán los datos obtenidos de la comunicación Arduino-Matlab. Además, inicializaremos la comunicación mediante las siguientes declaraciones. En tu código, simplemente deberás fijarte si utilizas el COM3, COM4, o cualquier otro. Es lo único que tendrás que cambiar probablemente, aunque no tiene por qué.

A continuación, un paso fácil. Crear la ventana para la gráfica que queremos visualizar:

Tras crear la ventana para la gráfica, tendremos que configurar los datos que vamos a mostrar en ella y, crear un bucle, While en mi caso, para que realice el muestreo y lo represente en la gráfica.

Con ylim y xlim, estoy dando el rango de valores que se mostrarán en la gráfica. Como sabemos que no vamos a bajar de 0 Voltios, y tampoco vamos a subir de 5, pues representaremos entre 0 y 5.1. Con el eje de las X sucede lo mismo. Represento 20 muestras anteriores y la actual, dejando un pequeño hueco de 5 para las que vienen a continuación. El eje X será dinámico e irá en función del número muestras que quieras tomar.

Y... ¡Fin del script! Con éstas tres últimas declaraciones, cierro la conexión con el Puerto Serial y elimino todas las variables creadas anteriormente. Descarga el código:

github

- MONTAJE

- VÍDEO TUTORIAL

¿Qué os ha parecido? ¡Dejad vuestras impresiones en los comentarios!