Skip to content

VĂ­deo 10: ServoBit

Juan Gonzalez-Gomez edited this page Jan 7, 2018 · 196 revisions

VĂ­deo

Click to see the youtube video

Haz click en la imagen para ver el vĂ­deo en Youtube

DescripciĂ³n

Empezaremos a manejar servos. Son actuadores cuyo eje de salida se puede fijar a una posiciĂ³n concreta. Se usan mucho en robots educativos, para implementar pinzas o articulaciones. Se presenta el controlador mĂ¡s simple para moverlos: El servoBit, que permite posicionar el servo en dos posiciones, segĂºn el bit recibido por su entrada

ColecciĂ³n

Academia-Jedi-HW-10.zip: ColecciĂ³n para este tutorial. Descargar e instalar

Contenido

IntroducciĂ³n a los servos

Los Servos son actuadores que pueden estar de manera estable en una posiciĂ³n dentro de su rango, que tĂ­picamente es de 180 grados

Se usan muchĂ­simo en la construcciĂ³n de robots educativos, para abrir y cerrar pinzas, orientar sensores, o mover articulaciones. EstĂ¡n formados por tres partes: cuerpo, cabeza y cable de conexiĂ³n

El cuerpo es la parte mĂ¡s grande, que alberga en su interior el motor, la electrĂ³nica y los engranajes. La cabeza es la pieza que va atornillada al eje de salida, y que es la que gira con respecto al cuerpo. En inglĂ©s se llama horn (cuerno). El cable estĂ¡ formado por tres hilos de colores que terminan en un conector hembra

Hay servos de todos los tamaños y gustos. Nosotros utilizaremos tres de los mĂ¡s utilizados: El servo Futaba 3003 o compatible, y los micro-servos Tower-Pro SG90 y Emax ES08A

Los Futaba 3003 o compatibles tienen el tamaño "estĂ¡ndar". Son de los primeros servos que aparecieron, para aplicaciones de aeromodelismo. Los micro-servos son mĂ¡s pequeños

Cada modelo de servo incluye un juego de cabezas intercambiables. Se unen al eje mediante un tornillo

El cable de conexiĂ³n estĂ¡ formado por 3 hilos, con un conector hembra negro al final. Los hilos son: Masa (GND), alimentaciĂ³n (+5v) y señal de control. Cada uno tiene un color diferente, y dependen del modelo de servo. El cĂ³digo tĂ­pico, que tienen la mayorĂ­a de los servos se muestra en esta imagen:

Para los microservos Tower Pro y Emax, el marrĂ³n es GND, el rojo la alimentaciĂ³n y el naranja la señal de control. En los servos Futaba 3003 el negro es GND, el rojo AlimentacĂ³n y la señal de control es blanca

Robots y servos

Los servos se utilizan mucho en robots educativos y de investigaciĂ³n. Son perfectos para combinarlos con impresiĂ³n 3D y construir robots

Garras robĂ³ticas

Una aplicaciĂ³n muy sencilla y divertida es hacer diferentes garras robĂ³ticas, que se abran y cierren

Printbot Beetle

Un tipo de garra muy sencilla es la que lleva el printbot Beetle, diseñado originalmente por Jon Goitia

Es una pinza tipo insecto, formada por 3 piezas impresas y un microservo Emax ES08A

El dedo derecho de la pinza estĂ¡ atornillado a la cabeza del microservo. A travĂ©s de unos dientes transmite el movimiento al dedo izquierdo que estĂ¡ atornillado a una base que a su vez lo estĂ¡ al cuerpo del microservo

En esta animaciĂ³n se puede ver la garra en su dos posiciones extremas: abierta y cerrada

Ultimate gripper

La Ultimage gripper es una garra diseñada por Javier Isabel para usarla en robots humanoides

Es un diseño muy compacto. EstĂ¡ formado por 3 piezas: Dedo izquierdo, dedo derecho y base. El servo que usa es un Futaba 3003 o compatible, y utiliza 3 rodamientos tipo 603

En esta animaciĂ³n se puede ver la garra en acciĂ³n

Pinza paralela

Esta es una pinza que sus dos dedos siempre permanen paralelos, ejerciendo la misma presiĂ³n. La versiĂ³n original la creĂ© para mostrar el funcionamiento de este tipo de mecanismos. Posteriormente, Javier Isabel le añadiĂ³ un microservo para abrir y cerrarla automĂ¡ticamente

