Clube de Robótica

Robot com material reciclado

Anúncios

Introdução


Este Robot foi um desafio de uma ação de formação que frequentei em 2015. Foi nos lançado o desafio para criar um Robot com material reciclado. Então eu, Ramiro Martins, e o meu colega de ação de formação, José Araújo, optamos por utilizar papel e cartão, um roll-on de desodorizante e duas tampas de metal de frascos de conservas. É um resumo deste trabalho que aqui vos deixo.
Material utilizado


1 Arduíno UNO R3
1 Breadboard (placa de ensaio)
1 Sensor Ultrasónico HC-SR04
2 Motores DC
1 Motor Shield Arduíno
2 LEDs brancos
2 Resistências 220 Ω
1 Alimentação de externa 9V DC c/ interruptor
Diversos condutores elétricos
2 Rodas feitas com material reciclado (tampas de metal, papel de jornal, tampa de plástico)
1 Base para o robot com material reciclado (cartão de combate e papel de jornal e revistas)
6 Braçadeiras de serrilha
1 Roll-on de desodorizante
1 Embalagem de cola branca
1 Pau de espetada

Estrutura com material reciclado


Como estrutura reciclada optamos pelo papel e por 2 técnicas distintas, uma chamada técnica do rolo de papel de revistas ou jornais e o papel de jornal colado com cola branca. A utilização do papel e da cola branca permitiu obter uma rigidez e uma dureza que transforma a fragilidade do papel numa solução robusta, para além deste facto esta estrutura é de fácil conceção e muito barata.
Para fazer os rolos de papel cortaram-se tiras compridas de jornal ou revistas +/- ½ folha A4. Para enrolar o papel utilizamos um pau de espetada e cola branca, para aplicar uma gota no fim do rolo. Na criação dos rolos colocamos o papel enrolado na diagonal, uma das pontas ficou um pouco mais fina o que permitiu encaixar os rolos uns nos outros, formando um cordão com a medida desejada, em cada junção aplicou-se um pouco de cola para que a ligação ficar mais solida.
Feitos os rolos passou-se à construção da capa de cima e de baixo com cartão prensado (o chamado cartão combate reciclado), cortou-se uma base para cima e uma para baixo, na qual se fez uma abertura para colar o roll-on. Com as capas de cima e de baixo fez-se uma sanduíche com rolos de papel que se colaram com cola branca. Esta colagem teve de ficar a secar 24 horas com uma leve prensagem. 24 Horas depois colaram-se pequenas tiras de papel sobre o cartão de combate até obter uma camada uniforme e debruou-se à volta com rolos de papel espalmados que se colaram com cola branca. Por fim preparou-se um roll-on para colar na parte de baixo da base do robot, a altura que o roll-one gerou teve uma implicação direta no cálculo do diâmetro das rodas que a seguir se construíram.
Com a estrutura pronta passou-se à construção das rodas com 2 tampas de metal, de 2 frascos de conservas, e com rolos de papel espalmados tendo-se obtido as rodas com o aspeto da figura. (Nota: caso tentem reproduzir um trabalho idêntico lembro que o diâmetro das rodas pode ser ajustado acrescentando mais ou menos camadas de rolo de papel espalmado)

Com todas as peças criadas passamos à montagem da estrutura do Robot. Marcamos a posição de fixação dos motores, do Arduíno e da breadboard e criamos a furações necessárias utilizando um mini berbequim.

Acoplamento do hardware


O acoplamento do hardware à estrutura do robot podia ser feito através de 2 opções : braçadeiras de serrilha ou com parafusos porcas e anilhas. Optamos pela solução mais barata e fácil as braçadeiras de serrilha.


Ligações elétricas



Programa


O programa seguinte não é o do trabalho mas sim um realizado e testado no Clube de Robótica da Escola secundária de Gago Coutinho.

/* Robot com motores CC, motor shield e sensor ultrasonic
 * Programa realizado poelo Prof. Ramiro Martins Clube de Robotica ESGC
 */

#include <Ultrasonic.h>
#define TRIGGER_PIN  5  // pin 5 ligado ao trigger
#define ECHO_PIN     6   // pin 6 ligado ao echo
Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);

const int
PWM_A   = 3,
PWM_B   = 11,
DIR_A   = 12,
DIR_B   = 13,
BRAKE_A = 9,
BRAKE_B = 8,
SNS_A   = A0,
SNS_B   = A1;
int LED = 10; // Define-se o Pin 10 como sendo do LED 

