-
Notifications
You must be signed in to change notification settings - Fork 4
/
Robo__Autonomo.ino
106 lines (77 loc) · 3.15 KB
/
Robo__Autonomo.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <Ultrasonic.h>; // incluindo a biblioteca para o Sensor Ultrassônico
#define TRIGGER_PIN 3 // Pino Trigger do sensor na porta 3
#define ECHO_PIN 2 // Pino Trigger do sensor na porta 2
Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);
// definindo as portas onde estão conectados os motores
#define IN1 7 //Pinos motor A (Direita)
#define IN2 6 //Pinos motor A (Direita)
#define IN3 5 //Pinos motor B (Esquerda)
#define IN4 4 //Pinos motor B (Esquerda)
#define ENA 10 //Pino velocidade motor A (Enable A)
#define ENB 11 //Pino velocidade motor B (Enable B)
void setup()
{
//Definindo os motores como saídas
pinMode(IN1,OUTPUT); //Saída para motor A
pinMode(IN2,OUTPUT); //Saída para motor A
pinMode(IN3,OUTPUT); //Saída para motor B
pinMode(IN4,OUTPUT); //Saída para motor B
pinMode(ENA,OUTPUT); //Controle velocidade motor A
pinMode(ENB,OUTPUT); //Controle velocidade motor B
//velocidades dos motores, caso note que seu robô está muito lento, altere os valores.
analogWrite(ENA,120); //Controle PWM do motor A (0 a 255)
analogWrite(ENB,120); //Controle PWM do motor B (0 a 255)
delay(1000); //Aguarda 1 segundo antes de iniciar
} //end setup
void loop() //loop principal
{
//Robô inicia andando para frente
robo_frente();
float dist_cm = distancia(); //Declara variável que armazena a distância do obstáculo
if(dist_cm < 20) //distância menor que 20cm?
{
decisao();
}
delay(100);
}
float distancia() //função que mede a distância em cm
{
float cmMsec; //declara a variável tipo float cmMsec
//Associa à variável tipo long microsec o tempo em microsegundos
long microsec = ultrasonic.timing();
//função da biblioteca para converter a distância em cm e associá-la a cmMsec
cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
return(cmMsec); // retorna o valor em cm para a função delay(10);
delay(10);
}
void robo_frente() //função para mover o robô para frente lembre-se da tabela da Ponte H
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
}
void robo_esquerda() //função para mover o robô para esquerda
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
}
void robo_parado() //função para parar o robô
{
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
}
void decisao() //função para decidir a ação do robô
{
robo_parado();
delay(500);
robo_esquerda();
//esse tempo precisa ser avaliado para que o robô vire por volta de 90 graus
delay(400);
robo_parado();
delay(500);
}