Robô Autônomo SR 1: o robô autônomo Simples com arduino

Leonardo Campbell
Faça o Seu Robô Autônomo com arduino sozinho, um robô que se locomove sozinho pelo ambiente, ao encontrar um obstáculo ele para e da uma ré e verifica automaticamente qual e o lado que é o que tem mais espaço para ele girar e ir sozinho, bem simples de fazer e de compreender o código fonte, muito útil para vários outros projetos e trabalhos de escolas e faculdades. A montagem dele fica pronta em menos de meia hora!

Compartilhe esse post

Share on whatsapp
Share on telegram
Share on facebook
Share on twitter
Share on skype
Share on email

Codigo fonte:

/*
------------------------------------------Robô Autonomo SR 1------------------------------------------------
Versão do Software: 1.0 SR 1 //não apague essa linha, para futuras consultas
Software open source, favor citar o autor: Seu Robô https://SeuRobo.com.br/
*/
  // inclusão de bibliotecas.    
  #include <Servo.h>    // inclui biblioteca de manipulação de servos motores.    
  #include <AFMotor.h>   // inclui biblioteca de manipulação de motores DCs.  
    
  //Definindo os pinos  
  #define trigPin A0 //Pino TRIG do sensor no pino analógico A0
  #define echoPin A1 //Pino ECHO do sensor no pino analógico A1
  #define BUZZER A2  // Define o pino do buzzer (Som) no pino ANALÓGICO A0  
  AF_DCMotor motor1(1);    // Define o motor1 ligado ao M1  
  AF_DCMotor motor2(2);    // Define o motor2 ligado ao M2  

  int TempoGirar = 1;//esse é o tempo para o robô girar em 45º com uma bateria de 9v.
  int distanciaObstaculo = 30; //distância para o robô parar e recalcular o melhor caminho
  int velocidadeMotores = 80; // velocidade que os motores funcionarão na bateria 9v. Para a bateria 9v a velocidade 80 é ideal
  Servo servo_ultra_sonico; // nomeando o servo motor    
  //variáveis  para o sensor ultrassonico
  long duracao;
  long distancia_cm=0;
  int minimumRange=5; //tempo de resposta do sensor
  int maximumRange=200;
    
  // executado na inicialização do Arduino    
  void setup(){    
    Serial.begin(9600); // inicializa a comunicação serial para mostrar dados     
    servo_ultra_sonico.attach(10);  // Define o mini servo motor ligado no pino digital 10.    
    pinMode(trigPin, OUTPUT); //define o pino TRIG como saída
    pinMode(echoPin, INPUT);  //define o pino ECHO como entrada 
    pinMode(BUZZER,OUTPUT);   // Define o pino do buzzer como saída   
    motor1.setSpeed(velocidadeMotores);     // Define a velocidade para os motores. A velocidade máxima é 255. 
    motor2.setSpeed(velocidadeMotores);     //Usamos uma bateria de 9v 450mAh, com ela a velocidade ficou boa. Mas dependendo da bateria utilizada a velocidade deverá ser utilizada. Não use pilhas, pois são fracas
    servo_ultra_sonico.write(90);   // O servo do sensor se inicia a 90 graus (meio)    
    rotacao_Parado;  //inica com os motores parados     
  }    
    
  // Função principal do Arduino    
  void loop(){    
    pensar(); //inicia a função pensar  
    //Seu Robô http://SeuRobo.com.br/
  }    
    
  // Função para chamar outras funções e definir o que o robô fará  
  void pensar(){    
   reposicionaServoSonar(); //Coloca o servo para olhar a frente    
   int distancia = lerSonar(); // Ler o sensor de distância  
   Serial.print("distancia em cm: "); 
   Serial.println(distancia);   // Exibe no serial monitor 
   if (distancia > distanciaObstaculo) {  // Se a distância for maior que 20 cm  
     rotacao_Frente(); //robô anda para frente   
   }else{   
     rotacao_Parado();  //para o robô  
     posicionaCarroMelhorCaminho(); //calcula o melhor caminho    
     pensar();    
   }   
  }  
    
  // Função para ler e calcular a distância do sensor ultrassônico    
  int lerSonar(){    
   digitalWrite(trigPin, LOW); //não envia som
   delayMicroseconds(2);
   digitalWrite(trigPin,HIGH); //envia som 
   delayMicroseconds(10);
   digitalWrite(trigPin,LOW); //não envia o som e espera o retorno do som enviado
   duracao = pulseIn(echoPin,HIGH); //Captura a duração em tempo do retorno do som.
   distancia_cm = duracao/56; //Calcula a distância
   delay(30);  
   return distancia_cm;             // Retorna a distância  
  }   
    
  // Função para calcular a distância do centro    
  int calcularDistanciaCentro(){    
   servo_ultra_sonico.write(90);    
   delay(20);   
   int leituraDoSonar = lerSonar();  // Ler sensor de distância  
   delay(500);   
   leituraDoSonar = lerSonar();   
   delay(500);   
   Serial.print("Distancia do Centro: "); // Exibe no serial  
   Serial.println(leituraDoSonar);   
   return leituraDoSonar;       // Retorna a distância  
  }    
    
  // Função para calcular a distância da direita    
  int calcularDistanciaDireita(){    
   servo_ultra_sonico.write(0);   
   delay(200);  
   int leituraDoSonar = lerSonar();   
   delay(500);   
   leituraDoSonar = lerSonar();   
   delay(500);   
   Serial.print("Distancia da Direita: ");  
   Serial.println(leituraDoSonar);   
   return leituraDoSonar;    
  }    
    
  // Função para calcular a distância da esquerda    
  int calcularDistanciaEsquerda(){    
   servo_ultra_sonico.write(180);   
   delay(200);  
   int leituraDoSonar = lerSonar();   
   delay(500);   
   leituraDoSonar = lerSonar();   
   delay(500);   
   Serial.print("Distancia Esquerda: ");  
   Serial.println(leituraDoSonar);   
   return leituraDoSonar;    
  }    
    
  // Função para captar as distâncias lidas e calcular a melhor distância. Acesse: Seu Robô https://SeuRobo.com.br/    
  char calculaMelhorDistancia(){    
   int esquerda = calcularDistanciaEsquerda();    
   int centro = calcularDistanciaCentro();    
   int direita = calcularDistanciaDireita();    
   reposicionaServoSonar();    
   int maiorDistancia = 0;   
   char melhorDistancia = '0';     
     
   if (centro > direita && centro > esquerda){    
     melhorDistancia = 'c';    
     maiorDistancia = centro;    
   }else   
   if (direita > centro && direita > esquerda){    
     melhorDistancia = 'd';    
     maiorDistancia = direita;    
   }else  
   if (esquerda > centro && esquerda > direita){    
     melhorDistancia = 'e';    
     maiorDistancia = esquerda;    
   }    
   if (maiorDistancia <= distanciaObstaculo) { //distância limite para parar o robô   
     rotacao_Re();    
     posicionaCarroMelhorCaminho();    
   }    
   reposicionaServoSonar();  
   return melhorDistancia;    
  }    
    
  // Função para colocar o carrinho na melhor distância, isto é, girá-lo para a melhor distância    
  void posicionaCarroMelhorCaminho(){    
   char melhorDist = calculaMelhorDistancia();     
   Serial.print("melhor Distancia em cm: ");  
   Serial.println(melhorDist);  
   if (melhorDist == 'c'){    
     pensar();    
   }else if (melhorDist == 'd'){    
     rotacao_Direita();    
   }else if (melhorDist == 'e'){    
     rotacao_Esquerda();     
   }else{    
     rotacao_Re();    
   }    
   reposicionaServoSonar();    
  }    
    
  // Função para deixar o sensor "olho" do robô no centro    
  void reposicionaServoSonar(){    
   servo_ultra_sonico.write(90);   
   delay(200);   
  }    
    
  // Função para fazer o carro parar    
  void rotacao_Parado()    
  {    
   Serial.println(" Motor: Parar ");
   motor1.run(RELEASE); // Motor para  
   motor2.run(RELEASE);  
  }    
    
  // Função para fazer o robô andar para frente    
  void rotacao_Frente()    
  {    
   Serial.println("Motor: Frente ");   
   motor1.run(FORWARD); // Roda vai para frente  
   motor2.run(FORWARD);   
   delay(50);    
  }    
    
  // Função que faz o robô andar para trás e emite som quando ele dá ré    
  void rotacao_Re()    
  {    
   Serial.println("Motor: ré ");  
   for (int i=0; i <= 3; i++){
      digitalWrite(BUZZER, HIGH); // Liga o som
      delay(100);
      motor1.run(BACKWARD);    // Roda vai para trás  
      motor2.run(BACKWARD);    // Roda vai para trás  
      delay(100);  
      digitalWrite(BUZZER, LOW); // Desliga o som  
      delay(100);
   } 
   rotacao_Parado();    
  }    
    
  // Função que faz o robô virar à direita, https://SeuRobo.com.br/    
  void rotacao_Direita()    
  {    
   digitalWrite(BUZZER, HIGH); // Liga o som
   delay(100);
   motor1.run(BACKWARD);    //o robô dá uma ré para não colidir ao girar 
   motor2.run(BACKWARD);      
   delay(50);  
   digitalWrite(BUZZER, LOW); // Desliga o som  
   delay(100);
   Serial.println(" Para a direita ");  
   motor1.run(FORWARD); // Roda vai para frente  
   motor2.run(BACKWARD); // Roda vai para trás   
   delay(TempoGirar);    
  }    
    
  // Função que faz o robô virar à esquerda    
  void rotacao_Esquerda()    
  {    
   digitalWrite(BUZZER, HIGH); // Liga o som
   delay(100);
   motor1.run(BACKWARD);    // // O robô dá uma ré para não colidir ao girar 
   motor2.run(BACKWARD);   
   delay(50);  
   digitalWrite(BUZZER, LOW); // Desliga o som  
   delay(100);
   Serial.println(" Para a esquerda ");  
   motor1.run(BACKWARD); // Roda vai para trás  
   motor2.run(FORWARD); // Roda vai para frente  
   delay(TempoGirar);    
  } 
 //Fim 
 //Versão do Software: 1.0 SR 1 //não apague essa linha, para futuras consultas

