Tp 2
Decisões de implementação
Inicialmente, nossa construção tinha como objetivo um carrinho com 4 rodas médias convencionais do lego, 2 rodas motorizadas independentemente e 2 rodas livres. Entretanto, após montado e testada a translação e a rotação do mesmo, constatamos que para a rotação as duas rodas frontais não favoreciam o movimento. Assim, decidimos desmanchar o projeto e iniciarmos um novo. O novo projeto teve como objetivo um carrinho com 2 rodas médias convencionais na parte traseira e uma roda frontal do tipo rollon, tendo as rodas traseiras motores independentes, já que essa configuração torna possível realizar a rotação de modo facilitado. Em relação a caixa de redução, ela chegou em seu estado final após vários testes. Quanto ao LED, foi usado um único LED, do tipo RGB, o qual varia a cor de acordo com os paramentos passados via programação, além de tornar, é claro, a própria programação mais fácil.
Mecânica
A mecânica da versão final do carrinho contou com 2 rodas traseiras convencionais motorizadas independentemente e uma livre do tipo rollon. Dessa forma, a rotação foi facilitada, tanto pela independência dos motores nas rodas traseiras, quanto pelo rollon na parte frontal. Os motores utilizados foram de mesmo modelo. Isso para que os eixos possam ter as configurações mais próximas possíveis com o intuito de ter um maior controle sobre o carrinho como um todo. A caixa de redução contou com 5 eixos, sendo que cada um possuía uma engrenagem média com 24 dentes em um dos extremos e outra pequena com 8 dentes no outro. As engrenagens médias de um eixo eram interligadas as pequenas do outro. Dessa forma, chegamos a uma redução de 40x.
Código
Para cada uma das tarefas foi feita uma função de modo a facilitar a execução da tarefa via seleção do menu (listado abaixo). Além das funções de tarefas, foram feitas funções de menu, que chamavam uma outra função de menu ou uma função de tarefa. Assim, foi possível permitir ao usuário interagir com o carrinho. Basicamente, para cada um dos itens de avaliação, a seguinte estrutura base foi desenvolvida:
ao();
//Avalicao experimental - Erro de rotacao/translacao (X%)
motor(2, X); //X eh a potencia (pwm) do motor a ser usada
motor(3, X); //X se eh translacao, -X se eh rotacao
sleep(Y); //1.0 se é rotacao, 3.0 se eh translacao
ao();
Já os itens de locomoção, cada um possuiu suas peculiaridades. Porém, para todos eles foram calculados a velocidade do carrinho e o tempo em que motor(i, p) deve manter-se ligado, baseados nos experimentos e no que precisa ser feito respectivamente. Abaixo o código da locomoção Linear() para exemplo:
void Linear(){
. . . .float velocidade = 510.0 / 3.0;
. . . .float time;
. . . .ao();
. . . .time = 300.0 / velocidade;
. . . .motor(2, 100);
. . . .motor(3, 90);
. . . .sleep(time);
. . . .ao();
. . . .sleep(1.0);
. . . .motor(2, -100);
. . . .motor(3, -94);
. . . .sleep(time);
. . . .ao();
}
Em relação ao LED, sua função é apresentação abaixo:
void LEDs(){
. . . .float Tempo;
. . . .int LED = 0;
. . . .poke(0x1009, 0x3c);
. . . .while(!stop_button()){
. . . . . . . .printf(“LED %d\n”, LED);
. . . . . . . .switch (LED){
. . . . . . . . . . . .case 0: poke(0x1008,0x04);
. . . . . . . . . . . .break;
. . . . . . . . . . . .case 1: poke(0x1008,0x08);
. . . . . . . . . . . .break;
. . . . . . . . . . . .case 2: poke(0x1008,0x20);
. . . . . . . . . . . .break;
. . . . . . . . . . . .case 3: poke(0x1008,0x01);
. . . . . . . . . . . .break;
. . . . . . . .}
. . . . . . . .if (LED == 3)
. . . . . . . . . .LED = 0;
. . . . . . . .else
. . . . . . . . . .LED++;
. . . . . . . .Tempo = seconds();
. . . . . . . .while(seconds()-Tempo < 0.5){}
. . . . . . . .poke(0x1008,0x01);
. . . .}
}
Menu
O carrinho possuía um menu programado de modo a facilitar a interação do usuário com mesmo. As seguintes opções e hierarquia eram fornecidas ao usuário:
1 - Locomoção
1.1 - Linear
1.2 - Triangulo
1.3 - Quadrado
1 - Avaliações
2.1 - Translação 20
2.2 - Translação 50
2.3 - Translação 100
2.4 - Rotação 20
2.5 - Rotação 50
2.6 - Rotação 100
3 - Multitarefa
O usuário pode utilizar os botões stop para navegar no menu e start para selecionar a opção desejada.
Avaliação Experimental
As tabelas abaixo apresentam os resultados obtidos para as medições realizadas. Foram feitos 2 tipos de avaliação, cada um com 5 tentativas, variando a potência do motor. O carrinho não conseguiu se mover tanto para 20% de potência da máxima, quanto para 50% em ambas as avaliações.
| Erro de Translação | |||
|---|---|---|---|
| Pwm motor »»» | 20% | 50% | 100% |
| 1ª Medição | - | - | 400mm |
| 2ª Medição | - | - | 415mm |
| 3ª Medição | - | - | 401mm |
| 4ª Medição | - | - | 400mm |
| 5ª Medição | - | - | 418mm |
obs: o carrinho ficou transladando durante 3s em todas as medições
| Erro de Rotação | |||
|---|---|---|---|
| Pwm motor »»» | 20% | 50% | 100% |
| 1ª Medição | - | - | 88 graus |
| 2ª Medição | - | - | 86 graus |
| 3ª Medição | - | - | 90 graus |
| 4ª Medição | - | - | 90 graus |
| 5ª Medição | - | - | 86 graus |
obs: o carrinho ficou rotacionando durante 1s em todas as medições
Multitarefas E LED
Sempre que a opção de multitarefas era selecionada no menu, o carrinho percorria uma certa distância em linha reta ao mesmo tempo em que um LED RGB em sua parte traseira alternava entre as seguintes cores: vermelho, verde e azul. Além de, por alguns milisegundos, o LED era mantido desligado.
Principais dificuldades e conclusão
Tivemos uma dificuldade enorme com os motores, já que um dos motores iniciais apresentava constantes travamentos. Esses mesmos motores foram, então, descartados. Novos motores foram obtidos, porém tivemos alguns problemas com eles também e com relação a caixa de redução, que não apresentava rotações suaves.
