🚀 Introduzione
Vuoi realizzare una barriera automatica simile a quelle utilizzate nei parcheggi? 🚗🚧
In questo progetto utilizzerai Arduino UNO, un servomotore e un sensore a ultrasuoni HC-SR04 per creare una barriera che si apre automaticamente quando rileva un veicolo.
Dopo alcuni secondi, se l’area davanti alla barriera è libera, il servo riporterà lentamente l’asta nella posizione di chiusura.
Due LED mostreranno lo stato del sistema:
Un pulsante permetterà inoltre di comandare manualmente l’apertura.
👉 Il movimento graduale del servo renderà l’apertura e la chiusura più realistiche rispetto a uno spostamento immediato.
Vuoi realizzare una barriera automatica simile a quelle utilizzate nei parcheggi? 🚗🚧
In questo progetto utilizzerai Arduino UNO, un servomotore e un sensore a ultrasuoni HC-SR04 per creare una barriera che si apre automaticamente quando rileva un veicolo.
Dopo alcuni secondi, se l’area davanti alla barriera è libera, il servo riporterà lentamente l’asta nella posizione di chiusura.
Due LED mostreranno lo stato del sistema:
- verde → passaggio aperto;
- rosso → barriera chiusa.
Un pulsante permetterà inoltre di comandare manualmente l’apertura.
👉 Il movimento graduale del servo renderà l’apertura e la chiusura più realistiche rispetto a uno spostamento immediato.
🎯 Cosa realizzerai
Con Arduino creerai un sistema che:
Con Arduino creerai un sistema che:
- 🚗 rileva un veicolo tramite HC-SR04;
- 🚧 apre automaticamente una barriera;
- ⚙️ controlla un servomotore;
- ⏳ mantiene il passaggio aperto per alcuni secondi;
- 🔒 richiude la barriera automaticamente;
- 🛑 evita la chiusura quando è presente un ostacolo;
- 🔘 permette l’apertura manuale;
- 🟢 segnala il passaggio libero;
- 🔴 segnala la barriera chiusa;
- ✅ utilizza codice compatibile con Arduino UNO.
🧰 Materiale necessario
Il pulsante utilizza la resistenza interna INPUT_PULLUP di Arduino.
- 1x Arduino UNO;
- 1x servomotore SG90 o compatibile;
- 1x sensore a ultrasuoni HC-SR04;
- 1x pulsante;
- 1x LED verde;
- 1x LED rosso;
- 2x resistenze da 220 Ω;
- 1x alimentazione esterna da 5V per il servo, consigliata;
- cavetti jumper;
- breadboard;
- asta leggera per simulare la barriera;
- cavo USB.
Il pulsante utilizza la resistenza interna INPUT_PULLUP di Arduino.
🛒 Non hai ancora i componenti?
Molti dei progetti presenti su progettiarduino.com utilizzano componenti elettronici di base come LED, resistenze, sensori e breadboard.
Se stai iniziando con Arduino, il modo più semplice è utilizzare un kit completo per principianti, che include quasi tutti i componenti necessari per realizzare molti dei progetti presenti sul sito.
👉 Kit Arduino consigliato:
ℹ️ Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
https://amzn.to/4b3dxjW
📘 Vuoi imparare Arduino passo dopo passo?
Se vuoi approfondire e realizzare progetti più completi, puoi dare un'occhiata anche ai miei libri dedicati ad Arduino.
All'interno troverai spiegazioni semplici, schemi chiari e molti progetti pratici pensati per chi parte da zero.
👉 Scopri i miei libri su Arduino:
ℹ️ Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
https://amzn.to/4rfzjXE
Molti dei progetti presenti su progettiarduino.com utilizzano componenti elettronici di base come LED, resistenze, sensori e breadboard.
Se stai iniziando con Arduino, il modo più semplice è utilizzare un kit completo per principianti, che include quasi tutti i componenti necessari per realizzare molti dei progetti presenti sul sito.
👉 Kit Arduino consigliato:
ℹ️ Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
https://amzn.to/4b3dxjW
📘 Vuoi imparare Arduino passo dopo passo?
Se vuoi approfondire e realizzare progetti più completi, puoi dare un'occhiata anche ai miei libri dedicati ad Arduino.
All'interno troverai spiegazioni semplici, schemi chiari e molti progetti pratici pensati per chi parte da zero.
👉 Scopri i miei libri su Arduino:
ℹ️ Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
https://amzn.to/4rfzjXE
📚 Librerie necessarie
Il progetto utilizza la libreria:
Per verificarne la presenza:
Il sensore HC-SR04 viene gestito direttamente e non richiede librerie esterne.
Il progetto utilizza la libreria:
- Servo.
Per verificarne la presenza:
- apri Arduino IDE;
- seleziona Sketch → Include Library;
- controlla che nell’elenco sia presente Servo.
Il sensore HC-SR04 viene gestito direttamente e non richiede librerie esterne.
🔌 Schema di collegamento
Servomotore SG90
Il servomotore possiede normalmente tre fili:
Sensore HC-SR04
Pulsante manuale
LED verde
LED rosso
Servomotore SG90
Il servomotore possiede normalmente tre fili:
- rosso → alimentazione 5V;
- marrone o nero → GND;
- arancione o giallo → pin digitale 9.
Sensore HC-SR04
- VCC → 5V;
- GND → GND;
- TRIG → pin digitale 7;
- ECHO → pin digitale 8.
Pulsante manuale
- un terminale → pin digitale 2;
- terminale opposto → GND.
LED verde
- anodo → pin digitale 4 tramite resistenza da 220 Ω;
- catodo → GND.
LED rosso
- anodo → pin digitale 5 tramite resistenza da 220 Ω;
- catodo → GND.
⚠️ Alimentazione del servomotore
Un servomotore può assorbire più corrente di quella che il regolatore di Arduino riesce a fornire in modo stabile.
Per evitare:
Collega insieme:
👉 La massa comune è indispensabile per permettere ad Arduino di controllare correttamente il segnale del servo.
Un servomotore può assorbire più corrente di quella che il regolatore di Arduino riesce a fornire in modo stabile.
Per evitare:
- riavvii di Arduino;
- vibrazioni del servo;
- movimenti irregolari;
- surriscaldamento;
Collega insieme:
- GND dell’alimentatore del servo;
- GND del servomotore;
- GND di Arduino.
👉 La massa comune è indispensabile per permettere ad Arduino di controllare correttamente il segnale del servo.
💻 Codice Arduino
Il programma utilizza quattro stati principali:
Quando il sensore rileva un oggetto entro la distanza impostata, Arduino avvia l’apertura.
Il servo non passa immediatamente da una posizione all’altra, ma modifica gradualmente il proprio angolo.
Quando la barriera è completamente aperta, Arduino attende alcuni secondi.
Se il sensore continua a rilevare un ostacolo, il tempo di attesa riparte.
La chiusura inizia soltanto quando il passaggio è libero.
Il programma utilizza quattro stati principali:
- barriera chiusa;
- apertura;
- barriera aperta;
- chiusura.
Quando il sensore rileva un oggetto entro la distanza impostata, Arduino avvia l’apertura.
Il servo non passa immediatamente da una posizione all’altra, ma modifica gradualmente il proprio angolo.
Quando la barriera è completamente aperta, Arduino attende alcuni secondi.
Se il sensore continua a rilevare un ostacolo, il tempo di attesa riparte.
La chiusura inizia soltanto quando il passaggio è libero.
⚙️ Come funziona
Il sensore HC-SR04 invia un impulso a ultrasuoni e misura il tempo necessario al segnale per tornare indietro.
La distanza viene calcolata attraverso:
distanza = durata / 58;
Quando la distanza è inferiore alla soglia configurata, la barriera viene aperta.
Nel progetto la soglia iniziale è:
const int DISTANZA_APERTURA = 25;
Puoi aumentarla o diminuirla in base alla posizione del sensore.
Il sensore HC-SR04 invia un impulso a ultrasuoni e misura il tempo necessario al segnale per tornare indietro.
La distanza viene calcolata attraverso:
distanza = durata / 58;
Quando la distanza è inferiore alla soglia configurata, la barriera viene aperta.
Nel progetto la soglia iniziale è:
const int DISTANZA_APERTURA = 25;
Puoi aumentarla o diminuirla in base alla posizione del sensore.
🚧 Posizioni del servomotore
Il codice utilizza due angoli:
const byte ANGOLO_CHIUSO = 10;
const byte ANGOLO_APERTO = 90;
L’angolo di 10° rappresenta la barriera abbassata.
L’angolo di 90° rappresenta la barriera sollevata.
Questi valori possono essere modificati in base al montaggio meccanico.
👉 Prima di collegare l’asta al servo, prova il movimento senza carico per verificare che il meccanismo non venga forzato.
Il codice utilizza due angoli:
const byte ANGOLO_CHIUSO = 10;
const byte ANGOLO_APERTO = 90;
L’angolo di 10° rappresenta la barriera abbassata.
L’angolo di 90° rappresenta la barriera sollevata.
Questi valori possono essere modificati in base al montaggio meccanico.
👉 Prima di collegare l’asta al servo, prova il movimento senza carico per verificare che il meccanismo non venga forzato.
🚀 Apertura graduale
Durante l’apertura, Arduino aumenta progressivamente l’angolo del servo.
Per esempio:
In questo modo il programma continua a leggere il pulsante e il sensore durante il movimento.
Durante l’apertura, Arduino aumenta progressivamente l’angolo del servo.
Per esempio:
- 10°;
- 11°;
- 12°;
- fino a 90°.
In questo modo il programma continua a leggere il pulsante e il sensore durante il movimento.
🔒 Chiusura graduale
Durante la chiusura il procedimento viene eseguito al contrario.
L’angolo diminuisce progressivamente fino alla posizione chiusa.
Prima di ogni movimento Arduino controlla la presenza di un ostacolo.
Se un oggetto viene rilevato durante la discesa:
Durante la chiusura il procedimento viene eseguito al contrario.
L’angolo diminuisce progressivamente fino alla posizione chiusa.
Prima di ogni movimento Arduino controlla la presenza di un ostacolo.
Se un oggetto viene rilevato durante la discesa:
- la chiusura viene interrotta;
- la barriera torna ad aprirsi;
- il tempo di attesa riparte.
⏳ Tempo di apertura
La barriera rimane aperta per cinque secondi:
const unsigned long TEMPO_APERTA = 5000;
Se il sensore rileva ancora un veicolo, il conteggio viene azzerato.
La barriera si chiude quindi soltanto dopo che l’area è rimasta libera per tutto il tempo previsto.
La barriera rimane aperta per cinque secondi:
const unsigned long TEMPO_APERTA = 5000;
Se il sensore rileva ancora un veicolo, il conteggio viene azzerato.
La barriera si chiude quindi soltanto dopo che l’area è rimasta libera per tutto il tempo previsto.
🔘 Apertura manuale
Il pulsante permette di comandare manualmente la barriera.
Quando la barriera è chiusa, una pressione avvia l’apertura.
Quando è aperta, una pressione può avviare la chiusura, purché non sia presente un ostacolo.
Durante la chiusura, premendo il pulsante la barriera torna ad aprirsi.
Il pulsante permette di comandare manualmente la barriera.
Quando la barriera è chiusa, una pressione avvia l’apertura.
Quando è aperta, una pressione può avviare la chiusura, purché non sia presente un ostacolo.
Durante la chiusura, premendo il pulsante la barriera torna ad aprirsi.
💡 Significato dei LED
LED rosso
Si accende quando la barriera è completamente chiusa.
LED verde
Si accende quando la barriera è completamente aperta.
Durante il movimento entrambi i LED rimangono spenti.
Puoi aggiungere successivamente un LED giallo lampeggiante per indicare apertura e chiusura.
LED rosso
Si accende quando la barriera è completamente chiusa.
LED verde
Si accende quando la barriera è completamente aperta.
Durante il movimento entrambi i LED rimangono spenti.
Puoi aggiungere successivamente un LED giallo lampeggiante per indicare apertura e chiusura.
⚠️ Limiti del progetto
Il sensore HC-SR04 può simulare il rilevamento di un veicolo, ma non è una fotocellula di sicurezza certificata.
Il progetto è pensato per:
👉 Non utilizzare questo circuito per controllare una vera barriera stradale o un accesso pubblico senza sensori e sistemi certificati.
Il sensore HC-SR04 può simulare il rilevamento di un veicolo, ma non è una fotocellula di sicurezza certificata.
Il progetto è pensato per:
- modellini;
- dimostrazioni;
- piccoli prototipi;
- esperimenti a bassa tensione.
👉 Non utilizzare questo circuito per controllare una vera barriera stradale o un accesso pubblico senza sensori e sistemi certificati.
🧠 Perché è un progetto importante
Con questo progetto impari a:
Con questo progetto impari a:
- controllare un servomotore;
- realizzare movimenti graduali;
- utilizzare un sensore HC-SR04;
- rilevare un ostacolo;
- creare una macchina a stati;
- gestire apertura e chiusura automatiche;
- utilizzare un pulsante manuale;
- controllare LED di stato;
- usare millis() senza bloccare Arduino;
- sviluppare codice compatibile con Arduino UNO.
🔄 Varianti possibili
Vuoi migliorare il progetto?
Vuoi migliorare il progetto?
- 🟡 aggiungi un LED lampeggiante durante il movimento;
- 🔔 collega un buzzer;
- 📟 aggiungi un display LCD;
- 🔐 utilizza un lettore RFID;
- 🚗 aggiungi un secondo sensore per l’uscita;
- 🔢 conta i veicoli entrati;
- 💾 salva il numero di accessi nella EEPROM;
- ⏰ registra data e ora con RTC DS3231;
- 📡 aggiungi un telecomando a infrarossi;
- 📱 controlla la barriera tramite Bluetooth;
- 🎛️ regola la distanza con un potenziometro;
- 🔘 aggiungi un pulsante di emergenza.