Bibliotecas:

Veja como ficara o Seu Robô após a montagem

O que você precisa para montar o Seu Robô Autônomo SR 1

Kit Completo do Robô SR 1

Ganhe tempo para você!

Por que você vai perder mais de uma hora pesquisando item por item na internet? E se um item vier com defeito? E se um item não for entregue? Isso mesmo, há um monte de situações que podem dar errado ao comprar em outras lojas, com isso você não vai ver o Seu Robô funcionando.

Por que comprar no Seu Robô?

  • Todos os itens são testados antes de ser enviar a você
  • Suporte exclusivo para clientes (Chat, Email, Ligação)
  • Atendimento fora do horário comercial para clientes
  • Garantia de 90 dias
  • Parcelamento em até 12x SEM juros
  • Clientes tem acesso aos robôs antes do lançamento e descontos exclusivos.

Adquira o Kit Completo FACILMENTE!

Kit com todos os itens que você precisa! Kit do Robô Autônomo SR 1 completo, exclusividade Seu Robô! Ver o Kit na Loja Seu Robô exclusivo

Vamos ver o que alguns itens fazem

Componente

Explicação do funcionamento do componente

Esse é o Micro servo motor, também conhecido como Mini Servo Motor. Ele é o responsável por girar até 180° a Mini Protoboard com o Sensor Ultrassônico para poder calcular qual e a melhor distancia para o robô ir. Esse é o Arduino UNO, nosso cérebro do robô.  Nele que fica o programa que enviaremos para a memoria dele, e com esse programa ele consegue fazer um monte de cálculos  e processamento de informação para poder tomar a melhor decisão para locomover o robô. Esse é o Motor Shield L293D mais conhecido como Ponte H L293D ou Driver de Motor. Ele que controla para qual direção o motor DC vai girar e qual a velocidade que ele vai funcionar, tudo isso controlado pelo arduino uno. Esse é o Sensor Ultrassônico, nosso “olho” do robô.  Através desse sensor que um “olho” emite som em baixa frequência e o outro aguarda o retorno do som, com isso usamos uma formula no programa para calcular a demora do retorno do som e convertemos isso para a distancia em centímetro e o programa vai calcular qual das distancia e maior para o robô ir nessa direção. Esse é a base com motor, conhecido como Chassi 2wd ou chassi de 2 rodas.  Em cima dele que vai todos os componentes do robô e através dele que o robô consegue se mover com os motores DC (corrente continua) com caixa de redução que deixa o robô com mais força. Esse é Buzzer, Speaker ou Som Ele é o responsável por fazer o barulho de ré, ele emites sons graves e agudos, que provavelmete irrita muitas pessoas que já estão estressadas.

