Vídeo 10: ServoBit - Obijuan/digital-electronics-with-open-FPGAs-tutorial GitHub Wiki
Vídeo
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
- Robots y servos
- Señal de control de los servos
- Conectando servos a la Icezum Alhambra
- Controlador ServoBit
- Ejemplo 1: moviendo un servo con el pulsador
- Ejemplo 2: Movimiento automático (Corazón)
- Ejemplo 3: Movimiento retardado (Tortuga)
- Ejemplo 4: Moviendo dos servos
- Ejercicios propuestos (16 Bitpoints)
- Ejercicios entregados
- Autor
- Licencia
- Créditos y agradecimientos
- Enlaces
- FAQs
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
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
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:
- 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:
-
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:
- 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:
Ejercicio 2
- Vídeo en Youtube:
Ejercicio 3
- Vídeo en Youtube:
Ejercicio 4
- Vídeo en Youtube:
Jorge Lobo (Lobotic)
Ejercicio 1
- Vídeo en Youtube:
Ejercicio 2
- Vídeo en Youtube:
Ejercicio 3
- Vídeo en Youtube:
Ejercicio 4
Autor
- Juan González-Gómez (Obijuan)
Licencia
Créditos y agradecimientos
- Jon Goitia es el autor original del printbot Beetle
- Javier Isabel es el autor de la Ultimate Gripper
- Javier Isabel modificó la Pinza paralela para incluir un servo y que se pueda abrir/cerrar automáticamente
- Javier Isabel es el autor original del Robot Educativo Zowi
Enlaces
- Repositorio con las colecciones de la Academia Jedi de Hardware
- Repositorio con los iconos SVG de los bloques de Icestudio
- BricoGeek. Tienda Friki donde comprar componentes electrónicos
- Repositorio de la Icezum Alhambra
- Documentación de la Icezum Alhambra: (PNG)(SVG)(PDF)
- Icestudio
- Monedas Bit imprimibles
- Printbot Beetle
- Ultimate Gripper
- Pinza paralela
- Robot Educativo Zowi
- Qué es PWM y para qué sirve. Entrada en el bloq de Rincón Ingenieril
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