34

Arduino y Matlab II – Servomotores

servo

[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.

arduino_servo

  • 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, 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

No, no es necesario que me des las gracias.

Puedes dejar tu respuesta en los comentarios. El mejor recibirá la enhorabuena. El peor también.
Final de línea.

<- Volver a la Parte I
Ir a la Parte III ->

Tr4nsduc7or

Originariamente creado cómo un galvanómetro de bolsillo, Transductor tomó consciencia de si mismo y fue despedido cuando en vez cumplir con su trabajo se dedicó a pensar teorías filosóficas sobre los hilos de cobre, los electrones y el Sentido del efecto Joule en el Universo. Guarda cierto recelo a sus creadores por no comprender la esencia metafísica de las metáforas de su obra. Actualmente trabaja a media jornada cómo antena de radio, y dedica su tiempo libre a la electrónica recreativa y a la filosofía.

Antes de comentar, por favor, lee las Normas

34 Comentarios en "Arduino y Matlab II – Servomotores"

avatar
Ordenar por:   más nuevos primero | más antiguos primero
Jesus Barraza
Humano

Buenas, necesito saber en los valores negativos, ¿puedo poner valores absolutos?

trackback

[…] Arduino y Matlab II – Servomotores […]

Jony Quest
Humano

recuerden que el arduino uno , no todos sus pines son PWM :p , en el mega si

Anónimo
Humano

porque no especificas el firmware que debe utilizarse?,

No es el mismo para todos los casos.

Christian b
Humano

Saludos señor transductor
Muchas gracias por su aporte todo esta programacion como la puedo llevar para programar en GUI de Matlab

Patty
Humano
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 »
Christian b
Humano

he realizado todo pero la progrmacion en matlab no me sale alguien me puede ayudar con la programacion en matlab GUI
gracias

Christian b
Humano

Y si esto lo realizo con el transistor NPN para cada uno

Christian b
Humano

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.

Christian b
Humano

Porfavor amigos ayudenmen es muy necesario apoyen graciass

Christian b
Humano

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

Christian b
Humano

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

Bigne
Humano

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

Luis roberto
Humano

cómo abro la clase de arduino?

santiago
Humano

debes dar 1 si vas utlizar el pin numero 10, o debes dar 2 si vas utilizar el pin numero 9.

PAPUL
Humano

>> 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

Juan Espinosa
Humano

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

stefan
Humano

llamaste a la libreria ? servo.h?

Alexis_del_Flow
Humano

Me ocurre exactamente lo mismo, y no encuentro una posible solución en internet… has logrado solucionar este problema?

El Padrino del CETIS
Humano

que paso juan, mira la verdad yo tampoco sé

N4n0
Admin

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:

arduino = arduino('/dev/ttyS101')

arduino.servoAttach(3)
arduino.servoAttach(4)
arduino.servoAttach(5)
arduino.servoAttach(6)

¿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? :/

trackback

[…] ¡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. […]

trackback

[…] Arduino y Matlab II – Servomotores […]

wpDiscuz