Paso 15: sistema de control
Otra vez, ver mi página web (enlace en la Página 1) para obtener más información sobre principios de software de control etc..
La idea básica es esta:
gyroangledt = cantidad de inclinación de giro ya que fue tomada la última lectura
newangle (de inclinación de vertical)=(0.99*(oldangle+gyroangledt)) + (0.01 * accelerometerTilt)
Esto da el nuevo ángulo de inclinación de la vertical. Nota cómo el 1% de la señal del acelerómetro se inserta cada vez con 99% de lo derivados del giro a corto plazo ángulo cambio cálculo. Este suaviza variaciones en acelerómetro leyendo lentamente con el tiempo (promedios el ruido por lo que se auto cancela), corrige cualquier deriva del punto cero en el giro pero todavía permite el giro manejar los cambios de corto plazo instantánea en inclinación.
linearvelocity = linearvelocity + (0.00004 * ángulo)
Esto significa que "estamos nosotros todavía las propinas?" y si tan lentamente aumentar la potencia del motor. Se trata de cómo controlar la velocidad manualmente; Si sigues el Consejo continuamente inclinado, poco a poco se acelerará en la dirección inclina.
LEVEL=((K1*Angle) + (k2 * anglerate) + linearvelocity) * overallgain
"anglerate" es de giro es decir, es a corto plazo inmediato "tasa de vuelco"
Nivel de controles de potencia a motor (el ciclo de trabajo PWM).
K1 es de aproximadamente 4.5
K2 es de 0.5
Overallgain es sólo eso - una perilla de "acelerador" en panel de control - si set mesa demasiado baja se siente descuidada, demasiado alto y oscila violentamente!
Finalmente, todo esto sólo funciona porque este programa es bucle cerca de 100 veces por segundo.