Pinguino braço robótico – teste com o joystick completo

Primeiro teste com braco robótico utilizando um joystick, desmontamos um joystick de PS2 removemos suas partes eletrônicas, mantendo apenas os botões, a partir dai criamos uma placa com multiplexadores para economizar portas do Pinguino, internamente utilizamos 16 portas, e no Pinguino apenas 5, isto proporcionou a utilização do joystick, caso contrário ou utilizávamos dois Pinguino ou outro pic para comunicar com o Pinguino.

Pinguino – Experiência 3 Display de sete segmentos

Testes simples de contagem, no pino 17 esta configurado um botão se acionado efetua a incrementação no display do próximo digito , porém como estou com um alto nível de estresse, minha carga elétrica aciona o input a pelo menos 15 cm, no teste foi utilizado um display da HP HDSP-7801 com catodo comun.

// Experience 03 - 7 Segments Display TEST
// By Wagner de Queiroz and Kleber Zeitounian
// Pinguino Open Source

int SegA,SegB,SegC,SegD,SegE,SegF,SegG,Button,waitingtime;
int val = 0;   // digital input for button
int count = 0; // display count

void setup()
{
   SegA  = 0; // Segment LED A
   SegB  = 1; // Segment LED B
   SegC  = 2; // Segment LED C
   SegE  = 4; // Segment LED E
   SegG  = 5; // Segment LED G
   SegF  = 6; // Segment LED F
   SegD  = 7; // Segment LED D
   Button = 17; // Button location

   pinMode(SegA   ,OUTPUT);
   pinMode(SegB   ,OUTPUT);
   pinMode(SegC   ,OUTPUT);
   pinMode(SegD   ,OUTPUT);
   pinMode(SegE   ,OUTPUT);
   pinMode(SegF   ,OUTPUT);
   pinMode(SegG   ,OUTPUT);
   pinMode(Button ,INPUT);  

  digitalWrite(SegA   ,LOW); //Turn-off Segment LED A
  digitalWrite(SegB   ,LOW); //Turn-off Segment LED B
  digitalWrite(SegC   ,LOW); //Turn-off Segment LED C
  digitalWrite(SegD   ,LOW); //Turn-off Segment LED D
  digitalWrite(SegE   ,LOW); //Turn-off Segment LED E
  digitalWrite(SegF   ,LOW); //Turn-off Segment LED F
  digitalWrite(SegG   ,LOW); //Turn-off Segment LED G
  waitingtime = 500; // one second of pause
}

void ShowNumber0()
{
  digitalWrite(SegA,LOW);
  digitalWrite(SegB,LOW);
  digitalWrite(SegC,LOW);
  digitalWrite(SegD,LOW);
  digitalWrite(SegE,LOW);
  digitalWrite(SegF,LOW);
  digitalWrite(SegG,HIGH);
}

void ShowNumber1()
{
  digitalWrite(SegA,HIGH);
  digitalWrite(SegB,LOW);
  digitalWrite(SegC,LOW);
  digitalWrite(SegD,HIGH);
  digitalWrite(SegE,HIGH);
  digitalWrite(SegF,HIGH);
  digitalWrite(SegG,HIGH);
}

void ShowNumber2()
{
  digitalWrite(SegA,LOW);
  digitalWrite(SegB,LOW);
  digitalWrite(SegC,HIGH);
  digitalWrite(SegD,LOW);
  digitalWrite(SegE,LOW);
  digitalWrite(SegF,HIGH);
  digitalWrite(SegG,LOW);
}

void ShowNumber3()
{
  digitalWrite(SegA,LOW);
  digitalWrite(SegB,LOW);
  digitalWrite(SegC,LOW);
  digitalWrite(SegD,LOW);
  digitalWrite(SegE,HIGH);
  digitalWrite(SegF,HIGH);
  digitalWrite(SegG,LOW);
}

void ShowNumber4()
{
  digitalWrite(SegA,HIGH);
  digitalWrite(SegB,LOW);
  digitalWrite(SegC,LOW);
  digitalWrite(SegD,HIGH);
  digitalWrite(SegE,HIGH);
  digitalWrite(SegF,LOW);
  digitalWrite(SegG,LOW);
}

