⭐⭐⭐ Sfida
⏱️ 30 minuti
Sbarra automatica
La versione furba della sbarra! Il sensore di distanza vede che arriva un'auto. Poi il cicalino fa beep e la sbarra si apre da sola. L'auto è andata via? Allora si richiude.
🧰 Che cosa ti serve?
🔌
Cavo USB + Cavetti jumper🗺️ Schema di collegamento
Segui i fili dall'Arduino a ogni componente. Puoi scegliere tu i colori dei fili.
| Da | A |
|---|---|
Arduino UNO · D9 |
Sensore di distanza HC-SR04 · Trig |
Arduino UNO · D10 |
Sensore di distanza HC-SR04 · Echo |
Arduino UNO · 5V |
Sensore di distanza HC-SR04 · Vcc |
Arduino UNO · GND |
Sensore di distanza HC-SR04 · Gnd |
Arduino UNO · D5 |
Servomotore SG90 · PWM |
Arduino UNO · 5V |
Servomotore SG90 · VCC |
Arduino UNO · GND |
Servomotore SG90 · GND |
Arduino UNO · D8 |
Buzzer attivo · S |
Arduino UNO · 5V |
Buzzer attivo · + |
Arduino UNO · GND |
Buzzer attivo · - |
🛠️ Così lo costruisci
- Collega il HC-SR04: Trig al pin 9, Echo al pin 10, Vcc a 5V e Gnd a GND.
- Collega il servo: arancione al pin 5, rosso a 5V e marrone a GND.
- Collega il cicalino: S al pin 8, + a 5V e − a GND.
- Incolla una cannuccia o uno stecchino del gelato sul servo come sbarra e metti il sensore davanti.
💻 Il codice
// Sbarra automatica
// Arriva un'auto (qualcosa a meno di 15 cm)? Allora il cicalino fa beep e la sbarra si apre.
#include <Servo.h>
const int TRIG_PIN = 9; // Trig del HC-SR04 sul pin 9
const int ECHO_PIN = 10; // Echo del HC-SR04 sul pin 10
const int SERVO_PIN = 5; // Filo arancione/giallo del servo sul pin 5
const int CICALINO_PIN = 8; // S del cicalino sul pin 8
const int VICINO = 15; // Da questa distanza (cm) la sbarra si apre
const int CHIUSO = 0; // Angolo quando la sbarra è chiusa
const int APERTO = 90; // Angolo quando la sbarra è aperta
Servo sbarra;
long misuraDistanza() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long tempo = pulseIn(ECHO_PIN, HIGH, 30000);
if (tempo == 0) return 999;
return tempo / 58;
}
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(CICALINO_PIN, OUTPUT);
sbarra.attach(SERVO_PIN);
sbarra.write(CHIUSO);
}
void loop() {
long distanza = misuraDistanza();
if (distanza < VICINO) {
Serial.println(F("Auto vista! Sbarra aperta."));
digitalWrite(CICALINO_PIN, HIGH); // Beep breve
delay(100);
digitalWrite(CICALINO_PIN, LOW);
sbarra.write(APERTO);
delay(1000);
// Resta aperta finché l'auto è ancora lì
while (misuraDistanza() < VICINO) {
delay(200);
}
delay(2000); // Aspetta ancora un po' finché l'auto è davvero via
sbarra.write(CHIUSO);
Serial.println(F("Sbarra chiusa."));
}
delay(100);
}
🧠 Che cosa fa il codice?
- Il HC-SR04 misura sempre la distanza. Meno di 15 cm? Allora c'è un'auto.
- Il cicalino fa un breve beep e il servo gira a 90 gradi: aperto.
- Finché l'auto è lì, la sbarra resta aperta. Poi aspettiamo 2 secondi e si chiude.
🎯 Prova anche…
- Conta quante auto sono passate e mostralo nel monitor seriale
- Aggiungi un LED rosso e uno verde come semaforo vicino alla sbarra
- Fai aprire la sbarra solo se viene premuto anche un pulsante
🚀 Costruisci questo progetto con Codey: apri codey.online/it/starter-kits/uno/projects/automatic-barrier e clicca su FAI QUESTO. Così il codice e lo schema di collegamento sono subito pronti.
Codey Online è un prodotto di OTRONIC