sexta-feira, 5 de abril de 2013

Braço Robótico


Eu utilizo arduino ja faz algum tempo e irei mostrar um projeto meu, um braço robótico que desenvolvi não faz muito tempo. Vou deixar o vídeo logo aqui em cima e depois explico tudo.


O braço possui dois eixos de movimentação. Como puderam notar, utilizei 5 servos motores pequenos (parecidos com os de parabólicas, só que menores), sendo dois para o levantamento, um para o giro e dois para a garra, um controle infravermelho e seu respectivo receptor, arduino UNO e uma fonte de alimentação de computador para não sobrecarregar o regulador de tensão do Arduino que suporta apenas 1,5A. As garras do braço ou pinças são feitas de acrílico 4mm e possuem uma borracha na ponta para aumentar o atrito com os objetos. 

Na protoboard estão posicionados o receptor IR, o arduino, um LED e alguns cabos (jumpers) para a conexão com os vários periféricos do braço. Para melhorar o entendimento, desenhei no Fritzing o esquema de ligação dos componentes, segue uma imagem:


E agora eis a parte mais complicada, a programação do arduino. Apesar de parecer não tão difícil, é a parte  que mais da dor de cabeça, pois para o hardware funcionar corretamente do jeito que queremos é necessário cuidar todos os detalhes, desde um parênteses até a lógica do programa. Aqui está:

//Produzido por Robinson Joel Ten Caten.

#include <IRremote.h>
#include <Servo.h> 

Servo SERVO_GE;
Servo SERVO_GD;
Servo SERVO_G;
Servo SERVO_LE;
Servo SERVO_LD;

int receiver = 12;
int led = 13;
int luz = 8;

IRrecv irrecv(receiver); 
decode_results results;

void setup(){
  pinMode(led, OUTPUT);
  pinMode(luz, OUTPUT);
  SERVO_LE.attach(5);
  SERVO_LD.attach(6);
  SERVO_G.attach(9);
  SERVO_GE.attach(10);
  SERVO_GD.attach(11);
  SERVO_GE.write(103); 
  SERVO_GD.write(0);
  SERVO_G.write(80);
  SERVO_LE.write(90);
  SERVO_LD.write(90);
  digitalWrite(luz, LOW);
  Serial.begin(9600);
  irrecv.enableIRIn();
}

void pisca(){
  digitalWrite(led, HIGH);
  delay(100);
  digitalWrite(led, LOW);
}

