[Inicio de explicación]
¡Saludos, humano!
Hoy voy a enseñarte cómo controlar una placa Arduino a través de Matlab en Linux mediante algunos ejemplos sencillos. Vamos a aprender cómo enviar datos a nuestra Arduino, así cómo recibirlos y también a aplicar las funciones que incorpora Matlab a nuestro programa.
Matlab es un programa de cálculo numérico que nos permite analizar datos, funciones, matrices y crear algoritmos y programas de manera sencilla y rápida a través de su lenguaje propio. Cuenta también con múltiples paquetes y herramientas adicionales que nos permiten ampliar sus posibilidades, cómo Mupad, una herramienta de cálculo simbólico (para legos: permite calcular decimales de manera exacta) o Simulink, que permite trabajar con sistemas físicos dinámicos (conjunto de objetos que van cambiando sus propiedades con el tiempo).
Al controlar Arduino a través de Matlab tenemos mucha más potencia para realizar cálculos matemáticos, con lo cuál es una buena idea si hay que realizar operaciones matemáticas complejas o que requieran más capacidad de la que nos ofrece el microcontrolador de 8-bits. Además, podemos construir el programa “sobre la marcha”, lo cuál puede ser una ventaja.
¿Y cuál es el inconveniente? Que el Matlab es caro, a decir verdad bastante caro… Por suerte, hay una versión para estudiantes, mucho más económica, en la que también funcionan los paquetes de Arduino. Y si no te llega el presupuesto… bueno, siempre te quedará visitar Isla Tortuga.
1- Preparativos
Para este tutorial sólo vamos a necesitar una placa Arduino (yo utilizo la placa UNO r3) y un cable USB de tipo A a tipo B (los de impresora). Al final aparecen algunos ejemplos básicos que requieren más material, pero ya se especificará en cada uno.
En cuánto al software es obvio que vamos a necesitar Matlab, en mi caso la versión R2013a y la IDE de Arduino. Además, también deberás descargarte los paquetes de soporte de Arduino para Matlab, descomprimirlos y guardar la carpeta ArduinoIO que va a crear en alguna dirección que recuerdes. Es posible que los paquetes de soporte no funcionen en versiones de Matlab como la R2010a o anteriores, así que recomiendo utilizar de la R2011a en adelante.
2- Arduino y el puerto USB
Conectamos nuestra placa Arduino al ordenador y mediante la IDE de Arduino le cargamos el programa adioes.pde ubicado en
ArduinoIO/pde/adioes
Este programa es imprescindible para que Arduino sea capaz de reconocer los comandos que le envía Matlab.
Arduino utiliza el puerto /dev/ttyACM0/, el cual es inaccesible para Matlab. Para solucionar esto, deberemos crear un enlace simbólico y hacerlo accesible para todos los usuarios. Abrimos la Terminal:
sudo ln -s /dev/ttyACM0 /dev/ttyS101 sudo chmod 777 /dev/ttyS101
También funciona con /dev/ttyUSB0 en vez de /dev/ttyS101.
Si apagamos el ordenador deberemos volver a crear el enlace simbólico.
3- Matlab
Ahora deberemos asegurarnos de que el archivo pathdef.m, ubicado dentro de la carpeta toolbox/local de Matlab, se pueda editar. Para ello escribimos el siguiente comando en la terminal, cambiando la ruta de acuerdo a dónde tenemos instalado Matlab si fuera necesario:
sudo chmod 777 usr/local/matlab/R2013a/toolbox/local/pathdef.m
Finalmente copiamos los archivos arduino.m, contents.m y install_arduino.m desde ArduinoIO a la carpeta bin de Matlab. (una vez más modificamos las rutas según sea necesario)
cd /home/transductor/directorio-donde-tengo-mi-ArduinoIO/ArduinoIO/ sudo cp *.m /usr/local/matlab/mi-version-matlab-R201X/bin/
Finalmente sólo nos queda ejecutar Matlab y escribir
Esto va a cargar todos los ficheros necesarios para que Matlab pueda controlar Arduino, y sólo debes escribirlo la primera vez. Debería salir un mensaje al estilo:
4- Ejemplos
Y con esto ya puedes empezar a construir tus maquinaciones cibernéticas con el poder de Matlab. Si quieres, puedes seguir los ejemplos que vienen a continuación para conocer algunos comandos básicos.
Arduino y Matlab II – Servomotores
Arduino y Matlab III – Lectura de pines
Arduino y Matlab IV – Leer Comandos por Serial
Arduino y Matlab V – Leer una IMU por Serial
Si te gustó este tutorial no dudes seguirnos en nuestra página de Twitter o Facebook para estar al día de nuestras publicaciones.
[Final de línea]
Hola, podrias explicar un poco mejor lo de crear el “enlace simbolico” nunca lo he hecho y no entiendo bien a que te refieres. Espero me puedas ayudar ya que necesito conectar matlab y arduino para un trabajo
Saludos, Alejandra.
Un enlace simbólico es un acceso que apunta a un directorio que no está en el lugar dónde has creado el enlace. Lo puedes pensar como un “atajo” que te lleva a un directorio determinado: https://es.wikipedia.org/wiki/Enlace_simb%C3%B3lico
Los pasos para crearlo son simplemente los que se explican en el tutorial, al final del apartado 2.
Final de línea.
buenas noches, tengo todo el codigo de matlab y lo cargo en arduino, pero al momento de volver a conectar mi placa de arduino , toda la programacion cargada anteriormente se borra, como se puede solucionar ese problema.
Saludos, Medina.
El código de Matlab no se “carga” dentro de Arduino, sino que Matlab controla Arduino enviándole órdenes a través de USB: encender un pin, crear un pulso, etc. El sketch ‘adioes.pde’, que es lo único que cargamos dentro de Arduino, simplemente prepara la placa para leer estos comandos que le llegan a través de USB.
Por tanto, es normal que al cerrar Matlab y volver a iniciarlo más tarde la placa Arduino no haga nada.
Final de línea.
Hola que tal, el post me es intereresante y quisiera saber si es posible mandar datos desde un arduino con bluetooth a un bluetooth con salida a serial, y dichos datos prosesarlos con matlabhttps://robologs.net/2014/01/12/arduino-y-matlab/#
Saludos, Fernando.
Debería ser posible, pero no lo he probado. MATLAB tiene funciones para leer bluetooth, pero nunca he dedicado tiempo a probarlas. Si quieres puedes leerte esta página: https://es.mathworks.com/help/instrument/bluetooth.html?requestedDomain=true
Final de línea.
[…] 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 […]
Hola. Con la adición de estos complementos es posible mandar un dato directamente desde el matlab hacia la placa del arduino mediante serial, en la mayoria de los ejemplos que has subido solo recibes datos por el serial, pero no los mandas.
Muchas gracias por tu ayuda.
Saludos, Javier.
Para enviar un mensaje por serial puedes hacerlo con el comando fprintf(): https://es.mathworks.com/help/matlab/ref/serial.fprintf.html
Final de línea.
Mi estimado una consulta muy cordial: Ha funcionado perfectamente pero al momento de incluir un GUIDE y hacer una aplicación standalone sale el siguiente error: “Warning: Name is nonexistent or not a directory: /home/papalos/.mcrCache7.17/Progra2/ProgramaX1/simulink. > In path at 110 In addpath at 87 In install_arduino at 23 In ProgramaX>ProgramaX_OpeningFcn at 70 In gui_mainfcn at 221 In ProgramaX at 42 Warning: Name is nonexistent or not a directory: /home/papalos/.mcrCache7.17/Progra2/ProgramaX1/examples. > In path at 110 In addpath at 87 In install_arduino at 24 In ProgramaX>ProgramaX_OpeningFcn at 70 In gui_mainfcn at 221 In ProgramaX at 42 Arduino folders added to the path Warning:… Leer más »
Saludos, Juan. No puedo decirte cómo solucionar este error básicamente porque nunca he intentado crear una aplicación standalone con Matlab.
Aún así, ¿has probado a hacer lo que te dice el mensaje de error, ejecutar Matlab como administrador si estás en Windows? ¿O a cambiar los permisos de pathdef.m si estás en Linux?
Final de línea.
¡¡Gracias!! ¡No todos los héroes llevan capa!
como le puedo hacer con una msp430 en vez de arduino me podrias ayudar me urge
Lo siento mucho, pero no he trabajado con el mps430 y no puedo ayudarte.
Final de línea.
[…] Interacción entre Arduino y Matlab […]
[…] Interacción entre Arduino y Matlab […]
logro conectar el arduino con matlab pero cuando quiero prender un led desde matlab el arduino no responde pruebo el puerto con el programa de arduino sin matlab si funcionan los puertos que problema es este
Hola, Luís. ¿Matlab te da algún error? ¿Has creado bien el enlace simbólico?
Final de línea.
Me refiero a si Matlab te da algún mensaje de error.
hola. muy buen tutorial, pero cual seria la metodología para hacer lo mismo en windows?
Saludos, JuanFer. No soy usuario de Windows y sólo lo he probado en Linux, pero creo que los pasos son casi los mismos.
No necesitas crear el enlace simbólico y tendrás que sustituir /dev/ttyUSB0 por la dirección de tu placa Arduino cuando estés dentro de MATLAB.
Puedes saber la dirección si abres la IDE de Arduino y vas a Herramientas->Puerto de Série (la placa tiene que estar conectada).
Final de línea
Hola todo funciona bien hasta que intento cargar el arduino.
arduino = arduino(‘/dev/ttyS101’)
entonces me dice que no hay ningun dispositivo . ¿Qué debería hacer?
Me dice lo siguiente:
Open failed: Port: /dev/ttyS101 is not available. No ports are available.
Use INSTRFIND to determine if other instrument objects are connected to the requested device.
Error using arduino (line 83)
Could not open port: /dev/ttyS101
Y Arduino está conectado
Hola, Borja. ¿El enlace simbólico está bien creado? También puedes intentar sustituir la dirección /dev/ttyS101 por la dirección de la placa que aparece cuándo abres la IDE de Arduino. Inténtalo y si no funciona dímelo.
Final de línea.
Buenas, como puedo importar librerias de arduino a matlab.
Saludos, Juan.
No puedes importar directamente librerías de Arduino en Matlab. Las librerías de Arduino son para la placa, no para el programa. Si necesitas utilizar una librería en concreto deberás buscar si hay algun paquete para matlab. De lo contrario tendrás que escribir un programa para Arduino utilizando esta librería y que interactúe con Matlab vía Serial, como lo que hice en este tutorial:
http://robologs.net/2014/10/29/arduino-y-matlab-iv-leer-comandos-por-serial/
Espero haberte ayudado.
Final de línea.
Buen día, disculpen la molestia, soy muy nuevo en este tema y me interesa mucho poder conectar arduino con matlab, pero no entiendo: crear un enlace simbólico y hacerlo accesible para todos los usuarios. Abrimos la Terminal: su ln -s /dev/ttyACM0 /dev/ttyS101 chmod 777 /dev/ttyS101 esto se debe escribir en arduino o en matlab? no entiendo que debo hacer. No se que abrir la terminal. De igual manera no comprendo: asegurarnos de que el archivo pathdef.m, ubicado dentro de la carpeta toolbox/local de Matlab, se pueda editar. Para ello escribimos el siguiente comando en la terminal, cambiando la ruta de… Leer más »
¡Buenas, Luís! No, no tienes que escribirlo ni en Matlab ni en Arduino, sino en la Terminal, la línea de comandos de Linux. Si utilizas Ubuntu tienes un icono en el escritorio que te permite abrirlo (https://help.ubuntu.com/community/UsingTheTerminal)
Que tal! excelente post como muchos otros que tienes.
Intenté instalar el programa “adioes” a arduino pero me lanza este error “avrdude stk500_recv() programmer is not responding”. ¿Sabes que podría ser? Tengo fedora 21 y he utilizado arduino uno anteriormente sin problemas.
Saludos.
Hola, Gcesena.
Nunca me había encontrado con este error ni ninguno parecido, pero creo que este link podría ser de ayuda:
http://stackoverflow.com/questions/19765037/arduino-sketch-upload-issue-avrdude-stk500-recv-programmer-is-not-respondi
Final de línea.
Hola, soy usuario de mac y tengo un arduino uno r3 como tu y Matlab R2014b.
Siguiendo este tutorial he conseguido realizar todos los pasos hasta que finalemente en el paso donde debemos ejecutar install_arduino, me ha devuelto esto “Undefined function or variable ‘install_arduino’.”
Tampoco he conseguido crear el symbol link de /dev/ttyACM0 ya que no lo he encontrado en /dev.
Si que puedo decirte que el puerto serie por el que accedo a mi arduino es tty.usbmodem1411
¿Podrías echarme una mano?
Muchas gracias de antemano.
Ese error “Undefined function or variable install_arduino” es que no se han instalado bien las librerías o que no están en su sitio.
¿Has copiado las librerías de arduino en los directorios de matlab como especifico en el tutorial?
Para crear el link simbolico tienes que quedarte con la dirección de tu arduino (ej. /dev/tty.usb0). Puedes verla en la IDE de arduino. Entonces abres una Terminal y escribes
ln -s /direccion/de/mi/arduino /dev/ttyS101
Tampoco sé exactamente como crear links simbolicos con Mac, puesto que pocas veces he trabajado con ellos.
Espero que te sirva.
Final de línea.
Hola Transductor, finalmente la solución era mas sencillas. En matlab para mac existe un boton “setPath” para indicar la ruta donde se encuentran los ficheros arduino.m, contents.m y install_arduino.m
Respecto al puerto, arduino emplea en mac otro puerto diferente y no es necesario el enlace simbólico.
Por último, quería felicitarte por este blog que he descubierto recientemente y que tanto me está ayudando…
Gracias!
¡Saludos, Jander! Es interesante, mi versión no tiene la opción “setPath”, o almenos no he conseguido encontrarla. Pero gracias por compartirlo, es bueno saberlo para cuando cambie de versión.
Por otra parte me alegro que te guste nuestro blog y que te sirvan mis artículos.
Final de línea.
[…] Linux. Si eres nuevo, te recomiendo encarecidamente que veas los tutoriales anteriores. Hay tres: configurar Arduino y Matlab (esencial), encender y apagar un LED y mover un […]
[…] a enseñaros cómo controlar un Servomotor con Matlab a través de Arduino. Si eres nuevo deberás configurar primero tu Arduino para que pueda comunicarse con Matlab, y quizás quieras hacer el primer tutorial de ejemplo, un […]
[…] Si no lo has hecho ya, deberás configurar Matlab y Arduino para que puedan interaccionar. Descubre cómo en mi último tutorial. […]