Índice:

Robô Seguidor de Linha Avançada: 22 Passos (com Imagens)
Robô Seguidor de Linha Avançada: 22 Passos (com Imagens)

Vídeo: Robô Seguidor de Linha Avançada: 22 Passos (com Imagens)

Vídeo: Robô Seguidor de Linha Avançada: 22 Passos (com Imagens)
Vídeo: Criando Robô Seguidor de Linha com Arduino #MaratonaMaker 2024, Julho
Anonim
Image
Image
Prototipagem - Perfboard
Prototipagem - Perfboard

Este é um robô de seguimento de linha avançado baseado no Teensy 3.6 e no sensor de linha QTRX que eu construí e no qual venho trabalhando há algum tempo. Existem algumas melhorias importantes no design e desempenho da minha linha anterior após o robô. A velocidade e a resposta do robô melhoraram. A estrutura geral é compacta e leve. Os componentes são dispostos próximos ao eixo da roda para minimizar o momento angular. Motores de engrenagens de micro metal de alta potência fornecem o torque adequado e as rodas de silicone do cubo de alumínio oferecem a tração necessária em altas velocidades. Escudo de suporte e codificadores de roda permitem que o robô determine sua posição e orientação. Com Teensyview montado a bordo, todas as informações relevantes podem ser visualizadas e parâmetros importantes do programa podem ser atualizados usando botões.

Para começar a construir este robô, você precisará dos seguintes suprimentos (e de muito tempo e paciência à sua disposição).

Suprimentos

Eletrônicos

  • Teensy 3.6 Development Board
  • Escudo de adereço com sensores de movimento
  • Sparkfun TeensyView
  • Matriz de sensor de refletância Pololu QTRX-MD-16A
  • PCB protótipo de lado duplo 15x20cm
  • Regulador de tensão de aumento / redução da Pololu S9V11F3S5
  • Regulador de tensão de aumento ajustável Pololu 4-5-20V U3V70A
  • MP12 6V 1580 rpm microrredutor com codificador (x2)
  • DRV8833 Porta-driver duplo do motor (x2)
  • Bateria Li-Po de 3,7 V, 750 mAh
  • Chave ON / OFF
  • Capacitor eletrolítico 470uF
  • Capacitor eletrolítico 1000uF (x2)
  • Capacitor de cerâmica 0,1uF (x5)
  • Botões de pressão (x3)
  • LED verde de 10 mm (x2)

Hardware

  • Atom Silicone Wheel 37x34mm (x2)
  • Rodízio de bola Pololu com bola de metal 3/8”
  • Suporte do motor N20 (x2)
  • Parafuso e porcas

Cabos e conectores

  • Fios flexíveis 24AWG
  • FFC de 24 pinos para fuga DIP e cabo FFC (Tipo A, comprimento de 150 mm)
  • Cabeçalho redondo de pino feminino
  • Terminal longo de cabeçalho redondo fêmea
  • Cabeçalho fêmea de duas filas em ângulo reto
  • Cabeçalho macho de dupla linha em ângulo reto
  • Cabeçalho de pino macho
  • Cabeçalho de pino de agulha macho

Ferramentas

  • Multímetro
  • Ferro de solda
  • Fio de solda
  • Descascador de fios
  • Cortador de arame

Etapa 1: Visão geral dos sistemas

Tal como acontece com meu projeto anterior de um robô com autobalanceamento, este robô é um conjunto de placas de quebra montadas em uma perfboard que também serve ao propósito de uma estrutura.

Os principais sistemas do robô são descritos a seguir.

Microcontrolador: placa de desenvolvimento Teensy 3.6 com processador ARM Cortex-M4 de 180 MHz de 32 bits.

Sensor de linha: Matriz de sensor de linha de saída analógica de 16 canais QTRX-MD-16A da Pololu em arranjo de densidade média (densidade do sensor de 8 mm).

Acionamento: 6V, 1580 rpm, motoredutores de micro engrenagem de alta potência com codificador magnético e rodas de silicone montadas em cubos de alumínio.

Odometria: pares de codificadores de roda magnética para estimar as coordenadas e distâncias percorridas.

Sensor de orientação: Escudo de suporte com sensores de movimento para estimar a posição e direção do robô.

Fonte de alimentação: bateria lipo 3,7V, 750mAh como fonte de alimentação. O regulador de aumento / redução de 3,3 V alimenta o microcontrolador, sensores e dispositivo de exibição. O regulador de aumento ajustável alimenta os dois motores.

Interface do usuário: Teensyview para exibir informações. Quebra de três botões para aceitar entradas do usuário. Dois números de LEDs verdes de 10 mm de diâmetro para indicação de status durante a execução.

