Un sistema di sorveglianza con il Raspberry Pi e Python – Prima Parte

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.

Introduzione

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:

  1. Automazione della casa: Puoi utilizzare il Raspberry Pi per automatizzare varie funzioni della casa, come l’illuminazione, il riscaldamento, i sistemi di sicurezza e altro ancora. Puoi utilizzare sensori e attuatori per controllare e monitorare diversi aspetti della tua abitazione.
  2. Sicurezza: Puoi creare un sistema di sicurezza domestico utilizzando il Raspberry Pi insieme a telecamere e sensori di movimento. Puoi configurare il tutto per monitorare la tua casa e ricevere avvisi in caso di attività sospette (questo è quello che faremo in questo tutorial).
  3. Controllo remoto: Puoi controllare dispositivi domestici da remoto utilizzando il Raspberry Pi, ad esempio accendere o spegnere luci, regolare il termostato o controllare le telecamere di sicurezza attraverso un’interfaccia web o un’applicazione dedicata.
  4. Gestione dell’energia: Puoi utilizzare il Raspberry Pi per monitorare e gestire il consumo energetico della tua casa. Questo potrebbe aiutarti a identificare e ridurre gli sprechi energetici.
  5. Progetti personalizzati: La flessibilità del Raspberry Pi consente di creare progetti di domotica personalizzati in base alle tue esigenze. Puoi sperimentare con sensori, attuatori, e software per realizzare soluzioni su misura.
  6. Piattaforme software: Esistono diverse piattaforme software open source progettate per funzionare con il Raspberry Pi e la domotica, come OpenHAB, Home Assistant e Domoticz. Queste piattaforme forniscono un’interfaccia utente per la configurazione e il controllo dei dispositivi domestici.
  7. Apprendimento e sviluppo: Se sei interessato a imparare la programmazione o a sviluppare competenze nel campo della domotica, il Raspberry Pi offre un ambiente di sviluppo accessibile e ricco di risorse online.

Lo faremo

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.

Hardware richiesto

  • Sensore di movimento PIR: il sensore principale di cui abbiamo bisogno per questo tutorial. PIR sta per “Infrarossi passivi”. Questo sensore può rilevare il movimento rilevando i corpi caldi nel suo campo visivo. Ne ho provati alcuni modelli e quello che ho indicato nel link è quello che è risultato migliore in termini di qualità e con il rilevamento del movimento più accurato.
  • Qualsiasi modello Raspberry Pi: puoi utilizzare qualsiasi modello Raspberry Pi per questo tutorial. Tutti i modelli Raspberry Pi sono dotati dei pin GPIO di cui abbiamo bisogno. Il link manda al sito dove ho acquistato il mio Raspberry Pi 4.
  • Modulo Raspberry Pi Camera: Il Modulo Raspberry Pi Camera è un dispositivo compatto e leggero progettato per catturare immagini e video ad alta risoluzione su Raspberry Pi, il popolare computer a scheda singola. Questo modulo offre un’interfaccia semplice per integrare la funzionalità di fotocamera nei progetti e nelle applicazioni basate su Raspberry Pi. Il modulo include un sensore di immagine di alta qualità, consentendo la cattura di fotografie nitide e video di buona qualità, Grazie alle sue dimensioni ridotte e alla facilità di integrazione, è ampiamente utilizzato in progetti legati alla visione artificiale, alla sorveglianza, alla fotografia e alla registrazione video.
  • Una Breadboard: La breadboard è un dispositivo elettronico utilizzato per la prototipazione di circuiti senza la necessità di saldature permanenti. Si presenta come una piastra piatta con fori attraversati da piccoli conduttori metallici interni. Consentendo la connessione di componenti elettronici senza l’uso di saldature, la breadboard offre una soluzione flessibile e riutilizzabile per sperimentare e testare circuiti.
  • Il T-Cobbler: abbreviazione di “T-shaped Cobbler,” è un accessorio progettato specificamente per semplificare la connessione tra un Raspberry Pi e una breadboard. La sua forma a “T” si adatta fisicamente ai GPIO (General Purpose Input/Output) del Raspberry Pi, fornendo una connessione pulita e organizzata. Il T-Cobbler semplifica il cablaggio dei componenti elettronici da e verso il Raspberry Pi, migliorando la facilità di prototipazione e riducendo la possibilità di errori di collegamento. In sostanza, il T-Cobbler è uno strumento utile per espandere le capacità di sperimentazione e prototipazione di progetti basati su Raspberry Pi, rendendo più agevole l’accesso alle funzionalità GPIO sulla breadboard.
  • 1 Kit Cavetti Jumper – Il kit solitamente include cavi di diverse lunghezze e colori, consentendo di collegare facilmente sensori, attuatori, schede di sviluppo (come il Raspberry Pi) e altri dispositivi elettronici. Questi kit sono molto utili per realizzare prototipi rapidi, eseguire test e connettere i vari elementi di un circuito senza la necessità di saldature permanenti. Sono uno strumento comune nel mondo del fai-da-te e dell’hobby elettronico, facilitando la connessione e la sperimentazione durante lo sviluppo di progetti elettronici.

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.

