Aggiornamento:
Abbiamo aggiornato il progetto aggiungendo un motore CC e sensore a ultrasuoni.
Componenti utilizzati

Spiegazione codice C++
In questo progetto si utilizza un sensore a ultrasuoni, un motore, un buzzer, un LED rosso e un LED blu per simulare una macchina della polizia americana.
Inizialmente vengono definite alcune costanti per i pin: "buzzerPin" è il pin per il buzzer, "ledRedPin" è il pin per il LED rosso, "ledBluePin" è il pin per il LED blu, "motorPin" è il pin per il motore, "triggerPin" e "echoPin" sono i pin per il sensore di distanza.
Viene anche scritta la costante "maxDistance" che sarebbe la distanza massima che il sensore è in grado di rilevare (in cm) e "sirenFrequency" che rappresenta la frequenza del suono del buzzer.
Nella funzione "setup" vengono impostati i pin come input o output a seconda del loro utilizzo.
Nella funzione "loop" viene eseguito un ciclo "for" per svolgere 3 volte la funzione di emettere un suono dal buzzer, accendere il LED rosso e poi il LED blu per un determinato intervallo di tempo (dalla costante "interval").
Viene poi inviato un impulso al sensore di distanza tramite il pin "triggerPin" e viene misurata la durata dell'impulso dal pin "echoPin".
La distanza viene calcolata con la formula "duration / 58.2" e confrontata con la costante "maxDistance".
Importante ricordare che se la distanza rilevata è inferiore o uguale alla distanza massima il motore viene acceso quindi scoprendo il sensore abbiamo la vera e propria partenza della macchina.
Infine abbiamo inserito un ritardo prima di ripetere il ciclo.
Nuovo codice C++:
const int buzzerPin = 8;
const int ledRedPin = 9;
const int ledBluePin = 10;
const int motorPin = 3;
const int triggerPin = 4;
const int echoPin = 2;
const int maxDistance = 30; // cm
const int sirenFrequency = 500;
const int interval = 200;
void setup() {
pinMode(buzzerPin, OUTPUT);
pinMode(ledRedPin, OUTPUT);
pinMode(ledBluePin, OUTPUT);
pinMode(motorPin, OUTPUT);
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
for (int i = 0; i < 3; i++) {
tone(buzzerPin, sirenFrequency);
delay(interval);
noTone(buzzerPin);
digitalWrite(ledRedPin, HIGH);
delay(interval);
digitalWrite(ledRedPin, LOW);
digitalWrite(ledBluePin, HIGH);
delay(interval);
digitalWrite(ledBluePin, LOW);
}
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
long duration = pulseIn(echoPin, HIGH);
int distance = duration / 58.2;
if (distance <= maxDistance) {
digitalWrite(motorPin, HIGH);
} else {
digitalWrite(motorPin, LOW);
}
delay(interval);
}
Immagini utili
Screenshot Tinkercad:

Vista schematica:

Manca solo montare tutto e vedere la macchina sfrecciare, rimanete connessi!