Integração das partes do robô • Do bit Ao Byte
Integração das partes do robô
27 de agosto de 2011 11 de junho de 2021
partes do robô – Olhos
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):
O corpo do código do Arduino deve ficar desse modo:
//servo-motor
int posicao  = 89; //posicao inicial do servo
//motor dc
int p1m1     = 10; //pino 1 do motor 1
int p2m1     = 11; //pino 2 do motor 1
//criacao do objeto cerebro que controla todos os movimentos
Brain brain(posicao,p1m1,p2m1);
//criacao do objeto do sensor ultrasonico
// Criação de um objecto que permitira controlar o servo
//servo utilizado em conjunto com o sensor ultrasonico
posicao = brain.walk(int(ultrasonic.Ranging(CM)));
// Espera de 100 milisegundos.
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.
partes do robô – 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)
Já para fazer o controle de pulso, utiliza-se:
//analogWrite(pino,modo)
//utilizando o valor 200 como exemplo
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.
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
Diretório contendo a documentação. Basta abrir o index.html no firefox, google-chrome, etc.
Header da classe Brain
Main criado pelo projeto, mas não utilizado.
Código cpp da classe Brain.
Seguindo a lógica descrita acima, veja agora nesse vídeo 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ô.