Robô vigia

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.

robo liga - Robô vigia

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ô.

1 thought on “Robô vigia”

Os comentários estão fechados.