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:


Medidas do robô (Escala 100:1)



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á:


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:


Mecanismo de disparo de discos.


Interior


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:

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::

  1. /*
  2. * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
  3. * An IR detector/demodulator must be connected to the input RECV_PIN.
  4. * Version 0.1 July, 2009
  5. * Copyright 2009 Ken Shirriff
  6. * http://arcfn.com
  7. */
  8. /* --Bibliotecas-- */
  9. #include
  10. #include
  11. int contador1=0;
  12. int contador2=0;
  13. /* --Infravermelho-- */
  14. int RECV_PIN = 11;
  15. IRrecv irrecv(RECV_PIN);
  16. decode_results results;
  17. /* --Servos-- */
  18. Servo s1;
  19. Servo s2;
  20. Servo s3;
  21. Servo s4;
  22. /* --Motores-- */
  23. int motor1 = 6;
  24. int motor2 = 7;
  25. void setup()
  26. {
  27. Serial.begin(9600);
  28. irrecv.enableIRIn(); // Start the receiver
  29. s1.attach(9); // Ligar os servos aos seus respectivos pinos
  30. s2.attach(10);
  31. s3.attach(8);
  32. s4.attach(12);
  33. pinMode(motor1, OUTPUT);
  34. pinMode(motor2, OUTPUT);
  35. }
  36. void loop() {
  37. if (irrecv.decode(&results)) {
  38. if (results.value==3249195318){ //Botão 1 no controle
  39. Serial.println("Esquerda");
  40. s1.write(0);
  41. s2.write(90);
  42. s3.write(0);
  43. s4.write(90);
  44. irrecv.resume(); // Receive the next value
  45. }
  46. else if (results.value==3249162678) { //Botão 2 no controle
  47. Serial.println("Frente");
  48. s1.write(0);
  49. s2.write(310);
  50. s3.write(0);
  51. s4.write(100);
  52. irrecv.resume(); // Receive the next value
  53. }
  54. else if (results.value==3249207558) { //Botão 3 no controle
  55. Serial.println("Direita");
  56. s1.write(70);
  57. s2.write(310);
  58. s3.write(70);
  59. s4.write(310);
  60. irrecv.resume(); // Receive the next value
  61. }
  62. else if (results.value==3249174918) { //Botão 4 no controle
  63. Serial.println("Ré, esquerda");
  64. s1.write(310);
  65. s2.write(70);
  66. s3.write(310);
  67. s4.write(70);
  68. irrecv.resume(); // Receive the next value
  69. }
  70. else if (results.value==3249164718) { //Botão 5 no controle
  71. Serial.println("Ré");
  72. s1.write(310);
  73. s2.write(0);
  74. s3.write(310);
  75. s4.write(60);
  76. irrecv.resume(); // Receive the next value
  77. }
  78. else if (results.value==3249205518) { //Botão 6 no controle
  79. Serial.println("Ré, direita");
  80. s1.write(90);
  81. s2.write(0);
  82. s3.write(90);
  83. s4.write(0);
  84. irrecv.resume(); // Receive the next value
  85. }
  86. else if (results.value==3249168798) { //Botão 7 no controle
  87. Serial.println("Girar esquerda");
  88. s1.write(0);
  89. s2.write(70);
  90. s3.write(0);
  91. s4.write(70);
  92. irrecv.resume(); // Receive the next value
  93. }
  94. else if (results.value==3249148398) { //Botão 8 no controle, por enquanto sem uso
  95. Serial.println("8");
  96. irrecv.resume(); // Receive the next value
  97. }
  98. else if (results.value==3249199398) { //Botão 9 no controle
  99. Serial.println("Girar direita");
  100. s1.write(70);
  101. s2.write(0);
  102. s3.write(70);
  103. s4.write(0);
  104. irrecv.resume(); // Receive the next value
  105. }
  106. else if (results.value==3249187158) { //Botão "help" no controle
  107. Serial.println("Parado");
  108. s1.write(79);
  109. s2.write(83);
  110. s3.write(81);
  111. s4.write(80);
  112. irrecv.resume(); // Receive the next value
  113. }
  114. else if (results.value==3249201438) {
  115. Serial.println("Ligar Motor1");
  116. digitalWrite(motor1, HIGH);
  117. irrecv.resume();
  118. }
  119. else if (results.value==3249181038) {
  120. Serial.println("Desligar Motor1");
  121. digitalWrite(motor1, LOW);
  122. irrecv.resume();
  123. }
  124. else if (results.value==3249183078) { //Botão "volume menor" no controle
  125. Serial.println("Ligar Motor2");
  126. digitalWrite(motor2, HIGH);
  127. irrecv.resume();
  128. }
  129. else if (results.value==3249150438) { //Botão "volume maior" no controle
  130. Serial.println("Desligar Motor2");
  131. digitalWrite(motor2, LOW);
  132. irrecv.resume();
  133. }
  134. else irrecv.resume();
  135. }
  136. }


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; pois quando escrevemos o código  para o atirador, esquecemos de definir os pinos do motor como output.

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

12/06/2013

Neste encontro, fizemos os cálculos de resistência, e colocamos os resistores. Depois disso, fizemos alguns testes com o robô, e percebemos um cheiro de queimado, então vimos que alguns resistores tinham queimado. Após a troca dos resistores queimados, e o conserto de algumas falhas nos cálculos, testamos o robô de novo, e desta vez tudo ocorreu de maneira correta.

19/06/2013

Nesse dia, não tivemos aula por causa dos jogos na Copa das Confederações.

28/06/2013

Nesse dia, fizemos os furos na parte externa do robô para alojar os três Leds de status, o botão de ligar/desligar e o receptor infravermelho. Também mapeamos os circuitos do robô para que ele ficasse mais organizado, e começamos a organizá-los para se adequarem a uma placa de ilha. Para descobrirmos a distância de um lado ao outro do Arduino na placa de ilha, tivemos que contar quantos buracos tinham de distância.

10/07/2013

Hoje, pintamos o robô inteiro, e planejamos terminar seu circuito próxima aula.

Fotos a seguir:

Antes



Depois da pintura, antes da montagem


Montado e pintado


Outro ângulo


Circuito interno


Atividades recentes

  • Matheus Leite

    • Quinta, 27.06.2013 20:58