Requisiti Software

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.

La Breadboard

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:

  • Organizzazione dei Pin: Il T-Cobbler organizza i pin del Raspberry Pi in un layout più intuitivo e ordinato sulla breadboard, rispetto a un collegamento diretto con cavi jumper. Ciò facilita la comprensione e la navigazione dei collegamenti.
  • Riduzione dell’Ingombro: Il T-Cobbler permette di concentrare tutti i collegamenti in un’unica area, riducendo l’ingombro e migliorando la gestione dei cavi. Ciò è particolarmente utile quando si lavora su progetti complessi con numerosi componenti.
  • Minimizzazione degli Errori: Con il T-Cobbler, è meno probabile commettere errori di collegamento, in quanto offre un’interfaccia standardizzata e predefinita per ogni pin del Raspberry Pi. Questo contribuisce a evitare confusione e semplifica il debug dei circuiti.

Collegare il T-Cobbler alla Breadboard

Per collegare il T-Cobbler alla Breadboard segui questi semplici passaggi:

  1. Orientazione del T-Cobbler: Assicurati che la parte piatta del T-Cobbler sia rivolta verso l’alto.
  2. Posizionamento sulla Breadboard: Inserisci i pin maschio del T-Cobbler nelle colonne centrali della breadboard.
  3. Collegamento al Raspberry Pi: Utilizza un cavo a nastro per collegare il T-Cobbler ai pin corrispondenti sul Raspberry Pi. Assicurati di rispettare l’orientamento e l’allineamento corretti.

alla fine dovrebbe sembrare cosi:

Colleghiamo il sensore di movimento PIR al Raspberry Pi

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:

  1. Filo Rosso VCC (Voltage Common Collector o Supply Voltage): Questo pin è destinato all’alimentazione del sensore. Deve essere collegato alla sorgente di alimentazione (ad esempio, 5V) del circuito. Fornisce l’energia necessaria per far funzionare il sensore PIR.
  2. Filo Nero GND (Ground): Questo pin è il terminale di terra e deve essere collegato al polo negativo della sorgente di alimentazione o al punto di terra del circuito. Serve a chiudere il circuito e a fornire una referenza di tensione comune per il sensore.
  3. Filo Giallo OUT (Output): Questo è il pin di output del sensore PIR. Quando il sensore rileva un cambiamento nel campo termico, come il movimento di una persona, genera un segnale sull’output. La tensione su questo pin può variare a seconda dello stato del sensore (ad esempio, 0V per nessun movimento e 3.3V o 5V per rilevamento di movimento).

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:

  • il filo rosso a uno dei fori della breadboard corrispondente al pin 5V della GPIO
  • il filo nero a uno dei fori corrispondenti al pin GND (la terra, per chiudere il circuito)
  • il filo giallo al foro corrispondente al pin GPIO 4.

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.

Testiamo il sensore di movimento con il Raspberry Pi

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:

  1. Importazione della libreria:

    from gpiozero import MotionSensor

    L’istruzione importa la classe MotionSensor dalla libreria gpiozero. Questa classe consente di gestire un sensore di movimento.

  2. Inizializzazione del sensore di movimento:

    pir = MotionSensor(4)

    Viene creato un oggetto MotionSensor denominato pir e associato al pin GPIO 4. Questo oggetto rappresenta il sensore di movimento e offre metodi per rilevare l’attività e l’inattività.

  3. Ciclo while infinito:

    while True:

    Inizia un ciclo while che continuerà indefinitamente. Il suo scopo principale è monitorare costantemente lo stato del sensore di movimento.

  4. Rilevimento del movimento:

    pir.wait_for_motion()

    Il programma attende finché il sensore di movimento non rileva un movimento. Una volta che il movimento è rilevato, il controllo passa alla riga successiva.

  5. Stampa del messaggio:

    print("Ti sei mosso!")

    Se il sensore rileva un movimento, il programma stamperà il messaggio “Ti sei mosso!” sulla console.

  6. Attesa di inattività:

    pir.wait_for_no_motion()

    Dopo aver rilevato il movimento e stampato il messaggio, il programma attende finché il sensore di movimento non rileva più alcun movimento. Una volta che il movimento cessa, il ciclo while ricomincia.

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.

Aggiungiamo un Led!

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.

Conoscenza dei componenti

Led

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:

La Resistenza

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().

Fine prima parte

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!

Lascia il primo commento

Mettiti in contatto

WordPress Maintenance Form