Programmare una torretta automatica con Arduino

Buongiorno a tutti!
La mia idea sarebbe quella di creare una sorta di torretta automatica che appena rileva un movimento nell’area circostante si attiva e incomincia ad acquisire il bersaglio (lo segue tramite l’utilizzo di sensori hc-sr04). Avevo anche in mente che quando la torretta rimane ferma per più di 5 secondi quest’ultima “spara” (manda un segnale output analogico “HIGH” e che accende un led). Per la parte che riguarda l’agganciamento automatico e il tracciamento del bersaglio ci ho già pensato io, mi servirebbe aiuto per quanto riguarda la parte in cui la torretta spara dopo essere stata ferma per 5 secondi. Per il progetto utilizzerei:

2 sensori hc-sr04
Scheda Arduino Uno
1 servo
1 led.

Questo è il codice che pensavo di utilizzare (non c’è la seconda parte perché non so come fare e mi serve aiuto). In allegato troverete anche il circuito che volevo utilizzare

#include <Servo.h> 

Servo myservo;

const int Lin = 10, Rin = 12, Lout = 11, Rout = 13, serv = 9; 

long Rduration, Lduration, Rinches, Linches;

int threshold = 10; 
int angle = 80; 

boolean debug = false; 
void setup() {
  if (debug)
  {
    Serial.begin(9600);
  }
  myservo.attach(9); //attach servo to pin 9
}

void loop()
{
  
  pinMode(Rout, OUTPUT);
  digitalWrite(Rout, LOW);
  delayMicroseconds(2);
  digitalWrite(Rout, HIGH);
  delayMicroseconds(5);
  digitalWrite(Rout, LOW);

  Rduration = pulseIn(Rin, HIGH);
  
  pinMode(Lout, OUTPUT);
  digitalWrite(Lout, LOW);
  delayMicroseconds(2);
  digitalWrite(Lout, HIGH);
  delayMicroseconds(5);
  digitalWrite(Lout, LOW);

  Lduration = pulseIn(Lin, HIGH);

  
  Rinches = microsecondsToInches(Rduration);
  Linches = microsecondsToInches(Lduration);
  
  if (debug)
  {
    Serial.print("Left: ");
    Serial.print(Linches);
    Serial.println(" in");
    Serial.print("Right: ");
    Serial.print(Rinches);
    Serial.println(" in");
  }
  follow();
  
}

long microsecondsToInches(long microseconds)
{
 
  return microseconds / 74 / 2;
}

void follow() 
{
  if (Linches <= threshold || Rinches <= threshold)
  {
    if (Linches + 2 < Rinches) 
    {
      angle = angle - 2;
    }
    if (Rinches + 2 < Linches)
    {
      angle = angle + 2;
    }
  }
  if (angle > 160)
  {
    angle = 160;
  }
  if (angle < 0)
  {
    angle = 0;
  }
  myservo.write(angle);
  
}

Non l’ho programmato io, l’ho trovato su internet

Ora mi serve solo sapere se esiste un modo per fare accendere un led dopo che il servo rimane fermo in una certa posizione per un certo periodo di tempo

Scusate se non mi sono spiegato bene, sono aperto a qualsiasi consiglio/critica
Grazie in anticipo

Circuito.pdf (556 KB)

Farlo "sparare" è molto semplice. Prima però vorrei capire come vorresti montare il tutto... dove e come vanno posizionati i sensori di distanza ad ultrasuoni? A che distanza vorresti funzionasse?