Paso 3: Utilizando el acelerómetro y giróscopo
El acelerómetro permite el Arduino entender la posición de la cámara en un momento determinado en referencia a la gravedad y detecta aceleraciones axiales. El giroscopio detecta cambios en ángulo. Con estos datos creamos un servo (un circuito de retroalimentación que se acerca a un determinado punto de ajuste) para mantener el stick en una posición fija. Hemos utilizado el MPU 6050 6-DOF (grados de libertad) acelerómetro y giróscopo montado en el 521 GY breakout Junta.
Hemos atado con alambre el acelerómetro a Arduino como se ve en la foto de arriba. Por desgracia no hay ninguna hoja de datos para esta placa breakout. Esto es lo que encontramos en los comentarios en Amazon:
- VCC: + 3.3V de Arduino (capacitor de 0,1 μF se fijan a la tierra)
- GND: TIERRA
- SCL: A5 en Arduino Uno (con 2.2 k Levante resistencia a Arduino + 5V)
- SDA: A4 en Arduino Uno (con 2.2 k Levante resistencia a Arduino + 5V)
- XDA: No conectado
- XCL: No conectado
- ADO: GND
- INT: Pin Digital 2 en Arduino
Buscamos alrededor y encontró algunos bocetos de Arduino que te dan los datos en bruto. Sin embargo, es bastante ruidoso y no particularmente útil, sobre todo en servo-ing. El MPU 6050 ha construido en procesador de movimiento Digital (DMP); sin embargo, no se proporcionan instrucciones de uso. Una persona brillante en el MIT (Jeff Rowberg ¡ gracias!) inversa diseñado el chip y descubrió cómo activar la DMP y obtener los datos limpiamos y constantes de. Utilizamos el código que nos ha permitido recibir los datos en diferentes formas como ángulos de Euler, cuaterniones o Pitch Yaw Roll (RPR).
Decidimos utilizar los datos YPR que directamente correlacionada a la cómo estamos controlando nuestra cámara. Contamos con un motor de paso (pensar mirando hacia arriba y hacia abajo) y un motor de rodillo (piensa en un avión de la banca). Una vez que tuvimos los datos en este formulario la codificación fue relativamente fácil y escribimos un código básico de servo para girar el motor a cualquier ángulo nos establecidos en el código, por "incrementar" la onda senoidal en la dirección adecuada. Convenientemente, los dos motores coinciden exactamente a dos de estas coordenadas, para que podamos los dos servos por separado sin interfieran entre sí. Este fue un núcleo relativamente simple concepto a nuestro proyecto.
Los datos de RPR están un poco complicados ya que sólo proporciona ángulos entre -90 y 90 grados para que el servo en ocasiones confundirnos si es cerca de horizontal, teóricamente no es un problema en una aplicación de cardán (aunque todavía un lugar para mejorar pensamos).