Projetos

Robô que Evita Obstáculos com Arduino

Eletrogate 31 de outubro de 2023

Introdução

Com certeza vocês já viram, ou já ouviram falar sobre aqueles robôs aspiradores de pó que ficam andando pela casa, né? No post de hoje, nós faremos um robô que anda bem parecido com aqueles robôs.  Sim, eles andam um pouco engraçado, mas o fato é que eles nunca batem e ficam insistindo em andar para frente em uma parede. O projeto utiliza a placa Arduino Uno e um Motor Shield L293D para o controle dos motores, e para detectar os obstáculos, iremos usar um sensor ultrassônico HC-SR04.


Circuito

A conexão no Arduino será somente essa:

*É necessário remover o jumper d0 Shield

Para ficar menos confuso, eu fiz um vídeo mostrando a conexão do HC-SR04 com a placa:

Soldei um cabo na parte do Shield que dá 5v e outro no GND, para a conexão ser mais fácil. No meu caso o cabo que coloquei era grande, mas caso prefira, é possível soldar diretamente o Vcc e o GND do sensor diretamente no Shield.


Montagem

A primeira parte é montar o chassi do robô:

Foi necessária a soldagem de dois fios e uma barra de pinos no Shield como na imagem a seguir:

Após isso, basta encaixar o shield no Arduino e fazer as ligações conforme o circuito.

Eu soldei esses dois fios na parte do Shield onde tem os pinos de 5v e GND, para facilitar na conexão com o sensor:

Agora, o carrinho montado:


Código

#include <AFMotor.h> //inclui a biblioteca do Motor Shield

AF_DCMotor motor1(2); //define em quais portas do shield cada motor está ligado
AF_DCMotor motor2(3);

int vel = 250; //variavel para o controle da velocidade
int PinTrigger = 15; // Pino usado para disparar os pulsos do sensor
int PinEcho = 14; // pino usado para ler a saida do sensor
float TempoEcho = 0;
const float VelocidadeSom_mporus = 0.000340;

void setup() {
 pinMode(PinTrigger, OUTPUT); //configura o Trigger como saída
 digitalWrite(PinTrigger, LOW);
 pinMode(PinEcho, INPUT); // configura pino ECHO como entrada
}

void loop() {
 // Envia pulso para o disparar o sensor
 DisparaPulsoUltrassonico();
  
  // Mede o tempo de duração do sinal no pino de leitura(us)
 TempoEcho = pulseIn(PinEcho, HIGH);

 if((CalculaDistancia(TempoEcho)*100) > 15){ // se a distância calculada em cm for maior que 15cm, o robô anda para frente
   motor1.run(FORWARD);
   motor2.run(FORWARD);
   motor1.setSpeed(vel);
   motor2.setSpeed(vel);
 }
 else{                   //se a distância não for maior que 15cm, o robô vira para a direita
   motor1.run(FORWARD);
   motor2.run(BACKWARD);
   motor1.setSpeed(vel);
   motor2.setSpeed(vel);
   delay(300);
 }

}

// Funçao para enviar o pulso de trigger
void DisparaPulsoUltrassonico(){

  digitalWrite(PinTrigger, HIGH);
  delayMicroseconds(10);
  digitalWrite(PinTrigger, LOW);
  }

// Função para calcular a distancia em metros
float CalculaDistancia(float tempo_us){
  return((tempo_us*VelocidadeSom_mporus)/2);
}

Comentários do código

int PinTrigger = 15; 
int PinEcho = 14;

Os pinos Analógicos podem ser utilizados como digitais, no caso o 14 e o 15 são as portas A0 e A1, respectivamente.


Sobre o Autor


Arthur Almeida

Estudante do Ensino médio , aficionado por criar novos projetos eletrônicos e automações, principalmente com o Arduino. No meu tempo livre eu gosto de pesquisar sobre novas tecnologias e tento criar projetos com elas.


Eletrogate

31 de outubro de 2023

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!