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.


1 Comment
Os comentários estão fechados.