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:


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, 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.




#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);
}

Comentários

  1. Mauro,

    Sou 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

    ResponderExcluir
    Respostas
    1. Carlos,

      Vale a resposta do Euclides lá no lab: apareça lá no parque um sábado desses.

      Abracadabraço!

      Mauro

      Excluir
  2. Obrigado mais uma vez ao Mauro e Euclides pelo apoio de sempre. E ao Fábio pelas doações... Valeu galera...

    ResponderExcluir
    Respostas
    1. Makson,

      Obrigado a vc por levar a diversão para nós no Parque, e ainda por cima compartilhar o projeto por aqui.

      Abracadabraço!

      Mauro

      Excluir
  3. 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
    Obrigado

    ricardovalmeidaa@globo.com

    ResponderExcluir
    Respostas
    1. Ricardo,
      Obrigado, 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.

      Excluir
  4. Este comentário foi removido pelo autor.

    ResponderExcluir
  5. Obrigado Mauro e agradeço muito sua atenção

    Ricardo

    ResponderExcluir
  6. kra, muito interessante este post, me ajudou muito no meu "projeto" ...

    ResponderExcluir
    Respostas
    1. Vincent, legal que o blog foi-lhe útil. Qual é o seu projeto, por curiosidade?

      Excluir
    2. bem, estou fazendo uns carrinhos controlados, com um segredinho q esta em fase final de conclusão, dando tudo certo, conto mais detalhes....

      Excluir
  7. num tem como fazer um desse para celular android sem apps e pode ser com fio

    ResponderExcluir
    Respostas
    1. Como assim? É que tem 2 projetos acima, então não sei o que vc quer conectar ao Android.

      Excluir
  8. Este comentário foi removido pelo autor.

    ResponderExcluir
  9. entao to com um celular definitivamente fraco sem suporte as opicioes que existem ja prontas ,o controle do wii da falha no emparelhamento
    o 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

    ResponderExcluir
  10. blz mauro. estou com um probleminha aqui.
    estou 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.

    ResponderExcluir
    Respostas
    1. Jefferson,

      Provavelmente é 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

      Excluir
  11. 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:

    ACK - 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

    ResponderExcluir
    Respostas
    1. 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á).

      Boa sorte!

      Excluir
  12. Olá Mauro, Liguei e deu tudo certo agora basta testar com o stick o funcionamento. Obrigado pela ajuda.

    ResponderExcluir
  13. Ola 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.
    Email... rodriguesriaj@gmail.com

    ResponderExcluir
    Respostas
    1. Jair,

      Eu comprei esse kit nos EUA, é esse aí: http://www.lynxmotion.com/c-130-al5d.aspx

      Custou $500 com alguns opcionais.

      Excluir
  14. 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

    ResponderExcluir
  15. Este comentário foi removido pelo autor.

    ResponderExcluir
    Respostas
    1. Alexandre,

      Normalmente 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

      Excluir
  16. 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).
    Obrigado

    ResponderExcluir
  17. Vcs estão respondendo dúvidas sobre arduino?

    ResponderExcluir
  18. Vcs estão respondendo dúvidas sobre arduino?

    ResponderExcluir
  19. Amigo esse fio ack vc ligou onde? no arduino?

    ResponderExcluir
  20. Parabéns pelo projeto, excelente iniciativa ! Grande exemplo de cidadania, é com essas iniciativas que se transforma o mundo para melhor, me espelharei nessa ideia.

    ResponderExcluir
  21. Olá... Achei interessante o post... Infelizmente não entendo nada sobre o assunto mas tenho um poço artesiano e preciso implementar o seguinte esquema:
    O 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? ??

    ResponderExcluir
    Respostas
    1. Ivo, desculpe-me pela demora na resposta.

      Eu 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

      Excluir

Postar um comentário

Postagens mais visitadas deste blog

Controle PID de Potência em Corrente Alternada - Arduino e TRIAC - Parte III

Dividindo um programa (sketch) do Arduino em mais de um arquivo

Controle PID de Potência em Corrente Alternada - Arduino e TRIAC - Parte I