Arduino y MPU-6050 IMU controlados por Big Bee / Big Trak Clone: ​​5 pasos

Arduino y MPU-6050 IMU controlados por Big Bee / Big Trak Clone: ​​5 pasos

Tabla de contenido:

Anonim

Introducción

github.com/lawsonkeith/Bee-Bot

Un simple robot con ruedas que puede ser programado para seguir un curso. El robot tiene un teclado que acepta comandos de movimiento y luego los ejecuta. Una característica inusual es que he usado un sensor 6 DOF MEMS para hacer toda la navegación en lugar de los codificadores de rueda. La ventaja aquí es que algunas de las IMU 6DOF son mucho más fáciles de integrar en cualquier plataforma que los codificadores de ruedas, además, el deslizamiento no es un problema. La desventaja es que no sabes qué tan lejos has viajado. Esperaba que fuera posible realizar algunas mediciones de distancia / vel lineales con la IMU, pero desafortunadamente, la tasa de deriva es demasiado alta y los errores se acumulan, por lo que solo es precisa en aproximadamente 3s.

Mi hijo quería construir uno de estos ya que usaba un 'Bee Bot' en la escuela, también me recordó a los juguetes 'Big Trak' que existían en los años 80. Tiene control PID en el rumbo, así que si quieres saber cómo funciona, esta es una buena plataforma, ya que los helicópteros cuádruples y los robots de balanceo tienden a fallar mucho cuando entiendes mal las constantes. También he incluido un telémetro de infrarrojos para evitar que el robot se estrelle contra las cosas, hay un parlante que le avisa cuando presiona un botón. La idea es programarlo para navegar por la habitación, es decir, enviarlo a la cocina e intentar programarlo para que regrese, etc. Puede ver un video de él evitando obstáculos y navegando de forma sencilla aquí:

Suministros:

Paso 1: Hardware

Utilice el esquema y las imágenes proporcionados para cablear su robot.

Motores y chasis - Compré una plataforma de robot barata en ebay que venía con ruedas y motores para este proyecto.

Control del motor - Un L9110 se usa para controlar proporcionalmente los dos motores, también he agregado 2 condensadores para reducir el ruido. Los motores pueden ser controlados hacia adelante o hacia atrás. El software escala los motores para que sean más o menos lineales y operen solo en su región lineal, lo cual es algo así como un ciclo de trabajo de 20-80%.

Control de robot - Esto se hace con un Arduino pro mini. Necesita una versión de 3.3V o una versión que pueda ser 3.3 / 5V y luego configurarlo a 3.3V. Durante el desarrollo tuve un cable de programación unido permanentemente a la tapa del robot. Si está pensando en utilizar una versión de 5V con un LDO, tenga cuidado con el voltaje de salida, los que están en el chip son de caída extremadamente baja, lo que es útil cuando carga las baterías para mantener 3.3V.

Entrada de comando - Esto viene de un panel táctil analógico que tiene 5 botones, cada botón envía un voltaje diferente a la entrada analógica de Arduino cuando se presiona.

Evitar obstáculos - Esto se hace usando un agudo buscador de rango IR 2Y0A21 F 39 que alimenta la segunda entrada analógica Arduino.

Poder - La unidad se alimenta con baterías 4xAAA hybrio. Esto constituye el suministro no regulado que alimenta el control del motor. El resto de los dispositivos son alimentados por un suministro regulado de 3.3V que se genera en el Arduino mini pro. Hice una pequeña placa de distribución de alimentación que se alimenta a través de un interruptor para ayudarme a encaminar la alimentación del dispositivo. Tiene un LED verde para mostrar cuando se enciende. Un interruptor basculante controla la potencia.

Audio - Un altavoz proporciona información de audio al presionar los botones y el estado de la IMU. Cableado: he usado cabeceras de 2,54 mm y conectores de zócalo para cablear todo.

Fijaciones

He usado tiras y tuercas y tornillos de 3 mm para asegurar la mayoría de las cosas. Se usó un protector de enchufe eléctrico para hacer que el detector de rango se montara. Se usaron arandelas de 3 mm donde necesitaba espaciar las cosas y Araldite donde necesitaba pegar o arreglar algo.

IMU

Uso un acelerómetro / giro MPU 6050 6 DOF para asegurarme de que el robot haya mantenido un rumbo. El acelerómetro en realidad no hace nada.

