Olá amigos!
Neste novo projeto vamos criar um Robô vigia, a função dele é ficar procurando um intruso e assim que encontra ele ataca.
Vamos utilizar um NodeMCU, 4 servos 9g, um sensor ultrassônico e uma estrutura em MDF cortado a Laser.
Se você ainda não configurou seu Arduino IDE para trabalhar com o NodeMCU veja nosso post “Como configurar o Arduino IDE para trabalhar com o NodeMCU“.
Nosso algorítimo vai ficar assim.
#include <Servo.h>
#define TRIGGER 13 // define o trigger do sensor como o número 5
#define ECHO 2 // define o echo do sensor como o número 4
Servo myservo1; // criando o servo com nome de Myservo mais seu número
Servo myservo2; //
Servo myservo3; //
Servo myservo4; //
const int bot1=16;
const int bot2=5;
const int bot4=0;
// vamos colocar o servo em posição 0
int pos1 = 0; // estas são as variáveis de posição de cada servo
int pos2 = 0; //
int pos4 = 0; //
int pos_inic = 1; // ajusta a posição inicial
void setup() {
myservo1.attach(14); // aqui definimos o pino de funcionamento de cada servo
myservo2.attach(12); //
myservo3.attach(15); //
myservo4.attach(4); //
/////////////////////////////////////////////////////////////////////////
pinMode(TRIGGER,OUTPUT); //configuração dos pinos do sensor
pinMode(ECHO,INPUT);
////////////////////////////////////////////////////////////////////////
// initialize serial:
Serial.begin(115200);
}
void loop() {
if (pos_inic != 0) { // se a posição é diferente de 0 então ajusta
Serial.println(“Posição inicial”);
myservo2.write(1); // ajusta posição em 0 graus
delay(1000);
myservo3.write(1); // ajusta posição em 0 graus
delay(1000);
myservo1.write(1); // ajusta posição em 0 graus
delay(1000);
myservo4.write(1); // ajusta posição em 0 graus
delay(1000);
pos_inic = 0; // marca como posição 0 ajustada
myservo2.write(LOW); // ajusta posição em 0 graus
myservo3.write(LOW); // ajusta posição em 0 graus
myservo1.write(LOW); // ajusta posição em 0 graus
myservo4.write(LOW); // ajusta posição em 0 graus
}
// Rotina do Sensor //////////////////////////////////////////////////////////////////
float duration, distance;
digitalWrite(TRIGGER, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER, LOW);
duration = pulseIn(ECHO, HIGH);
distance = (duration/2) / 28; // ajustando a leitura do sensor para Centímetro
Serial.print(distance);
Serial.println(” Centimetros:”);
delay(500);
if (distance < 10) { // se a distância do abjeto for menor que 10 centímetro o robô deve atacar
Serial.println(” Servo Ataque”);
//myservo2.write(45); // ajusta posição em graus
myservo3.write(45); // ajusta posição em graus
myservo1.write(45); // ajusta posição em graus
delay(500);
myservo1.write(0); // ajusta posição em graus
}
else {
Serial.println(” Servo Recue”);
//myservo2.write(1); // ajusta posição em 0 graus
myservo3.write(1); // ajusta posição em 0 graus
myservo1.write(0); // ajusta posição em 0 graus
pos4 = random(0,100);
myservo4.write(pos4);
delay(1000);
}
}
Nossa montagem deverá ficar assim.
Devemos utilizar uma fonte externa pois os servos precisam de muita corrente para funcionar corretamente, repare que o negativo da fonte está conectada ao negativo do NodeMCU, então a alimentação dos servos vem da fonte e o sinal vem do NodeMCU.
Da mesma forma que acontece com o sensor.
Neste momento o NodeMCU é alimentado pelo usb do computador, mas se necessitar que tudo funcione sem estar conectado ao PC é só ligar o VIN do NodeMCU ao 5v da fonte e retirar o cabo usb.
Recomendações
Na hora de gravar o NodeMCU recomendo que desligue o sensor pois a biblioteca dos sensor usa a mesma porta de comunicação que usa a gravação, o que acaba gerando um erro, então sugiro que você retire o positivo do sensor quando for iniciar a gravação.
Terminando você pode religar o sensor e curtir seu novo robô.
Muito chol