Tabela de conteúdos
Trabalho Final - Competição
Execução das tarefas
Eletrônica
Foram utilizados dois tipos de sensores na competição. O LDR e o Infravermelho. Utilizamos o LDR de quatro formas diferentes, são elas:
LDR Para Orientação
Como no último trabalho, foi utilizado dois LDR para a construção do LDR Diferencial,responsável pela orientação do robô. Esse nada mais é do que os dois sensores LDR ligados em série, com um ponto de medição inserido entre estes eles. Esse foi complementado com filtros polarizados, de forma que, utilizando uma luz polarizada era possível a localização através da diferença de luminosidade.
Figura - Sensor LDR com filtro polarizador
LDR de Partida
Esse LDR tem a função de tirar o carrinho do modo de espera após a calibração. Assim quando a luz de partida é acessa o LDR lê a luminosidade e liga as operações do carrinho. Como a diferença entre a luz ligada e desligada era muito grande, foi tomado o cuidado de colocar um limiar adequado.
Figura - Sensor LDR para partida.
LDR Para Detecção de Blocos
Embaixo do carro onde os sensores fazem a identificação de cores, foi colocado um LDR apenas para confirmar a passagem de um bloco e assim não se perder muito tempo com uma identificação de cor desnecessária.
LDR Para Reconhecimento de Cores
É utilizado para o reconhecimento de cores. Assim, caso ele reconheça um bloco preto ele toma a estratégia de empurrá-lo para o lado com sua haste, caso seja de outra cor ele leva o bloco para a base. Como essa identificação pode variar com a luz foi necessário recalibrar o limiar das cores.
Figura - Sensor LDR para reconhecimento de cores.
Sensor Infravermelho: Break-Beam e Shaft Encoding
É necessário para medir a velocidade de rotação de uma roda. Foram utilizados dois, um para cada roda e eles consistem no conjunto de LED emissor de infravermelho e um receptor (fototransistor) posicionados um em frente ao outro de modo que o feixe de luz IR seja interrompido caso algum objeto - pedaço da engrenagem - passe na frente do feixe, impedindo a detecção.
Figura - Break-Beam.
Mecânica
O desafio para a quinta tarefa e para a competição exigiu que a estrutura mecânica anterior fosse completamente refeita. A estrutura mais complexa e específica permitiu que a programação do robô fosse mais flexível e garantiu um bom resultado.
O robô deveria coletar blocos, identificar suas cores e levá-los até a base, desde que não fossem coloridos de preto. Como a estratégia foi passar por cima do maior número de blocos possíveis e arrastá-los até a base, reconstruimos o robô aumentando suas dimensões, suspendendo a base e abrindo um espaço interior para conter os blocos, como mostra a figura abaixo:
Figura - Visão de baixo do robô.
Tal montagem exigiu que as três rodas fossem encaixadas por uma suspensão, o que é menos trivial de fazer com LEGO e gera uma tensão no encaixe entre a base e as suspensões. A caixa de redução foi disposta ao longo da suspensão e se conectava ao motor através de correias, pois os motores estavam na base do robô, bem acima das rodas.
Figura - Robô identificando um bloco preto, vista lateral.
A redução para essa etapa foi ajustada conforme uma demanda de velocidade do robô e do módulo de controle PD, em busca de um funcionamento ótimo do conjunto. Esse equilíbrio não foi completamente alcançado, mas é algo que deve-se prestar atenção em qualquer montagem de caixas de redução com controladores.
Outro ponto importante é que os sensores foram incorporados no centro da montagem de forma planejada. Cercados de peças por todos os lados, todos se mantiveram firmes ao longo das tarefas e não apresentaram problemas.
Um quarto ponto crítico foi a detecção de cores e nossa estratégia para não passar por cima dos blocos pretos. Nesse caso, um para-choque dianteiro suspenso foi instalado e nele havia um detector de cores LDR e um motor de passo. O carro detectava as cores daquilo que ele passava por cima e, caso fosse preta, ele retirava a peça da frente girando o motor de passo. Assim, apenas blocos coloridos passavam por baixo sem ser removidos e o carro poderia seguir seu rumo pré-programado a tempo de coletar vários blocos e voltar para a base em sessenta segundos. O motor de passo será detalhado em seguida.
Motor de passo
Um motor de passo é usado quando algo tem que ser posicionado muito precisamente ou rotacionado em um ângulo exato. Esse rotação desse é controlado por uma série de campos eletromagnéticos que são ativados e desativados eletronicamente. Produzindo pequenos pulsos no eixo, os quais são nomeados de passos. O número de passos necessários para que o eixo de uma volta completa é chamado de passos/revolução, é os motores mais comuns possuem de 3 a 72 passos/revolução.
Figura - Desenho do Motor de Passo
Nesse trabalho esse motor foi utilizado na alavanca que é responsável por empurrar os bloquinhos que eram identificados como pretos. Impedindo-os assim de entrarem em baixo do robô e então serem levados para a base.
Figura - Motor de Passo com haste para empurrar os blocos
Programação
Mudanças gerais
Para a apresentação final e competição, a estrutura do código foi pouco modificada, de modo que a maioria das bibliotecas usadas continuam as mesmas. Os pontos de alteração de código para esta etapa foram:
- Criação de uma bibliotecas de movimentos.
- Modificação no alinhamento com a luz polarizada.
- Programação das estratégias
Biblioteca de movimentos
Criamos para esta tarefa a biblioteca Movement para abstrair os passos de movimentação do carrinho. A biblioteca conta com uma classe de mesmo nome onde, usando uma distancia, angulo e velocidades fornecidas, calcula a velocidade a ser atribuída a cada motor.
A classe abstrai um movimento de giro seguido de um movimento de linha reta, onde são fornecidos as distancias e velocidade. O principal diferencial da classe é poder salvar o estado do movimento, para ser retomado no futuro.
Os métodos principais da classe são o pause() e start(), que pausam e iniciam/retomam o movimento do ponto onde ele foi interrompido, e o getM1Speed()/getM2Speed(), que retornam a velocidade a ser aplicada em cada motor respectivamente.
Alinhamento
Buscando uma melhoria na precisão do alinhamento, nós optamos por modificar a rotina de alinhar com a luz polarizada. Como ambos os LDRs agora se encontram do mesmo lado, com lentes de polarização perpendiculares, a leitura é dada pela subtração do sinal de um dos sensores com o sinal do outro. Desta maneira as maiores e menores leituras seriam necessariamente obtidas quando o robô estiver alinhado com a luz polarizada mais próxima.
Nós acrescentamos também um passo de calibração do alinhamento, onde o carro é colocado na luz de partida, alinhado com a luz polarizada, e é feito uma leitura que é usada como referencia para o alinhamento. A rotina de alinhamento então se tornou girar o robô no próprio eixo e procurar uma leitura similar à da calibração.
Programação de estrategias
Com a abstração dos movimentos pela classe Movement a programação de estratégias foi reduzida a criar uma lista de movimentos a serem executados em sequencia. Sendo assim, o algorítimo base do robô é dado por:
- Obtém o primeiro movimento da lista.
- Inicia o movimento
- Monitora o LDR da detecção de cores.
- Caso o LDR esteja com o valor alto, indicando que existe um bloco sob o sensor pause o movimento
- Execute a leitura de cores
- Acione o motor de passo caso o bloco detectado seja da cor preta
- Retome o movimento, sem detectar blocos por 1 segundo
- Caso o movimento termine, obtém o próximo movimento da lista e retorne ao passo 2.
Estratégia
A estratégia do grupo foi a mais simples possível. Ela se deu pela orientação pela luz polarizada, de forma a se alinhar paralelamente com as bordas do campo, uma vez orientado o robô passava pelas linhas pretas pegando os blocos que encontram-se em cima dessa. Esses blocos ficarão aprisionados em baixo do robô que sempre indo para frente os levavam a base. O caminho era programado antecipadamente e os blocos encontrados pelo caminho passavam pelo LDR, onde se identificava a cor, em caso do preto a alavanca empurrava o bloco para fora do carrinho, caso não fosse ele continuava em frente prendendo esse bloco no seu interior. Caminho seguido o robô retornava para a base.
Figura - Montagem da haste de proteção.
Figura - Empurrando o bloco preto.
Vídeos
Vídeo - Detecção dos blocos




