Matlab y Arduino se hacen amigos

Matlab para Arduino¡Aloha de nuevo! Halloween y no estás de jarana? Bueno, ¿Leerme puede considerarse uno de esos placeres de la vida? Si no es así píntate la cara y sal a la calle. Esta noche te traes algo para casa… aunque solo sean calabazas 🙂

Festividades que dan miedo a parte, hoy trato un programa que es verdaderamente un monstruo. Matlab, ese pedazo de código capaz de hacerlo todo con sus complementos. Desde gráficas a invertir matrices, desde adquisición de señales hasta simulación de respuestas ante entrada escalón.

Y cómo no… Matlab ha entrado en el mundo Arduino. El problema de Matlab era que no podía conectarse al mundo real como lo hace National Instruments con sus tarjetas de adquisición. Pero claro, al conectar Matlab y Arduino se pasa de la dimensión teórica de los números a poder jugar con el mundo.

De paso, para los más duchos en la programación de Matlab, no necesitarán aprender cómo programar Arduino… siempre dentro de unos límites porque dependemos de las funciones diseñadas por Matlab para Arduino. Si deciden no desarrollar alguna función o no dar soporte a alguna librería… estamos jodid**.

Matlab o GNUplot…

Lo primero que necesitarás es Matlab y el paquete de Arduino que se instala desde el Support Package Installer (vaya palabreja…). Esto que significa… que necesitas dinero. Porque Matlab es caro. Pero puede que tengas una licencia en el trabajo o en la universidad o que simplemente Matlab sea tu vida y tengas el programa y el paquete en cuestión. Los paquetes típicos se incluyen en Matlab… los raritos hay que pagarlos a parte… así va este mundo, tío…

Un modo de hacer lo mismo sería con GNUplot (versión libre y gratuita de Matlab), pero no he investigado. Aunque sé que se podría hacer casi lo mismo aunque no exista ningún paquete especial. Ya que abriendo la comunicación serie entre Arduino y GNUplot se podría enviar mensajes de GNUplot a Arduino y que Arduino al recibir un cierto mensaje hiciese una acción.

Sería como montar un traductor de unas órdenes a funciones de Arduino siempre programado desde el IDE de Arduino. Si sabes de GNUplot y tienes una idea mejor o sabes cómo se podría crear ese canal serie entre Arduino y GNUplot déjalo en los comentarios y lo añado al post. Ayudémonos entre todos 🙂

A parte del programa que todo lo puede (Matlab) y su paquete especial, necesitarás un Arduino, el cable USB para crear la comunicación serie entre Matlab y Arduino y no sé… algunos leds, resistencias y esas cosas que tanto nos gustan…

Programando Arduino desde Matlab

Para conectar Arduino y Matlab lo que hay que hacer es definir Arduino en Matlab. Para ello utilizaremos el comando:

placa = arduino

Esto lo que hace es conectarse al primer Arduino detectado y llamarlo placa. Pero hay otras maneras como son:

placa = arduino(‘COM0’)

Dónde ya se especifica el puerto exacto dónde se encuentra nuestro Arduino. Ahora lo que estaría bien es encender una señal o un led. Para ello hay que echar mano de los pines digitales. Creo que esto te va a sonar…

writeDigitalPin(placa, 13,1)

writeDigitalPin(placa,13,0)

El primer comando de Matlab lo que hace es encender el pin 13, el segundo lo apaga. Fíjate que siempre le digo dónde tiene que aplicar la función, en placa. Esto es porque podría conectar varios Arduinos a un mismo PC. También podría utilizar los pines analógicos:

lectura = readVoltage(placa, 2)

Con esto leo la entrada analógica 2 en la placa Arduino y guardo su valor en una variable llamada lectura que podré utilizar luego para lo que quiera. De hecho, si necesitase una espera entre toma y toma de valores podría utilizar la función:

pause(1)

Que espera un segundo. Porque esto que te estoy contando se puede utilizar en la pantalla inicial de Matlab, pero también podrías programar un pequeño programa ejecutable dentro de Matlab (esos archivos llamados .m). La única ventaja de éstos es que no tienes que ir escribiendo cada vez todo lo que necesitas sino que puedes hacer programas. Podrías hacer una lectura cada segundo por ejemplo:

for i=1:1000

lectura=readVoltage(placa, 2);

pause(1);

end

Opt In Image

Comandos especiales para shields

Otro comando importante es el de

delete(placa)

Si quieres cerrar la conexión con Arduino por alguna razón. Luego siempre la puedes volver a generar con el comando arduino. Para añadir algunos motores, hay que cargar Arduino y la shield dónde se encuentra el motor (Sí, necesitarías una shield en este caso, sino puedes simplemente utilizar los comandos de los pines digitales para hacer funcionar estos motores sin problemas):

placa = arduino(‘COM1′,’Uno’,’libraries’,’Adafruit\MotorshieldV2‘);

shield = addon(placa,’Adafruit\MotorshieldV2‘)

Con esto, se puede llamar a un servo y manejarlo:

s = servo(shield,1);

writePosition(s,0.5)

Se puede llamar a un motor de continua, de estos que se encienden o se apagan:

motorcontinua = dcmotor(shield,1);

start(motorcontinua)

stop(motorcontinua)

O se puede utilizar un motor paso a paso:

motorpap = stepper(shield,1,200,’RPM’,10)

move(motorpap,10)

Dónde el 1 es el número de motor (la shield puede tener varios), 200 son el número de pasos que tiene una vuelta entera en el motor. RPM y el 10 siguiente van unidos y marcan la velocidad que llevará el motor. El 10 que viene en la segunda instrucción es diferente, marca el número de pasos a mover.

Se me olvidaba, debes cargar en Arduino un programa antes de utilizarlo…

Falta la parte complicada ahora, la parte en la que hay decirle a Arduino que tiene que obedecer a Matlab. Simplemente se trata de cargar en el IDE Arduino un programa llamado adioes que puedes encontrar en la carpeta ArduinoIO/pde/adioes de este archivo.

Para explicarlo bien haría falta otro post como este así que te dejo uno que está realmente bien y que puedes ver aquí. Siguiendo este tutorial si que no fallarás en la instalación y podrás disfrutar de Matlab y Arduino… esos amigos inseparables.

Espero que hagas maldades con Matlab y le saques partido a su forma de calcular miles de cosas a partir de los datos que te va a ofrecer Arduino 😉

[Total:3    Promedio:3.7/5]

Deja un comentario