SHIELD PARA MOTORES Y DOME

DESCRIPCIÓN

Para el control de los motores, tanto de las patas como del dome (cabeza), es necesario disponer de tres drivers que sean capaces de manejar los motores de tracción y el que hace girar el Dome.

Tal y como he previsto en el sistema, también debe ser capaz de recibir información del bus R2-Net, de forma que podamos tanto controlar como manejar los telegramas y así, realizar acciones.

Con lo cual los objetivos que me he marcado para esta parte del proyecto son los siguientes:

  • Recibir datos desde una interfaz de usuario (mando).
  • Controlar la información a los tres drivers de motor.
  • Posicionar el Dome y el Droide en cualquier momento.
  • Recibir datos del bus R2-Net enviados desde el servidor o desde otro dispositivo R2-Net
  • Conectar periféricos para interactuar con el droide, en nuestro caso una cámara de visión artificial.

Que se va a conseguir con esto:

  • Podremos manejar el droide desde un mando Sony controller (Motores de tracción, dome y algunos accionamientos).
  • Tendremos entradas con interrupción por hardware para tener la posibilidad de conectar un mando Rc.
  • Conectaremos un sensor de tipo hall, que activaremos en la posición cero del dome, esta posición será cuando  el droide este mirando hacia delante.
  • Opcionalmente tendremos la posibilidad de conectar un encoder incremental, lo que permitirá saber en que posición angular esta el dome. Con esto podemos situar el dome el posición angular que deseemos.
  • Gracias a la cámara, podremos reconocer objetos y realizar accionamientos para que el usuario pueda interactuar con el droide utilizando la tecnología de visión artificial. También es posible rastrear objetos de color o enseñarle patrones para que los identifique.

Para todo esto, la mejor forma es tener la Shield de motores, que se instala como paso intermedio entre una arduino Mega ADK y los drivers, a la vez que acondicione el bus R2-Net, el sensor, encoder y la cámara de visión.

EL SENSOR CERO

El sensor que utilizamos como detector de la posición cero es un sensor de efecto hall de tipo A3144.

Este sensor, como he comentado antes, es el encargado de indicarle a la arduino mega ADK que el imán instalado en el dome-plates coincide sobre él.

Tanto el imán como el sensor deben ser instalados de forma que coincidan cuando el droide esta mirando al frente.

EL ENCODER (OPCIONAL)

El encoder es incremental, no de cuadratura y lo que hace es contar los pulsos que se producen durante el giro del dome. Esto es dependiente del la relación de transmisión entre el motor y el anillo dentado del lazy susan.

En este caso el encoder va a servir para posicionar lo mas exactamente posible el dome, no es algo primordial para ninguna de las opciones que le estoy predeterminando al droide, pero puede que sea muy interesante a la hora de realizar correcciones o para tener su angulo de rotación en cuenta.

¿Como funciona?

Con el encoder conectado y debidamente programado, nos devuelve 20 pulsos cada vez que su rueda gira una vuelta. Estos 20 pulsos se transforman en 40 al ser detectados los flancos de subida y bajada de cada detección.

Entonces, conociendo la relación de transmisión de los piñones del dome, el piñón del motor y el piñón del encoder, podemos calcular fácilmente cuantos pulsos tendremos en cada vuelta completa del dome.

Con este dato es fácil conseguir una transformación a grados para establecer la posición angular o saber el angulo en el que esta conociendo los pulsos que ha contado.

A la derecha hay una imagen donde van conectados el sensor y el encoder en la Shield.


¿Como se calculan los pasos del encoder?

El conjunto de la relación esta constituida por tres piñones: Uno de tipo corona (A) y dos internos convencionales (B y C). En mi caso la cantidad de dientes de cada piñón son:

  • A (Lazy susan) – 95 dientes
  • B (Motor) – 20 dientes
  • C (encoder) – 10 Dientes

Debemos sabe cuantas vueltas da el piñón del encoder con cada vuelta del dome (A). y luego multiplicar por dos el resultado al leer ambos flancos, para eso lo calculamos de la siguiente forma:

Pulsos por vuelta = (A / B) * (B / C) * Pulsos encoder

Pulsos por vuelta = 4.75 * 2 * 40 = 380 pulsos

El valor que hay que establecer en el código del arduino para la variable de pulsos por vuelta es 380.

DIAGRAMA DEL CONEXIONADO (MOTORES DC)
DIAGRAMA DEL CONEXIONADO (MOTORES BLCD)
VIDEO