Tabela de conteúdos
TP2
Introdução
No TP2 o grupo deveria fazer um robô móvel equipado com um sensor.
Objetivos
O tp2 é dividido em 3 partes: Locomoção, Identificação de cores, e Multitarefa e tomada de decisão. O robô também deveria ter um menu para poder ser escolhida a tarefa sem haver a necessidade de conectar o Arduíno ao computador.
Locomoção
A tarefa de locomoção consistia em 3 movimentos:
- Reta: O robô deveria andar 30cm em linha reta, girar 180° e voltar em linha reta para o ponto inicial.
- Triângulo: O robô deveria andar 30cm em linha reta, girar 90°, andar mais 30cm em linha reta, girar 135°, e fazer uma ultima linha reta voltando ao ponto inicial.
- Quadrado: O robô deveria andar 30cm em linha reta e virar 90° quatro vezes seguidas formando um quadrado.
Identificação
Na tarefa de identificação de cores o robô deveria identificar qual a cor do bloco colocado na frente do sensor piscando os leds e depois escrever na tela de lcd qual a cor do bloco.
Multitarefa
Na atividade de multitarefa e tomada de decisão o robô deveria fazer as duas atividades ao mesmo tempo, andando em linha reta até encontrar um bloco, fazendo determinada ação de acordo com a cor do bloco encontrado, ou parando depois de andar 10 segundos sem encontrar nenhum bloco.
Mecânica
Nosso grupo fez um robô diferencial, com cada motor controlando uma das rodas laterais, e com uma roda esférica na ponta. O principal problema encontrado durante a construção do robô foi fazer o robô sem ter ambos os motores funcionando, o que acarretou em ter que remontar parte do robô quando substituímos o motor defeituoso. Outro problema encontrado foi que o excesso de peso atrapalhava o giro das rodas laterias, que acabaram sendo trocadas por rodas menores.
O sensor foi feito conectando 3 leds(vermelho, verde e azul) e um ldr em uma peça de lego em cima da roda esférica, conectando os leds em portas digitais do Arduíno e o ldr em uma porta analógica.
Programação
A programação do robô é dividida em 3 partes, o menu, movimentação e identificação de cores.
- Menu: Nós usamos como esqueleto do menu um código da internet que permitia até 10 submenus. Nós criamos 6 submenus, um para alterar as variáveis globais que seriam chamadas nos outros menus, dois para testar o arduino sem um computador e um para cada tarefa. Nesses submenus nos podemos passear pelas opções usando os botões cima e baixo, selecionar as opções usando o botão direita e voltar para o nível anterior do menu apertando o botão esquerda. O botão select não é usado no programa porque ele fica muito longe dos outros botões.
- Movimentação: Foi criada uma função andar_frente(), que usa variáveis globais para andar 30cm em linha reta, e que era chamada pelas outras funções. Também foram criadas funções de giro, como girar_direita180() ou girar_esquerda90() que também eram chamadas pelas funções principais para fazer os movimentos(reta, triângulo e quadrado).O principal problema encontrado foi fazer as rodas girarem com a mesma velocidade para que o robô andasse em linha reta, já que os motores eram bem diferentes em tamanho e que toda vez que o robô era ligado os valores tinham que ser ajustados.
- Identificação de cores: Para identificar a cor dos blocos nosso robô primeiro faz uma calibração(que deve ser refeita sempre que o arduino é religado ou muda de ambiente) identificando a luz do ambiente, depois salvando em variáveis a luz refletida por uma superfície branca e uma preta para cada cor dos leds(acendendo os leds e guardando a resistência do ldr). Depois disso ele entra em um while que confere se alguma coisa está na frente do sensor(usando a luz do ambiente) e se algo estiver na frente do sensor ele pisca os leds e anota a resistência do ldr para cada led, e usa esse valor para saber qual é a cor do bloco.
- Multitarefa e tomada de decisão: Usando um while e a função millis() o robô começa a andar para frente e conferir se algo está na frente do sensor ao mesmo tempo, por no máximo 10 segundos. Se ele encontrar algo ele para de se mover, identifica a cor do objeto e faz uma ação de acordo com a cor encontrada.



