Conectar hasta 16 servos con Micro:bit

En artículos anteriores hemos visto como conectar un servo a nuestra placa Micro:bit. Se podría conectar hasta 3 servos en nuestra placa. Pero si necesitamos manejar más servos es complicado.

Afortunadamente en el mercado una placa que permite conectar y gestionar hasta 16 servos. Es la placa PCA9685. Esta placa dispone conexión para 16 servos, y se conecta a la placa Micro:bit por medio del bus I2C.

El bus I2C en la placa Micro:bit

El bus I2C usado dos pines. Los pines 19 y 20 de la placa Micro:bit. El pin 19 se denomina SCL, y el pin 20 llamado SDA.

Fuente: https://makecode.microbit.org/device/pins

Como se puede ver en la imagen, los pines en la placa Micro:bit, son pequeños y conectar cables en ellos es difícil. Por ello usaremos una placa de expansión. Esta placa nos permite tener mejor acceso a todos los pines de nuestra placa.

Existen gran cantidad en el mercado, así que cualquiera, con la que más a gusto te sientas con ella, puede servir.

La placa PCA9685

Esta placa dispone de conexión para 16 servos, además tiene 6 pines en la parte lateral dónde se encuentra los pines del bus, pines de alimentación y un pin para para desactivar todas las salidas.

PinDescripción
V+Este pin sirve para alimentar los servos, pero es mejor usar el conector destinado para ello.
VCCPor este pin se alimenta el integrado PCA9685, la tensión debe ser entre 3,3 voltios y 5 voltios.
SDAPin de conexión del bus I2C
SDLPin de conexión del bus I2C
OEPoniendo tensión, la misma que en el pin VCC se ponen todas las salidas a cero
GNDPin de tierra o cero voltios.

Aparte de estos pines, existe un conector con tornillos, de color verde, por el cual se alimenta los servos.

Conectando la placa Micro:bit a PCA9685

Para esto necesitamos cuatro cables tipo dupon, hembra hembra y una placa de expansión.

Localizar los pines SCL y SDA en tu placa de expansión. Conecta un cable en cada pin, y el extremo contrario conectarlo a los pines SCL y SDA en la placa PCA9685.

Ahora vamos a alimentar la placa. Para ello conecta un cable en el pin 3v3 de la placa Micro:bit, y el extremo contrario en pin VCC de la placa PCA9685.

Por último conecta un cable en el pin GND de la placa Micro:bit y el otro extremo en el pin GND de la placa PCA9685.

La siguiente

Micro:bitPCA9685
3v3VCC
SDASDA
SDLSDL
GNDGND
Tabla de conexión entre Micro:bit y PCA9685

Importar bloques PCA9685

Ahora que tenemos todo conectado vamos a programar nuestra placa Micro:bit.

Crea una nuevo proyecto y llamalo, por ejemplo, PCA9685. Para mover los servos con la placa PCA9685 debemos usar la extensión PCA9685. Desde el menú Advanced selecciona Extensions. En el buscador introduce PCA9685.

Selecciona pca9685. Ahora ya tenemos listos los bloques para usar la placa.

Programación

Para probar la placa, vamos a usar dos servos del tipo MG965R, los cuales los conectaremos los primeros pines. Fíjate en los colores del cable de los servos, que debe coincidir con los de los pines. Alimenta la placa PCA9685 con 4 pilas tipo AA.

Vamos a mover los dos servos, de manera que si dejamos pulsado el botón A el servo número 1 girará un grado, así hasta que alcance los 180 grados. Cuando ocurra esto empezará a girar un grado menos, de manera que cuando llegue a 0 grados, volverá a empezar girar hacia a 180 grados.

Si mantenemos pulsado el botón B, nuestro programa hará los mismo pero con el servo número 2.

Y si mantenemos ambos botones pulsados, A+B, giran ambos servos a la vez.

Bloque On Start

Empezamos creando una variable llamada Controller. Esta variable identificará nuestra placa. Así que la ajustaremos al resultado de iniciar nuestra placa con la dirección 0x40 usando el bloque chip address.

Cómo la conexión a la placa se realiza por medio de un bus. Esto es usando un par de cables, y puede haber más de una placa conectada hay que identificarla con un número. En este caso 0x40 que es un número en Hexadecimal, que es según el fabricante el valor que trae por defecto.

Tras ello, debemos indicar la frecuencia a la que funcionan nuestros servos. Según la ficha técnica del servo Mg996R, la frecuencia es 50hz que es la más común en los servos. Para ello usamos el bloque Init.

Cómo vamos a mover dos servos y queremos saber en que dirección van. Osea si debemos sumar o restar grados, crearemos dos variables llamadas DireccionServo1 y DireccionServo2. Las cuales iniciamos al valor 1.

Evento On Start

Bloque forever

En esta parte vamos a comprobar que botón pulsamos. Comprobamos que pulsamos el botón A y no el B. En ese caso llamamos a la rutina CalculaServo1, para actualizar la posición del servo 1, la cual se guarda en la variable PosicionServo1. Y luego se ejecuta el bloque Set servo position. El cual le indicamos el servo que queremos mover. En este caso es el servo número 1. Se le indica la posición en grados que está contenido en la variable PosicionServo1, y la placa dónde está conectado este servo, que está indicado por la variable Controller. Recuerda que esta variable la inicializamos en el evento OnStart.

Cuando pulsamos el botón B y no esta pulsado el botón A, se llama a la rutina CalculaServo2, para actualizar la posición para el servo 2, la cual se guarda en el variable PosicionServo2. Después se ejecuta el bloque Set servo position. Pero indicando el servo 2 y el ángulo que está en la variable PosicionServo2. La placa dónde está conectado es controller.

Por último comprobamos si ambos botones están pulsados. En ese caso se ejecutan las rutinas de cálculo de ambos servos y se actualiza la posición de los dos servos.

La rutina CalculaServo1

Esta rutina se encarga de calcular una nueva posición para un servo. Lo que hacemos es sumar el valor de la variable DirecionServo1 a la posición del servo. Si el valor de la variable PosicionServo1 es mayor de 180 grados, entonces la variable DireccionServo1 pasará a ser negativo. así la próxima al realizar el cálculo de la nueva posición iremos restando, y el servo irá girando hacia cero grados.

La función CalculaServo2 es exactamente igual, pero realiza los cálculos para el servo 2.

Ya solo queda cargar el programa en nuestro Micro:bit y probarlo.

Aquí os dejo el código fuente.

Saludos

Deja una respuesta