Os demais componentes não temos muito o que explicamos pois e bem simples o que eles fazem, você ira conferir isso no vídeo de montagem.

Vamos colocar a mão na “massa”

° Passo

Soldar os componentes na ponte H

Pessoal, agora que você esta com todos os itens em mãos, antes de irmos para a montagem, precisamos soldar os componentes que requerem solda: Vamos pegar a Barra de pinos e corta-la em 3 partes com cada um contendo 6 furos. Pegue a barra conte 7 furos e corte com um alicate em cima do 7 furo, repita. Com isso teremos 3 partes iguais. Pegue a Ponte h L293D e com o ferro de solda e o estanho solde cada ponto da barra de pinos na ponte h serão 18 soldas. Veja o vídeo ao lado para compreender mais. Ou se preferir a gente pode realizar a solda nos componentes, clique aqui e saiba mais

Veja o vídeo da solda na ponte h

° Passo

Montar e Soldar os componentes do kit chassi 2wd

Antes de irmos para a montagem, precisamos soldar os componentes que requerem solda e depois montamos ele. Solde os cabos vermelho e preto, um em cada terminal do motor. Agora, Solde o Clip de bateria  em um terminal do botão liga/desliga. Pegue o fio de 5cm e solde no outro terminal do botão. Agora é hora de montar o carrinho, veja o vídeo ao lado para de ajudar

