Paso 5: Software
Arduino es conocida por su ambiente de codificación y las bibliotecas de usuario de código abierto grande que hace muy fácil la creación de prototipos.
Empecé con acelerómetro y giroscopio separadas. Pero que cosas avanzaban, resulta difícil equilibrio con sobrecarga computacional de cálculo pitch & roll (usando filtro de kalman/complementarios). Cuando cambié a MPU-6050, había mejorado drásticamente el equilibrio.
Para utilizar el DMP de MPU, usé las bibliotecas deI2CDev de Jeff Rowberg. Para calibrar el mpu, usésketch de Luis Rodenas.
Ahora, podemos determinar el ángulo del bot con vertical. Pero cómo podemos calcular la cantidad de fuerza necesaria para rechazar bot a vertical cuando está desequilibrado por algunos inciertos grados de la vertical. Esto es donde PID entra en acción. PID especifique esta fuerza que cambian según tiempo y ángulo por que bot es desequilibrada.
No entraré en detalles técnicos. Brett Beauregard escribió una buena biblioteca de PID con explicación si quieres.
Para acelerar aún más la respuesta de motor, usé digitalIOPerformance biblioteca de escritura rápida de pernos.
Finalmente para almacenar PID los valores en la EEPROM del Arduino, biblioteca de EEPROMex para la eficiencia y limpieza de código.
Código completo puede encontrarse en GITHUB.