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