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

Leonardo Campbell
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.

Compartilhe esse post

Lista dos materias necessarios

1 Kit Chassi 2WD (2 rodas) Robô para Arduino
1 arduino uno r3
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 [Horizontal], conector de bateria ou suporte de bateria
1 Botão liga/desliga quadrado preto- Chave Gangorra
6 Jumper 20cm (1 fio Fêmea-Macho)
7 Jumper 20cm (1 fio machoMacho)
3 Abraçadeira de Nylon 15cm 1un
1 fiat dupla face

1 Bateria 9v alcalina ou recarregavel 

Esquemático de ligação

Código fonte

Baixe a biblioteca usada: Servo

/*
------------------------------------------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

Deixe seu comentário no final da pagina!

Compartilhe esse post

Receba avisos de novos posts e novidades

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

Outros Posts que talvez você goste

Que Saber Mais Sobre Robótica?

Venha Fazer Um Curso Online E Aprender Muito Mais

blank