TP 2 / Projeto 1: Robótica móvel (locomoção)
Montagem
Para o segundo trabalho prático o grupo 1, nomeado Gambiarra Sinfônica, decidiu por fazer um veículo com tração traseira e uma roda dianteira feita a partir de uma esfera que pode se mover em todas as direções. A configuração final do veículo pode ser vista nas 3 figuras abaixo que trazem as vistas frontal, lateral e superior do veículo.
Dimensões
As dimensões do veículo são: Comprimento: 290 mm Altura: 140 mm Largura: 210 mm
Sistema Propulsor
Para o sistema propulsor decidiu-se pela utilização de 2 motores elétricos iguais, sendo cada um responsável por mover apenas uma das rodas de maneira isolada, sem interferir na outra. Os motores foram fixados à uma peça descartável de lego com o auxílio de cola quente e posicionados próximos ao primeiro eixo da caixa de redução. O motor utilizado pode ser visto abaixo.
Cada motor está conectado a uma caixa de redução, conforme pode ser visto na figura abaixo, de razão igual a 187.5:1 com o objetivo de reduzir a velocidade do motor e aumentar o torque. Ao eixo final da caixa de redução foi acoplado uma engrenagem. Através de uma correia, que pode ser vista na outra figura, o torque final é transmitido para uma segunda engrenagem acoplada ao eixo da roda, garantindo assim a rotação das mesmas com uma velocidade adequada e um torque suficiente.
Um problema verificado pela utilização da correia foi uma flexão excessiva do eixo das rodas. Para minimizar esse problema uma segunda roda foi colocada em cada eixo, além de peças integradas à base para fixar melhor o eixo e mantê-lo reto, conforme pode ser visto na figura abaixo. As rodas por sua vez foram fixadas através da utilização de dois eixos e uma peça que recebe o eixo principal das rodas e com auxílio dos dois eixos laterais travam as rodas garantindo assim que a rotação do eixo resulte na rotação das rodas.
Sensores
Para o TP2, foi necessário usar dois sensores: um de proximidade, e um de cor. O sensor de proximidade utilizado foi um pacote pronto, o sensor ótico-reflexivo TCRT5000. Esse sensor utiliza um LED infra-vermelho e um fotoresistor para medir a distância entre o sensor e o objeto à sua frente.
Para o sensor de cor, foi preciso montar nosso próprio sensor, utilizando três LEDs monocromáticos (um vermelho, um verde e um azul) e um LDR. Primeiro, o LDR é protegido com fita isolante para que a luz dos LEDs não atinja diretamente o LDR e interfira com as leituras. Depois, os três LEDs são colados ao redor do LDR, de forma que, quando ligados, a luz refletirá no bloco à frente do sensor e atingirá o LDR. Como os LEDs são de 3V e as saídas digitais no HandyBoard são de 5V, foi necessário usar resistências de 220Ω para controlar a corrente nos LEDs e prevenir mal-funcionamento.
Os eletrodos positivos dos LEDs são ligados nas saídas digitais J6, e os negativos são ligados em um único pino terra, o da entrada analógica 3. O LDR é ligado na entrada analógica 2. Para ativar os LEDs, basta ativar o pino correspondente em J6, e para ler o valor do LDR, basta ler a entrada analógica 2.
Programação
A programação do robô foi dividida em 5 partes:
- Menu para escolher atividades;
- Rotinas para implementar a parte 1 (movimento em linha, triângulo e quadrado);
- Rotinas para implementar a parte 2 (identificação de cor);
- Rotinas para implementar a parte 3 (multi-tarefas);
- Rotinas de calibração.
Parte 1: Menu
Para implementar o menu, foi utilizado o botão circular (knob) localizado na parte direita do HandyBoard para escolher as opções, e os botões de START e STOP para responder sim ou não, respectivamente, às perguntas da interface.
A biblioteca do Interactive-C vêm com exemplos que incluem as rotinas necessárias para ler valores usando o botão circular e implementar menus de fácil uso. Essas rotinas foram usadas sem alteração no nosso código.
Parte 2: Movimentos fixos
Para implementar as rotinas de movimento em linha, triângulo e quadrado, foram criadas sub-rotinas para andar 30cm e 42cm (hipotenusa do triângulo) em linha reta, girar 90° em cada direção, e girar 145° à direita (segunda curva do triângulo). Cada uma dessas rotinas possui um tempo pelo qual os motores devem permanecer ligados. Após vários experimentos, os tempos de cada rotina foram calibrados.
Parte 3: Identificação de cor
Para identificar as cores dos blocos, foi utilizado o sensor de cor com 3 LEDs, um vermelho, um verde e um azul, ligados nos pinos J6 da HandyBoard, além de um LDR ligado à entrada analógica 2. Cada um dos LEDs é ligado em sequência, e a diferença na resistência do LDR é medida. Após essas medições, a leitura do LDR sem nenhum LED ligado, além das quedas de resistência à medida em que cada LED é ligado são comparadas para determinar a cor do bloco em frente.
Para ativar os LEDs nas saídas J6, é preciso seguir as instruções do FAQ da HandyBoard.
Parte 4: Multi-tarefas
Para implementar essa função, usamos dois processos que são executados simultaneamente: um que simplesmente liga ambos os motores de forma a andar em linha reta, espera 10 segundos, e então desliga os motores, e um que monitora a entrada analógica conectada ao sensor de proximidade, detecta um bloco à frente do robô, para a primeira tarefa e os motores, identifica a cor, e reage da forma apropriada.
Essa estruturação simplifica o código, pois isola as responsabilidades de cada tarefa e permite reaproveitar o código já implementado das partes anteriores. Também foi necessário introduzir uma rotina de movimento a mais: girar 360°, já que esse movimento não foi necessário na parte 1.
A segunda tarefa é responsável pelo ciclo de vida da primeira, e a cancela quando um bloco é identificado à frente do robô, além de reiniciá-la após o bloco ter sido processado. Para sincronização, a primeira tarefa escreve em uma flag global quando termina de executar após 10 segundos. Dessa forma, a segunda tarefa pode identificar o término dos 10 segundos e parar sua execução.
Parte 5: Calibração
Além da calibração das constantes de tempo necessárias para as rotinas de movimento, que são codificadas como constantes no código pois não esperamos mudanças significativas, também foi necessário calibrar as constantes utilizadas na detecção de cor, pois nas leituras dos sensores há uma variação maior. Três constantes são utilizadas na identificação de cor e da proximidade dos blocos:
- Limite máximo da leitura do LDR sem LEDs ativos quando o bloco é vermelho ou amarelo;
- Limite máximo da diferença entre as leituras com os LEDs verde e azul, quando o bloco é amarelo;
- Valor do sensor de proximidade quando o bloco se encontra na distância apropriada do robô.
Para fazer a calibração dessas constantes, uma entrada adicional no menu foi implementada, que instrui o usuário a colocar os blocos apropriados na frente do leitor e confirmar sua leitura. O processo de calibração leva por volta de um minuto.










