Tabla de contenido:

Robot de seguimiento de línea avanzado: 22 pasos (con imágenes)
Robot de seguimiento de línea avanzado: 22 pasos (con imágenes)

Video: Robot de seguimiento de línea avanzado: 22 pasos (con imágenes)

Video: Robot de seguimiento de línea avanzado: 22 pasos (con imágenes)
Video: ✅ Robot Seguidor de luz hecho con transistores y fotorresistencia 2024, Mes de julio
Anonim
Image
Image
Prototipos - Perfboard
Prototipos - Perfboard

Este es un robot de seguimiento de línea avanzado basado en Teensy 3.6 y sensor de línea QTRX que he construido y en el que he estado trabajando durante bastante tiempo. Hay algunas mejoras importantes en el diseño y el rendimiento de mi anterior robot de seguimiento de línea. La velocidad y respuesta del robot ha mejorado. La estructura general es compacta y ligera. Los componentes están dispuestos cerca del eje de la rueda para minimizar el momento angular. Los micromotores de engranajes metálicos de alta potencia proporcionan el par adecuado y las ruedas de silicona con buje de aluminio ofrecen la tracción que tanto se necesita a altas velocidades. El escudo de apoyo y los codificadores de rueda permiten al robot determinar su posición y orientación. Con Teensyview montado a bordo, toda la información relevante se puede visualizar y los parámetros importantes del programa se pueden actualizar mediante botones.

Para comenzar a construir este robot, necesitará los siguientes suministros (y mucho tiempo y paciencia a su disposición).

Suministros

Electrónica

  • Placa de desarrollo Teensy 3.6
  • Escudo de apoyo con sensores de movimiento
  • Sparkfun TeensyView
  • Matriz de sensores de reflectancia Pololu QTRX-MD-16A
  • PCB prototipo de doble cara de 15x20cm
  • Regulador de voltaje elevador / reductor Pololu S9V11F3S5
  • Regulador de voltaje elevador ajustable de 4-5-20V Pololu U3V70A
  • Micro motorreductor MP12 6V 1580 rpm con codificador (x2)
  • Portador de controlador de motor dual DRV8833 (x2)
  • Batería Li-Po de 3,7 V, 750 mAh
  • Interruptor encendido / apagado
  • Condensador electrolítico 470uF
  • Condensador electrolítico 1000uF (x2)
  • Condensador cerámico 0.1uF (x5)
  • Botones pulsadores (x3)
  • LED verde de 10 mm (x2)

Hardware

  • Rueda de Silicona Atom 37x34mm (x2)
  • Rueda de bola Pololu con bola de metal de 3/8”
  • Soporte motor N20 (x2)
  • Pernos y tuercas

Cables y conectores

  • Alambres flexibles 24AWG
  • Cable FFC a DIP de 24 pines y cable FFC (tipo A, 150 mm de longitud)
  • Cabezal de pin hembra redondo
  • Terminal largo de cabezal de clavija redonda hembra
  • Cabezal hembra de doble fila en ángulo recto
  • Cabezal macho de doble fila en ángulo recto
  • Cabezal de clavija macho
  • Cabezal de clavija de aguja macho

Instrumentos

  • Multimetro
  • Soldador
  • Alambre de soldar
  • Pelacables
  • Cortador de cables

Paso 1: descripción general de los sistemas

Al igual que con mi diseño anterior de un robot autoequilibrado, este robot es un conjunto de placas de arranque montadas en una placa perfilada que también sirve como estructura.

Los principales sistemas del robot se describen a continuación.

Microcontrolador: placa de desarrollo Teensy 3.6 con procesador ARM Cortex-M4 de 32 bits y 180 MHz.

Sensor de línea: conjunto de sensores de línea de salida analógica de 16 canales QTRX-MD-16A de Pololu en disposición de densidad media (paso de sensor de 8 mm).

Accionamiento: Motores de engranajes micro metálicos de alta potencia de 6 V, 1580 rpm con codificador de rueda magnética y ruedas de silicona instaladas en bujes de aluminio.

