fbpx
Imagem destaque post sr 1

Desenvolvido por 

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

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!

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

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

  • Qtd - Descrição
  • 1 - Micro Servo 9g sg90 Towerpro
  • 1 - Placa UNO R3 com cabo usb, Arduino
  • 1 - Motor Shield L293D Driver Ponte H para Arduino
  • 1 - Mini Protoboard 170 Pontos
  • 1 - Sensor de Distância Ultrassônico HC-SR04 para Arduino
  • 1 - Kit Chassi 2WD (2 rodas) Robô para Arduino
  • 6 - Jumper (fios) 20cm Macho-Macho
  • 1 - Barra de Pinos 1x40 Fêmea 180 Graus
  • 1 - Buzzer/Speaker (som) 5v
  • 1 - Clip de Bateria 9V , Conector de Bateria
  • 2 - Abraçadeira de Nylon 15cm
  • 5 cm - Cabo (fio)
  • 1 cm - Fita dupla face colada no servo motor
  • 1 - Bateria de 9v Alcalina ou Recarregavel

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° e voltar, em cima do servo vai 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” do robô, ele emite som em baixa frequência de um lado 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 no robô

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

  • Motor Shield L293D Driver Ponte H para Arduino
  • Barra de Pinos 1x40 Fêmea 180 Graus

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.

 

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.

  • Kit Chassi 2WD (2 rodas) Robô para Arduino (em acrilico ou madeira)
  • Clip de Bateria 9V [Horizontal], conector de bateria ou suporte de bateria
  • Cabo Flexível Remoto de Cobre 1mm Preto 5 cm

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

°
Passo

Montagem do 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 siga o restante das informações aqui.

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

No código do programas usamos umas bibliotecas para reduzir o tamanho do código e facilitar o manuseio do código, com isso é necessário instalar uma biblioteca no arduino, mas não se assuste pois isso e muito fácil veja como:

Bibliotecas usadas para baixar:

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

Como fazer 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 , e clique em “OK”
Após isso aparecerá a mensagem “Biblioteca adicionada às suas bibliotecas.” , pronto, biblioteca instalada.

Código fonte do Robô Autônomo SR 1

Selecione todo o código fonte abaixo e copie .

Abra o Programa Arduino, clique em no menu “Arquivo” e depois em “Novo” , apague o código exemplo e cole o código, clique no ícone da  “Seta” para enviar o programa 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

Código 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

Observações

    • O robô é simples, apresenta falhas. Veja alguns itens que podem ocorrer:
      • Pode acontecer de ele colidir a 45º de um obstáculo.
      • O robô não detecta obstáculos com mais de 10 cm de altura, porque possui o sensor que “encherca” somente em linha reta. como o robô e baixo ele não vai passar em alguns lugares.
      • O código fonte usá lógica booleana, para facilitar o compreendimento a todos os usuários.
 

Não, nos usamos uma bateria recarregável de 9v 450mAh.

Você pode usar uma bateria de alcalina 9v ou usar 6 pilhas recarregáveis.

Pode também usar bateria de lition com um conversor de voltagem para 9v se for maior de 12v. 

Algo muito comum é a diferença de performance para motores do mesmo modelo (esses motores DC com caixa de redução na cor amarela).

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(velocidadeMotores);
motor2.setSpeed(velocidadeMotores);

Onde esta escrito “velocidadeMotores” você apaga isso, e digite números que variam de 0 a 254.

Com uma bateria nova usamos o valor 80, você vai aumentando ou diminuindo o valor de cada motor até ele andar reto igual você quer.

Não realizamos essa calibração, porque será diferente em cada robô e por isso deixamos um valor único para os dois.

Muito provavelmente a sua bateria esta acabando, quando a bateria reduz a voltagem de saída é normal o robô ficar fraco, você pode fazer duas coisas: 1º Trocar a fonte de energia (bateria, pilha, etc) 2º Você pode aumentar a velocidade dos motores, subindo a numeração que esta nessa parte do código fonte:
int velocidadeMotores = 80;
Esse valor pode ir de 0 a 254, vai aumentando e enviando o codigo para o robô e testando a cada tentitiva

Certo, você já instalou as bibliotecas necessárias para o arduino enviar o código para o robô?

Se não, veja em cima do código fonte tem o item em regrido: “Bibliotecas (librares) usadas no Código do robô​”, siga essa instrução lá que muito provavelmente vai resolver seu problema.

Continuou com erro? deixe um comentário abaixo do post copiando e colando o erro que o arduino esta mostranto.

Chegamos ao final, Muito Obrigado, amante de robótica!

Qualquer dúvida, deixe um comentário ou entre em contato!

Grande abraço!

Gostaria de um projeto ou robô que não temos no site?

Então é só clicar no botão abaixo e nos enviar a sua ideia, analisaremos ela e talvez postemos ela com o credito seu caso queira.

Compartilhe com outro amante de robótica!

Compartilhar no facebook
Compartilhar no twitter
Compartilhar no whatsapp
Compartilhar no email

Comentários

139 comentários em “Robô Autônomo SR 1: o robô autônomo Simples com arduino”

    • Olá, Leonardo, se for bateria comum ela some rapidinho, se for alcalina ela gasta em uns 10 minutos, se você tiver uma powerbank pode usar no robô que vai durar mais.
      Abraço

  1. Ola Leonardo, beleza?
    Cara, estou postando mais uma vez pois um problema persiste: o robo funciona normalmente, só que muitas vezes da pau e fica rodando em circulos, ja montei o SR 2 e agora estou com o sr1 montado, o problema ocorre nos dois projetos, o robo roda em circulos, quase em torno do proprio eixo, ja tentei de tudo, mas o estranho é que as vezes o robo funciona normalmente, sera alguma interferencia dos motores? devo tentar colocar capacitores nos motores? Por favor, me dá uma luz aí.
    Abraços e até mais.

  2. Fala meu brother, tudo bem…
    Então, o sensor ultrassônico fica fazendo somente leitura de “0”…

    • Olá, Henrique, tranquilo?
      Já respondi seu email com os possíveis problemas, ta uma olhada la.
      qualquer coisa me pergunta aqui ou lá.
      abraço

Deixe um comentário

Veja os Tutoriais de ROBÔS mais recentes

Veja os TUTORIAIS mais recentes

Veja os Tutoriais de PROJETOS mais recentes