Control de servomotores

Una de las aplicaciones más utilizadas de los sistemas de control por ordenador y en la robótica están asociados con los motores, que permiten accionar o mover otros componentes, como puertas, barreras, válvulas, ruedas, etc. Uno de los tipos que vamos a ver en este capítulo son lo servos, hay de dos tipos:

Por defecto cuando se dice servo, es un servomotor o servo convenciona

Servos de rotación continua

Para controlar un servo de rotación continua, las instrucciones a realizar son :

Mira el vídeo, esta realizado con otra shield ECHIDNA y con bloques (curso Echidna https://libros.catedu.es/books/arduino-con-echidna-y-mblock-scratch ) fíjate como:

Si quieres saber más sobre servomotores te recomendamos estas paginas del Zaragozano Luis LLamas: Servomotores convencionales y Servomotores de rotación continua

Servomotores o servos convencionales

Los servos son un tipo especial de motor en el que se añade una circuito lógico electrónico que permite un control mucho más preciso que a un motor normal de corriente continua. Esto les permite posicionar el eje en un ángulo determinado. 

El hardware interno se compone de un potenciómetro y un circuito integrado que controlan en todo momento los grados que gira el motor. De este modo, en nuestro caso, desde Arduino, usando las salidas digitales PWM podremos controlar fácilmente un servo. Lo ideal es conectarlo a 6V pero trabajan bien en los 5V del Arduino.

Hay muchos modelos, en robótica educativa cuestan entre 1-5€, el más común es el SG90, muy barato, pero tiene muy poca fuerza, el MG90S tiene algo más, si queremos algo más, ya tiene que ser el  MG996R pero ya este modelo NO se puede conectar directamente al Arduino, el pico de energía que necesita, provoca el reinicio de la placa. Incluso varios pequeños SG90.

Las instrucciones son las mismas que los servos de rotación continua, pero los valores que se proporcionan son los grados que se desean. 

La instrucción myservo.write(angulo) envía por el pin digital declarado en myservo.attach() pulsos cuadrados de 50Hz y de anchura el estado alto proporcional al ángulo que se desea.

Si quieres saber más, te recomendamos https://www.luisllamas.es/controlar-un-servo-con-arduino/

Montaje 25: Testea tu servo (servomotor)

En el siguiente programa de testeo (fuente: forum arduino) vamos a probar el servo.

Montaje 25: Conexión sin Edubásica

La conexión se realiza mediante 3 cables: 2 de alimentación (+5V/GND) y un tercero, conectado por ejemplo el 7 , donde indicaremos los grados que queremos que gire a través de un programa en Arduino.

Montaje 25: Conexión con Edubásica

En Edubásica tenemos una forma muy sencilla de conectar un servo a la tarjeta. Lo puedes hacer mediante las clavijas identificadas con JP3. De arriba abajo las conexiones son:

Recuerda que siempre puedes utilizar los pines analógicos como E/S digitales, del pin 14 al 19.

Por ejemplo, puedes conectar el servo al pin analógico 5, pero declarado como digital en el 19.

Montaje 25: video

Por ejemplo en este Servo HD-1440A con el anterior programa se ve que es un servo barato:

Si eliges uno un poco más caro como el MG90S no tiene estos problemas en los extremos. Ver

Montaje 25: simulación

Aquí lo tienes simulado en Tinkercad https://www.tinkercad.com/things/4FQNFOdoS8Z-25testeatuservo

Pincha en simulación y luego código, y encontrarás el cuadro monitor serie donde puedes teclear el ángulo que quieras. Observa al servo cuando pulses Intro

servo1arduino.png

Montaje 25: Programa

https://create.arduino.cc/editor/javierquintana/1d59ad76-dc4a-4b6d-8238-66ae593ce728/preview

Montaje 26 controlando el servo

Vamos a jugar un poco, montar este circuito de tal manera que el servo este haciendo este ciclo

El programa lo puedes conseguir en el botón Code de la siguiente simulación

Montaje 27 controlando el servo

Vamos a simular un motor paso a paso. El servo ahora tiene que pasar de 10º a 180º de 10 en 10 parando 1 segundo en cada paso

El programa lo puedes conseguir en el botón Code de la siguiente simulación

Montaje 28 servo y potenciómetro

Podemos probar una aplicación muy importante que está basada en mover el servo según una determinada entrada analógica. Este nos puede ser  muy útil si queremos controlar servos por medio de joysticks por ejemplo o cualquier dispositivo que cuente con potenciómetros para realizar un movimiento.

El código está obtenido desde los ejemplos que vienen incluido en la IDE de de Arduino (Knob) que encontrarás en:  Archivo->Ejemplos->Servo, sólo hemos cambiado esta línea: myservo.attach(7);  

Lo que hace este programa es variar la posición del servo enfunción de la posición del potenciómetro que leemos de manera analógica.

Sólo nos queda mapear la lectura para que se mueva de 0 a 180º.

En la siguiente simulación, puedes mover el potenciómetro y ver el resultado


Revision #16
Created 1 February 2022 11:21:07 by Equipo CATEDU
Updated 26 December 2023 08:56:20 by Javier Quintana