Odometría: pares de codificadores de rueda magnética para estimar las coordenadas y la distancia recorrida.

Sensor de orientación: Escudo de apoyo con sensores de movimiento para estimar la posición y el rumbo del robot.

Fuente de alimentación: batería lipo de 3,7 V, 750 mAh como fuente de alimentación. El regulador step-up / down de 3.3V alimenta el microcontrolador, los sensores y el dispositivo de visualización. El regulador elevador ajustable alimenta los dos motores.

Interfaz de usuario: Teensyview para mostrar información. Ruptura de tres botones para aceptar las entradas del usuario. Dos números de LED verdes de 10 mm de diámetro para indicar el estado durante la ejecución.

Paso 2: Comencemos a crear prototipos

Image
Image

Implementaremos el circuito anterior en el tablero de perfiles. Primero tenemos que mantener listas nuestras placas de conexión soldando los encabezados en ellas. El video proporcionará una idea sobre qué encabezados deben soldarse en qué placas de conexión.

Después de soldar los encabezados en los tableros de conexiones, apile el Teensyview y el botón de ruptura encima de Teensy.

Paso 3: Prototipado - Perfboard

Prototipos - Perfboard
Prototipos - Perfboard

Obtenga el prototipo de tablero de perfil de doble cara de 15x20 cm y marque el límite con un marcador permanente como se muestra en la imagen. Taladre orificios de tamaño M2 para montar el conjunto de sensores, la rueda giratoria y los motores de engranajes micro metálicos en los lugares marcados con un círculo blanco. Luego cortaremos la placa perfilada a lo largo del límite después de soldar y probar todos los componentes.

Comenzaremos nuestra creación de prototipos soldando los pines y enchufes del cabezal en la placa perfilada. Los tableros de distribución se insertarán más tarde en estos encabezados. Preste especial atención a la posición de los encabezados en la placa perfilada. Conectaremos todos los cables según este diseño de encabezados.

Paso 4: Creación de prototipos: escudo de apoyo

Prototipos - Escudo de utilería
Prototipos - Escudo de utilería
Prototipos - Escudo de utilería
Prototipos - Escudo de utilería
Prototipos - Escudo de utilería
Prototipos - Escudo de utilería
Prototipos - Escudo de utilería
Prototipos - Escudo de utilería

Primero soldaremos las conexiones al escudo de apoyo. Dado que estamos usando solo los sensores de movimiento del escudo de apoyo, necesitamos conectar solo los pines SCL, SDA e IRQ aparte de los pines de 3V y tierra del escudo de apoyo.

Una vez que se complete la conexión, inserte Teensy y el protector de apoyo y calibre los sensores de movimiento siguiendo los pasos mencionados aquí.

Paso 5: Creación de prototipos: potencia y tierra

Creación de prototipos: potencia y tierra
Creación de prototipos: potencia y tierra

Suelde todas las conexiones de potencia y tierra refiriéndose a la imagen. Inserte todas las placas de conexiones en su lugar y asegure la continuidad usando un multímetro. Verifique los diferentes niveles de voltaje a bordo.

  • Voltaje de salida Li-po (generalmente entre 3 V y 4,2 V)
  • Voltaje de salida del regulador step-up / down (3.3V)
  • Voltaje de salida del regulador elevador ajustable (establecido en 6V)

Paso 6: Creación de prototipos: portador del conductor del motor

Creación de prototipos: transportador de conductor de motor
Creación de prototipos: transportador de conductor de motor
Creación de prototipos: transportador de conductor de motor
Creación de prototipos: transportador de conductor de motor
Creación de prototipos: transportador de conductor de motor
Creación de prototipos: transportador de conductor de motor

