fbpx
Imagem destaque robo autonomo sr2 com ponte h l298n muito bom

Desenvolvido por 

Robô Autônomo SR 2 – Aprenda, de um jeito fácil, a robótica na prática

Faça você mesmo um robô autônomo com ponte h l298n e arduino na sua casa e aprenda muita robótica nesse tutorial! Nele, eu explico tudo quanto ao Robô Autônomo SR 2 com arduino, você vai aprender a fazer o seu robô! Ele se movimenta sozinho pela casa e sem colidir. Ao encontrar um obstáculo, o robô para e da uma ré e verifica automaticamente qual lado tem mais espaço para ele girar e ir sozinho. Com o Robô Autônomo SR 2 você praticará a robótica, poderá fazê-lo para trabalhos de escola e/ou de faculdade, poderá usá-lo como base na produção de um robô personalizado. Você vai ver que é muito mais fácil do que você imaginava!

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

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

  • Qtd - Descrição
  • 1 - Kit Chassi 2WD (2 rodas) Robô para Arduino
  • 1 - Arduino UNO R3 com cabo usb
  • 1 - Motor Driver Shield L298N Ponte H para Arduino
  • 1 - Micro Servo 9g sg90 Towerpro
  • 1 - Mini Protoboard 170 Pontos
  • 1 - Sensor de Distância Ultrassônico HC-SR04 para Arduino
  • 1 - Clip de Bateria 9V , Conector de Bateria
  • 6 - Jumper (fios) 20cm Femea-Macho
  • 9 - Jumper (fios) 20cm Macho-Macho
  • 2 - Abraçadeira de Nylon 15cm
  • 1 - Abraçadeira de Nylon 30cm
  • 5 cm - Cabo (fio) (para ligar no botão)
  • 1 cm - Fita dupla face (para colar no servo motor)
  • 1 - Bateria de 9v Alcalina ou Recarregável

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 a melhor distância para o robô percorrer.

Esse é o Arduino UNO, nosso cérebro do robô. 

Nele fica o programa que enviaremos para a memória do robô e com esse programa o robô consegue fazer um monte de cálculos  e processamento de informação para poder tomar a melhor decisão referente à sua locomoção.

Esse é o Motor Shield l298n mais conhecido como Ponte H l299n ou Driver de Motor.

Ele controla para qual direção o motor DC vai girar e qual a velocidade que ele vai funcionar, executando o comando do arduino uno.

Esse é o Sensor Ultrassônico, nosso “olho” do robô. 

Através desse sensor, que é como os “olhos” do robô, é emitido um som em baixa frequência de um lado e o outro lado aguarda o retorno do som. Com isso, usamos uma fórmula no programa para calcular a demora do retorno do som e convertemos o tempo de demora para a distância em centímetro. Assim, o programa calcula a maior distância para que o robô siga naquela direção.

Esse é a base com motor, conhecido como Chassi 2wd ou chassi de 2 rodas. 

Em cima do chassi são fixados os componentes do robô e através do chassi 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.

Sobre os demais componentes não temos muito o que explicar, pois são bem simples suas funções, como você irá conferir no vídeo de montagem.

Vamos colocar a mão no robô

Montagem do robô