El diseño estĂ¡ creado con FreeCAD, y se han hecho diferentes diseños derivados, como por ejemplo Este porta acreditaciones. En ese enlace, ademĂ¡s, se emplica el funcionamiento del mecanismo

Gracias a su mecanismo del paralelogramo, los dedos de agarre siempre permanen en paralelo, tanto si estĂ¡ abierta como cerrada

Robot gusano Larby

Larby es un robot modular tipo gusano formado por la uniĂ³n de 2 mĂ³dulos REPYZ

En este vĂ­deo se puede ver su movimiento en acciĂ³n, mediante un circuito que estĂ¡ metido en la FPGA

Click to see the youtube video

Es un ejemplo de Una configuraciĂ³n mĂ­nima. Con sĂ³lo 2 mĂ³dulos con conexiĂ³n en vertical logramos generar movimiento. El mĂ³dulo bĂ¡sico es el REPYZ, que tiene un Futaba 3003 en su interior

Zowi

Los servos se utilizan mucho en robots educativos, para implementar sus articulaciones. Un ejemplo es el robot Zowi, creado por Javier Isabel. Utiliza cuatro servos Futaba 3003 para el movimiento de sus piernas

Es un robot humaniforme, que aunque sĂ³lo tiene 4 servos, puede realizar una gran cantidad de movimientos diferentes. En esta Lista de reproducciĂ³n se pueden ver muchos de los movimientos que implementĂ© usando la biblioteca de osciladores ardusnake. Esta biblioteca la creĂ© a partir de todo lo desarrollado en mi tesis doctoral

Click to see the youtube video

Señal de control de los servos

Para llevar la cabeza del servo a una posiciĂ³n determinada hay que enviar una señal de control especial. Se trata de un pulso de 5v, de anchura variable, que se envĂ­a periĂ³dicamente, cada 20ms (frecuencia de 50Hz)

El ancho del pulso es el que determina la posiciĂ³n a la que se moverĂ¡ el servo. Los valores dependen del modelo de servo, pero tĂ­picamente un pulso de 1ms lleva el servo al extremo derecho y uno de 2ms al izquierdo. Valores entre 1ms y 2ms lo posicional linealmente entre 0 y 180 grados

Los valores exactos dependen del modelo de servo utilizado. Lo importante es saber que el Ă¡ngulo en el que se posiciona el servo es directamente proporcional al tiempo del ancho del pulso, y que este pulso se tiene que repetir periĂ³dicamente. Si se deja de repetir, el servo deja de ejercer fuerza y se puede mover con la mano a cualquier posiciĂ³n

Conectando servos a la Icezum Alhambra

Los servos se pueden conectar directamente a los pines macho de 5v, con alimentaciĂ³n y masa, y tambiĂ©n a los de 3.3v

ConexiĂ³n a pines de 3.3v

Aunque la señal de control de los servos es de 5v, funcionan perfectamente si se conectan a los pines de 3.3v (GPx). Un ejemplo de conexionado de un servo al pin GP0 de 3.3v se muestra en este esquema de Fritzing:

Se necesitan 3 cables macho-hembra. La señal de control se conecta directamente al pin de 3.3v (GP0 en esta imagen). La señal de 5v se lleva a cualquiera de los pines machos de 5v, de color rojo. Y lo mismo con la señal GND, que se conecta a cualquiera de los pines macho de GND, de color negro Y esta es una foto de la conexiĂ³n real a la Icezum Alhambra

Las ventajas de conectar los servos a travĂ©s de los pines de 3.3v es que la señal de control sale directamente de la FPGA, sin pasar por ningĂºn otro sitio. La desventaja es que el servo no se conecta directamente, sino que hay que hacerlo a travĂ©s de cables auxiliares

ConexiĂ³n a pines machos de 5v con alimentaciĂ³n y masa

El conector hembra del servo, de tres hilos, lo conectamos a cualquiera de los 3 pines machos, respectando la polaridad. En este ejemplo lo hemos conectado al pin D13

Y esta es la foto de la conexiĂ³n real

con los detalles de la conexiĂ³n del conector hembra:

