R.A.D Jeremias


Como parte do plano de estudos do Projeto Robuca feito no Colégio de Aplicação da UFPE, foi proposto ao grupo que pensasse em um projeto de robô para ser construído, depois de algum tempo decidindo sobre ele, chegamos ao que será descrito agora:

O projeto é de um Robô Atirador de Discos, que nomeamos de Jeremias, por esta razão o nome R.A.D Jeremias. O robô deve andar (comandado por um controle remoto) e atirar, quando for apertado o botão para isto no controle, além disso ele também tem um laser para que se possa ver para onde o disco irá e LEDs para iluminar o ambiente.

Os requisitos para isso são:

- Motor, para fazer o robô funcionar;
- Lançador de discos, para dar impulso aos mesmos;
- Discos, para serem lançados;
- LEDs, para iluminar o ambiente;
- Arduino, para fornecer as informações necessárias para que o robô siga corretamente os comandos que o controle remoto realizar;
- Laser, para mostrar a mira;
- Rodas, para fazer o robô andar;
- Comunicação com o controle remoto, que pode ser por meio de Bluetooth ou infravermelho (a decidir);
- Controle remoto, para controlar o robô
- Cobertura externa, para dar melhor aparência e proteger o robô.

Começamos fazendo um protótipo do mesmo em papel, seguem as imagens:

UrdM9Yk.png
Medidas do robô (Escala 100:1)

ex6fNMA.jpg

O furo em forma de círculo que podemos ver em sua parte superior é para reposição dos discos e o que se encontra na parte frontal é para o lançamento dos mesmos. 


19/03/2013

Neste encontro, começamos a usinagem das peças para o nosso robô, fizemos a estrutura superior e inferior do robô, não tendo muitas dificuldades nesse aspecto. Já em relação a teste do receptor infravermelho,  tivemos problemas na biblioteca do infravermelho, não sendo possível testá-lo. Quanto ao atirador de discos, depois de alguns ajustes, ele funcionou com êxito. Nesse encontro também discutimos um pouco sobre as peças necessárias para o robô e quais as melhores opções.


26/03/2013

Nesse encontro, terminamos a usinagem das peças, e estamos a lixa-las. Tivemos alguns problemas na comunicação via infravermelho, pois o receptor não estava captando os sinais mandados. Estamos também a conectar o laser ao arduino.


02/03/2013

Neste encontro, terminamos de lixar as peças e fizemos os devidos furos para colocar as cantoneiras para juntar as quinas. Por falta de parafusos e roscas não conseguimos juntar tudo ainda.


05/04/2013

Neste encontro, terminamos de montar o corpo externo do nosso R.A.D. Jeremias! Inclusive com atirador de discos colocado dentro dele e preso seguramente no teto. Conseguimos fazer os furos necessários para prendê-lo no teto só na segunda tentativa. Já fizemos também o fluxograma do nosso robô.

Foto de como está:

XyCadPX.jpg

Os parafusos que estão mostrados projetados para fora serão trocados por parafusos menores, para melhorar a aparência.


09/04/2013

Neste encontro, fizemos uma abertura na parte superior do corpo externo do robô, para que o motor pudesse girar e consequentemente funcionar. Fizemos outra abertura na parte superior para que o suporte dos discos fosse encaixado, depois testamos o atirador, ele atirou alguns discos, mas houveram algumas complicações, que pretendemos resolver no próximo encontro.

Fotos do Jeremias no seu estado atual:

7WlP3c9.jpg

Mecanismo de disparo de discos.

pnffbGY.jpg

Interior

KsCWoJN.jpg

A parte externa inteira


10/04/2013

Neste encontro, começamos a colocar os servos para a tração traseira do robô e as rodas, além de corrigir os problemas que haviamos encontrado no encontro passado.

Novo fluxograma, completo:

oVG9tgr.png

15/05/2013

Depois de um pequeno recesso, voltamos às aulas.

Neste encontro, colocamos as rodas no robô, as testamos e elas funcionaram, pretendemos colocar o robô no chão no próximo encontro.

Além disso, programamos o  infravermelho para que quando apertarmos, por exemplo, o botão "1" no controle, apareça na tela o número "1". Nosso único problema com isso, foi que estava havendo uma quantidade limitada de números que podiam aparecer na tela.

Nota do futuro (07/06/2013): O problema era que alguns botões não estavam configurados, então, quando se apertava eles, a função que servia pra resumir o infravermelho e receber o próximo sinal não era executado, isso foi resolvido com uma simples linha de código que resumia se o botão não fosse identificado.


22/05/2013

Hoje testamos o robô no chão fazendo ele andar, então regulamos as rodas para que o robô seguisse em linha reta, feito isso, programamos o robô para quando apretarmos os botôes "para frente " e "para trás" no controle, o robô correspondesse.

