Este post trata-se de um tutorial que mostra os passos para montagem de um robô seguidor de linha usando a tecnologia Arduino. Apesar de usar vários componentes prontos, em algumas das etapas eu faço algumas improvisações, o que dá um certo toque “hand made” no robô.
Para criação do robô são necessários os seguintes materiais:
- 1 placa Arduino UNO
- 1 driver para motor L298N
- 1 placa de acrílico retangular de 20 cm x 10 cm
- 2 motores DC com caixa de redução e suas respectivas rodas
- 1 roda boba ou 1 roda omnidirecional
- 1 conector de bateria 9V
- 1 bateria 9V alcalina ou recarregável com boa corrente (mín 320 mAh)
- jumpers de conexão
- 2 sensores de linha TCRT5000 ou similar
- 1 mini protoboard
- palitos de sorvete ou hashi
- 2 parafusos M3 x 4 cm com 3 porcas para cada parafuso
- 2 parafusos M3 x 5 cm com 2 porcas para cada parafuso
- 6 (ou mais) parafusos M3 (ou M2) x 1,5 cm com porca
- 1 ferro de solda
Esquema eletrônico:
Para a montagem do robô utilizaremos o esquema eletrônico abaixo. Consulte-o sempre que surgir alguma dúvida quanto às ligações eletrônicas.
Passo 1:
O primeiro passo é soldar (ou emendar) dois fios (ou jumpers) nos terminais dos motores DC (motor acoplado em caixa de redução) e fixar o motor na placa de acrílico. A fixação dos motores na placa pode ser feita através de cola (tipo super bonder).
Ao fixar os motores, foi respeitada uma distância de aproximadamente 5 cm da caixa de redução (em amarelo) até um das extremidades da placa de acrílico. Também procurou-se deixar os terminais dos motores voltados para a parte interna.
Passo 2:
Uma vez fixos os motores, agora é só acoplar as rodas. Esses motores e rodas costumam ser vendidos em conjunto. Veja as imagens abaixo que mostram a finalização do passo 2:
Passo 3:
O passo 3 consiste da fixação de uma roda boba ou roda omnidirecional no que será a parte traseira do robô. Abaixo você pode ver como é a aparência dessas rodas embora existam variações:
A fixação da roda deve ser feita de maneira que a placa de acrílico fique à mesma altura do chão em ambas extremidades do robô. Para você atingir esse objetivo, você pode utilizar parafusos, espaçadores ou fazer uma pequena estrutura de palitos como calço para a roda. Se sua opção for por usar parafusos ou espaçadores, uma maneira precisa de fazer furos no acrílico é utilizar a ponta de um ferro de solda, conforme mostra a imagem abaixo:
Nesta montagem, usei parafusos M3 para fazer a fixação de uma roda omnidirecional. Veja nas imagens abaixo a conclusão desta etapa e também um exemplo de uso de palitos como calço para fixação de uma roda boba (uma alternativa):
Passo 4:
No passo 4 faremos a montagem de um suporte para bateria 9V usandos alguns palitos (sorvete e hashi). Não costumo ter um padrão para este suporte. Neste caso irei aproveitar as sobras do parafuso da roda como parte da estrutura para o suporte. O importante é que a bateria tenha um local no qual ela fique presa. Se você quiser optar por algo mais fácil, poderá simplesmente colar a bateria com fita adesiva.
Passo 5:
Neste passo farei a fixação da placa Arduino e da placa do driver L298N no acrílico. Para isto, realizarei pequenas furações no acrílico usando o ferro de solda e usarei parafusos M3 (ou M2) por 1,5 cm para fixar ambas placas. Farei a fixação de forma que a placa do driver L298N fique sob o acrílico (embaixo) e a placa Arduino fique fixada acima do acrílico. Desta forma aproveitando melhor o espaço.
Primeiramente eu posiciono as placas de modo a calcular seu posicionamento, conforme ilustra as imagens abaixo:
A placa do driver ficará logo abaixo da placa Arduino. Eu sugiro que ela esteja centraliza, próximo aos motores, confira as posições sugeridas nas imagens anteriores.
Uma vez calculadas as posições, eu faço algumas furações no acrílico usando a ponta de um ferro de solda para possibilitar a fixação das placas através de parafusos, conforme ilustra a imagem abaixo:
Então, eu fixo primeiramente a placa do driver L298N, conforme ilustra a figura abaixo:
Na sequência, eu uso um pequeno isolante para evitar o contato da cabeça de um dos parafusos que prendem o driver com a placa Arduino que será fixada acima. Este tipo de cuidado é importante para evitar curto-circuitos na placa. Veja a próxima figura:
A seguir, faço a fixação das placas Arduino e driver L298N, conforme mostra a sequência de imagens a seguir:
Passo 6:
Neste passo conectaremos os terminais dos motores ao driver L298N através dos fios já soltados ou presos nos motores (passo 1) . Na imagem abaixo podemos identificar os terminais motor A e motor B da placa do driver:
Considerando os terminais do motor A, conectaremos em sua primeira entrada o terminal do motor mais próximo do acrílico e na segunda entrada conectaremos o terminal do motor que fica mais distante do acrílico.
Considerando os terminais do motor B, conectaremos em sua primeira entrada o terminal do motor que fica mais distante do acrílico e na segunda entrada conectaremos o terminal do motor mais próximo do acrílico.
As imagens abaixo ilustram a conclusão desta etapa:
Passo 7
Nesta etapa fiz a fixação de um interruptor na lateral do acrílico usando cola. Fixei de modo que o interruptor ficou sob o acrílico. Veja nas imagens abaixo:
Passo 8
Neste passo eu fiz a fixação de uma mini-protoboard posicionada na parte superior do acrílico, centralizada entre os motos. Veja a imagem:
Passo 9
Nesta etapa conectaremos um conector de bateria de 9V ao interruptor e à alimentação da placa driver L298N. O conector de bateria 9V tem dois fios: vermelho para positivo e preto para negativo. O fio preto (negativo) será conectado diretamente ao GND do driver (veja esquema no passo 6). Já o fio vermelhor (positivo) será conectado ao interruptor, e o segundo terminal do interruptor será conectado ao pino 6-35V do driver (veja esquema no passo 6). Qualquer dúvida sobre as conexões, consulte o esquema apresentado no início deste tutorial. Abaixo, veja uma ilustração desta conexão:
Passo 10
Dos mesmos pinos do driver (pino 6-35V e pino GND) devemos usar jumpers para ligar alimentação da placa Arduino Uno, que se encontra no lado oposto do acrílico. Desta forma, primeiramente farei um furo no acrílico (entre a protoboard e a placa Arduino) e depois usarei dois jumpers para conectar o GND do driver ao GND do Arduino e o pino 6-35V do driver ao Vin do Arduino. Veja nas imagens abaixo, o resultado dessas conexões:
Passo 11
Agora finalizaremos a parte dos motores, conectando 4 pinos do Arduino aos pinos de entrada do driver L298N. Conectaremos o pino 7 do Arduino na entrada IN1, o pino 6 na IN2, pino 5 na IN3 e pino 4 na IN4. A imagem a abaixo mostra o esquema de ligações a serem realizadas:
Os terminais do driver IN1 e IN2 controlam o motor A, os terminais IN3 e IN4 controlam o motor B. Para essa ligação é indicado o uso de jumpers macho-fêmea. Veja abaixo a finalização desta etapa:
Passo 12
Estamos quase lá. Agora faremos a fixação dos sensores. Para fixação dos sensores, é necessário fazer duas perfurações na parte da frente do acrílico, sugiro uma distância de aproximadamente 3,5 cm entre os dois furos. Abaixo mostro as furações que fiz utilizando ferro de solda:
Depois disso, utilizo 2 parafusos M3 com 4 cm de comprimento para fixar os sensores de linha. Uso fita isolante para prender os sensores no parafuso M3. Veja na imagem:
A seguir, utilizo 2 porcas em cada parafuso para prender os parafusos no acrílico. O resultado pode ser visto nas imagens abaixo:
Após isso eu ainda faço uma nova furação no acrílico, entre a placa Arduino e a protoboard para passar as conexões dos sensores. Esta nova furação é mais ampla devido a quantidade de jumpers, veja na imagem:
Passo 13
Nesta etapa finalizamos nossa montagem. Para isso precisamos conectar os pinos GND dos sensores ao GND do Arduino, os pinos VCC dos sensores ao pino 5V do Arduino e os pinos de sinal dos sensores nas entras A0 e A1 do Arduino. Para isso será necessário também usar a protoboard. As ligações eletrônicas realizadas nesta etapa são ilustradas pela imagem abaixo:
Primeiramente eu conecto o pino 5V e o pino GND do Arduino em duas colunas distintas da protoboard. Conforme imagem abaixo:
Então conectamos o pino de sinal do sensor da esquerda ao pino A0 do Arduino e o pino de sinal do sensor da direita ao pino A1 do Arduino. Também conectamos os terminais GND dos sensores na coluna da protoboard a qual conectamos o GND do Arduino. Depois conectamos os terminais VCC dos sensores na coluna da protoboard a qual conectamos o terminal 5V do Arduino. Veja o resultado dessa etapa nas imagens abaixo:
Passo 14
Conecte o cabo USB à placa Arduino e ao computador, então use o editor do Arduino para transmitir o código abaixo:
#define RightMotorForward 7 #define RightMotorBackward 6 #define LeftMotorForward 5 #define LeftMotorBackward 4 #define sensorL A0 #define sensorR A1 #define FW 55 #define TR 70 #define PAUSE 100 void setup(){ pinMode(RightMotorForward, OUTPUT); pinMode(LeftMotorForward, OUTPUT); pinMode(LeftMotorBackward, OUTPUT); pinMode(RightMotorBackward, OUTPUT); pinMode(sensorL,INPUT); pinMode(sensorR,INPUT); Serial.begin(9600); } void loop(){ int left = analogRead(sensorL); int right = analogRead(sensorR); Serial.print("Leitura de luminosidade sensor L: "); Serial.println(left); Serial.print("Leitura de luminosidade sensor R: "); Serial.println(right); if (left > 100 && right > 100){ moveForward(); } else if (left < 100){ turnLeft(); } else if (right < 100){ turnRight(); } delay(PAUSE); } void moveForward(){ motorLForward(); motorRForward(); delay(FW); moveStop(); } void turnRight(){ Serial.println("Vira à direita"); motorLForward(); delay(TR); moveStop(); } void turnLeft(){ Serial.println("Vira à esquerda"); motorRForward(); delay(TR); moveStop(); } void moveStop(){ digitalWrite(RightMotorForward, LOW); digitalWrite(LeftMotorForward, LOW); digitalWrite(RightMotorBackward, LOW); digitalWrite(LeftMotorBackward, LOW); } void motorRForward(){ digitalWrite(RightMotorForward, HIGH); digitalWrite(RightMotorBackward, LOW); } void motorRBackward(){ digitalWrite(RightMotorForward, LOW); digitalWrite(RightMotorBackward, HIGH); } void motorLForward(){ digitalWrite(LeftMotorForward, HIGH); digitalWrite(LeftMotorBackward, LOW); } void motorLBackward(){ digitalWrite(LeftMotorForward, LOW); digitalWrite(LeftMotorBackward, HIGH); }
Passo 15
Agora é só testar e aproveitar o seu robô seguidor de linha:
Veja abaixo um pequeno vídeo dele em funcionamento. Para outros vídeos, confira outras postagens deste site. Espero que este tutorial seja útil.