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ó.
Muito bom o seu projeto. Parabéns!!!
ResponderExcluirObrigado por compartilhar teu projeto, fazendo com que a informação chegue mais longe !
ResponderExcluirValeu e parabéns !
tem como manda pra mim este projeto e a programacao e a listra dos matérias pra contruí.
ResponderExcluirprojeto legal vou tenta construir.