Cari lettori del blog, oggi voglio condividere con voi questo piccolo progetto per realizzare un sistema di sorveglianza fai da te con il Raspberry Pi. Il tutorial è abbastanza lungo e dettagliato per cui ho deciso di dividerlo in due parti. In questa prima parte collegheremo tutto l'hardware necessario e codificheremo un sensore di movimento PIR con Python.
Nota: A partire dal sistema operativo Raspberry Pi Bullseye, la libreria picamera2 è il metodo predefinito per controllare il modulo fotocamera con Python su un Raspberry Pi. Ora è un modulo stabile, preinstallato sul sistema operativo Raspberry Pi e pronto per l'uso su una nuova installazione del sistema.
Per questo tutorial occorre avere la versione del sistema operativo Raspberry Pi Bullseye o successivo, gli il codice di questo tutorial è stato testato su un Raspberry Pi 4 con su Bookworm.
La domotica con il Raspberry Pi è un argomento molto interessante e popolare. Il Raspberry Pi è un computer a basso costo e consuma poca energia, rendendolo una piattaforma ideale per progetti di domotica fai-da-te. Ecco alcune cose che potresti fare con un Raspberry Pi:
Collegheremo al nostro Raspberry Pi un sensore di movimento PIR (Passive Infrared), un sensore di movimento può essere collegato utilizzando solo 3 fili: pin di alimentazione (+ e -) e segnale.
Creeremo lo script pir-mode.py
che sarà utilizzato per attivare il sensore. La classe GPIO Zero, preinstallata sul sistema operativo Raspberry Pi, può quindi essere utilizzata in Python per rilevare i movimenti nella stanza.
Prima di iniziare, è importante pianificare il progetto, identificare i dispositivi e i sensori necessari, e assicurarti di avere tutto il necessario.
Questo è il materiale che ci occorre per il nostro progetto di sorveglianza fai da te e puoi acquistare ogni singolo componente, ma se hai intenzione di sperimentare e giocare un po' con il tuo Raspberry, ti consiglio di acquistare questo fantastico Kit della Freenove: Ultimate Starter Kit per Raspberry Pi. Si tratta di un kit per Raspberry Pi, che include molti accessori elettronici e tutorial dettagliati. All'interno di questo kit troverai fra le altre cose anche una Breadbord, il T-Cobbler, il sensore PIR e i cavetti jumper. I tutorial sono davvero accurati, un'ottima scelta se vuoi imparare l'elettronica e la programmazione.
Inoltre in questo tutorial ci sarà una sezione facoltativa che mostra come accendere un led quando il sensore rileva un movimento e prevede l'uso di un led e una resistenza, che sono anch'esse presenti all'interno dello starter kit.
Sistema operativo Raspberry Pi: qualsiasi sistema operativo Raspberry Pi (in precedenza Raspbian) va bene per questo tutorial. Per ora avremo bisogno solo del sistema operativo Raspberry Pi, poiché i pacchetti di cui abbiamo bisogno per interagire con il GPIO sono già preinstallati.
Python: il linguaggio di programmazione che utilizzeremo è Python. Se usi il sistema operativo Raspberry Pi, è tutto installato, quindi niente di speciale da fare a questo punto.
Questo umile blocco di plastica pieno di buchi può essere utilizzato per creare praticamente qualsiasi cosa.
La maggior parte dei progetti vengono testati utilizzando un piccolo pezzo di plastica noto come breadboard. Ufficialmente è conosciuta come "breadboard senza saldatura" perché consente di utilizzare parti del circuito senza saldarle insieme.
I componenti elettrici vengono collegati inserendoli nei fori di una breadboard. Questi fori sono collegati in strisce, come mostrato nell'immagine principale. Se inserisci un filo, o un componente diverso, in un foro di una striscia e un altro filo nel foro accanto, è come se avessi unito (o saldato) fisicamente i due fili.
Per numerosi appassionati del Raspberry Pi, l'impiego di una breadboard rappresenta una pratica quotidiana. Tuttavia, per coloro che si avvicinano per la prima volta, questo kit insolito può risultare confuso: una tavolozza di fori disposti in modo apparentemente casuale in righe e colonne, suscitando perplessità. Sul sito MagPi puoi trovare un'ottima guida per principianti su come funziona una breadboard.
Nel tutorial sul sito MagPi che ho appena citato, la breadboard viene collegata direttamente ai pin del raspberry con dei cavi jumper, tuttavia l'utilizzo di un t-cobbler è molto più pratico. Utilizzare un T-Cobbler anziché collegare direttamente la breadboard ai pin del Raspberry Pi tramite cavi jumper presenta diversi vantaggi.
Il T-Cobbler, o cobbler in generale, fornisce un'interfaccia più organizzata e praticabile per connettere i componenti sulla breadboard, semplificando il processo di prototipazione e riducendo potenziali errori di collegamento.
Ecco alcune ragioni per preferire l'utilizzo di un T-Cobbler:
Per collegare il T-Cobbler alla Breadboard segui questi semplici passaggi:
alla fine dovrebbe sembrare cosi:
Ora che abbiamo predisposto tutto il necessario per lavorare comodamente con la nostra breadboard possiamo iniziare a collegare il nostro sensore PIR e testarne il corretto funzionamento. Se volessimo collegarlo direttamente ai Pin GPIO del Raspberry Pi, lo schema di collegamento sarebbe come nell'immagine seguente:
Noi useremo la Breadbord e inzieremo collegando i 3 cavetti jumper maschio/femmina al sensore:
Usate queste immagini di riferimento per collegare correttamente i fili ai 3 pin del sensore e alla breadboard. Dovrebbe apparire cosi:
Abbiamo appena collegato il nostro sensore PIR alla breadboard, rispettivamente:
Notate anche che Il modulo HC-SR501 ha due trimmer, T1 e T2. Il trimpot T1 è usato per regolare la sensibilità e il trimpot T2 è usato per regolare il ritardo di uscita. Il ponticello J1 è usato per le impostazioni di compensazione della temperatura. Per utilizzare il modulo con un 3.3V c'è una semplice modifica che bypassa il regolatore di tensione a bordo. Lo scopo di questa modalità è di permettere al modulo di lavorare con i dispositivi che hanno solo 3.3 V sui pin di alimentazione.
Personalmente non ho modificato nulla e mi sembra che le impostazioni di fabbrica siano ottimali.
Ora che abbiamo collegato il sensore di movimento, possiamo procedere con il test del sensore con Python. Scriveremo per cominciare il file pir-mode.py
che si occuperà di attivare il sensore, ma prima colleghiamo il Raspberry Pi all'alimentazione per avviarlo.
Per creare il file apriamo Thonny, che è un leggero e user-friendly ambiente di sviluppo (IDE) per il linguaggio di programmazione Python. Predefinito su Raspberry Pi, Thonny offre un'interfaccia intuitiva e semplificata, ideale sia per principianti che per sviluppatori Python più esperti.
Quindi creiamo un nuovo file con Thonny e inseriamo questo codice Python, che utilizza la libreria gpiozero per interagire con un sensore di movimento (PIR) collegato al pin GPIO 4 del Raspberry Pi
from gpiozero import MotionSensor
pir = MotionSensor(4)
while True:
pir.wait_for_motion()
print("Ti sei mosso!")
pir.wait_for_no_motion()
Ecco una descrizione passo per passo degli elementi principali dello script:
from gpiozero import MotionSensor
pir = MotionSensor(4)
while True:
pir.wait_for_motion()
print("Ti sei mosso!")
pir.wait_for_no_motion()
In sostanza, questo script crea un loop infinito che attende l'attivazione del sensore di movimento, stampa un messaggio quando viene rilevato un movimento, e successivamente aspetta che il movimento cessi prima di ripetere il processo.
Proviamolo premendo il pulsante nell'editor Thonny per avviare lo script. Nota che negli ambienti di sviluppo tipici come Thonny o IDLE, gli script Python non richiedono i permessi di esecuzione per essere eseguiti. La necessità di aggiungere i permessi di esecuzione con chmod +x ~/pir-mode.py
diventa rilevante quando esegui uno script Python direttamente dal terminale o da un file di script bash. In questo caso, il sistema operativo deve riconoscere lo script come eseguibile.
Se abbiamo fatto tutto correttamente vedremo stampare il messaggio "Ti sei mosso!" ogni volta che il sensore rileva un movimento.
Ora che comprendiamo la classe MotionSensor, proviamo un codice semplice in cui oltre a stampare sulla console il messaggio "Ti sei mosso!" accendiamo anche un LED quando viene rilevato un movimento. Questo passaggio è facoltativo, ma può tornare utile, se vuoi testare il raggio di azione del sensore probabilmente dovrai allontanarti dal monitor e non vedrai quando la scritta viene stampata, sarà più facile capire quando il movimento viene rilevato osservando se il led si illumina.
Saranno necessari 1 Led e 1 Resistenza da 220Ω e un paio di cavetti Jumper maschio/maschio.
Un LED è un tipo di diodo. Tutti i diodi funzionano solo se la corrente scorre nella direzione corretta e hanno due poli. Un LED funzionerà (si accenderà) solo se il pin più lungo (+) del LED è collegato all'uscita positiva di un alimentatore sorgente e il pin più corto è collegato all'uscita negativa (-), chiamata anche massa (GND).
Questo tipo di componente è noto come “Polare” (si pensi alla strada a senso unico). Tutti i comuni diodi a 2 conduttori sono uguali sotto questo aspetto. I diodi funzionano solo se la tensione del suo elettrodo positivo è superiore al suo elettrodo negativo ed esiste un intervallo ristretto di tensione operativa per la maggior parte dei comuni diodi da 1,9 e 3,4 V. Se si utilizza una tensione molto superiore a 3,3 V, il LED verrà danneggiato e bruciato.
Nota: i LED non possono essere collegati direttamente all'alimentatore, che di solito termina con un componente danneggiato. Un resistore con un valore di resistenza specificato deve essere collegato in serie al LED che si intende utilizzare.
Questo è lo schema del nostro circuito per il led:
Le resistenze utilizzano Ohm (Ω) come unità di misura della loro resistenza (R). 1MΩ=1000kΩ, 1kΩ=1000Ω. Un resistore è un componente elettrico passivo che limita o regola il flusso di corrente in un circuito elettronico.
Le bande di colore su un resistore sono un codice abbreviato utilizzato per identificarne il valore di resistenza. Con una tensione fissa, ci sarà meno corrente in uscita con maggiore resistenza aggiunta al circuito. La relazione tra Corrente, Tensione e Resistenza può essere espressa con questa formula: I=V/R nota come Legge di Ohm dove I = Corrente, V = Tensione e R = Resistenza. Conoscere i valori di due qualsiasi di questi consente di risolvere il valore del terzo.
Nota: a differenza dei LED e dei diodi, i resistori non hanno poli e non sono polari (non importa in quale direzione li inserisci in un circuito, funzionerà lo stesso).
Seguendo lo schema indicato nell'immagine sopra, ora la nostra breadboard dovrebbe apparire più o meno così:
Modifichiamo il codice nel file pir-mode.py
come segue:
from gpiozero import MotionSensor, LED
pir = MotionSensor(4)
led = LED(17)
while True:
pir.wait_for_motion(timeout = 5)
if pir.value:
print("Ti sei mosso!")
led.on()
pir.wait_for_no_motion()
else:
led.off()
Questo script è molto simile al precedente, abbiamo modificato la riga:
from gpiozero import MotionSensor, LED
aggiungendo l'importazione della classe LED dalla libreria gipiozero che ci consentirà di gestire il led.
led = LED(17)
Abbiamo creato l'oggetto led associato al pin GPIO 17. Infine abbiamo modificato il ciclo while che ora esegue queste operazioni:
pir.wait_for_motion(timeout=5)
Noterai che ho aggiunto il parametro timeout, in questo modo il programma attende finché il sensore di movimento non rileva un movimento o fino a quando trascorrono 5 secondi (timeout). Se il movimento viene rilevato entro il timeout, il controllo passa alla riga successiva. Se scade il timeout, il controllo passa comunque alla riga successiva.
if pir.value:
print("Ti sei mosso!")
led.on()
pir.wait_for_no_motion()
else:
led.off()
Verifica dello stato del sensore di movimento: Se il sensore di movimento ha rilevato un movimento (valore True), il programma stampa "Ti sei mosso!", accende il LED led.on() e attende che il sensore non rilevi più movimento pir.wait_for_no_motion(). Se il sensore non ha rilevato un movimento (valore False), il LED viene spento led.off().
Ora se provi lo script dovresti vedere il tuo led accendersi quando rileva il movimento. Qui termina la prima parte del tutorial, ma abbiamo già fatto il grosso del lavoro, ora abbiamo un sensore funzionante collegato al nostro Raspberry Pi che gli consente di rilevare il movimento e di eseguire delle azioni, per ora abbiamo solo acceso un led ma nella seconda parte del tutorial vedremo come modificare il nostro script per fargli scattare una foto e inviarcela su Telegram.
Ci vediamo per la Seconda Parte del Tutorial!