La placa portadora de controlador de motor dual DRV8833 puede entregar corrientes continuas de 1,2 A y pico de 2 A por canal. Conectaremos los dos canales en paralelo para impulsar un motor. Suelde las conexiones siguiendo los pasos a continuación.

  • Paralelamente, las dos entradas y las dos salidas del soporte del controlador de motor como se muestra en la imagen.
  • Conecte los cables de control de entrada al controlador del motor.
  • Conecte un condensador electrolítico de 1000 uF y un condensador cerámico de 0,1 uF a través de los terminales Vin y Gnd de las dos placas portadoras.
  • Conecte un capacitor cerámico de 0.1uF a través de los terminales de salida del controlador del motor.

Paso 7: Creación de prototipos: encabezado de matriz de sensor de línea

Creación de prototipos: encabezado de matriz de sensor de línea
Creación de prototipos: encabezado de matriz de sensor de línea
Creación de prototipos: encabezado de matriz de sensor de línea
Creación de prototipos: encabezado de matriz de sensor de línea
Creación de prototipos: encabezado de matriz de sensor de línea
Creación de prototipos: encabezado de matriz de sensor de línea
Creación de prototipos: encabezado de matriz de sensor de línea
Creación de prototipos: encabezado de matriz de sensor de línea

Teensy 3.6 tiene dos ADC: ADC0 y ADC1 que están multiplexados en 25 pines accesibles. Podemos acceder a dos pines cualesquiera de los dos ADC al mismo tiempo. Conectaremos ocho sensores de línea cada uno a ADC0 y ADC1. Los sensores de números pares se conectarán a ADC1 y los sensores de números impares a ADC0. Suelde las conexiones siguiendo los pasos a continuación. Posteriormente conectaremos el sensor de línea usando FFC a adaptador DIP y cable.

  • Conecte todos los pines pares del sensor (16, 14, 12, 10, 8, 6, 4, 2) como se muestra en la imagen. Pase el cable para conectar la clavija 12 del sensor a través del reverso de la placa perfilada.
  • Conecte el pin de control del emisor (PAR) al pin 30 de Teensy.
  • Conecte todos los pines del sensor impares (15, 13, 11, 9, 7, 5, 3, 1) como se muestra en la imagen.
  • Conecte un capacitor electrolítico de 470uF entre Vcc y Gnd.

Si observa de cerca los pines del sensor de línea y sus pines de encabezado correspondientes en el tablero, notará que la fila superior del sensor de línea se asigna a la fila inferior del encabezado en el tablero y viceversa. Esto se debe a que cuando conectamos el sensor de línea al perfboard usando encabezados de doble fila en ángulo recto, las filas se alinearán correctamente. Me tomó bastante tiempo resolver esto y corregir las asignaciones de pines en el programa.

Paso 8: Creación de prototipos: codificador y motor de engranajes micro

Creación de prototipos: codificador y motor de engranajes micro
Creación de prototipos: codificador y motor de engranajes micro
  • Fije el motor de engranajes micro metálicos con codificador utilizando soportes de motor N20.
  • Conecte los cables del motor y del codificador como se muestra en la imagen.
  • Codificador izquierdo - Teensy pines 4 y 0
  • Codificador derecho - Teensy pines 9 y 27

Paso 9: Creación de prototipos: LED

Prototipos - LED
Prototipos - LED
Prototipos - LED
Prototipos - LED

Los dos LED indican si el robot ha detectado un giro o no. He usado una resistencia en serie de 470 ohmios para conectar los LED a Teensy.

  • Ánodo de LED izquierdo al pin Teensy 6
  • Ánodo LED derecho al pin Teensy 8

Paso 10: Creación de prototipos: rupturas

Image
Image
Creación de prototipos: rupturas
Creación de prototipos: rupturas

Ahora que hemos completado todas nuestras soldaduras en la placa perfilada, podemos cortar con cuidado a lo largo del límite marcado en la placa perfilada y quitar los trozos adicionales de placa perfilada. Además, coloque las dos ruedas y la rueda giratoria.