Paso 2: Software

El software está codificado para hacer lo siguiente: esperar que el rumbo del giroscopio se vuelva estable (¿10s?) E informar al usuario con los comandos del usuario de SpeakerCompile (FWD, BACK, LEFT, RIGHT) Ejecutar los comandos según sea necesario (GO btn) Durante la ejecución, utilice el giroscopio para evitar la deriva debido a la no linealidad de los motores. Si se detecta un obstáculo en el modo FWD, desactive las unidades y emita un sonido. Si el btn 'GO' se mantiene en eliminar la lista de comandos actualNota: debe instalar las bibliotecas I2cDev y MPU6050 en su Arduino- > Carpeta de bibliotecas. He proporcionado estos como un archivo zip, descomprímalo y arrastre las carpetas a la ubicación anterior.

Paso 3: Calibración - IMU

Debe calibrar la IMU; para ello, utilice el programa RAW 'MPU6050_raw.ino' que he incluido (no los ejemplos). Las constantes que obtiene de allí se pueden copiar en su programa BBot.ino. Puede salirse con la suya de no hacerlo, pero le recomiendo que lo haga, mi IMU se desempeñó mucho mejor una vez que lo calibré.

http: //www.i2cdevlib.com/forums/topic/91-how-to-d …

Coloque el MPU6050 en una superficie plana y horizontal. Use un inclinómetro para verificar que sea lo más horizontal posible. Modifique el programa RAW para poner cada desplazamiento a 0. ("setXGyroOffset / setYGyroOffset / setZGyroOffset / setZAccelOffset" = 0). Cargue el programa RAW en su arduino y abra el monitor de serie para puede ver los valores que está devolviendo. Déjelo funcionando durante unos minutos (5-10) para que la temperatura se estabilice. Revise los valores en el monitor serie y anótelos. Ahora modifique su programa actualizando sus compensaciones y ejecute el bosquejo, con compensaciones actualizadas. Repita este proceso hasta que su programa esté devolviendo 0 para cada giro, 0 para X e Y accel, y +16384 para Z accel. Una vez que logre esto, esas son las compensaciones para ese MPU6050, tendrá que repetir esto para cada MPU6050 que uses.

Paso 4: Calibración - Motores

A menos que copie mi configuración, también necesitará calibrar los motores. Los motores se escalan a +/- 1000, donde 0 casi los pone en movimiento, obviamente, el arduino PWM generalmente es 0-255 y unipolar. 1000 no tendrá un ciclo de trabajo del 100%, aunque todos los motores tienen una región lineal, tendrá que encontrarlo para su robot modificando el código para ver qué tan lejos viaja el robot a ciertas demandas en períodos de tiempo fijos. Hice una tabla y medí la distancia en incrementos de demanda del 10%. Para mí, el ciclo de trabajo del 20-80% era lineal, dentro de lo cual tiene que haber espacio para que el PID controle realmente el rumbo del robot. Si el 1000% es la velocidad máxima, entonces realmente no puedes hacer más control de rumbo. También quería protegerme contra la caída del voltaje de la batería cuando el robot avanza y reinicia el Arduino. Vale la pena pasar una buena hora asegurándose de que los motores estén calibrados; de lo contrario, será casi imposible hacer el ajuste PID correctamente.

Paso 5: Calibración - Control de rumbo PID

La dirección hacia la que se enfrenta el robot está controlada por el encabezado de la IMU derivado del giro. Esto asegura que el robot viaja en arcos de 90 grados. Sin esto, el robot no puede girar 90 grados con precisión o viajar en línea recta. Por lo general, la gente usa codificadores para esto, pero no había visto a nadie probar y usar un giroscopio, esto es realmente una práctica común en las máquinas marinas, que es la industria en la que trabajo. Es posible que necesite cambiar las constantes PID si cambia el motor. o pilas. Hay un montón de información sobre cómo hacer esto en la web. Básicamente, P es proporcional al error y el término I elimina el error a largo plazo. Básicamente, aumenta P tan alto como puede antes de que oscile el rumbo y luego sintonice I para deshacerse de los errores a largo plazo cuando viaja en línea recta. Descubrí que necesitaba 2 series de constantes ya que la caja móvil necesitaba un control más agresivo que la caja fija y giratoria.