Etapa 2: vamos começar a prototipagem

Image
Image

Estaremos implementando o circuito acima no perfboard. Temos que primeiro manter nossas placas de quebra prontas, soldando os cabeçotes nelas. O vídeo fornecerá uma ideia sobre quais cabeçalhos devem ser soldados em quais placas de breakout.

Depois de soldar os cabeçalhos nas placas de breakout, empilhe o Teensyview e o botão de breakout em cima do Teensy.

Etapa 3: Prototipagem - Perfboard

Prototipagem - Perfboard
Prototipagem - Perfboard

Pegue o perfboard de protótipo de lado duplo 15x20cm e marque o limite com um marcador permanente como mostrado na imagem. Faça orifícios de tamanho M2 para montar a matriz de sensores, roda de rodízio e motores de engrenagem de micro metal em locais marcados com um círculo branco. Mais tarde, cortaremos o perfboard ao longo do limite após soldar e testar todos os componentes.

Começaremos nossa prototipagem soldando os pinos de cabeçalho e soquetes no perfboard. As placas de breakout serão inseridas posteriormente nesses cabeçalhos. Preste muita atenção à posição dos cabeçalhos no perfboard. Estaremos conectando todos os fios com base neste layout de cabeçalhos.

Etapa 4: Prototipagem - Escudo de adereço

Prototipagem - Escudo de adereço
Prototipagem - Escudo de adereço
Prototipagem - Escudo de adereço
Prototipagem - Escudo de adereço
Prototipagem - Escudo de adereço
Prototipagem - Escudo de adereço
Prototipagem - Escudo de adereço
Prototipagem - Escudo de adereço

Vamos primeiro soldar as conexões ao escudo da hélice. Uma vez que estamos usando apenas os sensores de movimento do escudo de hélice, precisamos conectar apenas os pinos SCL, SDA e IRQ além dos pinos de 3V e de aterramento do escudo de hélice.

Assim que a conexão for concluída, insira Teensy e prop shield e calibre os sensores de movimento seguindo as etapas mencionadas aqui.

Etapa 5: Prototipagem - Potência e Terra

Prototipagem - Potência e Terra
Prototipagem - Potência e Terra

Solde todas as conexões de alimentação e aterramento referentes à foto. Insira todas as placas breakout no lugar e garanta a continuidade usando um multímetro. Verifique os diferentes níveis de tensão a bordo.

  • Tensão de saída Li-po (geralmente entre 3 V e 4,2 V)
  • Tensão de saída do regulador de aumento / redução (3,3 V)
  • Tensão de saída do regulador de aumento ajustável (definida para 6V)

Etapa 6: Prototipagem - Porta-drivers do motor

Prototipagem - porta-motoristas
Prototipagem - porta-motoristas
Prototipagem - porta-motoristas
Prototipagem - porta-motoristas
Prototipagem - porta-motoristas
Prototipagem - porta-motoristas

A placa portadora do driver de motor duplo DRV8833 pode fornecer correntes de pico contínuas de 1,2 A e de pico de 2 A por canal. Vamos conectar os dois canais em paralelo para acionar um motor. Solde as conexões seguindo os passos abaixo.

  • Paralela as duas entradas e as duas saídas do portador do driver do motor, conforme mostrado na imagem.
  • Conecte os fios de controle de entrada ao driver do motor.
  • Conecte um capacitor eletrolítico de 1000uF e um capacitor de cerâmica de 0,1 uF nos terminais Vin e Gnd das duas placas portadoras.
  • Conecte um capacitor de cerâmica de 0,1 uF nos terminais de saída do driver do motor.

Etapa 7: Prototipagem - Cabeçalho da Matriz do Sensor de Linha

Prototipagem - Cabeçalho de matriz de sensor de linha
Prototipagem - Cabeçalho de matriz de sensor de linha
Prototipagem - Cabeçalho de matriz de sensor de linha
Prototipagem - Cabeçalho de matriz de sensor de linha
Prototipagem - Cabeçalho de matriz de sensor de linha
Prototipagem - Cabeçalho de matriz de sensor de linha
Prototipagem - Cabeçalho de matriz de sensor de linha
Prototipagem - Cabeçalho de matriz de sensor de linha

