🚀 Introduzione
Vuoi realizzare un piccolo cancello automatico capace di aprirsi quando rileva un veicolo o una persona? 🚗🚪
In questo progetto costruirai un sistema di apertura automatica utilizzando Arduino UNO, un motore DC, il driver L298N e un sensore a ultrasuoni HC-SR04.
Due finecorsa permetteranno ad Arduino di capire quando il cancello è completamente aperto o completamente chiuso.
Il funzionamento sarà completamente automatico:
👉 Il progetto riproduce, in scala ridotta e a bassa tensione, il funzionamento di una vera automazione per cancelli.
Vuoi realizzare un piccolo cancello automatico capace di aprirsi quando rileva un veicolo o una persona? 🚗🚪
In questo progetto costruirai un sistema di apertura automatica utilizzando Arduino UNO, un motore DC, il driver L298N e un sensore a ultrasuoni HC-SR04.
Due finecorsa permetteranno ad Arduino di capire quando il cancello è completamente aperto o completamente chiuso.
Il funzionamento sarà completamente automatico:
- il sensore rileva un oggetto in avvicinamento;
- Arduino apre il cancello;
- il sistema attende alcuni secondi;
- il cancello si richiude;
- un nuovo ostacolo interrompe immediatamente la chiusura.
👉 Il progetto riproduce, in scala ridotta e a bassa tensione, il funzionamento di una vera automazione per cancelli.
🎯 Cosa realizzerai
Con Arduino creerai un sistema che:
Con Arduino creerai un sistema che:
- 🚗 rileva un oggetto in avvicinamento;
- ⚙️ controlla un motore DC tramite L298N;
- 🔓 apre automaticamente il cancello;
- ⏳ mantiene il cancello aperto per alcuni secondi;
- 🔒 richiude automaticamente il cancello;
- 🛑 utilizza due finecorsa;
- 🚨 interrompe la chiusura se rileva un ostacolo;
- 💡 mostra lo stato tramite tre LED;
- 🔘 permette l’apertura manuale;
- ✅ utilizza codice compatibile con Arduino UNO.
🧰 Materiale necessario
I finecorsa e il pulsante utilizzano le resistenze interne INPUT_PULLUP di Arduino.
- 1x Arduino UNO;
- 1x motore DC con riduttore;
- 1x modulo driver L298N;
- 1x sensore a ultrasuoni HC-SR04;
- 2x microinterruttori finecorsa;
- 1x pulsante;
- 1x LED verde;
- 1x LED giallo;
- 1x LED rosso;
- 3x resistenze da 220 Ω;
- 1x alimentatore esterno adatto al motore;
- cavetti jumper;
- breadboard;
- struttura meccanica per simulare il cancello;
- cavo USB.
I finecorsa e il pulsante utilizzano le resistenze interne 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
Per questo progetto non servono librerie esterne.
Arduino utilizza direttamente:
Il codice può quindi essere compilato con una normale installazione dell’Arduino ID
Per questo progetto non servono librerie esterne.
Arduino utilizza direttamente:
- digitalRead();
- digitalWrite();
- analogWrite();
- pulseIn();
- millis().
Il codice può quindi essere compilato con una normale installazione dell’Arduino ID
🔌 Schema di collegamento
Driver L298N
Sensore HC-SR04
Finecorsa cancello chiuso
Finecorsa cancello aperto
Pulsante manuale
LED verde
LED giallo
LED rosso
Driver L298N
- ENA → pin PWM 9;
- IN1 → pin digitale 7;
- IN2 → pin digitale 8;
- OUT1 e OUT2 → terminali del motore;
- GND → GND Arduino;
- alimentazione motore → alimentatore esterno.
Sensore HC-SR04
- VCC → 5V;
- GND → GND;
- TRIG → pin digitale 10;
- ECHO → pin digitale 11.
Finecorsa cancello chiuso
- un terminale → pin digitale 2;
- terminale opposto → GND.
Finecorsa cancello aperto
- un terminale → pin digitale 3;
- terminale opposto → GND.
Pulsante manuale
- un terminale → pin digitale 4;
- terminale opposto → GND.
LED verde
- anodo → pin digitale 5 tramite resistenza da 220 Ω;
- catodo → GND.
LED giallo
- anodo → pin digitale 6 tramite resistenza da 220 Ω;
- catodo → GND.
LED rosso
- anodo → pin digitale 12 tramite resistenza da 220 Ω;
- catodo → GND.
⚠️ Alimentazione del motore
Non alimentare il motore direttamente dal pin 5V di Arduino.
Utilizza un alimentatore esterno compatibile con:
Collega insieme:
👉 Il progetto deve essere provato esclusivamente a bassa tensione e su un modello in scala. Non deve essere collegato direttamente a un vero cancello domestico senza dispositivi certificati e protezioni adeguate.
Non alimentare il motore direttamente dal pin 5V di Arduino.
Utilizza un alimentatore esterno compatibile con:
- tensione nominale del motore;
- corrente richiesta;
- limiti del driver L298N.
Collega insieme:
- GND dell’alimentatore;
- GND del driver L298N;
- GND di Arduino.
👉 Il progetto deve essere provato esclusivamente a bassa tensione e su un modello in scala. Non deve essere collegato direttamente a un vero cancello domestico senza dispositivi certificati e protezioni adeguate.
💻 Codice Arduino
Il programma utilizza una macchina a stati.
Gli stati disponibili sono:
Ogni stato possiede un comportamento preciso.
Questa struttura rende il programma più ordinato e impedisce l’esecuzione contemporanea di comandi incompatibili.
Il programma utilizza una macchina a stati.
Gli stati disponibili sono:
- cancello chiuso;
- apertura;
- cancello aperto;
- chiusura;
- errore.
Ogni stato possiede un comportamento preciso.
Questa struttura rende il programma più ordinato e impedisce l’esecuzione contemporanea di comandi incompatibili.
⚙️ Come funziona
Quando il cancello è chiuso, Arduino misura periodicamente la distanza tramite il sensore HC-SR04.
Se un oggetto viene rilevato entro la distanza impostata, il motore avvia l’apertura.
Il motore continua a girare finché viene premuto il finecorsa di apertura.
Raggiunta la posizione aperta:
Trascorso il tempo impostato, Arduino avvia la chiusura.
Quando il cancello è chiuso, Arduino misura periodicamente la distanza tramite il sensore HC-SR04.
Se un oggetto viene rilevato entro la distanza impostata, il motore avvia l’apertura.
Il motore continua a girare finché viene premuto il finecorsa di apertura.
Raggiunta la posizione aperta:
- il motore si ferma;
- il LED verde si accende;
- parte il tempo di attesa.
Trascorso il tempo impostato, Arduino avvia la chiusura.
🚗 Rilevamento del veicolo
Il sensore HC-SR04 misura la distanza attraverso un impulso a ultrasuoni.
Il programma utilizza una soglia iniziale di 30 cm:
const int DISTANZA_ATTIVAZIONE = 30;
Quando la distanza misurata è inferiore alla soglia, viene avviata l’apertura.
La soglia può essere modificata in base alla posizione del sensore e alle dimensioni del modello.
Il sensore HC-SR04 misura la distanza attraverso un impulso a ultrasuoni.
Il programma utilizza una soglia iniziale di 30 cm:
const int DISTANZA_ATTIVAZIONE = 30;
Quando la distanza misurata è inferiore alla soglia, viene avviata l’apertura.
La soglia può essere modificata in base alla posizione del sensore e alle dimensioni del modello.
🔓 Apertura del cancello
Durante l’apertura Arduino imposta il driver L298N in una direzione.
Il motore continua a muoversi finché:
Il tempo massimo evita che il motore rimanga alimentato continuamente se il finecorsa non funziona.
Durante l’apertura Arduino imposta il driver L298N in una direzione.
Il motore continua a muoversi finché:
- viene premuto il finecorsa aperto;
- viene superato il tempo massimo di movimento.
Il tempo massimo evita che il motore rimanga alimentato continuamente se il finecorsa non funziona.
🔒 Chiusura automatica
Dopo l’apertura, Arduino attende cinque secondi.
Successivamente il motore gira nella direzione opposta.
La chiusura termina quando viene premuto il finecorsa del cancello chiuso.
Il tempo di attesa può essere modificato attraverso:
const unsigned long TEMPO_APERTO = 5000;
Dopo l’apertura, Arduino attende cinque secondi.
Successivamente il motore gira nella direzione opposta.
La chiusura termina quando viene premuto il finecorsa del cancello chiuso.
Il tempo di attesa può essere modificato attraverso:
const unsigned long TEMPO_APERTO = 5000;
🛑 Rilevamento dell’ostacolo
Durante la chiusura Arduino continua a controllare il sensore a ultrasuoni.
Se viene rilevato un oggetto troppo vicino:
👉 Questa funzione simula una fotocellula di sicurezza, ma non sostituisce un dispositivo certificato per cancelli reali.
Durante la chiusura Arduino continua a controllare il sensore a ultrasuoni.
Se viene rilevato un oggetto troppo vicino:
- il motore si ferma;
- il cancello torna ad aprirsi;
- il tempo di attesa riparte.
👉 Questa funzione simula una fotocellula di sicurezza, ma non sostituisce un dispositivo certificato per cancelli reali.
⏱️ Protezione sul tempo di movimento
Se il finecorsa non viene premuto entro il tempo massimo, Arduino entra nello stato di errore.
Il motore viene immediatamente fermato.
Il LED rosso lampeggia per indicare il problema.
Il pulsante manuale permette di azzerare l’errore e riportare il sistema allo stato iniziale.
Se il finecorsa non viene premuto entro il tempo massimo, Arduino entra nello stato di errore.
Il motore viene immediatamente fermato.
Il LED rosso lampeggia per indicare il problema.
Il pulsante manuale permette di azzerare l’errore e riportare il sistema allo stato iniziale.
🔘 Apertura manuale
Premendo il pulsante manuale quando il cancello è chiuso, Arduino avvia immediatamente l’apertura.
Il pulsante può essere utilizzato per:
Nello stato di errore, la pressione permette invece di ripristinare il sistema.
Premendo il pulsante manuale quando il cancello è chiuso, Arduino avvia immediatamente l’apertura.
Il pulsante può essere utilizzato per:
- eseguire test;
- simulare un telecomando;
- aprire il cancello senza attendere il sensore.
Nello stato di errore, la pressione permette invece di ripristinare il sistema.
💡 Significato dei LED
LED rosso
Indica:
LED giallo
Indica:
LED verde
Indica:
LED rosso
Indica:
- cancello chiuso;
- errore con lampeggio.
LED giallo
Indica:
- cancello in apertura;
- cancello in chiusura.
LED verde
Indica:
- cancello completamente aperto.
⚠️ Problemi comuni
Il motore gira nella direzione sbagliata
Puoi:
I finecorsa funzionano al contrario
Il codice utilizza INPUT_PULLUP.
Il finecorsa premuto deve essere letto come LOW.
Se utilizzi un contatto normalmente chiuso, potrebbe essere necessario invertire la condizione.
Il sensore rileva distanze errate
Controlla che:
Il motore non parte
Controlla:
Il motore gira nella direzione sbagliata
Puoi:
- invertire i fili del motore;
- scambiare i livelli dei pin IN1 e IN2 nel codice.
I finecorsa funzionano al contrario
Il codice utilizza INPUT_PULLUP.
Il finecorsa premuto deve essere letto come LOW.
Se utilizzi un contatto normalmente chiuso, potrebbe essere necessario invertire la condizione.
Il sensore rileva distanze errate
Controlla che:
- TRIG ed ECHO siano collegati correttamente;
- il sensore sia rivolto verso l’area da controllare;
- non siano presenti superfici inclinate;
- i collegamenti siano stabili.
Il motore non parte
Controlla:
- alimentazione esterna;
- massa comune;
- ponticello ENA rimosso;
- valore PWM;
- collegamenti OUT1 e OUT2.
🧠 Perché è un progetto importante
Con questo progetto impari a:
Con questo progetto impari a:
- controllare un motore DC con L298N;
- utilizzare due finecorsa;
- misurare una distanza con HC-SR04;
- creare una macchina a stati;
- realizzare un ciclo automatico;
- interrompere la chiusura in presenza di un ostacolo;
- gestire un timeout di sicurezza;
- controllare LED di stato;
- utilizzare millis() senza bloccare Arduino;
- sviluppare codice compatibile con Arduino UNO.
🔄 Varianti possibili
Vuoi migliorare il progetto?
Vuoi migliorare il progetto?
- 🔔 aggiungi un buzzer durante il movimento;
- 🚨 fai lampeggiare un LED prima della chiusura;
- 📟 aggiungi un display LCD;
- 🔐 utilizza un lettore RFID;
- 📡 collega un ricevitore a infrarossi;
- 📱 controlla il cancello tramite Bluetooth;
- 💾 salva il numero delle aperture nella EEPROM;
- ⏰ registra data e ora con RTC DS3231;
- ⚡ misura la corrente del motore;
- 🎚️ modifica la velocità con un potenziometro;
- 🔘 aggiungi un pulsante STOP di emergenza;
- 🚪 utilizza un motore con riduttore e vite senza fine.