[Inicio de explicación]
¡Hola humanos! Continuando con nuestra sección de tutoriales de Matlab y Arduino, hoy voy 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 simple Blink.No configurar tu Arduino es cómo ir a la guerra sin escopeta.
Hoy simplemente vamos a mover el servomotor de 0 a 180 grados. Sé que no es el tutorial más emocionante que he posteado, pero si algun día hay una catástrofe mundial agradecerás saber cómo configurar los cierres automáticos de tu refugio nuclear.
Bien, el tutorial de hoy va a ser muy sencillo, y sólo vamos a necesitar:
-
- Placa Arduino. Este tutorial está testeado con Arduino UNO, Duemilanove y Nano
- Servomotor, a ser posible que funcione con 5V, así va a poder ser alimentado a través de Arduino.
- Cables (recomiendo conectores Macho-Macho)
- Cable USB
El esquema a seguir será este.
- Rojo (positivo) – 5V Arduino
- Negro/Marrón (negativo) – Gnd Arduino
- Naranja/Amarillo/Blanco (datos) – Pin Digital 3 Arduino
Una vez cableado, conectamos el USB con el ordenador. Si estamos en Linux, probablemente tenemos que crear de nuevo el enlace simbólico del puerto USB de Arduino a través de la Terminal:
su ln -s /dev/ttyACM0 /dev/ttyS101 chmod 777 /dev/ttyS101
Una vez creado, abrimos Matlab. Como siempre, empezamos creando la clase “arduino” para poder enviarle instrucciones a nuestra placa.
arduino = arduino('/dev/ttyS101')
Una vez conectado, estableceremos el Pin número 3 como salida de datos para servomotor. Para ello, utilizaremos un comando propio de la librería Servo.h , la cual ya viene citada por defecto en el sketch que le cargamos a Arduino.
arduino.servoAttach(3)
Para cambiar la posición de nuestro servomotor escribimos:
arduino.servoWrite(3, 30)
El primer valor es el pin del servomotor que queremos mover. El segundo valor es la posición, y accepta enteros de 0 a 180. Nada de decimales.
Ahora vamos a crear un simple bucle para mover el servomotor de 0 a 180 grados y al revés. Recuerda que puedes parar el programa con Ctrl+C en cualquier momento, aunque si quieres puedes esperar a que el programa termine. Eso sí, espera sentado que hay para rato…
x = 0; %varable para almacenar posiciones max = false; %variable booleana para decidir si hay que sumar o restar posiciones while true %esto va a aumentar considerablemente la duracion de nuestro programa... arduino.servoWrite(3,x) if max x = x-1 else x = x+1 end if x == 180 max = true elseif x == 0 max = false end pause(0.003) end
Y con esto ya sabemos cómo configurar nuestro servomotor y controlarlo a través de Matlab. Sencillo, ¿verdad?
En el próximo tutorial intentaremos enviar datos desde Arduino a Matlab. Hasta entonces, te dejo un problema para practicar: puedes intentar crear un programa tal que entrando una función cualquiera en Matlab (por ejemplo, y = x^2+5), el servomotor cambie de posición en función del valor de las y. Y debe funcionar con cualquier tipo de función, incluso si tiene valores negativos o el valor de las y va más allá de 180 (recuerda que el comando servoWrite sólo accepta valores enteros de 0 a 180). Te daré un par de ayudas: los 90º deberían corresponderse al y = 0. Y necesitarás este comando:
http://www.mathworks.es/es/help/matlab/ref/round.html
Puedes dejar tu respuesta en los comentarios. El mejor recibirá la enhorabuena. El peor también.
Final de línea.
Buenas, necesito saber en los valores negativos, ¿puedo poner valores absolutos?
Sí, con abs(angulo). No debería haber ningún problema.
Final de línea.
[…] Arduino y Matlab II – Servomotores […]
recuerden que el arduino uno , no todos sus pines son PWM :p , en el mega si
porque no especificas el firmware que debe utilizarse?,
No es el mismo para todos los casos.
No, no es lo mismo, pero se supone que la gente que quiere empezar a utilizar matlab con Arduino debería saber lo básico de esta placa (cuáles son los pines PWM y que no puedes generar un pulso con un pin digital normal).
Aún así, voy a cambiarlo y especificaré la placa que he utilizado.
Final de línea.
Saludos señor transductor
Muchas gracias por su aporte todo esta programacion como la puedo llevar para programar en GUI de Matlab
Christian, vuelvo a insistir: sigue el tutorial de Arduino y Matlab I: BLINK!, pero en vez de conectar un LED, tienes que montar el mismo esquema eléctrico que aparece en el tutorial del controlador con transistores NPN (http://robologs.net/2014/09/16/como-construir-un-controlador-de-motores-npn/). Y en vez de conectar el controlador al pin D9, conéctalo al pin D13.
Final de línea.
Hola buenas tardes tengo algunas dudas sobre como podría lograr el mover dos servos ya pude hacer que el arduino se comunique con Matlab primero le cargo o subo el documento adioes.pde y después abro Matlab y tecleo a = arduino(‘COM4’) y si me aparece el arduino y todo osea normal las librerias etc. es lo que me aparece pero cuando conecto el servo y vuelvo a teclear a = arduino(‘COM4’) me aparece que verifique si no tengo otra cosa conectada en el com4 y así ya no se conecta no se si lo que hago mal es conectar el… Leer más »
Saludos.
a = arduino(‘COM4’) solo tiene que introducirse una vez al principio. De ahí el problema: estás iniciando el puerto de série dos veces, y es normal que la segunda vez lo encuentre ocupado.
Esto está explicado de forma detallada en el tutorial. Lo mejor será que vuelvas a leerlo de arriba a abajo (puedes saltarte el paso de crear el enlace simbólico si estás en Windows).
Por otra parte, si es la primera vez que usas Arduino deberías empezar por los tutoriales más sencillos que vienen antes:
http://robologs.net/2014/01/12/arduino-y-matlab/
http://robologs.net/2014/01/12/arduino-y-matlab-i-blink/
Final de línea.
he realizado todo pero la progrmacion en matlab no me sale alguien me puede ayudar con la programacion en matlab GUI
gracias
Christian: mírate el tutorial de Arduino y Matlab I – BLINK, dónde explico cómo usar la función digitalWrite con Matlab. La idea es que en vez de encender un LED, cambies de HIGH a LOW el pin dónde esté conectado el controlador de motores. Así encenderás y apagarás el motor.
Final de línea.
Y si esto lo realizo con el transistor NPN para cada uno
Muchas gracias señor transductor
Me a servido de mucha ayuda gracias una pregunta mas para mover los 5 motores necesito realizar para cada uno un controlador de motores para cada uno.
Eso depende del controlador. Hay algunos que sólo pueden mover un motor, otros dos o más.
Si no tienes uno ya te recomiendo el L293D: es muy barato y sencillo. Y puedes encontrarlo en cualquier tienda de electrónica.
Final de línea.
porfavor señor transductor no me funciona algo pasa se queda memorizado la bobina del motor suena y nose que pasa
Porfavor amigos ayudenmen es muy necesario apoyen graciass
saludos Sr TR4NSDUC7OR
Exactamente son motores DC, lo que requiero es que si puedo mover los 5 motores directamente de la placa arduino con la programación en Matlab o que mismo necesito hacer.
Gracias
Hola, Christian. Para controlar un motor (o cinco, el principio es el mismo) necesitas un componente llamado controlador de motores. Arduino no tiene intensidad suficiente para mover uno. Te recomiendo que antes de probarlo con MATLAB sigas un tutorial de motores con Arduino, por ejemplo: http://robologs.net/2014/09/16/como-construir-un-controlador-de-motores-npn/ http://robologs.net/2014/11/14/tutorial-de-arduino-controlador-de-motores-dual-h-bridge/ http://www.instructables.com/id/Control-your-motors-with-L293D-and-Arduino/ Según cuál sea tu controlador de motores. Puedes encontrar muchos más por Internet. Después será muy fácil escribir un código con MATLAB para controlar motores. En este ejemplo: http://robologs.net/2014/01/12/arduino-y-matlab-i-blink/ enseño cómo controlar un LED con Arduino y matlab. Básicamente explico encender y apagar pines digitales, los mismos que se utilizan para controlar… Leer más »
Buenas amigos quiero realizar un proyecto en el cual quiero mover 5 servos de un brazo robotico pero los servos solo tienen positivo y negativo. que es lo que necesito para poner en funcionamiento y cual debe ser su coneccion.
saludos muchas gracias
Saludos, Christian.
Me cuesta mucho creer que un servo tenga sólo dos hilos. Probablemente sean motores DC. ¿Puedes decirme qué modelo son?
Final de línea.
Buenas!!!
Tengo un problemas en la siguiente instrucción
arduino = arduino(‘/dev/ttyS101’)
al ejecutarla me dice:
Open failed: Port: /DEV/TTYS101 is not available. Available ports: COM1, COM3.
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
Mi sistema operativo es windows 7 a 64bits
y tengo el MATLAB R2012a.Gracias
Hola, Bigne. Tal y como digo en el tutorial, esta instrucción es sólo para los que están en Linux.
Si usas Windows, seguramente no necesitas crear éste enlace. Basta con que sustituyas ‘/dev/ttyS101’ por la dirección de tu Arduino (puedes saberla si abres la IDE de Arduino->Herramientas->Puerto Série).
Final de línea.
cómo abro la clase de arduino?
Una vez hayas creado el enlace simbólico, basta con escribir:
Final de línea.
debes dar 1 si vas utlizar el pin numero 10, o debes dar 2 si vas utilizar el pin numero 9.
>> arduino.servoAttach(3)
Error using arduino/servoAttach (line
636)
Unallowed value for servo number, the
value must be either 1 or 2
he revisado otras páginas pero sigo teniendo el mismo problema, uso ARDUINO UNO
Hola, por alguna razón solo me permite dos servomotores, quiero activar el pin 3 con “arduino.servoAttach(3)” y no me deja, me pone el siguiente mensaje “Unallowed value for servo number, the value must be either 1 or 2”.
Me podrías ayudar por favor
Hola Juan!
Vaya, pues no sé cuál puede ser el problema. :/
A mi me permite más de 3 servomotores, concretamente he cargado 4 utilizando este código:
¿Has revisado que no haya ningún error de sintaxis? ¿Has cargado el archivo adioes.pde dentro de tu placa? ¿Has creado correctamente el enlace y se han conectado bien matlab y Arduino? :/
que paso juan, mira la verdad yo tampoco sé
Me ocurre exactamente lo mismo, y no encuentro una posible solución en internet… has logrado solucionar este problema?
llamaste a la libreria ? servo.h?
[…] ¡Saludos, lectores! Al habla Transductor. Hoy vamos a continuar con nuestra serie de tutoriales de interacción entre Arduino y Matlab, utilizando 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 servomotor. […]
[…] Arduino y Matlab II – Servomotores […]