void loop(){

if (irrecv.decode(&results)){  
switch(results.value){ 
   
            //CONTROLE 

case 1086259455:{ //      PLAY/PAUSE
  pisca();
  Serial.println(">> A ESQUERDA");
  SERVO_G.write(0);
  break;
}

case 1086292095:{ //      CHANEL -
  pisca();
  Serial.println(">> CENTRALIZADO");
  SERVO_G.write(80);
  break;
}

case 1086275775:{ //      CHANEL +
  pisca();
  Serial.println(">> A DIREITA");
  SERVO_G.write(165);
  break;
}

case 1086267615:{ //      EQUALIZADOR
  pisca();
  Serial.println(">> PARA TRAS");
  SERVO_LE.write(150);
  SERVO_LD.write(30);
  break;
}

case 1086300255:{ //      VOLUME -
  pisca();
  Serial.println(">> CENTRALIZADO");
  SERVO_LE.write(90);
  SERVO_LD.write(90);
  break;

case 1086283935:{ //      VOUME +
  pisca();
  Serial.println(">> PARA FRENTE");
  SERVO_LE.write(20);
  SERVO_LD.write(135);
  break; 
}

case 1086296175:{ //      PREVIOUS
  pisca(); 
  Serial.println(">> GARRA ABERTA");
  SERVO_GE.write(60); 
  SERVO_GD.write(45);
  break; 
}

case 1086279855:{ //      NEXT
  pisca(); 
  Serial.println(">> GARRA FECHADA");
  SERVO_GE.write(103); 
  SERVO_GD.write(0);
  break; 
}

case 1086263535:{ //      NUMERO 0
  pisca();
  Serial.println(">> NORMAL");
  SERVO_GE.write(103); 
  SERVO_GD.write(0);
  SERVO_G.write(80);
  SERVO_LE.write(90);
  SERVO_LD.write(90);
  break;  
}

case 1086271695:{ //      NUMERO 1
  pisca();
  Serial.println(">> PEGANDO OBJETO");
  SERVO_G.write(80);
  SERVO_GE.write(60); 
  SERVO_GD.write(45);
  delay(150);
  SERVO_LE.write(20);
  SERVO_LD.write(135);
  delay(150);
  SERVO_GE.write(103); 
  SERVO_GD.write(0);
  delay(150);
  SERVO_LE.write(90);
  SERVO_LD.write(90);
  break;
}
  
case 1086304335:{ //      NUMERO 2
  pisca();
  Serial.println(">> LARGANDO OBJETO");
  SERVO_G.write(80);
  SERVO_GE.write(103); 
  SERVO_GD.write(0);
  delay(150);
  SERVO_LE.write(20);
  SERVO_LD.write(135);
  delay(150);
  SERVO_GE.write(60); 
  SERVO_GD.write(45);
  delay(150);
  SERVO_LE.write(90);
  SERVO_LD.write(90);
  SERVO_GE.write(103); 
  SERVO_GD.write(0);
  break;
}  

case 1086288015:{ //      NUMERO 3
  pisca();
  Serial.println(">> JA ERAS");
  SERVO_GE.write(103); 
  SERVO_GD.write(0);
  SERVO_LE.write(90);
  SERVO_LD.write(90);
  delay(150);
  SERVO_LE.write(150);
  SERVO_LD.write(30);
  delay(150);
  SERVO_GE.write(60); 
  SERVO_GD.write(45);
  delay(150);
  SERVO_GE.write(103); 
  SERVO_GD.write(0);
  SERVO_LE.write(90);
  SERVO_LD.write(90);
  break;
}
  
case 1086261495:{ //      NUMERO 4
  pisca();
  Serial.println(">> ABRINDO E FECHANDO A GARRA");
  SERVO_GE.write(60); 
  SERVO_GD.write(45);
  delay(300);
  SERVO_GE.write(103); 
  SERVO_GD.write(0);
  break;
}

case 1086294135:{ //      NUMERO 5
  pisca();
  Serial.println(">> LUZ ACESSA");
  digitalWrite(luz, HIGH);
  break;
}

case 1086277815:{ //      NUMERO 6
  pisca();
  Serial.println(">> LUZ APAGADA");
  digitalWrite(luz, LOW);
  break;
}

case 1086269655:{}  //     NUMERO 7
case 1086302295:{} //      NUMERO 8
case 1086285975:{} //      NUMERO 9
}
  
  delay(100); 
  irrecv.resume(); 
  }
}

Não vou entrar em muitos detalhes na programação se não ficaria muito extenso. Para conseguir compilar este programa é necessário baixar uma biblioteca, a IRremote que é utilizada para usar controles infravermelhos. Para poder programar as funções de cada botão é necessário saber o código do mesmo, assim quando feita a leitura de um botão "x" é feita tal coisa e assim sucessivamente com todos os comandos do controle.




Por hoje é só.

Arduino - o que é?


Arduino é uma placa de uso Open Source, ou seja, de livre uso que surgiu em 2005 com o objetivo de criar ferramentas acessíveis, a baixo custo, flexíveis e de fácil uso mesmo por leigos em eletrônica. Pode ser utilizadas para várias tarefas e projetos, desde acender um pequeno LED, até comandar um robô complexo. O arduino é baseado em microcontroladores da Atmel (variando do modelo da placa), que possui o são baseados em entradas e saídas (I/O) que podem ser tanto digitais como analógicas. Sua linguagem é essencialmente baseada em C/C++ e possui um ambiente próprio de programação (IDE) escrita em Java.

Para poder programar o arduino, você só precisa baixar a IDE (http://arduino.cc/en/Main/Software), instalar os drivers no computador e plugar o cabo USB. A partir dai, terá uma infinidade de possiblidades a seu dispor.





Bom pessoal por hoje é isso, até a proxima.