Paso 2: Diseño general
El cerebro del sistema es el Arduino Uno, que contiene un microcontrolador AVR corriendo a 16MHz.
1000 veces por segundo, el microcontrolador lee el estado actual del giroscopio y acelerómetro; actualizaciones de su modelo interno del bot y desde ese modelo decide rapidez ejecutar los motores para mejor equilibrio el bot. (El código es todo compartido en mi repositorio Github .)
El giroscopio es un girocompás de la tarifa, que significa que su salida es proporcional a la tasa actual de rotación. Para calcular la inclinación actual, el microcontrolador tiene que sumar los valores de entrada que lee mediante un convertidor analógico a digital. Desafortunadamente, no hay giro o ADC es perfecto, resultando en errores en la suma que tienden a crecer con el tiempo. Si el bot utiliza sólo un giro para tratar de equilibrar su idea de "up" deriva lentamente con el tiempo y que finalmente se caiga.
Para contrarrestar la tendencia de giro a la deriva, el bot utiliza un acelerómetro 2D para medir la dirección de la gravedad. Cuando la suma de los valores de giro que añade en una pequeña fracción de la estimación del acelerómetro en el cálculo. Lo suficiente como para compensar la deriva. No añadir demasiado porque el acelerómetro es un sensor muy ruidoso - recoge la vibración de las ruedas y la aceleración de los motores.
El giroscopio y el acelerómetro son montados en el eje de rotación de las ruedas para conseguir la mejor señal.
Una vez que el microcontrolador ha decidió cómo rápidamente los motores utiliza modulación de anchura de pulso para variar su velocidad y conduce a través del escudo Ardumoto. El escudo es necesario porque los motores dibujar mucho más corriente que el microcontrolador puede suministrar por su cuenta.
El módulo BlueSMIRF proporciona serie sobre Bluetooth, que permite al bot a comunicarse en ambas direcciones con otro dispositivo habilitado para Bluetooth. Yo uso mi teléfono Android para transmitir los datos en serie a la consola sobre el Android Debug Bridge. También estoy planeando enviar señales de la otra forma de usar mi teléfono como control remoto.