Veja o vídeo da Montagem e Soldagem do Kit Chassi 2wd

Realizamos a Solda do Kit para você

Não sabe soldar? Não tem experiencia com solda? Não tem as ferramentas? Não se preocupe, temos o serviço de solda do componentes, para facilitar a sua vida e deixar a robótica muito mais FÁCIL! Saiba mais serviços ° Passo

Montar o robô

Após você der soldado todos os componentes necessarios, vamos monta-lo. Para isso é só você clicar na imagem do lado, e seguir cada fio e conecta-los ao componentes, caso tenha duvida, veja o vídeo tutorial. Qualquer duvida, deixe um comentário ou entre em contato conosco.
Esquema de ligação Robô Autônomo SR 1

Veja o vídeo, demostrando ele em funcionamento e ensinado a montar o robô

° E Ultimo Passo

Agora vamos para o Código fonte GRATUITO do nosso robô

Enviar o código fonte para o arduino

Vamos fazer item por item, tudo bem? Primeiro você tem que instalar o programa no computador/notebook, acesse esse tutorial de como instalar o arduino no computador clicando aqui.  Após instalar volte aqui e sega o restante das informações aqui. No código do programas usamos umas bibliotecas para reduzir o tamanho do código e facilitar a manuseio do código, com isso é necessários instalar uma biblioteca no arduino, mas não se assuste pois isso e muito fácil veja como:

Bibliotecas (librares) usadas no Código do robô

Servo.h – Essa biblioteca já vem inclusa no arduino versão 1.6 ou superior AFMotor.h – Download clique aqui

Como afazer a instalação da biblioteca:

Após baixar a biblioteca, abra o programa do arduino e Instale a biblioteca no menu: Sketch Incluir Biblioteca (Include Library) Adicionar Biblioteca .ZIP (Add .ZIP Library…) Selecione o arquivo que você baixou e salvou em uma pasta (Afmotor.zip) , e clique em OK após isso aparecerá a mensagem “Biblioteca adicionada às suas bibliotecas.” , pronto, biblioteca instalada.

Baixe o código fonte do robô autônomo SR 1

Click aqui e faça o download do código fonte Baixou o código fonte, agora extraia o arquivo, e envie para o arduino. Não sabe como enviar um programa para o arduino? então veja nosso tutorial de como enviar o programa para o arduino clicando aqui Parabéns! o robô esta pronto, agora é só colocar a bateria e ligar o robô no botão liga/desliga Amantes de robótica, encontra-se abaixo a lista dos componentes do robô, clique no item e veja-o em nossa loja.

Observações

  •  Usamos uma bateria recarregável de 9v 450mAh (bateria não está inclusa do kit).
  •  Não utilize pilhas, pois os motores consumem muita energia e com isso o robô ficaria muito instável.
  •  O robô é simples, apresenta falhas. Dessa forma, pode acontecer de ele colidir a 45º de um obstáculo. Além disso, o robô não detecta obstáculos com mais de 10 cm de altura, porque possui um único sensor.
  • O código fonte usá lógica booleana, para facilitar o compreendimento a todos os usuários.
  •  O robô não anda em linha reta. Algo muito comum é a diferença de performance para motores do mesmo modelo. No caso dos motores que acompanharam o chassi, essa situação pode ser resolvida a partir de testes de velocidades de cada motor até conseguir fazê-lo andar em linha reta. Essa modificação de valores referentes à velocidade pode ser realizada alterando a seguinte linha de código:
motor1.setSpeed(A);    
motor2.setSpeed(B);
Onde a letra A representa a velocidade do motor 1 e a letra B a velocidade do motor 2, as velocidades são de 0 a 254. Não realizamos essa calibração, porque será diferente em cada robô e por isso deixamos um valor único para os dois. Mostrar mensagem original. Qualquer duvida, deixe um comentário ou entre em contato!

Receba avisos de novos posts e novidades

Conteúdo extra e contato mas próximo com você

Compartilhe esse post

Share on whatsapp
Share on telegram
Share on facebook
Share on twitter
Share on skype
Share on email

Outros Posts que talvez você goste

Que Saber Mais Sobre Robótica?

Venha Fazer Um Curso Online E Aprender Muito Mais