Prueba del acelerómetro MMA7260 con PIC y PyQwt II

En esta ocasión me basaré en la clase QwtDial para crear algo parecido a un indicador de actitud.
De la guía de usuario de qwt:
“La clase QwtDial proporciona un control de intervalo redondeado.
QwtDial esta diseñado para ser una clase base para los indicadores (dial) como velocímetros, brújulas, relojes:
Un dial contiene una escala y una aguja indicando el valor actual del dual. Dependiendo del Modo uno de ellos es fijo y el otro esta rotando…”
De la descripción anterior podemos sacar la conclusión de que un dial se compone de dos elementos básicos: una escala y una aguja. Estos elementos se dibujan “a mano”, es decir, las líneas que componen el dial, los números, las figuras, los colores. No se puede escoger directamente que indicador queremos, sino que tenemos que dibujarlo. Esto es algo complicado pues hay que tener los conceptos básicos de geometría presentes y dominarlos.
La otra opción es tomar las clases de los ejemplos incluidos y ajustarlas a nuestras necesidades, que es lo que hice en este caso. Copié a un archivo clases.py las clases que necesitaba para el indicador de actitud (el tercer indicador de la imagen anterior) que son:
EnumList: Función que es llamada dentro de las clases necesarias.
AttitudeIndicator: Esta clase dibuja el círculo y las escalas del indicador.
AttitudeIndicatorNeedle: Esta clase dibuja la aguja central, que para el indicador de actitud, es un triangulo rojo.

El acelerómetro digital BMA180

El acelerómetro digital de tres ejes BMA180 es producido por Bosch y se puede conseguir en Sparkfun. Puede medir aceleraciones tanto dinámicas como estáticas con una gran precisión. Debido a sus tres ejes perpendiculares da la posición absoluta en un campo de gravedad. Este sensor es un arreglo de dos chips. Un ASIC evalúa los tres canales de salida del elemento sensor micromecánico que funciona de acuerdo al principio de capacitancia diferencial.
El BMA180 proporciona una salida digital completa de 14 bits por medio de la interfaz SPI o I2C. Con el comando apropiado se puede elegir entre el rango completo de aceleraciones que va de 1g hasta 16g. Un filtro de segundo orden Butterworth que va desde los 10Hz hasta los 600Hz es incluido, que proporciona un pre-acondicionamiento de la señal medida. La resolución típica a 2g es de 0.5mg y una precisión por debajo de los 0.25° en aplicaciones de medida de la inclinación.  El consumo de corriente típico es de 650μA a 2.4V en el modo estándar. Además, el sensor puede ser puesto en modo de bajo consumo, donde informa al sistema hosts de un cambio en la aceleración por medio del pin de interrupción. Esta función puede ser utilizada para despertar (wake-up) al sistema host, del modo sleep.

Cubo 3D con OpenGL, pygame y acelerómetro.

En una ocasión se me ocurrió hacer uso de joystick para manejar un servo y que contará con una interfaz gráfica. Como he estado utilizando mayormente el lenguaje Python, busqué un ejemplo y encontré uno del cual base ese ejemplo, sin embargo no he podido encontrar el ejemplo original. Parece que era Basic Motion Graphics with Python pero su pagina web ya no esta disponible.

En este ejemplo se moverá un cubo 3D de colores, con el acelerómetro. Si el acelerómetro se inclina hacia los costados, el cubo se desplazará hacia la derecha o izquierda, si se inclina al frente o atrás, este rotará hacia el adelante o hacia atrás, si se mueve hacia arriba y hacia bajo, el cubo se moverá hacia arriba y hacia abajo.

En la parte final, se encuentra comentado el código para controlar el cubo con un joystick USB.

Los movimientos registrados por el acelerómetro son enviados a la PC por medio de un microcontrolador. El microcontrolador es un PIC12F510 y el firmware del microcontrolador es el mismo que el de la entrada Prueba del acelerómetro MM7260 con PIC y PyQwt.

Los módulos necesarios son:

-PyOpenGL

-PIL

-PyGame

-Pyserial

 

Código:

Prueba del acelerómetro MMA7260 con PIC y PyQwt

En la entrada anterior  se mostraron las características y el funcionamiento de este sensor. Ahora utilizaré la librería gráfica PyQwt para mostrar las mediciones que serán convertidas de analógico a digital mediante el PIC12F510 y serán transmitidas a una PC a través del estándar RS-232.

PIC12F510

El PIC12F510 es un microcontrolador producido por Microchip Technology. Este chip es de la familia Baseline y sus características mas importantes son:
    Encapsulado de 8 pines.     Oscilador interno de precisión de 4/8 Mhz.     3 canales ADC de 8 bits.     Es un microcontrolador de 8 bits.     Bajo consumo de corriente: 100 mA en modo Sleep.     ICSP.     El rango de voltaje es de 2.2V a  5.5V.     Cuenta con un timer de 8 bits.
Este microcontrolador a pesar de ser de bajo costo, cumple con lo necesario para realizar este ejemplo con sus tres ADC de 8 bits.
La programación de este uControlador fue hecha en CCS y es muy sencilla, se puede dividir en tres pasos: Configuración del microcontrolador, Adquisición de datos y envío de datos a la PC. El programa completo se muestra a continuación:
mainp12510accel.h