PROGETTI ARDUINO

  • HOME
  • 200 Progetti
  • Progetti e Tutorial
  • Reti
    • Impara le reti
    • internet fibra
    • wifi mesh
    • modem router
    • diagnostica reti
    • ethernet lan
    • sicurezza configurazione
  • Elettronica
  • Recensioni
  • Manuale
  • Contatti
  • HOME
  • 200 Progetti
  • Progetti e Tutorial
  • Reti
    • Impara le reti
    • internet fibra
    • wifi mesh
    • modem router
    • diagnostica reti
    • ethernet lan
    • sicurezza configurazione
  • Elettronica
  • Recensioni
  • Manuale
  • Contatti

Progetto 143
​Apertura cancello automatico

🚀 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:
  1. il sensore rileva un oggetto in avvicinamento;
  2. Arduino apre il cancello;
  3. il sistema attende alcuni secondi;
  4. il cancello si richiude;
  5. 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:
  • 🚗 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
​
  • 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
​

📚 Librerie necessarie
​

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
  • 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.
Rimuovi il ponticello ENA dal modulo L298N, perché Arduino deve controllare la velocità tramite PWM.

Sensore HC-SR04
  • VCC → 5V;
  • GND → GND;
  • TRIG → pin digitale 10;
  • ECHO → pin digitale 11.
Il sensore controlla l’area davanti al cancello.

Finecorsa cancello chiuso
  • un terminale → pin digitale 2;
  • terminale opposto → GND.
Il pulsante deve essere premuto quando il cancello raggiunge la posizione completamente chiusa.

Finecorsa cancello aperto
  • un terminale → pin digitale 3;
  • terminale opposto → GND.
Il pulsante deve essere premuto quando il cancello raggiunge la posizione completamente aperta.

Pulsante manuale
  • un terminale → pin digitale 4;
  • terminale opposto → GND.
Permette di avviare manualmente un ciclo di apertura.

LED verde
  • anodo → pin digitale 5 tramite resistenza da 220 Ω;
  • catodo → GND.
Indica cancello aperto.

LED giallo
  • anodo → pin digitale 6 tramite resistenza da 220 Ω;
  • catodo → GND.
Indica cancello in movimento.

LED rosso
  • anodo → pin digitale 12 tramite resistenza da 220 Ω;
  • catodo → GND.
Indica cancello chiuso o stato di errore.
⚠️ Alimentazione del motore
​

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.
Foto

💻 Codice Arduino
​

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:
  • 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.

🔓 Apertura del cancello

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;

🛑 Rilevamento dell’ostacolo

Durante la chiusura Arduino continua a controllare il sensore a ultrasuoni.

Se viene rilevato un oggetto troppo vicino:
  1. il motore si ferma;
  2. il cancello torna ad aprirsi;
  3. 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.

🔘 Apertura manuale

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:
  • 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:
  • 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:
  • 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?
  • 🔔 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.

Foto
Foto

© ProgettiArduino.com 2026 - Fancello Salvatore
​ Layout, immagini e testi sono di esclusiva proprietà di www.progettiarduino.com 
Privacy Policy