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

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

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: Download Servo.h

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

Patrocinadores

Compartilhe esse post

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

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