Segue o código da programação do controle, nós usamos a biblioteca IRremote para o controle, e a biblioteca do servo, já inclusa na IDE do Arduino::

/*
* IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
* An IR detector/demodulator must be connected to the input RECV_PIN.
* Version 0.1 July, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
*/
/* --Bibliotecas-- */
#include
#include

int contador1=0;
int contador2=0;

/* --Infravermelho-- */
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

/* --Servos-- */
Servo s1;
Servo s2;
Servo s3;
Servo s4;

/* --Motores-- */
int motor1 = 6;
int motor2 = 7;

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
s1.attach(9); // Ligar os servos aos seus respectivos pinos
s2.attach(10);
s3.attach(8);
s4.attach(12);
pinMode(motor1, OUTPUT);
pinMode(motor2, OUTPUT);
}

void loop() {
if (irrecv.decode(&results)) {
if (results.value==3249195318){ //Botão 1 no controle
Serial.println("Esquerda");
s1.write(0);
s2.write(90);
s3.write(0);
s4.write(90);
irrecv.resume(); // Receive the next value
}
else if (results.value==3249162678) { //Botão 2 no controle
Serial.println("Frente");
s1.write(0);
s2.write(310);
s3.write(0);
s4.write(100);
irrecv.resume(); // Receive the next value
}
else if (results.value==3249207558) { //Botão 3 no controle
Serial.println("Direita");
s1.write(70);
s2.write(310);
s3.write(70);
s4.write(310);
irrecv.resume(); // Receive the next value
}
else if (results.value==3249174918) { //Botão 4 no controle
Serial.println("Ré, esquerda");
s1.write(310);
s2.write(70);
s3.write(310);
s4.write(70);
irrecv.resume(); // Receive the next value
}
else if (results.value==3249164718) { //Botão 5 no controle
Serial.println("Ré");
s1.write(310);
s2.write(0);
s3.write(310);
s4.write(60);
irrecv.resume(); // Receive the next value
}
else if (results.value==3249205518) { //Botão 6 no controle
Serial.println("Ré, direita");
s1.write(90);
s2.write(0);
s3.write(90);
s4.write(0);
irrecv.resume(); // Receive the next value
}
else if (results.value==3249168798) { //Botão 7 no controle
Serial.println("Girar esquerda");
s1.write(0);
s2.write(70);
s3.write(0);
s4.write(70);
irrecv.resume(); // Receive the next value
}
else if (results.value==3249148398) { //Botão 8 no controle, por enquanto sem uso
Serial.println("8");
irrecv.resume(); // Receive the next value
}
else if (results.value==3249199398) { //Botão 9 no controle
Serial.println("Girar direita");
s1.write(70);
s2.write(0);
s3.write(70);
s4.write(0);
irrecv.resume(); // Receive the next value
}
else if (results.value==3249187158) { //Botão "help" no controle
Serial.println("Parado");
s1.write(79);
s2.write(83);
s3.write(81);
s4.write(80);
irrecv.resume(); // Receive the next value
}
else if (results.value==3249201438) {
Serial.println("Ligar Motor1");
digitalWrite(motor1, HIGH);
irrecv.resume();
}
else if (results.value==3249181038) {
Serial.println("Desligar Motor1");
digitalWrite(motor1, LOW);
irrecv.resume();
}
else if (results.value==3249183078) { //Botão "volume menor" no controle
Serial.println("Ligar Motor2");
digitalWrite(motor2, HIGH);
irrecv.resume();
}
else if (results.value==3249150438) { //Botão "volume maior" no controle
Serial.println("Desligar Motor2");
digitalWrite(motor2, LOW);
irrecv.resume();
}
else irrecv.resume();
}
}


29/05/2013 

Neste encontro, programamos o atirador, escolhemos os Leds para sinalizar o recebimento de um sinal infravermelho quando o motor do atirador estiver funcionando e quando o robôestiver ligado. Tivemos algumas dificuldades na programação, mas, no final, descobrimos que o erro era que o pin que havíamos colocado estava com problemas...

Lição do dia: sempre cheque se todos os pinos estão funcionando

05/06/2013

Neste encontro, nosso objetivo foi fazer o atirador de discos funcionar. Após passar a aula toda tentando consertar, descobrimos que o problema estava no código; o infeliz que escreveu o código  para o atirador esqueçeu de definir os pinos do motor como output.

Lição do dia: sempre cheque se você definiu todos os pinos do modo correto.

19/06/2013

Nesse dia, não tivemos aula por causa da Dilma.




Conteúdos relacionados

Imagem Principal

No description for object of class

Descrição