void setup()
  {
  // Configuar a saida do LED
  pinMode(LED, OUTPUT);
  // Configuração da saída A 
  pinMode(BRAKE_A, OUTPUT);  // Brake pin on channel A
  pinMode(DIR_A, OUTPUT);    // Direction pin on channel A
  // Configure the B output - Configuração da saída B 
  pinMode(BRAKE_B, OUTPUT);  // Brake pin on channel B
  pinMode(DIR_B, OUTPUT);    // Direction pin on channel B
  int a = 35;  
  Serial.begin(9600);
  }

void loop()
  {
 
  float cmMsec, inMsec;
  long microsec = ultrasonic.timing();
  cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
  inMsec = ultrasonic.convert(microsec, Ultrasonic::IN);
  Serial.print("Distancia CM: ");
  Serial.println(cmMsec);
  delay(100);
  int a = cmMsec;
  // a distancia aos objetos pode ser alterada neste programa definimos 15 cm
 if (a < 15) {
   rodar();
   digitalWrite(LED, HIGH);
   float cmMsec, inMsec;
   long microsec = ultrasonic.timing();
   cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
   inMsec = ultrasonic.convert(microsec, Ultrasonic::IN);
   Serial.print("Distancia CM: ");
   Serial.println(cmMsec);
   int a = cmMsec;
  }
  else
  {
  andar();
  digitalWrite(LED, LOW); 
  }
 }
void andar()
  {
      // rotina para o robot anda em frente 
      digitalWrite(BRAKE_A, LOW); // funcao de paragem a zero, paragem do motor A desligada 
      digitalWrite(DIR_A, HIGH);  // funcao para andar, o motor A roda para a frente 
      analogWrite(PWM_A, 70);     // velocidade do motor A esta definida a 70, 255 valor max.
      digitalWrite(BRAKE_B, LOW); // funcao de paragem a zero, paragem do motor B desligada 
      digitalWrite(DIR_B, HIGH);  // funcao para andar, o motor B roda para a frente 
      analogWrite(PWM_B, 70);     // velocidade do motor B esta definida a 70, 255 valor max.
      Serial.println("Estou a andar para a frente");
  }
void rodar()
  {
      // rotina para o robot parar e andar para trás e roda
      digitalWrite(BRAKE_A, HIGH); // funcao de paragem a zero, paragem do motor A desligada  
      digitalWrite(BRAKE_B, HIGH); // funcao de paragem a zero, paragem do motor B desligada 
      delay (200); // Espera 0,2 s
      digitalWrite(BRAKE_A, LOW); // funcao de paragem a zero, paragem do motor A desligada 
      digitalWrite(DIR_A, LOW);  // funcao para andar, o motor A roda para trás 
      analogWrite(PWM_A, 70);     // velocidade do motor A esta definida a 70, 255 valor max.
      digitalWrite(BRAKE_B, LOW); // funcao de paragem a zero, paragem do motor B desligada 
      digitalWrite(DIR_B, LOW);  // funcao para andar, o motor B roda para trás 
      analogWrite(PWM_B, 70);     // velocidade do motor B esta definida a 70, 255 valor max.
      Serial.println("Estou a andar para trás");
      delay (500); // Espera 0,5 s
      digitalWrite(BRAKE_A, LOW);  // funcao de paragem a zero, paragem do motor A desligada 
      digitalWrite(DIR_A, HIGH);   // funcao para andar a um, o motor A roda para a frente 
      analogWrite(PWM_A, 0);       // velocidade do motor A esta definida a 0, 255 valor max.
      digitalWrite(BRAKE_B, LOW);  // funcao de paragem a zero, paragem do motor B desligada 
      digitalWrite(DIR_B, HIGH);   // funcao para andar a um, o motor B roda para a frente 
      analogWrite(PWM_B, 100);     // velocidade do motor B esta definida a 100, 255 valor max.  
      Serial.println("Estou a rodar");
      delay (200); // Espera 0,2 s
      analogWrite(PWM_A, 0); 
      analogWrite(PWM_A, 0); 
      delay (50); // Espera 0,05 s
  }

 Nota:

Recomenda-se a utilização de velocidades superiores às do programa, para o robot andar mais depressa, no entanto devido à velocidade pode ser necessário aumentar a distância aos obstáculos para 25 ou 30 cm.

Também se podem ensaiar diferentes movimentos e as curvas (rodar) pode ser feito de forma mais larga dando velocidade menor a uma das rodas e maior à outra roda, assim o robot descreverá uma curva mais larga.

Como será fácil verificar o robot não se consegue desviar de todos os obstáculos, porque apenas tem um sensor. Se pensa utilizar mais do que um sensor para garantir uma área de cobertura maior, aumentando a deteção de obstáculos recomendo o estudo da função NewPing que permite trabalhar com mais sensores (esta função tem como limite a utilização máxima de 15 sensores). Pode consultar o nosso artigo sobre o NewPing.

Anúncios

Anúncios