Eletrônica digital com Arduino – Integração das partes do robô

Olhos do robô

Enfim, todas as provas necessárias foram feitas em relação ao funcionamento do robô, exceto a carcaça, que será um trabalho artesanal. Então, agora vamos integrar ‘os olhos’ ao motor do eixo. A lógica aqui é muito simples:
1 – O robô deve caminhar para frente se a distância for maior que 15 centímetros.
2 – O robô deve parar se a distância for menor que 15 centímetros.
3 – O robô deve procurar uma direção a seguir
4 – O robô torna a caminha quando encontrar uma direção.

O circuito do robô será montado sobre uma mini-protoboard, instalada sobre uma protoshield. Ambos estou esperando que cheguem, mas a carcaça para comportar o Arduino eu já tenho, então vou fazendo a carcaça e completar a classe com a funcionalidade de ré do robô.

Não se assuste com a imagem inicial, ficará muito simples na montagem final (e na montagem final farei uma imagem com o Fritzing):

Circuito funcional completo

O corpo do código do Arduino deve ficar desse modo:

Ficou simples, não? A classe Brain quebra um galho em relação ao controle das partes. Dá pra melhorar um bocado ainda, controlando o servo internamente na classe Brain e provavelmente o farei para a próxima versão da classe onde ainda incluirei a ré. Além disso, o controle da velocidade do motor não está funcional. Desconfio que por conta da parafernalha toda alimentada exclusivamente pelos 5v do Arduino, mas de qualquer forma vou explicar como é feito esse controle.

Pinos PWM
Na documentação oficial do Arduino (nesse link) está devidamente documentado e explicado o que é o PWM. Conforme o segundo parágrafo, Pulse Width Modulation (Modulação do comprimento do pulso), or PWM, é uma técnica para obter resultados analógicos por meio digital. A quantidade de pulsos dentro de um intervalo de tempo pode variar a operação de um componente como por exemplo, a intensidade de brilho de um led ou a velocidade de um motor DC. Esse gráfico (tirado da própria documentação) mostra claramente essa funcionalidade disponível nos pinos cujo número esteja prefixado com “~” (til):

A variação de pulsos pode ser de 0 (desligado) a 255 (pulso sem intervalos), mas esse valor deve ser experimentado no caso de motor DC, pois ele pode necessitar de uma quantidade mínima de pulsos para girar. Outro fator importante é o modo de escrita para o pino. Em modo de operação digital normalmente se utiliza:

//digitalWrite(pino,modo)
digitalWrite(10,HIGH);

Já para fazer o controle de pulso, utiliza-se:

//analogWrite(pino,modo)
//utilizando o valor 200 como exemplo
analogWrite(10,200);

Finalmente, vou descrever os métodos da classe Brain e disponibilizar seu código no estado em que está, mas atenção para os próximos posts, porque haverá atualização dessa lib, agora na versão 0.1.

Brain(int posicaoInicial,int pin1,int pin2)
O construtor da classe recebe alguns valores para seus atributos internos. No caso, a posição inicial do servo, pino 1 e pino 2 de um motor. O construtor será modificado para receber um array com o número dos pinos para futuramente controlar mais de um motor.

walk(int distance)
O método walk recebe a distância atual, controla o motor, velocidade e direção a seguir.

velocidade(int distancia)
O método velocidade está apenas acionando e parando o motor. Em seu código o controle maior já está especificado, mas preciso fazer alguns experimentos mais antes de implementá-lo adequadamente.

motor
O método motor recebe a velocidade a ser aplicada e a direção em que o motor deve girar. A ré ainda não está implementada, mas até que eu termine a carcaça estará.

findDirectionToGo
Esse método é utilizado pelo sensor ultrasônico combinado ao servo-motor para encontrar a direção a seguir.

O código da biblioteca está nesse link. Baixe-o e descomprima-o dentro do diretório libraries do Arduino. Por exemplo:

cp brain.tgz ~/arduino-0022/libraries/
cd ~/arduino-0022/libraries
tar zxvf brain.tgz

Será criado o diretório Brain contendo:
Brain.cbp
O projeto criado com o codeblocks

brain.doxyfile
O arquivo doxygen criado para gerar a documentação.

Brain.layout
Layout

html
Diretório contendo a documentação. Basta abrir o index.html no firefox, google-chrome, etc.

include
Header da classe Brain

main.cpp
Main criado pelo projeto, mas não utilizado.

src
Código cpp da classe Brain.

Seguindo a lógica descrita acima, veja agora nesse video o funcionamento do conjunto de motores e sensor:

Estamos chegando ao final desse projeto e mais um ou dois posts o robô estará concluido, mas já tenho em mente um próximo projeto muito legal, espero que continuem acompanhando após o termino desse robô.

Quase lá!

Comments

comments

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.