AntigaNovaDiferenças
8787
8888<p>Segue o código da programação do controle, nós usamos a biblioteca <a href="https://github.com/shirriff/Arduino-IRremote">IRremote</a> para o controle, e a biblioteca do servo, já inclusa na IDE do Arduino::</p>
8989
90 <div><pre>/*<br>   * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv<br> * An IR detector/demodulator must be connected to the input RECV_PIN.<br> * Version 0.1 July, 2009<br> * Copyright 2009 Ken Shirriff<br> * <a href="http://arcfn.com">http://arcfn.com</a><br> */<br>/* --Bibliotecas-- */<br>#include &lt;IRremote.h&gt;<br>#include &lt;Servo.h&gt;<br><br>int contador1=0;<br>int contador2=0;<br><br>/* --Infravermelho-- */<br>int RECV_PIN = 11;<br>IRrecv irrecv(RECV_PIN);<br>decode_results results;<br><br>/* --Servos-- */<br>Servo s1;<br>Servo s2;<br>Servo s3;<br>Servo s4;<br><br>/* --Motores-- */<br>int motor1 = 6;<br>int motor2 = 7;<br><br>void setup()<br>{<br> Serial.begin(9600);<br> irrecv.enableIRIn(); // Start the receiver<br> s1.attach(9); // Ligar os servos aos seus respectivos pinos<br> s2.attach(10);<br> s3.attach(8);<br> s4.attach(12);<br> pinMode(motor1, OUTPUT);<br> pinMode(motor2, OUTPUT); <br>}<br><br>void loop() {<br> if (irrecv.decode(&amp;results)) {<br>   if (results.value==3249195318){ //Botão 1 no controle<br>     Serial.println("Esquerda");<br>     s1.write(0);<br>     s2.write(90);<br>     s3.write(0);<br>     s4.write(90);<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249162678) { //Botão 2 no controle<br>     Serial.println("Frente");<br>     s1.write(0);<br>     s2.write(310);<br>     s3.write(0);<br>     s4.write(100);<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249207558) { //Botão 3 no controle<br>     Serial.println("Direita");<br>     s1.write(70);<br>     s2.write(310);<br>     s3.write(70);<br>     s4.write(310);<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249174918) { //Botão 4 no controle<br>     Serial.println("Ré, esquerda");<br>     s1.write(310);<br>     s2.write(70);<br>     s3.write(310);<br>     s4.write(70);<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249164718) { //Botão 5 no controle<br>     Serial.println("Ré");<br>     s1.write(310);<br>     s2.write(0);<br>     s3.write(310);<br>     s4.write(60);<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249205518) { //Botão 6 no controle<br>     Serial.println("Ré, direita");<br>     s1.write(90);<br>     s2.write(0);<br>     s3.write(90);<br>     s4.write(0);<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249168798) { //Botão 7 no controle<br>     Serial.println("Girar esquerda");<br>     s1.write(0);<br>     s2.write(70);<br>     s3.write(0);<br>     s4.write(70);<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249148398) { //Botão 8 no controle, por enquanto sem uso<br>     Serial.println("8");<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249199398) { //Botão 9 no controle<br>     Serial.println("Girar direita");<br>     s1.write(70);<br>     s2.write(0);<br>     s3.write(70);<br>     s4.write(0);<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249187158) { //Botão "help" no controle<br>     Serial.println("Parado");<br>     s1.write(79);<br>     s2.write(83);<br>     s3.write(81);<br>     s4.write(80);<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249201438) {<br>     Serial.println("Ligar Motor1");<br>       digitalWrite(motor1, HIGH);<br>     irrecv.resume();<br>   } <br>   else if (results.value==3249181038) {<br>     Serial.println("Desligar Motor1");<br>         digitalWrite(motor1, LOW);<br>     irrecv.resume();<br>   }<br>   else if (results.value==3249183078) { //Botão "volume menor" no controle<br>     Serial.println("Ligar Motor2");<br>       digitalWrite(motor2, HIGH);<br>     irrecv.resume();<br>   }<br>   else if (results.value==3249150438) { //Botão "volume maior" no controle<br>     Serial.println("Desligar Motor2");<br>         digitalWrite(motor2, LOW);<br>     irrecv.resume();<br>   }<br>   else irrecv.resume();<br> }<br>}
 90<div><pre>/*<br>   * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv<br> * An IR detector/demodulator must be connected to the input RECV_PIN.<br> * Version 0.1 July, 2009<br> * Copyright 2009 Ken Shirriff<br> * <a href="http://arcfn.com">http://arcfn.com</a><br> */<br>/* --Bibliotecas-- */<br>#include <br>#include <br><br>int contador1=0;<br>int contador2=0;<br><br>/* --Infravermelho-- */<br>int RECV_PIN = 11;<br>IRrecv irrecv(RECV_PIN);<br>decode_results results;<br><br>/* --Servos-- */<br>Servo s1;<br>Servo s2;<br>Servo s3;<br>Servo s4;<br><br>/* --Motores-- */<br>int motor1 = 6;<br>int motor2 = 7;<br><br>void setup()<br>{<br> Serial.begin(9600);<br> irrecv.enableIRIn(); // Start the receiver<br> s1.attach(9); // Ligar os servos aos seus respectivos pinos<br> s2.attach(10);<br> s3.attach(8);<br> s4.attach(12);<br> pinMode(motor1, OUTPUT);<br> pinMode(motor2, OUTPUT); <br>}<br><br>void loop() {<br> if (irrecv.decode(&amp;results)) {<br>   if (results.value==3249195318){ //Botão 1 no controle<br>     Serial.println("Esquerda");<br>     s1.write(0);<br>     s2.write(90);<br>     s3.write(0);<br>     s4.write(90);<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249162678) { //Botão 2 no controle<br>     Serial.println("Frente");<br>     s1.write(0);<br>     s2.write(310);<br>     s3.write(0);<br>     s4.write(100);<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249207558) { //Botão 3 no controle<br>     Serial.println("Direita");<br>     s1.write(70);<br>     s2.write(310);<br>     s3.write(70);<br>     s4.write(310);<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249174918) { //Botão 4 no controle<br>     Serial.println("Ré, esquerda");<br>     s1.write(310);<br>     s2.write(70);<br>     s3.write(310);<br>     s4.write(70);<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249164718) { //Botão 5 no controle<br>     Serial.println("Ré");<br>     s1.write(310);<br>     s2.write(0);<br>     s3.write(310);<br>     s4.write(60);<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249205518) { //Botão 6 no controle<br>     Serial.println("Ré, direita");<br>     s1.write(90);<br>     s2.write(0);<br>     s3.write(90);<br>     s4.write(0);<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249168798) { //Botão 7 no controle<br>     Serial.println("Girar esquerda");<br>     s1.write(0);<br>     s2.write(70);<br>     s3.write(0);<br>     s4.write(70);<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249148398) { //Botão 8 no controle, por enquanto sem uso<br>     Serial.println("8");<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249199398) { //Botão 9 no controle<br>     Serial.println("Girar direita");<br>     s1.write(70);<br>     s2.write(0);<br>     s3.write(70);<br>     s4.write(0);<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249187158) { //Botão "help" no controle<br>     Serial.println("Parado");<br>     s1.write(79);<br>     s2.write(83);<br>     s3.write(81);<br>     s4.write(80);<br>     irrecv.resume(); // Receive the next value<br>   }<br>   else if (results.value==3249201438) {<br>     Serial.println("Ligar Motor1");<br>       digitalWrite(motor1, HIGH);<br>     irrecv.resume();<br>   } <br>   else if (results.value==3249181038) {<br>     Serial.println("Desligar Motor1");<br>         digitalWrite(motor1, LOW);<br>     irrecv.resume();<br>   }<br>   else if (results.value==3249183078) { //Botão "volume menor" no controle<br>     Serial.println("Ligar Motor2");<br>       digitalWrite(motor2, HIGH);<br>     irrecv.resume();<br>   }<br>   else if (results.value==3249150438) { //Botão "volume maior" no controle<br>     Serial.println("Desligar Motor2");<br>         digitalWrite(motor2, LOW);<br>     irrecv.resume();<br>   }<br>   else irrecv.resume();<br> }<br>}
9191</pre>
9292
9393<p><b><br>29/05/2013 </b></p><p>Neste encontro, programamos o atirador, escolhemos os Leds para sinalizar o recebimento de um sinal infravermelho quando o motor do atirador estiver funcionando e quando o robôestiver ligado. Tivemos algumas dificuldades na programação, mas, no final, descobrimos que o erro era que o pin que havíamos colocado estava com problemas...</p><blockquote>Lição do dia: sempre cheque se todos os pinos estão funcionando<br></blockquote><p><b>05/06/2013</b></p><p>Neste encontro, nosso objetivo foi fazer o atirador de discos funcionar. Após passar a aula toda tentando consertar, descobrimos que o problema estava no código; o infeliz que escreveu o código  para o atirador esqueçeu de definir os pinos do motor como <b>output</b>.</p><blockquote>Lição do dia: sempre cheque se você definiu todos os pinos do modo correto.</blockquote></div>
9494
 95<p><b>19/06/2013</b></p> 
 96 
 97<p>Nesse dia, não tivemos aula por causa da Dilma.</p> 
 98 
9599<p><br></p>
96100
97101<p><br></p>