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 braço robótico – Teste do punho
Já testamos todas partes do braço, em duas semanas já iremos controlar o braço em toda sua integralidade.
Pinguino Braço robótico – Avanço nos testes
Teste pratico após montagem completa, estamos usando dois push button para avançar e retroceder o servo.
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 – Melhorias nos testes
Teste pouco satisfatório, mas já e um avanço, preciso lubrificar as junções.
Pinguino Braço robótico – Dificuldades para controlar um servo motor
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.
