Nota
Ciao, benvenuto nella Community SunFounder dedicata agli appassionati di Raspberry Pi, Arduino ed ESP32 su Facebook! Approfondisci il mondo di Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
Perché unirti?
Supporto Esperto: Risolvi problemi post-vendita e sfide tecniche con il supporto della nostra community e del nostro team.
Impara e Condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.
Anteprime Esclusive: Accedi in anticipo alle novità sui prodotti e alle anteprime.
Sconti Speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.
Promozioni Festive e Giveaway: Partecipa a concorsi e promozioni stagionali.
👉 Pronto a esplorare e creare con noi? Clicca su [qui] e unisciti subito!
Lezione 40: Relè attivato dal movimento
Questo progetto Arduino ha lo scopo di controllare una luce tramite relè, utilizzando un sensore PIR (a infrarossi passivo). Quando il sensore PIR rileva un movimento, il relè si attiva accendendo la luce. La luce rimane accesa per 5 secondi dopo l’ultima rilevazione di movimento.
Avvertimento
In questa dimostrazione, utilizziamo un relè per controllare un modulo LED RGB. Tuttavia, in applicazioni reali, questo potrebbe non essere il metodo più pratico.
Sebbene il relè possa essere collegato ad altri dispositivi nelle applicazioni reali, è necessaria la massima attenzione quando si lavora con tensione AC ELEVATA. Un uso scorretto può causare gravi lesioni o la morte. Questo esperimento è destinato solo a persone esperte e competenti nell’ambito dell’elettricità AC. La sicurezza viene sempre prima di tutto.
Componenti Necessari
Per questo progetto, avremo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare l’intero kit, ecco il link:
Nome |
COMPONENTI INCLUSI |
LINK |
---|---|---|
Universal Maker Sensor Kit |
94 |
Oppure puoi acquistare i componenti separatamente qui sotto:
Descrizione Componente |
Link Acquisto |
---|---|
Arduino UNO R3 o R4 |
|
- |
|
- |
|
- |
|
Cablaggio

Codice
Analisi del Codice
Il progetto si basa sulla capacità del sensore PIR di rilevare il movimento. Quando viene rilevato un movimento, il sensore invia un segnale ad Arduino che attiva il modulo relè, accendendo la luce. La luce rimane accesa per un periodo definito (in questo caso, 5 secondi) dopo l’ultima rilevazione, assicurando un’illuminazione continua anche se il movimento cessa.
Impostazione iniziale e dichiarazione delle variabili
In questo segmento si definiscono costanti e variabili usate nel codice. Impostiamo i pin del relè e del sensore PIR, una costante per il ritardo, e una variabile per tenere traccia dell’ultimo movimento rilevato insieme a un flag per monitorare la presenza di movimento.
// Definizione del pin per il relè const int relayPin = 9; // Definizione del pin per il sensore PIR const int pirPin = 8; // Ritardo per l'intervallo di movimento in millisecondi const unsigned long MOTION_DELAY = 5000; unsigned long lastMotionTime = 0; // Timestamp dell’ultimo movimento bool motionDetected = false; // Flag per tracciare il movimento
Configurazione dei pin nella funzione setup()
Nella funzione
setup()
, i pin per relè e PIR vengono configurati nei relativi modi, e il relè viene inizialmente disattivato.void setup() { pinMode(relayPin, OUTPUT); // Imposta relayPin come uscita pinMode(pirPin, INPUT); // Imposta pirPin come ingresso digitalWrite(relayPin, LOW); // Spegne inizialmente il relè }
Logica principale nella funzione loop()
La funzione
loop()
contiene la logica centrale. Quando il sensore PIR rileva movimento, invia un segnaleHIGH
, accendendo il relè e aggiornando il tempo di ultimo movimento. Se non viene rilevato movimento per 5 secondi, il relè viene disattivato.Questo approccio garantisce che anche in caso di rilevazioni brevi o intermittenti, la luce resti accesa per almeno 5 secondi dopo l’ultimo movimento rilevato.
void loop() { if (digitalRead(pirPin) == HIGH) { lastMotionTime = millis(); // Aggiorna il timestamp digitalWrite(relayPin, HIGH); // Accende il relè motionDetected = true; } // Se è passato il tempo e c’era stato un movimento, spegne il relè if (motionDetected && (millis() - lastMotionTime >= MOTION_DELAY)) { digitalWrite(relayPin, LOW); // Spegne il relè motionDetected = false; } }