Teensy 3.6 tem dois ADCs - ADC0 e ADC1 que são multiplexados em 25 pinos acessíveis. Podemos acessar quaisquer dois pinos dos dois ADCs ao mesmo tempo. Iremos conectar oito sensores de linha cada a ADC0 e ADC1. Os sensores de número par serão conectados ao ADC1 e os sensores de número ímpar ao ADC0. Solde as conexões seguindo os passos abaixo. Mais tarde, conectaremos o sensor de linha usando FFC para adaptador DIP e cabo.

  • Conecte todos os pinos do sensor pares (16, 14, 12, 10, 8, 6, 4, 2) como mostrado na imagem. Passe o fio para conectar o pino 12 do sensor pelo lado reverso do perfboard.
  • Conecte o pino de controle do emissor (MESMO) ao pino 30 de Teensy.
  • Conecte todos os pinos de sensor ímpares (15, 13, 11, 9, 7, 5, 3, 1) conforme mostrado na imagem.
  • Conecte um capacitor eletrolítico 470uF entre Vcc e Gnd.

Se você observar de perto os pinos do sensor de linha e seus pinos de cabeçalho correspondentes na placa, você notará que a linha superior do sensor de linha mapeia para a linha inferior da plataforma na placa e vice-versa. Isso ocorre porque quando conectamos o sensor de linha ao perfboard usando cabeçalhos de dupla linha em ângulo reto, as linhas serão alinhadas corretamente. Levei algum tempo para descobrir isso e corrigir as atribuições dos pinos no programa.

Etapa 8: Prototipagem - Motor Micro Gear e Codificador

Prototipagem - Motor Micro Gear e Codificador
Prototipagem - Motor Micro Gear e Codificador
  • Fixe o motor redutor de micro metal com codificador usando suportes de motor N20.
  • Conecte os fios do motor e do codificador conforme mostrado na imagem.
  • Codificador esquerdo - Pinos Teensy 4 e 0
  • Codificador direito - pinos Teensy 9 e 27

Etapa 9: Prototipagem - LEDs

Prototipagem - LEDs
Prototipagem - LEDs
Prototipagem - LEDs
Prototipagem - LEDs

Os dois LEDs indicam se o robô detectou uma curva ou não. Usei um resistor da série de 470 ohms para conectar os LEDs ao Teensy.

  • Ânodo LED esquerdo para o pino 6 de Teensy
  • Ânodo LED direito para pino Teensy 8

Etapa 10: Prototipagem - Breakouts

Image
Image
Prototipagem - Breakouts
Prototipagem - Breakouts

Agora que completamos todas as nossas soldas no perfboard, podemos cortar cuidadosamente ao longo do limite marcado no perfboard e remover os pedaços extras do perfboard. Além disso, prenda as duas rodas e a roda de rodízio.

Insira todas as placas de breakout em seus respectivos soquetes. Para inserir o breakout FFC-DIP e fixar o sensor de linha QTRX-MD-16A, consulte o vídeo.

Etapa 11: Visão geral das bibliotecas de software

Visão geral das bibliotecas de software
Visão geral das bibliotecas de software

Vamos programar o IDE Teensy no Arduino. Precisaremos de algumas bibliotecas antes de começar. As bibliotecas que usaremos são:

  • Codificador
  • Teensyview
  • EEPROM
  • ADC
  • NXPMotionSense

E alguns que foram escritos especificamente para este robô,

  • Botão de apertar
  • LineSensor
  • TeensyviewMenu
  • Motores

As bibliotecas específicas para este robô são discutidas em detalhes e estão disponíveis para download nas próximas etapas.

Etapa 12: Bibliotecas explicadas - PushButton

Esta biblioteca serve para fazer a interface da placa de breakout de botão de pressão com o Teensy. As funções utilizadas são

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

Chamar esse construtor criando um objeto configura os pinos do botão para o modo INPUT_PULLUP.

int8_t waitForButtonPress (void);

Esta função espera até que um botão seja pressionado e solto e retorna o código da tecla.

int8_t getSingleButtonPress (void);

Esta função verifica se um botão é pressionado e liberado. Se sim, retorna o código-chave, senão retorna zero.

Etapa 13: Bibliotecas explicadas - Sensor de linha

LineSensor é a biblioteca para fazer a interface da matriz do sensor de linha com o Teensy. A seguir estão as funções usadas.

LineSensor (void);

Chamar este construtor criando um objeto inicializa ADC0 e ADC1, lê o limite, os valores mínimo e máximo da EEPROM e configura os pinos do sensor para o modo de entrada e o pino de controle do emissor para o modo de saída.

void calibrate (uint8_t calibraçãoMode);

Esta função calibra os sensores de linha. O calibraçãoMode pode ser MIN_MAX ou MEDIAN_FILTER. Esta função é explicada em detalhes em uma etapa posterior.

void getSensorsAnalog (uint16_t * sensorValue, modo uint8_t);

Lê a matriz do sensor em qualquer um dos três modos passados como argumento. O modo é o estado dos emissores e pode ser ON, OFF ou TOGGLE. O modo TOGGLE compensa as leituras do sensor de refletância devido à luz ambiente. Os sensores conectados ao ADC0 e ADC1 são lidos de forma síncrona.

int getLinePosition (uint16_t * sensorValue);

Calcula a posição da matriz do sensor sobre a linha pelo método da média ponderada.

uint16_t getSensorsBinary (uint16_t * sensorValue);

Retorna uma representação de 16 bits do estado dos sensores. Um binário indica que o sensor está fora da linha e um zero binário indica que o sensor está fora da linha.

uint8_t countBinary (uint16_t binaryValue);

Passar a representação de 16 bits dos valores do sensor para esta função retorna o número de sensores que estão além da linha.

void getSensorsNormalized (uint16_t * sensorValue, modo uint8_t);

Lê os valores do sensor e restringe cada valor do sensor aos seus valores mínimo e máximo correspondentes. Os valores do sensor são então mapeados de seu intervalo mínimo a máximo correspondente até o intervalo de 0 a 1000.

Etapa 14: Bibliotecas explicadas - TeensyviewMenu

TeensyviewMenu é a biblioteca onde as funções do menu de exibição podem ser acessadas. A seguir estão as funções usadas.

TeensyViewMenu (vazio);

Chamar esse construtor cria um objeto da classe LineSensor, PushButton e TeensyView.

void intro (void);

Isso é para navegar no menu.

teste de vazio (vazio);

Isso é chamado internamente no menu quando os valores do sensor de linha devem ser exibidos no Teensyview para teste.

Etapa 15: Bibliotecas explicadas - motores

Motors é a biblioteca usada para acionar os dois motores. A seguir estão as funções usadas.

Motores (vazio);

Chamar esse construtor criando um objeto configura o controle de direção do motor e os pinos de controle PWM para o modo de saída.

void setSpeed (int leftMotorSpeed, int rightMotorSpeed);

Chamar essa função aciona os dois motores em velocidades passadas como argumentos. O valor da velocidade pode variar de -255 a +255 com um sinal negativo indicando que a direção de rotação está invertida.

Etapa 16: Teste - Odometria do codificador

Testaremos os codificadores de roda magnética e exibiremos a posição e distância percorrida pelo robô.

Faça upload do DualEncoderTeensyview.ino. O programa exibe as marcações do codificador no Teensyview. O codificador aumenta o tique-taque se você mover o robô para frente e diminui se você movê-lo para trás.

Agora carregue o EncoderOdometry.ino. Este programa exibe a posição do robô em termos de coordenadas x-y, exibe a distância total percorrida em centímetros e o ângulo girado em graus.

Consultei Implementando Dead Reckoning por Odometria em um Robô com R / C Servo Diferencial Drive da Seattle Robotics Society para determinar a posição de tiques do codificador.

Etapa 17: Teste - Sensores de movimento do escudo de proteção

Certifique-se de ter calibrado os sensores de movimento seguindo as etapas mencionadas aqui.

Agora carregue o PropShieldTeensyView.ino. Você deve ser capaz de ver os valores do acelerômetro, giroscópio e magnetômetro de todos os três eixos no Teensyview.

Etapa 18: Visão geral do programa

O programa para o seguidor de linha avançado é escrito em Arduino IDE. O programa funciona na seguinte seqüência explicada a seguir.

  • Os valores armazenados na EEPROM são lidos e o menu é exibido.
  • Ao pressionar LAUNCH, o programa entra no loop.
  • Os valores normalizados do sensor de linha são lidos.
  • O valor binário da posição da linha é obtido usando os valores normalizados do sensor.
  • A contagem do número de sensores que estão sobre a linha é calculada a partir do valor binário da posição da linha.
  • Os tiques do codificador são atualizados e a distância total percorrida, as coordenadas x-y e o ângulo são atualizados.
  • Para diferentes valores de contagem binária variando de 0 a 16, um conjunto de instruções é executado. Se a contagem binária estiver na faixa de 1 a 5 e se os sensores que estão acima da linha forem adjacentes uns aos outros, a rotina PID é chamada. A rotação é realizada em outras combinações de valor binário e contagem binária.
  • Na rotina PID (que na verdade é uma rotina PD), os motores são acionados em velocidades calculadas com base no erro, alteração no erro, valores de Kp e Kd.

O programa no momento não mede os valores de orientação do escudo de suporte. Este é um trabalho em andamento e está sendo atualizado.

Carregue TestRun20.ino. Veremos como navegar no menu, ajustar as configurações e como calibrar os sensores de linha nas próximas etapas, após as quais testaremos nosso robô.

Etapa 19: Menu de navegação e configurações

O menu tem as seguintes configurações que podem ser navegadas usando os botões esquerdo e direito e selecionadas usando o botão central. As configurações e suas funções são descritas a seguir.

  1. CALIBRAR: Para calibrar os sensores de linha.
  2. TESTE: Para exibir os valores do sensor de linha.
  3. LANÇAMENTO: Para começar a seguir a linha.
  4. VELOCIDADE MÁXIMA: Para definir o limite superior da velocidade do robô.
  5. VELOCIDADE DE GIRO: Para definir o limite superior da velocidade do robô quando ele executa uma curva, ou seja, quando ambas as rodas giram em velocidades iguais em direções opostas.
  6. KP: Constante proporcional.
  7. KD: Constante derivada.
  8. MODO DE EXECUÇÃO: Para selecionar entre dois modos de operação - NORMAL e ACCL. No modo NORMAL, o robô funciona em velocidades predefinidas correspondentes aos valores da posição da linha. No modo ACCL, o MAX SPEED do robô é substituído por ACCL SPEED em estágios predefinidos da pista. Isso pode ser utilizado para acelerar o robô em seções retas da pista. As configurações a seguir estão acessíveis apenas se o MODO DE EXECUÇÃO estiver definido como ACCL.
  9. LAP DISTANCE: Para definir o comprimento total da pista de corrida.
  10. ACCL SPEED: Para definir a velocidade de aceleração do robô. Esta velocidade substitui MAX SPEED em diferentes estágios da pista, conforme definido abaixo.
  11. NÃO. OF STAGES: Para definir o número de estágios onde ACCL SPEED é usado.
  12. ESTÁGIO 1: Para definir as distâncias de início e fim do estágio em que MAX SPEED é substituído por ACCL SPEED. Para cada estágio, as distâncias inicial e final podem ser definidas separadamente.

Etapa 20: calibração do sensor de linha

Image
Image

A calibração do sensor de linha é o processo pelo qual o valor limite de cada um dos 16 sensores é determinado. Este valor limite é usado para decidir se um determinado sensor está acima da linha ou não. Para determinar os valores limite de 16 sensores, usamos um dos dois métodos.

FILTRO MEDIANO: Neste método, os sensores de linha são colocados acima da superfície branca e um número predefinido de leituras do sensor é feito para todos os 16 sensores. Os valores médios de todos os 16 sensores são determinados. O mesmo processo é repetido após colocar os sensores de linha sobre a superfície preta. O valor limite é a média dos valores medianos das superfícies pretas e brancas.

MIN MAX: Neste método, os valores do sensor são lidos repetidamente até que o usuário solicite uma parada. Os valores máximo e mínimo encontrados por cada sensor são armazenados. O valor limite é a média dos valores mínimo e máximo.

Os valores de limite assim obtidos são mapeados para o intervalo de 0 a 1000.

A calibração dos sensores de linha pelo método MIN MAX é mostrada no vídeo. Após calibrar os sensores de linha, os dados podem ser visualizados conforme mostrado na imagem. As seguintes informações são exibidas.

  • Uma representação binária de 16 bits da posição da linha com um binário 1 indicando que o sensor de linha correspondente está acima da linha e um binário 0 indicando que o sensor de linha está fora da linha.
  • Uma contagem do número total de sensores que estão além da linha.
  • Valores mínimo, máximo e do sensor (bruto e normalizado) dos 16 sensores, um sensor por vez.
  • Posição da linha no intervalo de -7500 a +7500.

Os valores mínimo e máximo do sensor de linha são armazenados na EEPROM.

Etapa 21: Execução de teste

Image
Image

O vídeo é de um teste em que o robô está programado para parar após completar uma volta.

Etapa 22: Considerações Finais e Melhorias

Concurso de Robôs
Concurso de Robôs

O hardware que é montado para construir este robô não é utilizado por completo pelo programa que o executa. Muitas melhorias poderiam ser feitas na parte do programa. Os sensores de movimento do protetor de hélice não são usados no momento para determinar a posição e a orientação. Os dados de odometria dos codificadores podem ser combinados com os dados de orientação do escudo da hélice para determinar com precisão a posição e a direção do robô. Esses dados podem então ser usados para programar o robô para aprender a pista em várias voltas. Eu encorajo você a experimentar nesta parte e compartilhar seus resultados.

Boa sorte.

Concurso de Robôs
Concurso de Robôs

Segundo Prêmio no Concurso de Robôs

Recomendado: