Criar um Goleiro com servo motor e sensor ultrassônico

Olá, estou tentando criar um goleiro utilizando dois sensor ultrassônicos e um servo motor porem estou tendo dificuldade.

O servo motor tem que alternar entre três posições de pé (85º) deitado para a esquerda (180º) e deitado para a direita (0º)

Inicialmente o servo motor vai estar na posição em pé (85º) Quando o primeiro sensor ultrassônico (o da esquerda) detectar um movimento o servo motor vai ir para a posição de 180º (deitado para a esquerda) por dois segundo e depois retorna para a posição inicial (85º).

Só que eu preciso que quando o segundo sensor ultrassônico detectar movimento o servo motor vá para 0º (deitado para a direita) e depois retorne para a posição inicial igual ocorre com o primeiro sensor ultrassônico.

Alguém sabe como fazer isso?

A baixo o código que estou utilizando

#include <Ultrasonic.h>
#include <Servo.h>

#define pino_trigger 4
#define pino_echo 5

Ultrasonic ultrasonic(pino_trigger, pino_echo);

Servo meuServo;

void setup()
{
Serial.begin(9600);
Serial.println("Lendo dados do sensor...");
}

void loop()
{
float cmMsec;
long microsec = ultrasonic.timing();
cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);

meuServo.attach(9);

if(cmMsec < 20)
{
meuServo.write(180);
delay(2000);
}
else
{
meuServo.write(85);
delay(100);
}
}

Olá, crie outra instância e comparações para os outros ultrassônicos. Dê uma boa olhada em como é feito.

#include <Ultrasonic.h>
#include <Servo.h>

#define pino_trigger_1 4
#define pino_echo_1 5

#define pino_trigger_2 6
#define pino_echo_2 7

Ultrasonic ultrasonic_1(pino_trigger_1, pino_echo_1);
Ultrasonic ultrasonic_2(pino_trigger_2, pino_echo_2);
Servo meuServo;

float cmMsec;
long microsec;

void setup() {
  Serial.begin(9600);
  Serial.println("Lendo dados do sensor...");
  meuServo.attach(9);
}

void loop() {  
  microsec = ultrasonic_1.timing();
  cmMsec = ultrasonic_1.convert(microsec, Ultrasonic::CM);

  if (cmMsec < 20) {
    meuServo.write(180);
    delay(2000);
  }
  else {
    meuServo.write(85);
  }

  microsec = ultrasonic_2.timing();
  cmMsec = ultrasonic_2.convert(microsec, Ultrasonic::CM);

  if (cmMsec < 20) {
    meuServo.write(0);
    delay(2000);
  }
  else {
    meuServo.write(85);
  }
}

Saudações.

1 Like

Muito obrigado mano ajudou bastante. :slight_smile:

Se eu resolver, marque o post que fez isso.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.