Clique na imagem ao lado. Veja 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 2

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 uma biblioteca 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 (caso não esteja instalado, atualize seu programa, veja o tutorial do link acima)

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

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ô Autônomo SR 2------------------------------------------------
Versão do Software: 1.0 SR 2 //não apague essa linha, para futuras consultas
Software open source, favor citar o autor: Seu Robô https://SeuRobo.com.br/
Criado por: Leonardo Campbell - Seu Robô  Uptades:  Erteza Tawsif Efaz
Robô autonomo SR 2 é uma versão bem melhorada do Robô SR 1
*/
#include <Servo.h>     // Adiciona a biblitoeca Servo
//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
// motor um            // Ligação dos pinos da Ponte H L298N
#define enA  11        //pino enA na porta digital 10
#define in1  9         //pino in1 na porta digital 9
#define in2  8         //pino in2 na porta digital 8
// motor dois          // Ligação dos pinos da Ponte H L298N
#define enB  5         //pino enB na porta digital 5
#define in3  7         //pino in3 na porta digital 7
#define in4  6         //pino in4 na porta digital 6
Servo servoSensor;       // Crie um objeto Servo para controlar o Servo.
//função para procurar obtasculo a todo o tempo
int Procurar (void) {
float duracao = 0.0;              // variavael para quartar a duração do retorno do som
float CM = 0.0;                   // variavael para quartar a distancia
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.
CM = (duracao / 58.8);            //Calcula a distância em centimetros
Serial.print("Distancia em CM: ");
Serial.println(CM);               //Imprimi no monitor serial a distancia
return CM;                        // Return to CM.
}
//Variaveis
int DistanciaDireita, DistanciaEsquerda;  // variavel de Distâncias de ambos os lados
float Distancia = 0.00;                   // variavel para guardar a distancia
//Velocidades dos motores (você pode calibrar cada motor colocando os valores de 0 a 254)
int velocidadeMotorUm = 80;
int velocidadeMotorDois = 95;
// Função que é executado na inicialização do Arduino
void setup() {
Serial.begin(9600); // inicializa a comunicação serial para mostrar dados
//Define o servo na porta 13
servoSensor.attach(13); 
// Definir todos os pinos de controle do motor como saídas
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
//Configuraçõs do sensor ultrassonico
pinMode(trigPin, OUTPUT);     //define o pino TRIG como saída
pinMode(echoPin, INPUT);      //define o pino ECHO como entrada
}
// Função principal do Arduino
void loop() {
servoSensor.write (90);                           // Gira o Servo com o sensor a 90 graus
delay (100);                                      // Aguarda 100 milesugodos
Distancia = Procurar ();                          // Medindo a Distancia em CM.
if (Distancia < 40) {                             // Se há obstáculo encontrado a menos de 40cm.
direcao ();                                      // Se Frente estiver bloqueado, mude de direção
}
else if (Distancia >= 40)  {                      // Se o obstáculo for encontrado entre a mais de 40cm 
Frente ();                                      // Robô se move para a direção da Frente.
}
//Seu Robô http://SeuRobo.com.br/
}
// Função para pegar as distancias de cada direção
void direcao () {        
Parar ();                                         // O robô Para
ParaTras ();                                      // O robô vai para tras
Parar ();                                         // O robô Para
servoSensor.write (180);                          // Gira o Servo com o sensor a 180 graus
delay (1000);              
DistanciaEsquerda = Procurar ();                  // Defina a Distancia da Esquerda 
delay (500);               
servoSensor.write (0);                            // Gira o Servo com o sensor a 0 graus
delay (500);               
DistanciaDireita = Procurar ();                   // Defina a Distancia da Direita
delay (500);               
servoSensor.write (90);                           // Gira o Servo com o sensor a 90 graus
delay (500);              
CompareDistance ();                               // Encontre a distância mais longa.
}
// Função para calcular qual a distancia é melhor para o robô ir
void CompareDistance () {                   
if (DistanciaDireita > DistanciaEsquerda) {       // Se a direita está menos obstruída.
Vireadireita ();                                // O robô vai virar a direita 
}
else if (DistanciaEsquerda > DistanciaDireita) {  // Se Esquerda estiver menos obstruída.
VireaEsquerda ();                               // Robô Vire na direção esquerda.
}
else {                                            // Se ambos estiverem igualmente obstruídos.
Retorne ();                                     // Robô Vire-se.
}
}
// Função para fazer o carro parar
void Parar()
{
Serial.println("Robô: Parar ");
digitalWrite(in1, LOW);                           //Configurar a ponte h 
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(100);                                       //aguarda um tempo
}
// Função para fazer o robô andar para frente
void Frente()
{
Serial.println("Robô: Frente ");
digitalWrite(in1, HIGH);                          //Configurar a ponte h 
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(enA, velocidadeMotorUm);              // Defina a velocidade do motor Um
analogWrite(enB, velocidadeMotorDois);            // Defina a velocidade do motor Dois                         
}
// Função que faz o robô andar para trás e emite som quando ele dá ré
void ParaTras()
{
Serial.println("Robô: Ré ");
digitalWrite(in1, LOW);                           //Configurar a ponte h 
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(300);                                       //aguarda um tempo
analogWrite(enA, velocidadeMotorUm);              // Defina a velocidade do motor Um
analogWrite(enB, velocidadeMotorDois);            // Defina a velocidade do motor Dois                         
}
// Função que faz o robô virar à direita, https://SeuRobo.com.br/
void Vireadireita()
{
Serial.println("Robô: Direita ");
digitalWrite(in1, LOW);                           //Configurar a ponte h 
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(300);                                       //aguarda um tempo
analogWrite(enA, velocidadeMotorUm);              // Defina a velocidade do motor Um
analogWrite(enB, velocidadeMotorDois);            // Defina a velocidade do motor Dois                         
}
// Função que faz o robô virar à esquerda
void VireaEsquerda()
{
Serial.println("Robô: Esquerda ");                
digitalWrite(in1, HIGH);                          //Configurar a ponte h 
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(300);                                       //aguarda um tempo
analogWrite(enA, velocidadeMotorUm);              // Defina a velocidade do motor Um
analogWrite(enB, velocidadeMotorDois);            // Defina a velocidade do motor Dois                         
}
//Função para o robô virar para o outro lado
void Retorne () {    
Serial.println("Robô: Girar ");      
digitalWrite(in1, HIGH);                          //Configurar a ponte h 
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay (700);                                      //aguarda um tempo
analogWrite(enA, velocidadeMotorUm);              // Defina a velocidade do motor Um
analogWrite(enB, velocidadeMotorDois);            // Defina a velocidade do motor Dois                         
}
//Fim
//Versão do Software: 1.0 SR 2 SeuRobo.com.br //não apague essa linha, para futuras consultas