Inserte todas las placas de conexión en sus respectivos zócalos. Para insertar la salida FFC-DIP y para fijar el sensor de línea QTRX-MD-16A, consulte el video.

Paso 11: Descripción general de las bibliotecas de software

Descripción general de las bibliotecas de software
Descripción general de las bibliotecas de software

Programaremos el Teensy en Arduino IDE. Necesitaremos algunas bibliotecas antes de comenzar. Las bibliotecas que usaremos son:

  • Codificador
  • Teensyview
  • EEPROM
  • ADC
  • NXPMotionSense

Y algunos que se han escrito específicamente para este robot,

  • Presionar el botón
  • LineSensor
  • TeensyviewMenú
  • Motores

Las bibliotecas específicas de este robot se describen en detalle y están disponibles para descargar en los siguientes pasos.

Paso 12: Explicación de las bibliotecas - PushButton

Esta biblioteca es para interconectar el tablero de interruptores de botón con el Teensy. Las funciones utilizadas son

PushButton (int leftButtonPin, int centreButtonPin, int rightButtonPin);

Llamar a este constructor creando un objeto configura los pines del botón pulsador en el modo INPUT_PULLUP.

int8_t waitForButtonPress (void);

Esta función espera hasta que se presiona y suelta un botón y devuelve el código de tecla.

int8_t getSingleButtonPress (void);

Esta función comprueba si se presiona y se suelta un botón. Si es así, devuelve el código de la tecla; de lo contrario, devuelve cero.

Paso 13: Explicación de las bibliotecas: sensor de línea

LineSensor es la biblioteca para interconectar la matriz de sensores de línea con Teensy. Las siguientes son las funciones utilizadas.

LineSensor (vacío);

Llamar a este constructor mediante la creación de un objeto inicializa ADC0 y ADC1, lee los valores de umbral, mínimo y máximo de EEPROM y configura los pines del sensor al modo de entrada y el pin de control del emisor al modo de salida.

void calibrate (modo de calibración uint8_t);

Esta función calibra los sensores de línea. El modo de calibración puede ser MIN_MAX o MEDIAN_FILTER. Esta función se explica en detalle en un paso posterior.

void getSensorsAnalog (uint16_t * sensorValue, modo uint8_t);

Lee la matriz de sensores en cualquiera de los tres modos pasados como argumento. El modo es el estado de los emisores y puede ser ON, OFF o TOGGLE. El modo TOGGLE compensa las lecturas del sensor de reflectancia debido a la luz ambiental. Los sensores conectados a ADC0 y ADC1 se leen sincrónicamente.

int getLinePosition (uint16_t * sensorValue);

Calcula la posición de la matriz de sensores sobre la línea mediante el método de promedio ponderado.

uint16_t getSensorsBinary (uint16_t * sensorValue);

Devuelve una representación de 16 bits del estado de los sensores. Uno binario indica que el sensor está sobre la línea y un cero binario indica que el sensor está fuera de línea.

uint8_t countBinary (uint16_t binaryValue);

Pasar la representación de 16 bits de los valores del sensor a esta función devuelve el número de sensores que están sobre la línea.

void getSensorsNormalized (uint16_t * sensorValue, modo uint8_t);

Lee los valores del sensor y restringe cada valor del sensor a sus correspondientes valores mínimo y máximo. A continuación, los valores del sensor se asignan desde su correspondiente rango mínimo a máximo hasta el rango de 0 a 1000.

Paso 14: Explicación de las bibliotecas - TeensyviewMenu

TeensyviewMenu es la biblioteca donde se puede acceder a las funciones del menú de visualización. Las siguientes son las funciones utilizadas.

TeensyViewMenu (vacío);

Llamar a este constructor crea un objeto de clase LineSensor, PushButton y TeensyView.

intro vacío (vacío);

Esto es para navegar por el menú.

prueba nula (nula);

Esto se llama internamente dentro del menú cuando los valores del sensor de línea deben mostrarse en Teensyview para su prueba.

Paso 15: Bibliotecas explicadas - Motores

