Paso 3: Construir - Software
Sketch utilizado
El accelerologger funciona con Arduino, y el código/bosquejo puede encontrarse aquí.
Algunos comentarios sobre la parte general del código:
- Los 3 interruptores DIP que se codifican (#2-4) se tiró-para arriba con resistencias internas de los pernos. La acción de los interruptores son:
- DIP02: lectura continua. Si el interruptor está apagado (perno alto) la duración de la lectura se define por temporizador (tiempo de lectura), cuyo valor se define en el código. Si el interruptor está encendido (pin baja) los datos de lectura y escritura va sin interrupción (en realidad, hay una línea de código donde esto puede ser limitado, por defecto que he puesto 2 horas).
- DIP03: interrumpe la lectura. Si el interruptor está apagado (perno alto) la lectura va como especificado por DIP02. Si el interruptor está encendido (pin baja) se omite el paso de la lectura y escrito, pero no se detienen los temporizadores. Esto permite un alto limpio de la lectura en caso de necesidad.
- DIP04: calibración. Si el interruptor está apagado (pin alta), existe una etapa de calibración en el programa de instalación. Si el interruptor está encendido (pin baja) se omite el paso de calibración.
- El interruptor DIP no codificados (#1) poderes el Arduino Pro de las baterías. Aquí la posición de apagado significa desconectado (no alimentación).
- La función de calibración simplemente Lee los datos y escribe en la tarjeta SD durante un tiempo definido dentro del código (TimeC). No hay ningún uso dentro del código de los resultados de la calibración, el objetivo es recopilar información en una etapa controlada. Qué uso debería proporcionarse esta información es una cuestión de postproceso (ver siguiente paso).
- Los datos de lectura y escritura de frecuencia pueden ser especificados en el código (nombre de variable: frecuencia, en Hz). Para ajustar la temporización se requiere una entrada: el tiempo promedio de lectura y escritura (TimeDRW), que en mi experiencia es la frecuencia resultante de la Sra. de 20-25 no es exacto, apenas suficiente para mis propósitos.
- El LED amarillo está encendido cuando las cosas van bien (lectura y escritura), parpadea lentamente durante la preparación (setup) y cumplimentación de los datos de lectura / escritura. Si hay un problema con los datos (el componente x de la aceleración es -1 o 0), el LED rojo parpadea durante poco tiempo; Si el problema está relacionado con la tarjeta SD, la luz LED roja permanece encendida. Cuando existe una dificultad relacionada con el SD o la tarea se ha completado el esbozo entra en un modo de reposo (bucle infinito vacío) después de informar con el intermitente correspondiente.
MPU6050 y Software
En cuanto a la MPU6050:
- La comunicación con la placa se realiza mediante el protocolo I2C.
- He utilizado el código preparado byJohn Chi en http://playground.arduino.cc/Main/MPU-6050.
- Jeff Rowberg ha trabajado extensivamente en las librerías y código para este dispositivo (vea https://github.com/jrowberg/i2cdevlib y http://www.i2cdevlib.com), pero para mis propósitos me pareció que enfoque de Chi suficiente a través de la biblioteca de hilos.
- Los datos en bruto por el MPU6050 están en coordenadas locales. Si coordenadas globales son necesarias, el MPU6050 tiene un procesador adicional (DMP, procesador Digital de movimiento) que puede proporcionar los cálculos necesarios. Este DMP también posee capacidades de minimización del error. Acceso a los resultados DMP puede lograrse a través de las bibliotecas escritas por Jeff Rowberg.