Construa um Robô Minhoca

Tempo de leitura: 8 minutes

Características Gerais

Em geral projetamos nossos robôs autônomos utilizando rodas ou esteiras para sua locomoção, pois são alternativas bastante práticas e funcionais. A proposta do presente projeto é a idealização de um robô autônomo, que se locomove de modo um pouco diferente, semelhante a uma minhoca (Figura 1).

Figura 1 - Protótipo Robô Minhoca.
Figura 1 – Protótipo Robô Minhoca.

Para o controle do robô, optamos pelo uso do Arduino, uma vez que é bastante atrativo aos iniciantes em microcontroladores. Como desejamos um robô autônomo, precisamos empregar um sensor exteroceptivo (tipo de sensor que detecta alguma condição no ambiente em volta do robô). Neste caso, o sensor será responsável por verificar se há algum obstáculo na frente do robô. Aplicaremos o conhecido sensor ultrassônico HC-SR04 (Figura 2), que apresenta baixo custo, boa precisão e fácil utilização.

Figura 2 - Sensor ultrassônico HC-SR04
Figura 2 – Sensor ultrassônico HC-SR04

Para locomoção do robô, optamos pela utilização de servos de posição, modelo utilizado em parabólicas, devido seu baixo custo. Também apresentam um bom torque, igual a 4kg.cm, segundo o fabricante. Porém, outros servos de posição poderão ser aplicados no projeto do leitor. O servo de parabólica pode ser visto na Figura 3.

Figura 3 - Servo de parabólica para a locomoção do robô.
Figura 3 – Servo de parabólica para a locomoção do robô.

Eletrônica

O diagrama esquemático completo do Robô Minhoca pode ser apreciado na Figura 4.

Figura 4 - Diagrama esquemático do Robô Minhoca.
Figura 4 – Diagrama esquemático do Robô Minhoca.

O hardware é simplificado pela utilização do Arduino. No esquemático da Figura 4, estamos representando o modelo Arduino UNO/Duemilanove, porém outros poderão ser utilizados no robô com as devidas modificações. Nada impede também, de serem aplicados outros microcontroladores (PIC, ARM, 8051, etc), além de um AVR dedicado (standalone). O robô contém duas alimentações independentes, uma bateria de 9V alcalina para os circuitos lógicos e um conjunto de 4 pilhas AA alcalinas exclusivas para os servo-motores. Com esta separação, ruídos originados nos servos não irão causar problemas nos circuitos lógicos. A bateria de 9V é ligada na entrada Vin do Arduino, que admite até 12V. O próprio regulador interno de 5V da placa foi usado para alimentação do sensor ultrassônico.

A chave ON/OFF é do tipo H-H de dois polos e duas posições. Metade dela envia alimentação para os servos, passando por D2, um diodo 1N4007 que provoca uma queda de tensão de aproximadamente 0,7V, garantindo uma tensão de 5,3V sobre os servos (sua alimentação típica é de 5V, porém esses 300mV adicionais não causarão problemas). O pino de trigger do sensor ultrassônico vai ligado do pino digital 12 do Arduino e o pino de Echo no digital 13. O processador gera um pulso de 10µs no trigger e o sensor gera um sinal de eco diretamente proporcional à distância para um obstáculo.

O pino digital 9 do Arduino controla o servo traseiro do robô (servo back). E o servo frontal, por sua vez, é controlado pelo pino digital 8. Um LED vermelho comum (D1) com seu resistor limitador de corrente (R1) é controlado pelo pino digital 5 para efeitos visuais.

 

Programação

O código do robô foi escrito na Arduino IDE (disponível gratuitamente em arduino.cc) e o mesmo será analisado parte por parte a seguir. No Box 1 apresentamos as configurações do ambiente do projeto.

Box 1 – Configurações do ambiente.
Box 1 – Configurações do ambiente.

Primeiro são incluídas as bibliotecas “Servo.h” e “Ultrasonic.h”. Optou-se pela utilização de ambas para simplificar o código. A primeira serve para o controle dos dois servos de posição do Robô Minhoca, e a segunda para manipulação do sensor ultrassônico. Logo após, temos o mapeamento de hardware, para atribuirmos os pinos do Arduino conforme o diagrama esquemático da Figura 4. Em seguida, atribuem-se objetos aos dois servos do robô com a palavra reservada “Servo”, presente na biblioteca Servo.h. Os servos foram nomeados como “servoMotor”, para o servo frontal e “servoMotorBack” para o servo traseiro.

Com a palavra reservada “Ultrasonic” determinam-se os pinos do sensor ultrassônico, sendo o pino 12 do Arduino para o trigger e o 13 para o Echo. Os protótipos das funções auxiliares são declarados em seguida, de acordo com as boas práticas da Linguagem C tradicional. A função “robotSensor” é responsável por retornar a distância em centímetros medida pelo sensor ultrassônico. A função “wormAhead” move o robô para frente e “wormReturn” efetua o desvio de obstáculos, quando forem detectados.

No Box 2, podemos conferir a função Setup, que contém as configurações iniciais da unidade robótica.

Box 2 - Função Setup.
Box 2 – Função Setup.

Com a função da Arduino IDE “pinMode” determinam-se os pinos que serão entrada “INPUT” e saída “OUTPUT”. A função “attach” determina o pino em que os servos estão ligados no Arduino, conforme nosso mapeamento de hardware. A função “digitalWrite”, escreve no respectivo pino, no caso estamos iniciando o LED desligado, conforme linha 54. Na linha 55, chamamos a função “wormAhead” para que o Robô Minhoca comece a se movimentar para frente. No Box 3 pode-se conferir o loop infinito do nosso código.

Box 3 - Loop Infinito.
Box 3 – Loop Infinito.

O loop infinito se inicia com a declaração da variável local do tipo inteiro “leitura” que receberá o valor retornado da função “robotSensor”, que já consistirá na distância em centímetros para um obstáculo frontal. Em seguida, testa-se o valor da variável. Se for menor que 15 (portanto, distância para um obstáculo frontal é inferior a 15 centímetros), efetua o procedimento de desvio de obstáculo. Inicialmente, o LED liga, indicando a detecção de um obstáculo. Após, a função “wormReturn” é chamada 3 vezes, para que o procedimento de desvio se complete (conforme mecânica do robô). Após nova leitura, ou sempre que a distância para um obstáculo for igual ou superior a 15cm, é processado o laço “else”. Este laço desliga o LED e mantém o robô movimentando-se para frente, com a chamada da função “wormAhead”.

Após o loop infinito, ocorre o desenvolvimento das funções auxiliares, no Box 4, apresentamos a função de leitura de distância.

Box 4 – Função que calcula a distância para obstáculos frontais.

A biblioteca “Ultrasonic.h” simplifica consideravelmente a função “robotSensor”, responsável pela leitura do sensor e cálculo de distância. Inicialmente geramos um sinal de trigger através da função “digitalWrite” e do delay em microssegundos “delayMicroseconds” da própria IDE do Arduino, garantindo os 10µs necessários para o acionamento do sensor. O valor do pulso de eco já em microssegundos é armazenado na variável local “microsec”. Em seguida, a função “convert” da biblioteca “Ultrasonic.h” realiza a conversão da medida do eco em microssegundos, para o valor de distância em centímetros. Um delay de 100ms é adicionado para taxa de atualização entre as leituras. Por fim, o valor da distância já em centímetros é retornado pela função. As duas funções de controle de movimento do robô são apresentadas no Box 5.

Box 5 - Funções de controle de movimento do Robô Minhoca.
Box 5 – Funções de controle de movimento do Robô Minhoca.

As funções de controle de movimento do Robô Minhoca são do tipo “void”, portanto não retornam nada. A função “write” é da biblioteca “Servo.h” e determina o ângulo de posicionamento do respectivo servo motor. Os tempos de delay utilizados foram obtidos de forma empírica, através do protótipo do robô, para que ocorresse a movimentação adequada, tanto de avanço, quanto de desvio de obstáculo. Em resumo, temos dois procedimentos, um para movimentar o robô sempre para frente “wormAhead” e outro que realiza a movimentação dos servos buscando o desvio de trajetória “wormReturn”, de acordo com a mecânica do próprio robô.

Mecânica

Apesar da movimentação parecer complexa, o setor mecânico do robô não apresenta grande dificuldade, ainda mais para os projetistas criativos. Cada peça pode ser usinada manualmente a partir de plástico PVC, plástico reciclado (que foi o caso de nosso protótipo), alumínio, madeira ou mesmo confeccionada em impressora 3D. Na Figura 5 apresentamos as principais medidas da estrutura mecânica do Robô Minhoca.

Figura 5 - Principais medidas do Robô Minhoca.
Figura 5 – Principais medidas do Robô Minhoca.

As medidas podem ser alteradas de acordo com a necessidade do projetista, dependendo do resultado que se deseja obter. Obviamente, questões como peso e equilíbrio devem ser levadas em consideração na hora de se compor o setor mecânico de qualquer unidade robótica. O suporte para 4 pilhas foi preso ao centro de equilíbrio, e abaixo dela, com fita dupla face, foi fixa a bateria de 9V. Na Figura 6 estão exibidas as principais peças mecânicas.

Figura 6 - Principais peças mecânicas do robô.
Figura 6 – Principais peças mecânicas do robô.

A peça de PVC tem como borracha uma pequena lâmina de EVA, que pode ser encontrada em qualquer papelaria. Isso aumenta o atrito com o chão, possibilitando uma movimentação mais estável do Robô Minhoca. As demais foram usinadas a partir de plástico reciclado, utilizando serra manual e lixas. Parafusos 1/8 com porcas sextavadas foram utilizados para fixação das peças e como eixos dos servos. Para que o robô possa efetuar um desvio, apresentamos um artifício mecânico, que está explícito na Figura 7.

Figura 7 - Sistema que possibilidade ao robô fazer curvas.
Figura 7 – Sistema que possibilidade ao robô fazer curvas.

Uma pequena roda reciclada de um toca-fitas antigo, foi fixa com cola quente ao servo de parabólica, 45° em relação ao eixo. Dessa forma o robô inverte o servo ao chamar a função de desvio, fazendo com que a rodinha (fixa no servo traseiro) entre em contato com o chão e proporcione ao mesmo uma curva, já que o servo frontal estará fazendo movimento contrário. No servo da frente foram fixas duas rodas em 90°, apenas para facilitar o deslizamento do robô.

Conclusão

A construção de um robô que apresenta formas diferentes de locomoção não é tão complicada e a ideia do projeto pode ser aproveitada em diversas outras aplicações de mecatrônica e robótica, tudo dependerá da criatividade do projetista. A utilização do Arduino facilita o projeto eletrônico e o emprego de bibliotecas dedicadas facilita a programação, tornando tal projeto atrativo para iniciantes e profissionais da área.

Este artigo acompanha um vídeo de demonstração de nosso protótipo em pleno funcionamento, bem como todos os arquivos do projeto para você realizar o download (diagrama esquemático, bibliotecas e código fonte). Aproveite!

 

Autor: Eng. Wagner Rambo

Este artigo e apenas para apresentar os artigos da Revista Online do WrKits, você poderá ver estes e muitos outros além de Vídeo Aulas.

FAÇA ASSINATURA ANUAL DA REVISTA ELETRÔNICA WR:
https://go.hotmart.com/I43326457Q