Motors es la biblioteca que se utiliza para impulsar los dos motores. Las siguientes son las funciones utilizadas.

Motores (vacío);

Llamar a este constructor mediante la creación de un objeto configura el control de dirección del motor y los pines de control PWM en modo de salida.

void setSpeed (int leftMotorSpeed, int rightMotorSpeed);

Llamar a esta función impulsa los dos motores a velocidades pasadas como argumentos. El valor de la velocidad puede oscilar entre -255 y +255 con un signo negativo que indica que la dirección de rotación se invierte.

Paso 16: Prueba - Odometría del codificador

Probaremos los codificadores de rueda magnética y mostraremos la posición y la distancia recorrida por el robot.

Cargue el archivo DualEncoderTeensyview.ino. El programa muestra los tics del codificador en Teensyview. Los tics del codificador aumentan si mueve el robot hacia adelante y disminuyen si lo mueve hacia atrás.

Ahora cargue el EncoderOdometry.ino. Este programa muestra la posición del robot en términos de coordenadas x-y, muestra la distancia total recorrida en centímetros y el ángulo girado en grados.

Me he referido a la Implementación de Dead Reckoning por Odometry en un Robot con R / C Servo Differential Drive de Seattle Robotics Society para determinar la posición a partir de los tics del codificador.

Paso 17: Prueba - Sensores de movimiento del escudo de apoyo

Asegúrese de haber calibrado los sensores de movimiento siguiendo los pasos que se mencionan aquí.

Ahora cargue PropShieldTeensyView.ino. Debería poder ver los valores del acelerómetro, giroscopio y magnetómetro de los tres ejes en Teensyview.

Paso 18: descripción general del programa

El programa para el seguidor de línea avanzado está escrito en Arduino IDE. El programa funciona en la siguiente secuencia que se explica a continuación.

  • Los valores almacenados en EEPROM se leen y se muestra el menú.
  • Al presionar LANZAR, el programa ingresa al ciclo.
  • Se leen los valores normalizados del sensor de línea.
  • El valor binario de la posición de la línea se obtiene utilizando valores de sensor normalizados.
  • El recuento del número de sensores que están sobre la línea se calcula a partir del valor binario de la posición de la línea.
  • Los ticks del codificador se actualizan y la distancia total recorrida, las coordenadas x-y y el ángulo se actualizan.
  • Para diferentes valores de conteo binario que van de 0 a 16, se ejecuta un conjunto de instrucciones. Si el recuento binario está en el rango de 1 a 5 y si los sensores que están sobre la línea están adyacentes entre sí, se llama a la rutina PID. La rotación se realiza en otras combinaciones de valor binario y conteo binario.
  • En la rutina PID (que de hecho es una rutina PD), los motores se accionan a velocidades calculadas en función del error, el cambio en el error y los valores de Kp y Kd.

En la actualidad, el programa no mide los valores de orientación del escudo de apoyo. Este es un trabajo en progreso y se está actualizando.

Sube TestRun20.ino. Veremos cómo navegar por el menú, ajustar la configuración y cómo calibrar los sensores de línea en los siguientes pasos a continuación de los cuales probaremos nuestro robot.

Paso 19: Menú de navegación y configuración