La ventaja de esta conexiĂ³n es que es directa: basta con enchufar el servo directamente, sin usar otros cables. Esto es muy cĂ³modo. Sin embargo, la señal de control de 3.3v que sale de la FPGA pasa primero por un conversor de nivel de 3.3v a 5v antes de llegar al servo. Y estos elementos de conversiĂ³n son muy vulnerables al ruido de alimentaciĂ³n, de forma que pueden producir pulsos espĂºreos al arrancar/frenar los servos, notĂ¡ndose efectos extraños transitorios. Esto dependerĂ¡ del tipo de servo usado y es un efecto un tanto aleatorio. Si se observa que el servo tiembla ligeramente cuando deberĂ­a estar fijo en una posiciĂ³n, posiblemente serĂ¡ debido al efecto de los conversores. En ese caso, lo mejor es conectarlo directamente a los pines de 3.3v (puede haber efectos provocados por otras causas. Al probar con los pines de 3.3v eliminamos una de las posibles fuentes de problemas)

Controlador ServoBit

Los servos los podemos colocar en cualquier posiciĂ³n dentro de su rango de 180 grados. Sin embargo, vamos a empezar por lo mĂ¡s sencillo: haremos que los servos vayan sĂ³lo a dos posiciones, separadas un Ă¡ngulo de 90 grados. Usaremos el controlador mĂ­nimo: un bloque que tiene una Ăºnica entrada y que segĂºn su valor se mueve el servo a una posiciĂ³n (0) o a otra (1). Es el componente que llamamos ServoBit

Al recibir un bit a 0 por su entrada, se posiciona en la derecha. La posiciĂ³n absoluta depende de cĂ³mo hayamos colocado su cabeza. Al recibir un 1 se mueve 90 grados en sentido antihorario

Cada modelo de servo tiene unas caracterĂ­sticas de la señal de control diferentes, por eso en la colecciĂ³n Academia-Jedi-HW-10.zip encontraremos tres controladores Servobits, uno para cada tipo de servo: Futaba 3003, Emas ES08A y TowerPro SG-90:

La mayorĂ­a de los servos con compatibles con estos. MĂ¡s adelante aprenderemos a crear nuestros propios controladores de servos, para adaptarlos a los servos que tengamos. Pero de momento vamos a seguir aprendiendo cosas usando alguno de estos servos

Ejemplo 1: Moviendo un servo con el pulsador

Empezamos por el ejemplo mĂ¡s sencillo: Un servo que se mueve de una posiciĂ³n a otra segĂºn cĂ³mo tengamos apretado el pulsador SW1. Utilizaremos un microservo EMAX ES08A conectado al pin D0

Este circuito tiene una entrada y una salida. Comenzamos colocĂ¡ndolas, como ya sabemos. Ponemos como etiquetas PULSADOR y SERVO

Ahora colocamos el controlador ServoBit para el servo EMAX ES08A, que es el que usaremos. Se encuentra en el menĂº Varios/Servos/EMAX-ES08A/ServoBit-90. Asegurarse de que tenemos instalada y seleccionada la colecciĂ³n del tutorial 10 (Academia-Jedi-HW-10.zip)

Ponemos el bloque y lo conectamos a los bloques de entrada y salida anteriores

Conectamos el servo al pin D0 y cargamos el circuito

El servo se pondrĂ¡ en la posiciĂ³n 0. La cabeza no tiene porquĂ© estar en la posiciĂ³n que se indica en la foto, ya que depende de la orientaciĂ³n con la que se haya colocado inicialmente

Al dejar el pulsador apretado, el servo se mueve 90 grados en sentido antihorario, colocĂ¡ndose en su nueva posiciĂ³n:

.

Al soltar el pulsador, el servo vuelve a su posiciĂ³n original. En esta animaciĂ³n se muestra su funcionamiento

El circuito generado es como el mostrado en siguiente diagrama:

El pulsador SW1 estĂ¡ conectado fĂ­sicamente a un pin de la FPGA, como ya sabemos. Dentro de la FPGA estĂ¡ sintetizado nuestro circuito, que recibe los valores del pulsador como entrada, y genera de salida la señal de control del Servo, que fĂ­sicamente se envĂ­a por una pista hasta el conector D0, donde estĂ¡ enchufado el servo

Experimento: Conectando un LED

Modificamos el ejemplo anterior para sacar la señal de control del servo por el LED7 para visualizarla

Al cargar el circuito observamos que el servo se mueve a su posiciĂ³n 0 y el LED7 se enciende un poquito. Al apretar el pulsador, el servo se mueve a la posiciĂ³n 1 y el LED aumenta su intensidad ligeramente. Al pulsar alternativamente el pulsador, podemos observar cĂ³mo la intensidad del LED aumenta y disminuye

