Ball and plate con Matlab

Buenas a todos, soy novato en el foro y en Arduino en general :o

Estoy haciendo mi proyecto de final de grado y estoy montando un sistema 'Ball and Plate' utilitzando arduino, matlab, control fuzzy y una webcam para leer la posición.

El diagrama funcionamiento es bastante senzillo, seria algo asi:

  • La camara lee la posicion de la bola y a la velocidad que esta se esta moviendo.

  • Matlab procesa la adquisición y la envia al controlador Fuzzy (Fuzzy toolbox integrada en Matlab)

  • El sistema fuzzy, mapeado con todas las reglas entrega como salida el equivalente al señal PWM para los motores.

  • Arduino capta esa señal PWM y la envia a los motores, que estabilizan la bola en el medio de la bandeja de 30x30.

Bien, la duda es la siguiente:

He programado los servos con arduino de diferentes formas, pero ahora nose que codigo seria necesario para que el arduino lea como variable algo que le entrega el Matlab, como seria la salida del fuzzy, ya que esta no estaria asignada a ningun pin fisicamente? Es necesario utilizar la comunicación serie?

Si alguien tiene documentación sobre este tipo de proyectos le estaria muy agradecido si me la pudiera compartir.

Muchas gracias de antemano!

Por lo visto lo mejor es una comunicación Serie. Matlab tiene un toolbox para arduino que facilita las cosas. He visto cosas incluso con Simulink Tienes todo a la mano. Mira los ejemplos disponibles de Arduino en Matlab y sabras como integrarlo a tu proyecto. Interesante. Si puedes compartir tus avances te lo agradeceré.

https://jjchop.wordpress.com/2012/06/15/comunicar-matlab-con-arduino/ por este blog puede que encuentres algo

Muchas gracias por la ayuda, en cuanto tenga noticias nuevas las iré colocando aquí, así como algun vídeo de funcionamiento :) :)

Pero vas a usar MATLAB o Simulink?

surbyte: Pero vas a usar MATLAB o Simulink?

La idea es usar unicamente Matlab, pero para facilitar la lectura del controlador Fuzzy no descarto utilizar también Simulink.

Viendo la estructura del programa que he comentado antes, se te ocurre algun ejemplo de como seria el codigo? A modo de estructura, para ver un poco los rasgos generales, soy nuevo en esto y voy un poco perdido.

Muchas gracias

angel67: https://jjchop.wordpress.com/2012/06/15/comunicar-matlab-con-arduino/ por este blog puede que encuentres algo

Estoy utilizando el código que me has pasado, pero tengo el problema siguiente:

Programo el puerto serie con Matlab, tal como dice en el blog, con un codigo como este:

PWM = serial('COM3','BaudRate',9600,'Terminator','CR/LF')

Serial Port Object : Serial-COM3

Communication Settings Port: COM3 BaudRate: 9600 Terminator: 'CR/LF'

Communication State Status: closed RecordStatus: off

Read/Write State TransferStatus: idle BytesAvailable: 0 ValuesReceived: 0 ValuesSent: 0

fopen(PWM);

fwrite(PWM, 1023, 'uint8');

Hasta aquí bien, sin errores. El problema es cuando quiero leer esa variable PWM en el arduino, cuadno cargo el sketch, me dice que el COM esta ocupado, y que cierre el programa que lo esta utilizando, pero claro, lo esta utilizano Matlab. Si cierro Matlab, la variable PWM no queda registrada en ningun sitio para que la lea arduino. No entieno este error.

Muchas gracias

Hasta aquí bien, sin errores. El problema es cuando quiero leer esa variable PWM en el arduino, cuadno cargo el sketch, me dice que el COM esta ocupado, y que cierre el programa que lo esta utilizando, pero claro, lo esta utilizano Matlab. Si cierro Matlab, la variable PWM no queda registrada en ningun sitio para que la lea arduino. No entieno este error.

¿El problema es al cargar el sketch? si es así, es lógico el puerto esta ocupado por matlab y el IDE de arduino no puede cargarlo por que no tiene disponible el puerto. Deberías cargar primero el Sketch y luego abrir el mat lab. Lo mismo pasa con el monitor serial mientras estés utilizando el puerto con matlab, no lo puedes utilizar.