Space Camp III - Carrinho de Controle Remoto
Pousados foguetes e ovonautas, estes últimos coletaram amostras de materiais existentes nos astros em que pousaram e que deveriam ser trazidas de volta à Terra. Essas amostras eram específicas do astro, por exemplo, Titã tinha água, Marte tinha ferro e por aí afora.
Para transportar as amostras coletadas até a base de lançamento do foguete de retorno, os bravos participantes do SpaceCamp deveriam construir um veículo terrestre capaz de, controlado remotamente, coletar a amostra e trazê-la ao ponto de lançamento. O pobre do ovonauta foi abandonado como um degredado português intergalático no corpo celeste em que pousou.
Os pilotos do veículo podiam usar as mãos para coletar a amostra, mas se o fizessem sem usar as mãos ganhariam um ponto extra.
Dessa oficina, que também foi sensacional, eu não tenho imagens. Isso porque trabalhei tanto na instrução teórica quanto no apoio à construção dos carrinhos, além de ter sido o "alvo" destes na parte prática. Se alguma alma caridosa que esteve por lá tiver fotos dessa parte do evento, por favor me mande e eu publico, com o devido crédito.
Alguns dos nossos spacecampers me escreveram pedindo para disponibilizar o código fonte da versão final do programa do carrinho. Ele segue abaixo, devidamente comentado. Para quem levou a montagem do carrinho prá casa, é só copiar e mandar prá dentro. O código foi fornecido pelo Léo e eu dei uma enxugada. Uma dica: para copiar o fonte abaixo, selecione com o mouse a parte do texto, sem incluir os números de linha.
No meu blog, aqui, tem um outro post que fala mais sobre esse controle remoto e sua conexão ao Arduino, a quem interessar possa.
Em caso de dúvidas, é só postar aqui no blog.
Para transportar as amostras coletadas até a base de lançamento do foguete de retorno, os bravos participantes do SpaceCamp deveriam construir um veículo terrestre capaz de, controlado remotamente, coletar a amostra e trazê-la ao ponto de lançamento. O pobre do ovonauta foi abandonado como um degredado português intergalático no corpo celeste em que pousou.
Os pilotos do veículo podiam usar as mãos para coletar a amostra, mas se o fizessem sem usar as mãos ganhariam um ponto extra.
Dessa oficina, que também foi sensacional, eu não tenho imagens. Isso porque trabalhei tanto na instrução teórica quanto no apoio à construção dos carrinhos, além de ter sido o "alvo" destes na parte prática. Se alguma alma caridosa que esteve por lá tiver fotos dessa parte do evento, por favor me mande e eu publico, com o devido crédito.
Alguns dos nossos spacecampers me escreveram pedindo para disponibilizar o código fonte da versão final do programa do carrinho. Ele segue abaixo, devidamente comentado. Para quem levou a montagem do carrinho prá casa, é só copiar e mandar prá dentro. O código foi fornecido pelo Léo e eu dei uma enxugada. Uma dica: para copiar o fonte abaixo, selecione com o mouse a parte do texto, sem incluir os números de linha.
No meu blog, aqui, tem um outro post que fala mais sobre esse controle remoto e sua conexão ao Arduino, a quem interessar possa.
Em caso de dúvidas, é só postar aqui no blog.
// biblioteca que contém as rotinas de comunicação com o controle remoto tipo PS/2.
#include "PS2X_lib.h"
PS2X ps2x; // Classe do controle remoto
int erro = 0;
void setup()
{
Serial.begin(57600);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
// inicia o controle.
// Os parâmetros correspondem aos fios que saem do controle, e aparecem na seguinte ordem:
// clock, command, attention, data.
// No exemplo abaixo, 9-clock etc.
// No outro post do blog (http://automatobr.blogspot.com.br/2012/10/automacao-no-parque-20102012.html)
// tem mais informação a respeito.
erro = ps2x.config_gamepad(9,11,10,12, true, true);
if(erro > 0)
{
Serial.print("Erro de acesso ao controle PS/2: ");
Serial.println(erro);
}
// No post do blog acima, nos fontes, tem o significado dos diferentes erros,
// de acordo com o número.
}
void loop()
{
if(erro > 0) // Se tem erro, para por aqui
return;
// Se o botão tipo stick (PSS) da direita (R) foi inclinado para a frente (eixo Y),
// o carrinho acelera à frente.
if((ps2x.Analog(PSS_RY) < 64) )
{
Serial.println("FORWARD");
digitalWrite(4, HIGH);
}
// Se o botão tipo stick (PSS) da direita (R) não está acionado, o motor para.
else
{
digitalWrite(4, LOW);
}
// Se o botão tipo stick (PSS) da direita (R) foi inclinado para a trás (eixo Y),
// o carrinho acelera prá trás.
if((ps2x.Analog(PSS_RY) > 192))
{
Serial.println("BACKWARD");
digitalWrite(5, HIGH);
}
// Se o botão tipo stick (PSS) da direita (R) não está acionado, o motor para.
else
{
digitalWrite(5, LOW);
}
// Se o botão tipo stick (PSS) da esquerda (L) está acionado para a esquerda
// (valo menor que 64) o motor de direção aciona para o lado que vira o
// carrinho à esquerda.
if((ps2x.Analog(PSS_LX) < 64))
{
Serial.println("LEFT");
digitalWrite(6, HIGH);
}
// Se o botão tipo stick (PSS) da esquerda (L) não está acionado, o motor para.
else
{
digitalWrite(6, LOW);
}
// Se o botão tipo stick (PSS) da esquerda (L) está acionado para a direita
// (valo maior que 192) o motor de direção aciona para o lado que vira o
// carrinho à direita.
if((ps2x.Analog(PSS_LX) > 192))
{
Serial.println("RIGHT");
digitalWrite(7, HIGH);
}
// Se o botão tipo stick (PSS) da esquerda (L) não está acionado, o motor para.
else
{
digitalWrite(7, LOW);
}
// dá um "refresco" ao sistema, permitindo que o carrinho obedeça ao
// comando.
delay(50);
}
Comentários
Postar um comentário