La señal de control del servo estĂ¡ enviando constantemente ceros y unos, pero a una frecuencia de 50Hz que es muy alta para el ojo humano. En vez de observar un parpadeo, vemos una luz constante, pero con menor intensidad. La variaciĂ³n en la intensidad se debe al ancho del pulso. Cuanto mayor sea, mĂ¡s energĂ­a se estĂ¡ enviando al LED y mĂ¡s luminoso se percibe. Este tipo de señales, en las que la frecuencia permanece fija y se varĂ­a el ancho del pulso se denominan señales PWM (Pulse Width Modulation): ModulaciĂ³n por anchura de pulso

Puedes encontrar mĂ¡s informaciĂ³n sobre señales PWM en este post de RincĂ³n Ingenieril

Ejemplo 2: Movimiento automĂ¡tico (CorazĂ³n)

Vamos a hacer que el servo se mueva de una posiciĂ³n a otra, de forma automĂ¡tica, a la velocidad de una vez por segundo. Es decir, cada segundo cambiarĂ¡ de posiciĂ³n. Esto lo implementamos conectando un corazĂ³n de 1Hz a la entrada del servoBit

Adicionalmente vamos a conectar la señal del corazĂ³n a los LEDS 7 y 0 para ver cĂ³mo a la vez que se mueve el servo, los LEDs se mueven alternativamente. Esto es hardware, las cosas van en *paralelo :-)

Cargamos el circuito en la placa. La señal de 1Hz que viene del corazĂ³n estĂ¡ medio segundo a 1, y medio segundo a 0, por lo que el servo estarĂ¡ medio segundo en una posiciĂ³n y medio segundo en la otra. El comportamiento lo vemos en esta animaciĂ³n:

En la animaciĂ³n las transiciones del servo son inmediatas (va de una posiciĂ³n a otra en tiempo cero). Cuando se prueba en real, el servo tarda unos milisegundos en alcanzar cada posiciĂ³n, por lo que los LEDs van ligeramente adelantados con respecto al servo

Ejemplo 3: Movimiento retardado (Tortuga)

Modificaremos el ejemplo anterior para que el servo se mueva mĂ¡s lentamente, estando el doble de tiempo en cada posiciĂ³n. Antes estaba medio segundo, ahora estarĂ¡ 1 segundo

Eliminamos el cable de conexiĂ³n entre el corazĂ³n y el servoBit

Introduciremos un elemento nuevo que sirve para ralentizar la señal del corazĂ³n: La tortuga. Para colocarla nos vamos a la opciĂ³n del menĂº: Varios/Retardo/Tortuga-2

Colocamos la tortuga y conectamos el corazĂ³n a su entrada, y la salida al servoBit

Cargamos el circuito para ver su funcionamiento. Los LEDs siguen moviĂ©ndose alternativamente a la misma velocidad que en el ejemplo anterior: Cada medio segundo cambian. Sin embargo, la señal que llega al Servobit tiene un periodo doble: estĂ¡ durante 1 segundo a uno y durante otro segundo a 0

Concatenando tortugas

Si queremos ralentizar el servo todavĂ­a mĂ¡s, podemos añadir mĂ¡s tortugas (tantas como queramos). Cada vez que se añade una, se duplica el periodo (la frecuencia se divide entre dos). En este circuito hay dos tortugas conectadas en serie, de manera que el periodo del corazĂ³n, de 1Hz, se multiplica por 4

Cargamos el circuito y observamos el funcionamiento. Ahora el servo permanece 2 segundos en cada posiciĂ³n, mientra que los LEDs se alternan cada medio segundo

Ejemplo 4: Moviendo dos servos

Conectaremos dos microservos Emax-ES08A y haremos algunos experimentos con ellos. Uno lo conectamos como en los ejemplos anteriores: directamente al pin D0. El otro lo conectamos al pin GP0, de 3.3v, para practicar la conexiĂ³n a 3.3v

Experimento 1: Dos servos iguales, en fase

Vamos a empezar moviendo los dos servos usando la misma señal de control. Simplemente hay que tirar dos cables a la salida del Servobit: uno hacia cada pin donde estĂ¡n los servos: D0 y GP0

Cargamos el circuito en la placa. Ahora al apretar el pulsador SW1 veremos cĂ³mo los dos servos se mueven a las mismas posiciones

Experimento 2: Dos servos, cada uno con su controlador

En este experimento controladores los dos servos con controladores independientes

