Automação no Parque, 20/10/2012
Hoje a Automação no Parque bombou! Com a aproximação da data da guerra de robôs na Anhanguera a turma tá com pressa de deixar tudo no jeito para a arena.
Uma dupla levou um "genérico" de controle de PlayStation 2, via rádio, que eles pretendem usar para controlar o seu robô da categoria Sumô. Eu tinha levado um braço robótico do amigo Fábio, que eu estou recuperando.
Daí... porque não ligar um no outro?
Ligamos o controle PS no Arduino e achamos uma lib para lidar com ele na net. Em seguida implementamos o acionamento de 2 dos motores do braço robô pelo controle, e...
Mais tarde um pouquinho, apareceu o ex-aluno Makson, com o seu TCC. O projeto dele é automação na veia: controle automatizado de um biodigestor. Com dois modos de atuação, automático e manual, o sistema é completamente fiel ao processo que acontece no campo. Monitora automaticamente a temperatura da chama e a pressão do gás, entrando em "modo falha" caso a pressão caia ou a temperatura se mostre abaixo do valor adequado (normalmente porque a chama se apagou). Ou seja, controle malha fechada implementado como deve ser feito.
Abaixo, o diagrama de blocos do projeto, gentilmente cedido pelo Makson:
E aqui um vídeo do equipamento funcionando. Eu começo ligando o equipamento no modo automático. Ele então abre a válvula do gás, aciona o compressor. Em seguida tenta ligar a chama, se a chama é ligada (temperatura alta), acende-se o LED verde indicando que a operação está correta.
Em seguida baixamos a temperatura até o limite em que o sistema entende que a chama apagou (<40 oC). O sistema tenta então por três vezes religar a chama. Caso não consiga, a válvula fecha, o compressor é desligado e o sistema entra em modo falha, piscando o LED vermelho e acionando um alarme sonoro. Para reiniciar é preciso que o operador coloque novamente o sistema em espera e então o coloque em modo automático ou manual. Veja abaixo:
Euclides instrui as crianças.
Receptor do controle de PS2 conectado ao Arduino.
Receptor do controle em detalhe.
Abaixo, o código fonte do controle do robô pelo controle do PlayStation 2. Para maiores informações sobre como conectar esse tipo de equipamento e a biblioteca que usei podem ser obtidos aqui.
Abaixo, outro esquema de conexão do bicho.
Uma dupla levou um "genérico" de controle de PlayStation 2, via rádio, que eles pretendem usar para controlar o seu robô da categoria Sumô. Eu tinha levado um braço robótico do amigo Fábio, que eu estou recuperando.
Daí... porque não ligar um no outro?
Ligamos o controle PS no Arduino e achamos uma lib para lidar com ele na net. Em seguida implementamos o acionamento de 2 dos motores do braço robô pelo controle, e...
Mais tarde um pouquinho, apareceu o ex-aluno Makson, com o seu TCC. O projeto dele é automação na veia: controle automatizado de um biodigestor. Com dois modos de atuação, automático e manual, o sistema é completamente fiel ao processo que acontece no campo. Monitora automaticamente a temperatura da chama e a pressão do gás, entrando em "modo falha" caso a pressão caia ou a temperatura se mostre abaixo do valor adequado (normalmente porque a chama se apagou). Ou seja, controle malha fechada implementado como deve ser feito.
Abaixo, o diagrama de blocos do projeto, gentilmente cedido pelo Makson:
E aqui um vídeo do equipamento funcionando. Eu começo ligando o equipamento no modo automático. Ele então abre a válvula do gás, aciona o compressor. Em seguida tenta ligar a chama, se a chama é ligada (temperatura alta), acende-se o LED verde indicando que a operação está correta.
Em seguida baixamos a temperatura até o limite em que o sistema entende que a chama apagou (<40 oC). O sistema tenta então por três vezes religar a chama. Caso não consiga, a válvula fecha, o compressor é desligado e o sistema entra em modo falha, piscando o LED vermelho e acionando um alarme sonoro. Para reiniciar é preciso que o operador coloque novamente o sistema em espera e então o coloque em modo automático ou manual. Veja abaixo:
Aqui, outras imagens da brincadeira de ontem.
Euclides instrui as crianças.
Receptor do controle de PS2 conectado ao Arduino.
Receptor do controle em detalhe.
Receptor e controle PS2.
Abaixo, esquema de conexão do controle de biodigestor:
Apareceram também:
- Duas crianças que já tinham ido. Trouxeram motores de passo, que eu testei. O amigo Euclides deu a eles a atenção merecida. Vou ver se consigo reativar um notebook velho que tenho aqui para levar e deixar com quem aparecer e não tiver esse recurso.
- Apareceu o Fábio Luiz, sujeito boa gente que doou para o FreeLab um monte de equipamentos interessantes, alguma sucata mas muito equipamento legal. Fábio, obrigado mais uma vez!
Abaixo, outro esquema de conexão do bicho.
#include <Servo.h> #include <PS2X_lib.h> PS2X ps2x; // cria a classe para controle do PS2 Servo shoulder; Servo elbow; int shoulderPos = 180; int elbowPos = 30; int error = 0; byte type = 0; byte vibrate = 0; void setup() { Serial.begin(57600); shoulder.attach(5); elbow.attach(6); error = ps2x.config_gamepad(13,11,10,12, true, true); //GamePad(clock, command, attention, data, Pressures?, Rumble?) if(error == 0) { Serial.println("Controle encontrado e configurado"); Serial.println("Os botões L1 e L2, R1 e L2 acionarão os motores."); } else if(error == 1) Serial.println("Controle não encontrado."); else if(error == 2) Serial.println("Controle encontrado, mas não aceita comandos."); else if(error == 3) Serial.println("Controle não aceita modo pressão."); type = ps2x.readType(); switch(type) { case 0: Serial.println("Tipo desconhecido"); break; case 1: Serial.println("Controle DualShock"); break; case 2: Serial.println("Controle GuitarHero"); break; } } void loop() { if(error == 1) return; ps2x.read_gamepad(false, vibrate); if (ps2x.NewButtonState()) { if(ps2x.Button(PSB_L1)) { Serial.println("L1 pressionado"); elbowPos=elbowPos+5; if (elbowPos > 60) elbowPos=60; elbow.write(elbowPos); } if(ps2x.Button(PSB_L2)) { Serial.println("L2 pressionado"); elbowPos=elbowPos-5; if (elbowPos < 30) elbowPos=30; elbow.write(elbowPos); } if(ps2x.Button(PSB_R1)) { Serial.println("R1 pressionado"); shoulderPos=shoulderPos+10; if (shoulderPos > 180) shoulderPos=180; shoulder.write(shoulderPos); } if(ps2x.Button(PSB_R2)) { Serial.println("R2 pressionado"); shoulderPos=shoulderPos-10; if (shoulderPos < 0) shoulderPos=0; shoulder.write(shoulderPos); } } delay(50); }
Mauro,
ResponderExcluirSou de SJC e gostaria de conhecer mais o seu trabalho.
Estou desenvolvendo uma aplicacao para monitoramento de pocos artesianos e quero discutir e tirar duvidas com um pessoal mais experiente.
carlos.santos@hangarazul.com.br
skpe carlos.santos_hangarazul
Carlos,
ExcluirVale a resposta do Euclides lá no lab: apareça lá no parque um sábado desses.
Abracadabraço!
Mauro
Obrigado mais uma vez ao Mauro e Euclides pelo apoio de sempre. E ao Fábio pelas doações... Valeu galera...
ResponderExcluirMakson,
ExcluirObrigado a vc por levar a diversão para nós no Parque, e ainda por cima compartilhar o projeto por aqui.
Abracadabraço!
Mauro
Olá mauro goistei muito de conhecer seu blog, está de parabéns mas eu queria saber se pode me enviar a pinagem de ligação do controle Ps2x no arduino, se sim deste já agradeço sua atenção
ResponderExcluirObrigado
ricardovalmeidaa@globo.com
Ricardo,
ExcluirObrigado, disponha!
Aí em cima tem o link pro site do cara que fez a lib, lá tem a pinagem. De toda forma: http://www.billporter.info/2010/06/05/playstation-2-controller-arduino-library-v1-0/
Coincidentemente estou aqui lidando com esse controle, afinando os comandos de um braço robótico com ele.
Este comentário foi removido pelo autor.
ResponderExcluirObrigado Mauro e agradeço muito sua atenção
ResponderExcluirRicardo
kra, muito interessante este post, me ajudou muito no meu "projeto" ...
ResponderExcluirVincent, legal que o blog foi-lhe útil. Qual é o seu projeto, por curiosidade?
Excluirbem, estou fazendo uns carrinhos controlados, com um segredinho q esta em fase final de conclusão, dando tudo certo, conto mais detalhes....
Excluirnum tem como fazer um desse para celular android sem apps e pode ser com fio
ResponderExcluirComo assim? É que tem 2 projetos acima, então não sei o que vc quer conectar ao Android.
ExcluirEste comentário foi removido pelo autor.
ResponderExcluirentao to com um celular definitivamente fraco sem suporte as opicioes que existem ja prontas ,o controle do wii da falha no emparelhamento
ResponderExcluiro do ps3 da um erro
o xbox 360 num pois o celular nao tem suporte a otg
eu queria um controle que desse para jogar
Não entendi a sua dúvida.
Excluirblz mauro. estou com um probleminha aqui.
ResponderExcluirestou tentando programar esse codigo que vc publicou na net do projeto ps2 + arduino. so que eu tento compilar ele no meu arduino mega, e acusa erro na linha 24,e na linha 4 que aparece na tela. vc pode me ajudar? pq estou tentando criar uma cadeira de rodas motorizada pro meu pai , ele nem sabe disso.
Jefferson,
ExcluirProvavelmente é porque vc não baixou a biblioteca PS2X_lib.h e instalou no lugar correto (diretório libraries do Arduino).
Se tiver mais dúvidas, não hesite em postar aqui.
Obrigado pela visita,
Mauro
Olá Mauro, Parabéns pelo site tem ótimos projetos. Adquiri um controle genérico PS2 2.4G Wireless da marca BOYU, mas ele possui apenas 7 pinos:
ResponderExcluirACK - acknoledge (reconhecimento)
CLK - Clock
CS - attention
VDD - alimentação 3,3 a 5V
GND - Terra
D0 - command
DI - data
Como utilizar neste caso para o controle? vi no vídeo que vocês usam apenas os botões para controle de um braço robótico. Gostaria de utilizar também os analógicos do joystick para controle de direção em um robô e os botões para acionar outras funções. Obrigado pela ajuda
Bom, eu ligaria só os fios que ele tem e testaria com o programa aí em cima. Se funcionar o programa indicará algumas das teclas acionadas. Se não me engano, na própria biblioteca PS2X_lib tem um exemplo que lê os controles analógicos (que não são lá muito analógicos, como vc verá).
ExcluirBoa sorte!
Olá Mauro, Liguei e deu tudo certo agora basta testar com o stick o funcionamento. Obrigado pela ajuda.
ResponderExcluirÓtimo!
ExcluirOla Mauro achei muito fantástico o seu projeto e estou querendo fazer um robô se vc poder me enviar por email o esquema de como vc montou o seu vc me ajudaria muito.
ResponderExcluirEmail... rodriguesriaj@gmail.com
Jair,
ExcluirEu comprei esse kit nos EUA, é esse aí: http://www.lynxmotion.com/c-130-al5d.aspx
Custou $500 com alguns opcionais.
Olá, gostaria da ajuda de vocês, conectei meu joystick conforme acima porem nao se comunicou com o arduino, teria outra forma de conexão ou sera que influencia o modelo do joystick, Obrigado
ResponderExcluirEste comentário foi removido pelo autor.
ResponderExcluirAlexandre,
ExcluirNormalmente não varia com o tipo de conector não. Vc pode abrir o conector que vai no console e normalmente lá dentro tem identificada a pinagem
Cara to precisando muito controlar um robo pelo controle PS2 é pro meu tcc.. eu consegui rodar o programa sem erros.. só não estou conseguindo entender onde devo ligar ele no arduino.. se alguem puder me ajudar por favor =( (uso o arduino mega).
ResponderExcluirObrigado
Vcs estão respondendo dúvidas sobre arduino?
ResponderExcluirVcs estão respondendo dúvidas sobre arduino?
ResponderExcluirUai, dependendo da dúvida... perguntaí!
ExcluirAmigo esse fio ack vc ligou onde? no arduino?
ResponderExcluirParabéns pelo projeto, excelente iniciativa ! Grande exemplo de cidadania, é com essas iniciativas que se transforma o mundo para melhor, me espelharei nessa ideia.
ResponderExcluirOlá... Achei interessante o post... Infelizmente não entendo nada sobre o assunto mas tenho um poço artesiano e preciso implementar o seguinte esquema:
ResponderExcluirO poço precisa funcionar e após 3.000 litros de água, que serão medidos através de um sensor de fluxo de pulso, o poço precisa se autodesligar e permanecer desligado por 1,5 horas... Após ele precisa ligar de novo produzir mais 3.000 litros de água e desligar novamente durante 1,5 horas.
Regras: Quando não houver água passando no sensor antes de completar os 3.000 litros o poço deverá se autodesligar por 6 horas.
Regra 2 quando uma bóia localizada na caixa dagua chegar no nível máximo o poço não deverá funcionar.
Vcs podem me ajudar nessa programação ou me venderem a placa pronta para o uso conforme especificado? ??
Ivo, desculpe-me pela demora na resposta.
ExcluirEu não faço esse tipo de placa, mas tenho um amigo que faz. O ideal é mesmo uma placa específica.
Posso passar o seu contato para ele?
[],
Mauro