Observações

    • O robô é simples. 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.
      • Se tiver material que absorva o som tipo um isopor o sensor do robô não vai conseguir ler e vai colidir nele.
 

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:

//Velocidades dos motores (você pode calibrar cada motor colocando os valores de 0 a 254)
int velocidadeMotorUm = 80;
int velocidadeMotorDois = 95;

Onde esta os números você apaga, 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.

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 

veja questão numero #2

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

6 comentários em “Robô Autônomo SR 2 – Aprenda, de um jeito fácil, a robótica na prática”

  1. Olá Leonardo, valeu pela dica, um pouquinho de cola quente nos jumpers que vão na mini protoboard e problema resolvido, o robô não fica mais “cego”, enxerga sempre.
    Muito obrigado.

  2. Olá Leonardo, boa noite.
    Parabéns pela iniciativa, conheci seu site pelo youtube na televisão, o que me fez ter a vontade de montar seus robos.
    Primeiro eu montei o SR-2, agora montei o SR-1, e infelizmente os dois apresentam o mesmo problema, funcionam normalmente, desviam de obstaculos e dão marcha ré normalmente, e de repente parece que os robos ficam cegos, passam a colidir com obstaculos e ficam forçando os motores para a frente ate eu reposicionar ele (o robo), ai de novo passam a funcionar normalmente por um tempo. Já conferi as ligações varias vezes e o problema volta e meia retorna. Não é mau contato nem bateria fraca, o que poderia ser?
    Desde já, muito obrigado.

    • Olá, Antonio, tudo bem?
      Fico feliz que meu conteúdo esta de ajudando! 🙂
      Comigo aconteceu parecido, mas eu descobri que era por causa do Jumper que era meio rígido, com isso sempre que virava o servo os fio meio que saia da protoboard com isso gerava mal contato e por consequência valores de distancias errados e o robô ficava meio louco, sugiro a colocar cola quente nos Jumper para você pode testar.
      Grande abraço!

  3. Caro Leonardo,

    Parabéns pelos seus posts, são super práticos e muito bem explicado.
    No sketch do robo2 2 na linha do enA você usou o pino 11(idem foto) e no comentário o 10. Lembrei-me de uma dica sua para não conflito com a biblioteca servo.h não usar o pinos 10 e 9.
    Obrigado pela atenção.

    Carlos Bruni

    • Olá, Carlos, muito obrigado, fico muito feliz em saber que estou ajudando mais pessoas!
      Isso ai cara, você compreendeu essa parte da porta 11, nesse robô eu gastei um tempão só pra resolver isso, mas consegui e publiquei ele! 😊
      Grande abraço, sucesso nos projetos!

Deixe um comentário

Veja os Tutoriais de ROBÔS mais recentes

Veja os TUTORIAIS mais recentes

Veja os Tutoriais de PROJETOS mais recentes