jueves, 18 de julio de 2013

Programación Arduino Parte 2

    Como continuación a Programación Arduino Parte 1 escribo esta entrada con los progresos sobre los primeros problemas surgidos.

    El problema de la inestabilidad de la velocidad de los motores, con bajones de velocidad a intervalos regulares y que de algún modo eran debidos a la transmisión de datos de la IMU a Arduino, ha quedado solucionada. He hecho una pequeña modificación en el código del AHRS 9DOF Razor IMU con el que sólo se calculan los ángulos y envían los datos a petición. Así quedan sincronizados el cálculo de los ángulos y envío de los datos con el tiempo de ciclo de la programación en Arduino. Con este cambio la velocidad de los motores es estable.
    El nuevo código para el AHRS 9DOF Razor IMU podéis encontrarlo en AHRS 9DOF Razor IMU Parte 3.

    Al tener Arduino que realizar la petición nos encontramos con que tanto la recepción como la transmisión de la UART de la placa van a estar ocupadas con la IMU así que tenemos que buscarnos un sistema alternativo para el envío de datos para diagnosis. La solución es la librería SoftwareSerial. Esta librería la usaremos sólo para transmitir ya que al ser todo por software la recepción produce interrupciones que afectarían a nuestro código.

    Con todo esto también he realizado la primera placa con la que poder montar todos los componentes y ensamblar todas las partes para poder hacer las primeras pruebas. La placa es muy mejorable e incluso hay alguna cosa que no puede funcionar... en concreto la transmisión de datos desde Arduino para diagnosis. Le habilité la salida A7 hacia un conector en el que ensamblar un emisor de 433 MHz para más tarde encontrarme que la librería SoftwareSerial sólo funciona en las salidas digitales y no en las analógicas como la A7. En el código lo hago a través del pin 12, como de momento la placa tenía previsto conectores para futuros servos puedo conectar ahí un cable.

    Otro fallo que he cometido y que daría marcha atrás si estuviera a tiempo es la placa que utilizo. Me decanté por una placa en eBay que llaman Meduino. La placa en sí está bastante bien, muy parecida a la Arduino Pro Mini. Sin embargo ahí radica el problema. Para ganar en compatibilidad veo mucho mejor usar un clon de la Arduino Pro Mini (o la original, vamos). Por ejemplo yo tengo el riesgo de que dejen de fabricar esa Meduino y no pueda hacer más placas o o pueda sustituir la que tengo ante una avería. Tal vez en la siguiente placa de componentes que haga me plantee "rehacerla" incorporando una Arduino Pro Mini 100% compatible.

    A continuación os adjunto los archivos en Eagle de la placa y el programa de Arduino (disculpad que en algunos sitios esté un poco caótico, está sin depurar ya que está desarrollado en fase de pruebas).

    El código está hecho para hacer las primeras pruebas sobre la estabilización del roll. Con los tres mandos circulares de la emisora, a los que tengo asignados los canales 5, 6 y 7, puedo variar en tiempo real los parámetros Kp, Ki y Kd del PID del roll.

Archivo para Arduino 1.0.3: Cuadricóptero v1.0
Archivos Eagle placa: Placa Cuadricóptero v2.0
Esquema placa: Esquema v2.0

AHRS 9DOF Razor IMU Parte 3

    Como continuación a AHRS 9DOF Razor IMU Parte 2 escribo esta entrada para subir el código con las mejoras necesarias explicadas en Programación Arduino Parte 2.

    Este código permite el cálculo y envío de datos a petición externa, desde Arduino.

Archivo para 9DOF Razor: Razor AHRS v2.0
Archivo para leer los datos enviados: Leer 9DOF Razor v2.0