Finalmente hemos decidido implementar una brújula a través de la interfaz I2C. El sensor elegido es la brújula digital CMPS03, en la que la posición respecto al polo Norte magnético es traducida por un módulo de sensores magnéticos a una información de ángulo en grados (con una precisión es de 3-4 grados y una resolución de décimas de grado).
Este sensor está específicamente diseñado como sistema de navegación para robots. Utiliza dos sensores magnéticos KMZ51 de Phillips, sensibles al campo magnético de la Tierra, colocados en ángulo de 90 grados.
La lectura del sensor se puede realizar a través de dos interfaces distintas: el PWM (Pulse Width Modulation) y el bus I2C, que facilita la comunicación con una amplia gama de microcontroladores. Como ya hemos comentado, nosotros lo haremos mediante el bus I2C.
CONEXIONADO
De los 9 pines que encontramos en el CMPS03, los que nosotros utilizaremos son:
- Pin 1 (+5 V): entrada de alimentación
Pin 2 (SCL): señal de reloj para la comunicación síncrona I2C
- Pin 3 (SDA): señal de datos de la comunicación I2C
- Pin 6 (Calibración): para calibrar el sensor hay que conectar este pin a masa momentáneamente apuntando a cada uno de los cuatro puntos cardinales
- Pin 7 (50/60 Hz): Mediante esta entrada se activa un filtro intern
o que permite anular los campos magnéticos generados por la red eléctrica, que pueden provocar una desviación de unos 1,5º. Si se sincroniza con la frecuencia de la red, se puede reducir esta desviación a 0,2º. Se puede seleccionar entre un filtro a 50 Hz (nivel bajo) o a 60 Hz (nivel alto) - Pin 9 (GND)
En cuanto al resto de pines, mientras que el 5 y el 8 no se conectan, el 4 se usa únicamente como salida PWM.
Las señales SCL y SDA irán conectadas a los pines DIGIA0 y DIGIA1 de algún puerto de entrada. Es importante recordar que ambas líneas deben estar polarizadas a nivel alto en reposo; para ello, es necesario usar resistencias de pull-up. En las especificaciones del hardware de Lego se recomienda usar resistencias de unos 82 KΩ.
COMUNICACIÓN I2C
El interfaz I2C permite conectar este módulo a un bus I2C como dispositivo esclavo, para ser gobernado por un microcontrolador que actúe como maestro. El protocolo que se sigue es el siguiente:
- Tras el bit de inicio, el maestro manda la dirección del módulo en modo escritura. Esta tiene como valor fijo 0xC0 (en modo lectura sería 0xC1).
- Se envía el número de registro al que se quiere acceder.
- De nuevo se genera un bit de inicio y esta vez el maestro manda la dirección del módulo en modo lectura (0xC1).
- El módulo CMPS03 empieza a transmitir de forma secuencial el contenido de los registros que se han pedido (en los registros de 2 bytes, se transmite primero el de mayor peso).
- La comunicación acaba cuando el maestro genera el bit de parada.
- 0: Se lee el número de la revisión del firmware interno del módulo.
- 1: La posición actual de la brújula se lee en un único byte (un valor entre 0 y 255) en el que se representa un rango de 0 a 360º.
- 2 y 3: La posición actual de la brújula se lee en dos bytes (16 bits, estando los más significativos en el registro 2) que pueden tomar valores de 0 a 3599 (se representa de 0 a 359,9º).
- 4 y 5: Test interno (valor de 16 bits que refleja el estado del sensor 1)
- 6 y 7: Test interno (valor de 16 bits que refleja el estado del sensor 2)
- 8 y 9: Test interno (valor 1 de calibración de 16 bits)
- 10 y 11: Test interno (valor 2 de calibración de 16 bits)
- 12, 13 y 14: Sin usar, devuelven 0
- 15: Registro para la calibración de la brújula, escribiendo 255 en él al apuntar a cada uno de los cuatro puntos cardinales.
En las siguientes semanas realizaremos las conexiones de este nuevo sensor al bloque NXT, calibraremos la brújula, intentaremos leer de sus registros e incorporaremos en la aplicación Android la monitorización de la posición del robot respecto al polo Norte magnético.
No hay comentarios:
Publicar un comentario