El menú tiene las siguientes configuraciones que se pueden navegar usando los botones izquierdo y derecho y seleccionar usando el botón central. Los ajustes y sus funciones se describen a continuación.

  1. CALIBRAR: Para calibrar sensores de línea.
  2. TEST: Para mostrar los valores del sensor de línea.
  3. LANZAMIENTO: Para iniciar la línea siguiente.
  4. VELOCIDAD MÁX.: Para establecer el límite superior de la velocidad del robot.
  5. VELOCIDAD DE ROTACIÓN: Para establecer el límite superior de la velocidad del robot cuando realiza un giro, es decir, cuando ambas ruedas giran a velocidades iguales en direcciones opuestas.
  6. KP: constante proporcional.
  7. KD: constante derivada.
  8. MODO DE EJECUCIÓN: Para seleccionar entre dos modos de funcionamiento: NORMAL y ACCL. En el modo NORMAL, el robot funciona a velocidades predefinidas correspondientes a los valores de posición de la línea. En el modo ACCL, la VELOCIDAD MÁXIMA del robot se sustituye por VELOCIDAD ACCL en etapas predefinidas de la pista. Esto se puede utilizar para acelerar el robot en secciones rectas de la pista. Los siguientes ajustes son accesibles solo si el MODO DE EJECUCIÓN está configurado como ACCL.
  9. DISTANCIA DE VUELTA: Para establecer la longitud total de la pista de carreras.
  10. ACCL SPEED: Para establecer la velocidad de aceleración del robot. Esta velocidad reemplaza la VELOCIDAD MÁXIMA en diferentes etapas de la pista como se define a continuación.
  11. NO. DE ETAPAS: Para establecer el número de etapas en las que se utiliza ACCL SPEED.
  12. ETAPA 1: Para establecer las distancias de inicio y finalización de la etapa en la que MAX SPEED se sustituye por ACCL SPEED. Para cada etapa, las distancias de inicio y finalización se pueden configurar por separado.

Paso 20: Calibración del sensor de línea

Image
Image

La calibración del sensor de línea es el proceso mediante el cual se determina el valor umbral de cada uno de los 16 sensores. Este valor de umbral se utiliza para decidir si un sensor en particular está sobre la línea o no. Para determinar los valores de umbral de 16 sensores, utilizamos cualquiera de los dos métodos.

FILTRO MEDIANO: En este método, los sensores de línea se colocan sobre la superficie blanca y se toma un número predefinido de lecturas de sensor para los 16 sensores. Se determinan los valores medios de los 16 sensores. El mismo proceso se repite después de colocar los sensores de línea sobre la superficie negra. El valor umbral es el promedio de los valores medios de las superficies en blanco y negro.

MIN MAX: En este método, los valores del sensor se leen repetidamente hasta que el usuario solicita una parada. Se almacenan los valores máximos y mínimos encontrados por cada sensor. El valor umbral es el promedio de los valores mínimo y máximo.

Los valores de umbral así obtenidos se mapean en un rango de 0 a 1000.

La calibración de los sensores de línea por el método MIN MAX se muestra en el video. Después de calibrar los sensores de línea, los datos se pueden visualizar como se muestra en la imagen. La siguiente información esta siendo mostrada.

  • Una representación binaria de 16 bits de la posición de la línea con un 1 binario que indica que el sensor de línea correspondiente está sobre la línea y un 0 binario que indica que el sensor de línea está fuera de línea.
  • Un recuento del número total de sensores que están sobre la línea.
  • Valores mínimos, máximos y de sensor (sin procesar y normalizados) de los 16 sensores, un sensor a la vez.
  • Posición de la línea en el rango de -7500 a +7500.

Los valores mínimos y máximos del sensor de línea se almacenan en EEPROM.

Paso 21: Prueba de funcionamiento

Image
Image

El video es de una prueba de funcionamiento en la que el robot está programado para detenerse después de completar una vuelta.

Paso 22: Reflexiones finales y mejoras

Concurso de robots
Concurso de robots

El hardware que se ensambla para construir este robot no es utilizado en su totalidad por el programa que lo ejecuta. Se podrían realizar muchas mejoras en la parte del programa. Los sensores de movimiento del escudo de apoyo no se utilizan actualmente para determinar la posición y la orientación. Los datos de odometría de los codificadores se pueden combinar con los datos de orientación del escudo de apoyo para determinar con precisión la posición y el rumbo del robot. Estos datos se pueden usar para programar el robot para que aprenda la pista en varias vueltas. Te animo a que experimentes en esta parte y compartas tus resultados.

Buena suerte.

Concurso de robots
Concurso de robots

Segundo premio en el Concurso de Robots

Recomendado: