Escolar Documentos
Profissional Documentos
Cultura Documentos
Neste tutorial vamos aprender a fazer um robô seguidor de linha utilizando o sensor de obstáculo
infravermelho (Você poderá usar o Módulo Segue Faixa – TCRT5000) em conjunto com um Arduino.
Para melhor entendimento deste tutorial é necessário que você já tenha um conhecimento prévio sobre
Arduino e ponte H. Mas não se preocupe pois nossa equipe já produziu outros tutoriais sobre esse assuntos e
você pode conferir alguns destes nos seguintes links: Entradas e Saídas Analógicas e Módulo Ponte H
L298n .
[toc]
Em todo o mundo, competições de robótica possuem modalidades únicas para o seguidor de linha, o que faz
deste projeto algo que nunca irá deixar de ser melhorado.
Esses mesmos conceitos são levados para projetos maiores e mais complexos, tanto acadêmicos quanto
industriais.
Exemplo de aplicação industrial de um robô seguidor de linha
Eles manejavam as prateleiras de produtos dentro do estoque por meio de orientação de faixas no chão. Sua
função era transportar os materiais de um lado para outro, seja para reajustar o estoque ou para levar para
uma área de exportação.
Atualmente o Alibaba evoluiu os robôs, de forma que eles se comunicam, e se localizam, por meio de IA
(Inteligência Artificial).
Como um robô seguidor de linha funciona ?
O funcionamento do robô seguidor de linha é simples. Ele deve seguir andando por cima de uma linha de cor
preta (fita isolante) ou branca.
Os circuitos podem alternar entre as cores do campo e da faixa, no nosso caso iremos assumir que a pista é
branca e a faixa é preta.
Usaremos 2 sensores infravermelho que detectam a presença ou não desta faixa. De acordo com a
combinação dos sensores, o carrinho irá para frente ou virar para um dos lados.
Como sabemos, a luz reflete em superfícies claras e é absorvida em superfícies negras, como a fita isolante.
Sendo assim o LED receptor irá detectar a luz infravermelha no branco e não detectar no preto.
Para uma melhor eficácia do sensor, a superfície em contraste com a faixa preta deve ser branca. Para ajustar
a sensibilidade ao contraste, o modulo possui um potenciômetro de calibração.
Funcionamento do sensor infravermelho
Um sensor infravermelho amplamente utilizado é o TCRT5000, que tem como vantagem seu tamanho e
preço. Porem, ele precisa está próximo ao chão para que seja capaz de identificar a faixa, uma vez que seu
alcance é de até 8mm. Entretanto, ele possui a vantagem de sofrer menos interferências de luzes
infravermelhas externas.
Em contrapartida, a vantagem de usar o sensor de obstáculo é o seu maior alcance possuir ajuste, porem ele é
mais suscetível a interferências das luzes ambientes.
Sensor de obstáculo infravermelho
Nesse tutorial, usaremos o sensor de obstáculo infravermelho. Dessa forma, caso esteja usando o TCRT5000,
fique atento com a distância do chão. Ele precisa ficar com uma distância entre 1mm e 8mm para ser capaz
de detectar a faixa.
Para controlar motores, é comum usarmos um circuito chamado ponte H, ele é capaz por controlar o sentido
de giro do motor e a sua velocidade, usando o PWM.
PWM
PWM (Pulse Width Modulation – Modulação por Largura de Pulso) é uma técnica para obter resultados
analógicos por meios digitais (Leia mais sobre Grandezas digitais e analógicas e PWM).
Essa técnica consiste na geração de uma onda quadrada em uma frequência muito alta em que pode ser
controlada a porcentagem do tempo em que a onda permanece em nível lógico alto, alterando, assim, a
tensão média.
Por exemplo, se a saída é de 5V, porem ela fica apenas 50% do tempo em 5V e outros 50% do tempo em
nível lógico baixo, isso resulta em uma tensão média de 2,5V (50% x 5V).
Dessa forma, esta variável de tempo é capaz de controlar de velocidade do nosso carrinho alterando a tensão
média aplicada no motor.
Os valores de PWM variam de 0 (parado) até 255 (velocidade máxima ou 5 V).
Cada ponte H possui um pino que ativa ou não a ponte H. Caso tenha um sinal de 5V aplicado nele, a ponte
estará ligada, caso seja 0V a ponte estará desligada. Como temos 2 pontes H, temos o Enable A(Ativa A) e o
Enable B (Ativa B).
Jumpers Enable A e B
Se retiramos esse jumper e inserimos um sinal PWM nessas entradas, modularemos a tensão que é enviada
para o motor. Isso ocorre porque a ponte H só ira “funcionar” enquanto o sinal de Enable estiver com 5V,
assim teremos o mesmo efeito de tensão média explicado anteriormente.
Apesar de a ponte H ser controlada por um sinal de 5V, ela pode chavear uma tensão diferente. Podemos, por
exemplo, controlar uma tensão de 6V, vindo de um conjunto de 4 pilhas AA. Nesse caso, apesar de o sinal
PWM ser de 5V ele modulará os 6V nos motores.
A descrição completa sobre como funciona uma ponte H L298N e como controlar a velocidade de um motor
usando uma ponte H L298N pode ser visto nos nossos tutoriais sobre os respectivos assuntos.
Componentes Necessários
Para este projeto iremos utilizar:
1 x Arduino UNO
2 x Sensores de obstaculo infravermelho (ou módulo TCRT5000)
1 x Chassi Robô móvel 2WD ( Ou 2 x Motores DC 5 v com roda + um suporte para o carrinho)
1 x Ponte H L298N
1 x Bateria 9 V + conector (ou fonte semelhante)
Protoboard e Jumpers
Este projeto possui um procedimento de montagem complexo devido ao fato da necessidade de termos
que passar vários fios por um espaço limitado ao tamanho do chassi do seu carrinho.
Declaração de Variáveis
Na primeira parte do código é feita a declaração das variáveis a serem utilizadas. Nota-se que a existe um
grande numero de variáveis utilizando #define, isto é por conta de serem apenas nomes associados a
números, não precisamos fazer contas com essas variáveis, portanto elas não precisam ser do tipo INT,
FLOAT, entre outras.
O fato de declarar algo por meio de #define ocupa menos espaço de memória, o que dá um ganho na
velocidade de execução do programa. As únicas variáveis a serem definidas por um tipo são as que
armazenarão os valores lidos dos sensores (direita e esquerda), essas variáveis são do tipo bool e portanto só
assumem dois estados (FALSE e TRUE).
/*DECLARAÇÃO DE VARIAVEIS*/
#define MotorA_sentido1 2
#define MotorA_sentido2 4
#define MotorB_sentido1 8
#define MotorB_sentido2 9
#define MotorA_PWM 3
#define MotorB_PWM 10
#define veloc0 0
#define veloc1 80
#define veloc2 180
#define veloc3 255
#define Sensor_direita 6
#define Sensor_esquerda 7
bool direita, esquerda;
Cada motor possui 3 pinos: 2 para definir o sentido de rotação da roda (IN1 e IN2 / IN3 e IN4) e 1 pra definir
a velocidade de rotação (Enable A / Enable B)por meio de valores PWM. Lembre-se de que os pinos de
velocidade devem conter o “~” desenhado ao lado da porta na placa Arduino, caracterizando o pino como
PWM.
Declaramos também 4 velocidades de PWM que podem ser interpretadas como PARADO, DEVAGAR,
NORMAL e RÁPIDO, respectivamente. Os sensores foram definidos em suas respectivas portas digitais(6 e
7) e por fim, foram declaradas 2 variáveis do tipo BOOL para armazenar os valores dos sensores.
Função Void Setup()
A função void setup, que roda apenas uma vez, defini todas as configurações necessárias para funcionamento
do sistema.
void setup() {
Serial.begin(9600);
pinMode(MotorA_sentido1, OUTPUT);
pinMode(MotorA_sentido2, OUTPUT);
pinMode(MotorB_sentido1, OUTPUT);
pinMode(MotorB_sentido2, OUTPUT);
pinMode(MotorA_PWM, OUTPUT);
pinMode(MotorB_PWM, OUTPUT);
pinMode(Sensor_direita, INPUT);
pinMode(Sensor_esquerda, INPUT);
}
Nesta função declaramos as variáveis que definem os pinos utilizados no Arduino como sendo
Entrada(INPUT) ou Saída(OUTPUT). Além disso colocamos a função Serial.begin() que inicializa a
comunicação serial entre o Arduino e o computador.
MAS O CARRINHO NÃO RODA LIGADO NA BATERIA ?!?!?! Sim, porém precisamos fazer testes antes
de executar a versão final, para isso utilizamos alguns comandos via serial para poder calibrar sensores,
averiguar execução do programa, entre outros.
Nesta parte do código precisamos mandar um sinal alto e um sinal baixo entre os pares de portas IN1/IN2 e
IN3/IN4. Como nosso carrinho não anda pra trás nós vamos setar essas configurações para que as rodas
girem no mesmo sentido(pra frente no caso).
Veja que os pares no nosso código estão invertidos, isso acontece por que a montagem de hardware foi
invertida entre os motores.
É como se os polos fossem trocados de lugar entre os motores, porém lembre-se que motores DC não
possuem polaridade definida, logo podemos inverter a ligação + e – sem problemas. Isso altera apenas o
sentido para o qual o motor gira. Essa é uma das partes que devem ser testadas antes da montagem final do
carrinho.
As variáveis do tipo BOOL são utilizadas para armazenar os valores digitais lidos pelos sensores.
Para isso, utilizamos as condições IF Else, que são mais comum. São 2 variáveis combinatórias que geram 4
possibilidades, porém a ultima condição é quase “impossível” (true e true), pois seria a leitura dos sensores
detectando a faixa preta ao mesmo tempo (como é um erro estranho, o carrinho deve parar).
Os motores estão ligados em portas DIGITAIS mas lembre-se que estamos utilizando valores PWM, logo as
funções de comando são do tipo analogWrite(porta, PWM). Para que o carrinho possa ter tempo de verificar
o estado dos sensores novamente, alguns delays de curto período são utilizados, mas isso pode variar de
projeto para projeto.
Através das leituras do sensores enviadas para o Arduino por meio das portas digitais, o controlador irá
acionar um motor mais rápido ou mais devagar do que o outro. Os sensores emitem 5 V (faixa preta) ou 0
V(pista branca) para as portas digitais. O Arduino modula os valores de velocidade pelos valores PWM que
variam de 0 volts (0) até 5 volts (255), fazendo isso ao longo de todo trajeto.
Observe que utilizamos apenas 1 bateria para todo o sistema. A bateria que alimenta o Arduino pelo pino P4
energiza não somente o controlador como também a ponte H dos motores por meio do pino Vin do Arduino.
Esta porta é capaz de emitir valores maiores do que os 5 volts que o regulador de tensão da placa utiliza.
Sendo assim a tensão de entrada no pino P4 é a mesma do pino Vin.
Conclusão
Este é um dos projetos mais simples de robótica móvel utilizando Arduino e claro que pode ser melhorando
em muitos aspectos.
Algumas sugestões de melhorias são: controle de velocidade PID, desvio de obstáculos, reconhecimento de
pista, machining learning, etc.
Introdução
O Arduino é uma plataforma amplamente utilizada na prototipagem eletrônica
graças à sua facilidade de programação e implantação. Hoje faremos uso dessas
características para desenvolver um robô seguidor de linha e entender na prática
como essas máquinas amplamente utilizadas na indústria funcionam.
Robôs seguidores de linha em um pátio industrial
Suas aplicações são vastas e, como ilustrado acima, estão presentes principalmente
nos ambientes industriais, transportando cargas por toda fábrica de forma autônoma.
No post de hoje você aprenderá a montar um robô seguidor de linha usando o
Arduino e um par de sensores: um incentivo para que você tenha ainda mais
interesse pelo mundo da robótica e da programação. Veja só:
Montagem do Robô
Para montar seu robô seguidor de linha, você precisará de:
Além disso, você também precisará de ferramentas como chave Phillips e ferro de
solda!
Com tudo em mãos, vamos dar início à montagem do chassi. Confira o passo a passo
nas imagens à seguir:
IMPORTANTE
Antes de mais nada, precisamos salientar que nossos kits são todos confeccionados
em acrílico. Os comercializamos com uma película protetora de papel craft para evitar danos
durante a fabricação e transporte. Vamos mostrar o processo de montagem do kit com a
película apenas para facilitar a visualização do processo, mas caso deseje o aspecto translúcido
do acrílico em seu robô, basta retirar a película, conforme mostrado na imagem abaixo:
Passo 1: posicione os 4 pilares de suporte para a roda boba conforme a imagem abaixo:
Passo 2: Parafuse-os no chassi e, em seguida, parafuse a roda boba sobre eles.
Passo 3: Solde os fios nos motores, conforme a imagem abaixo:
1- Você pode usar fita dupla face emborrachada (VHB) ou cola quente para fixar o Arduino, a
ponte H e a bateria de 9V no chassi;
2- A bateria de 9V foi fixada na parte inferior do chassi, como mostrado abaixo. Ela será a
responsável por fornecer energia ao Arduino, enquanto as pilhas são exclusivamente para o
acionamento dos motores.
3- Os sensores devem ser fixados próximo à roda boba. Para isso, recomendamos fortemente
que seja utilizada cola quente e que estejam espaçados conforme a imagem a seguir:
Ao término dessa etapa, resta apenas a conexão dos fios e a programação do robozinho.
Começando pela conexão, você pode seguir o diagrama abaixo:
Você também pode seguir a tabela de pinos abaixo:
IN1 -> D8
IN2 -> D9
IN3 -> D10
IN4 -> D11
Out_Sensor1 -> D6
Out_Sensor2 -> D7
IMPORTANTE:
É de suma importância manter os jumpers nos pinos Enable do módulo para que seus motores
funcionem, conforme a imagem abaixo:
Programando o Arduino
Para programarmos o Arduino é necessário entender a lógica por trás do funcionamento do
sensores, que serão manipulados pelo nosso código para que o carrinho se torne inteligente.
Você pode conferir essa lógica de funcionamento na imagem a seguir:
Com isso em mente, podemos dar início à programação do robô.
Código
Note que incluímos a variável velocidade no escopo do código. Essa variável é quem informa,
num range de 0 a 255, qual a velocidade em que os motores serão acionados. Em nosso caso, o
melhor valor foi 150, cerca de 60% de sua velocidade máxima. Caso deseje que seu robô ande
mais rápido, basta alterar seu valor respeitando os limites informados.
O Resultado
Após ter seu robozinho montado e programado, chegou a hora de testar seu funcionamento.
Para isso, você deverá desenhar o percurso usando fita preta em uma superfície branca. Você
pode conferir no vídeo abaixo o resultado que obtivemos com esse projeto:
Conclusão
O Arduino serve de protótipo para projetos de várias dimensões. Hoje usando, alguns
componentes simples (Ponte H, Sensor infravermelho) pudemos desenvolver e entender na
prática o funcionamento de um robô largamente utilizado no ambiente industrial.