Manual

do

Maker

.

com

sensor ultrassônico + servo motor = olhos

sensor ultrassônico + servo motor = olhos

Para o nosso robô caminhar com a capacidade de desviar-se de obstáculos, decidi fazer seus "olhos" com um sensor ultrassônico HC-SR04, hoje garantidamente o mais popular em eletrônica digital maker. Se está sendo seu primeiro contato com esse sensor ultrassônico, fique feliz em saber que é extremamente simples de brincar e pode ser utilizado não apenas para fazer robôs desviarem-se de obstáculos, mas pode também ser utilizado para medir nível de água em caixas d'água, fazer mini-elevadores para projetos de faculdade/ciências etc.

Na época desse artigo, o Arduino IDE estava a versão 0022, não havia o recurso de instalar bibliotecas através da IDE. Hoje você ainda pode pegar a biblioteca nesse link, extraí-la no diretório de bibliotecas (normalmente ~/Arduino/libraries/) e iniciar a IDE do Arduino para incluí-la; mas como as coisas estão muito mais simples hoje, basta ir ao menu Sketch->Incluir biblioteca->gerenciar bibliotecas e então digitar HC-SR04 na caixa de pesquisa à direita. Três opções estarão disponíveis, de cara.

Seu uso é bastante simples e o exemplo segue com a biblioteca do link supracitado. Já no sensor ultrassônico, a pinagem está disposta assim; à esquerda a alimentação (5V), Trig, Echo e ground, seguidamente. No setup() do programa, seguimos os passos básicos:

#include <Ultrasonic.h>

//Define os pinos trig e echo:
int pin_trig = 12; //recebe o retorno
int pin_echo = 13; //emite o som

//Cria-se o objeto:
Ultrasonic ultrasonic(pin_trig, pin_echo);

Essa classe é muito simples de utilizar, bastando chamar o método que retorna a distância, com o parâmetro CM para retorno em centímetros:

//no setup() inicia-se a comunicacao serial:
Serial.begin(9600);

//no loop(), insere-se esse print:
Serial.print(ultrasonic.Ranging(CM));

//um mero delay:
delay(300);

O resultado já poderá ser visto abrindo o console serial da interface do Arduino. Já que é possível pegar esse retorno rapidamente (240m/s, conforme especificação do dispositivo), então fica fácil utilizá-lo como olhos, para escolher a direção em que o robô deverá andar. Para tanto, criei uma nova biblioteca para definir o servo como o 'pescoço' do nosso sensor. A classe foi chamada Brain (cérebro em inglês), pois todas as ações serão pensadas por ele. Essa classe devera cumprir as seguintes tarefas:

  • caminhar (para frente ou para trás)
  • escolher a direção a andar.
  • alinhar o corpo do robô na direção escolhida.

Essa classe possui alguns atributos como por exemplo, a distância de tolerância, que é de 15 centímetros; quando a distância for menor que isso, então o 'pescoço' começa a se deslocar para esquerda e direita à procura de uma direção que haja uma distância maior que 15 centímetros. Quando encontrada, alinha o corpo na direção dos 'olhos' e inicia a caminhada. Se em um ângulo de 180 graus não for encontrada uma direção com mais de 15 centímetros (por exemplo, a junção de duas paredes), então o robô deverá dar uma ré girando até 180 graus, alinhar-se e seguir em frente.

Eu sei que tem algorítmos complexos para definir caminhos, algorítmos baseados no caminhar dos pombos, na dança dos cisnes, no balé de Berlin, etc - mas aqui o único e simples objetivo é construir um robô para prova de conceito. Assim o faremos.

Nesse primeiro momento, minha classe está incompleta e não pode ser totalmente implementada ainda, mas já consegui experimentar a idéia. Explanarei sobre essa classe mais adiante.

Utilizei o Fritzing, que é um free software. Infelizmente não encontrei na época da  publicação desse artigo (em 2011) esse sensor e, hoje não pretendo refazê-la porque estou dando uma manutenção mínima nos artigos. Então utilizei um sensor infra-vermelho para representá-lo (gambiarra numero 1). As imagens faltantes no artigo foram perdidas e não consegui recuperá-las, portanto, pode falta alguma coerência nos artigos anteriores a 2014. As imagens da composição para que se possa dar uma observada (gambiarra numero 2).

Vista superior. Utilizei um suporte de tomada para fixar o sensor ultrassônico. O servo-motor está preso a uma mini-morsa.

A protoboard não está sendo utilizada corretamente, mas tive que fazer assim por causa da falta de espaço (gambiarra numero 3).

Ainda não está terminada, então não disponibilizarei a classe Brain para download, mas vou explicar como a utilizei:

  • Copiei a classe e a estrutura da classe para ~/arduino-002/libraries/Brain/
//fazer o include da biblioteca Brain no comeco do codigo
#include <Brain.h>
//Ainda no comeco do codigo, criar o objeto com a posicao inicial do servo:
Brain brain(89);
//Criar a variavel posicao no setup():
int posicao = 89;
//no loop(), inserir essa linha:
posicao = brain.findDirectionToGo(int(ultrasonic.Ranging(CM)));

O resto do código é relacionado ao servo, basicamente. Quando disponibilizar a biblioteca, disponibilizarei também o código desse projeto.

Para finalizar, eis o video dos 'olhos' do robô.

O projeto foi finalizado posteriormente e o link para o resultado (que ficou muito bacana) é https://www.manualdomaker.com/article/robo-com-arduino-no-estilo-maker/.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.