El resultado es el mismo que en el ejemplo anterior: Al apretar el pulsador, los dos servos se moverĂ¡n igual. La diferencia es que ahora las señales de control se generan de manera independiente. Esto nos permitirĂ¡ (en el siguiente experimento) hacer que los servos arranquen en posiciones diferentes

Experimento 3: Dos servos en posiciones contrarias

En este experimento colocamos una puerta NOT para que los servos comiencen en las posiciones opuestas

Inicialmente un servo estĂ¡ en la posiciĂ³n 0 y el otro en la1. Al apretar el pulsador se mueven a sus posiciones contrarias: el primero a la 1 y el segundo a la 0

Cargamos el circuito y lo probamos. En esta animaciĂ³n se puede ver el funcionamiento

Experimento 4: dos servos independientes

En este Ăºltimo experimento colocaremos dos servos controlados de manera independiente con pulsadores

Al apretar el pulsador SW1 cambiamos la posiciĂ³n del servo D0 y con el pulsador SW2 la del servo GP0

Cargamos el circuito. El funcionamiento se muestra en esta animaciĂ³n

Ejercicios propuestos (16 BitPoints)

Ver los detalles de los ejercicios y las entregas en el menĂº Archivos/Ejemplos/2-Ejercicios de la colecciĂ³n de este tutorial

Resumen:

  • Ejercicio 1 (Total 5 Bitpoints): Poner la cabeza de Franky sobre un servo, que haga de cuello. Hacer un circuito digital que lo haga moverse lateralmente, para que mire a izquieda y derecha con un periodo total de 4 segundos (2 segundos en cada lado). Los dos ojos de franky deben parpadear a una frecuencia de 4Hz

    • VĂ­deo de ejemplo:

Click to see the youtube video

  • Ejercicio 2 (Total 3 Bitpoints): Hacer una barrera de acceso a un recinto, con un servo y cartĂ³n. Al apretar un pulsador se levanta, y al sortarlo se cierra
    • VĂ­deo de ejemplo:

Click to see the youtube video

  • Ejercicio 3 (Total 5 Bitpoints): Hacer un circuito digital para controlar dos servos con dos pulsadores, y montar un mini-pinball

    • VĂ­deo de ejemplo:

Click to see the youtube video

  • Ejercicio 4 (3 Bitpoints). Ejercicio Libre. Premiar la creatividad. Entregar por redes sociales o github: Pantallazos, enlaces, vĂ­deos, etc...

Ejercicios entregados

Fernando Coladas

Ejercicio 1:

Ejercicio 2:

Ejercicio 3:

Federico Coca

Ejercicio 1

  • VĂ­deo en Youtube:

Click to see the youtube video

Ejercicio 2

  • VĂ­deo en Youtube:

Click to see the youtube video

Ejercicio 3

  • VĂ­deo en Youtube:

Click to see the youtube video

Ejercicio 4

  • VĂ­deo en Youtube:

Click to see the youtube video

Jorge Lobo (Lobotic)

Ejercicio 1

  • VĂ­deo en Youtube:

Click to see the youtube video

Ejercicio 2

  • VĂ­deo en Youtube:

Click to see the youtube video

Ejercicio 3

  • VĂ­deo en Youtube:

Click to see the youtube video

Ejercicio 4

Click to see the youtube video

Autor

Licencia

Créditos y agradecimientos

Enlaces

FAQs

  • ¿DĂ³nde puedo conseguir la placa Icezum Alhambra?

Pueden conseguir una desde Alhambrabits

  • ¿DĂ³nde puedo comprar material electrĂ³nico?. Hay muchos sitios. Uno muy bueno es Bricogeek

  • ¿CĂ³mo aprendo a manejar github?

Hay mucha informaciĂ³n en internet. En su momento hice este Tutorial: Github y FreeCAD para enseñar a manejarlo. Los ejemplos estĂ¡n hechos con ficheros de FreeCAD, sin embargo, lo que se enseña es genĂ©rico. TambiĂ©n vale para las entregas de los ejercicios del tutorial de ElectrĂ³nica digital para makers

  • Los pulsadores de la Icezum Alhambra no me funcionan

Eso es debido a que se han metido restos de flux y no hacen buen contacto. En el apartado ¡No me funcionan los pulsadores! del Tutorial 9 se indica cĂ³mo solucionarlo fĂ¡cilmente

  • ¿DĂ³nde puedo encontrar mĂ¡s informaciĂ³n sobre las señales PWM?

Echa un vistazo a este post de RincĂ³n Ingenieril sobre el tema

Clone this wiki locally