void ShowNumber5()
{
  digitalWrite(SegA,LOW);
  digitalWrite(SegB,HIGH);
  digitalWrite(SegC,LOW);
  digitalWrite(SegD,LOW);
  digitalWrite(SegE,HIGH);
  digitalWrite(SegF,LOW);
  digitalWrite(SegG,LOW);
}

void ShowNumber6()
{
  digitalWrite(SegA,LOW);
  digitalWrite(SegB,HIGH);
  digitalWrite(SegC,LOW);
  digitalWrite(SegD,LOW);
  digitalWrite(SegE,LOW);
  digitalWrite(SegF,LOW);
  digitalWrite(SegG,LOW);
}

void ShowNumber7()
{
  digitalWrite(SegA,LOW);
  digitalWrite(SegB,LOW);
  digitalWrite(SegC,LOW);
  digitalWrite(SegD,HIGH);
  digitalWrite(SegE,HIGH);
  digitalWrite(SegF,HIGH);
  digitalWrite(SegG,HIGH);
}

void ShowNumber8()
{
  digitalWrite(SegA,LOW);
  digitalWrite(SegB,LOW);
  digitalWrite(SegC,LOW);
  digitalWrite(SegD,LOW);
  digitalWrite(SegE,LOW);
  digitalWrite(SegF,LOW);
  digitalWrite(SegG,LOW);
}

void ShowNumber9()
{
  digitalWrite(SegA,LOW);
  digitalWrite(SegB,LOW);
  digitalWrite(SegC,LOW);
  digitalWrite(SegD,LOW);
  digitalWrite(SegE,HIGH);
  digitalWrite(SegF,LOW);
  digitalWrite(SegG,LOW);
}

void loop() {
  val = digitalRead(Button);
  if (val == HIGH) {
    count++;
    delay (waitingtime);
    switch (count) {
      case 0:
        ShowNumber0();
        break;
      case 1:
        ShowNumber1();
        break;
      case 2:
        ShowNumber2();
        break;
      case 3:
        ShowNumber3();
        break;
      case 4:
        ShowNumber4();
        break;
      case 5:
        ShowNumber5();
        break;
      case 6:
        ShowNumber6();
        break;
      case 7:
        ShowNumber7();
        break;
      case 8:
        ShowNumber8();
        break;
      case 9: {
        ShowNumber9();
        count = -1;
        break;
      }
    }
  }
}

Pinguino Braço robótico – Dificuldades para controlar um servo motor

20110903-182251.jpg

Não estamos obtendo sucesso no controle do servo motor, o resultado não e o esperado, utilizando o mikroC ou o Pinguino, somente conseguimos obter um movimento de 90 graus, a luta continua.

Neste dia não nos reunimos no laboratório da Zeitounian Tecnologia, por que o companheiro Wagner lesionou a 2º vértebra da coluna em uma queda acidental nas escadarias do estação de trem quando estava a caminho do trabalho, o Biló estava trabalhando, e eu passei o dia escrevendo sobre o treinamento do Rotabotics™ enquanto o Maicol testava os sistemas de PWM no pinguino e mikroC, então no final da tarde eu o Biló resolvemos ir até a casa do Wagner para visita-lo, e acabamos montando uma mesa de estudos na cozinha de sua casa, ficamos até as 22hs.

Terceiro teste do seguidor de linha – Analógico

Segue o vídeo do nosso melhor teste até o momento, conforme relato no vídeo a dificuldade maior encontrada até o momento é com relação ao led de infra-vermelho, o ângulo de ambos os conjuntos tem que manter os mesmo valores de inclinação, é isto se mostrou muito complicado de se fazer manualmente, resumindo os próximos testes de seguidores de linha terá seus leds comprados com suportes que já está pré-fixado seu posicionamento, nada de montar na mão.

O próximo passo é instalar o Pinguino para controle mais preciso.

Este projeto vai ser utilizado no Rotabotics, projeto de robótica educacional que estamos desenvolvendo com o Rotary International.

Créditos para o Arne.