Motion Detector con Raspberry Pi

Scopriamo in questo articolo come, con un Raspberry Pi programmato con un'opportuna applicazione, sia possibile scoprire chi si è introdotto nella vostra camera: se siete giovani, potrete quindi realizzare un "rilevatore" di presenza genitori che utilizza il rilevamento di movimento per innescare la registrazione video con un modulo Raspberry Pi camera.

Cosa realizzerete

Utilizzerete un Raspberry Pi per individuare chi si è introdotto nella vostra camera! Il Raspberry Pi è così piccolo che può essere facilmente occultato, rendendolo uno strumento ideale per rilevare segretamente visitatori indesiderati della vostra camera da letto (come i vostri genitori). In questo tutorial realizzerete un rilevatore di genitori basato sull'utilizzo di un rilevatore di movimento ("motion detector") per triggerare una registrazione con il modulo camera del Raspberry Pi. Potete poi lasciare il Pi nascosto in qualche punto della vostra camera e verificare chi è stato ripreso dalla fotocamera quando rientrate a casa dalla scuola.

Cosa imparerete

Realizzando questo rilevatore per genitori imparerete:

  • come impostare e utilizzare il camera module del Raspberry Pi;
  • come scattare foto con la fotocamera utilizzando Python, importando le librerie corrette;
  • come utilizzare un sensore passivo a infrarossi (PIR), utilizzando un while true loop in Python;
  • come utilizzare variabili per memorizzare informazioni all'interno del codice Python, rendendo l'applicazione più semplice e leggibile;
  • come aggiungere codice al vostro programma Python per rilevare il movimento, triggerare la registrazione con la fotocamera, e memorizzare il video prodotto;
  • come riprodurre un qualunque video dalla command line.

Cosa occorre

Per quanto riguarda la dotazione hardware, oltre a un Raspberry Pi corredato di un'immagine su scheda SD aggiornata, occorreranno:

  • un modulo fotocamera per Raspberry Pi (Figura 1);
    Fonte: www.raspberrypi.org

    Figura 1: Modulo fotocamera per Raspberry Pi [Fonte: www.raspberrypi.org]

  • un sensore di movimento PIR (figura 2);
    Fonte: www.raspberrypi.org

    Figura 2: Sensore PIR [Fonte: www.raspberrypi.org]

  • 3 cavetti jumper femmina-femmina (Figura 3).
    Fonte: www.raspberrypi.org

    Figura 3: Cavetti jumper [Fonte: www.raspberrypi.org]

Per quanto riguarda invece il software, è sufficiente una distribuzione Raspbian aggiornata. Per accertarsi che la vostra schedina SD sia aggiornata con tale immagine, potete fare riferimento a questa guida di aggiornamento Raspbian. Come elemento opzionale si potrebbe eventualmente aggiungere un comodo sostegno per fotocamera.

Il sensore PIR

Nel progetto utilizzeremo un sensore di movimento PIR (Passive Infrared Sensor), come quello visibile nell'immagine precedente. Probabilmente lo avrete già visto prima: sono spesso utilizzati nei sistemi di allarme (i sensori sono di solito collocati negli angoli delle stanze sotto sorveglianza). Tutti gli oggetti con temperatura superiore allo zero assoluto emettono delle radiazioni infrarosse. Le lunghezze d'onda dell'infrarosso non sono visibili all'occhio umano, ma possono essere rilevate dall'elettronica presente in uno di questi moduli. Il sensore viene denominato passivo in quanto non emette alcun segnale per rilevare il movimento. Esso si adatta al livello di radiazione infrarossa presente nella stanza in cui è collocato e comincia successivamente a monitorare ogni variazione della stessa. Ogni oggetto che si muove nella stanza perturberà questo livello di radiazione infrarossa, e produrrà una variazione di stato segnalata dal modulo PIR. Non dobbiamo preoccuparci di come il modulo funzioni al suo interno. Ciò che ci interessa sono soltanto i suoi tre pin, che utilizzeremo per collegarlo al Raspberry Pi.

Colleghiamo il sensore

Prima di accendere il Raspberry Pi, occorre collegare il modulo PIR.

Utilizzando i tre cavetti jumper femmina-femmina, dovrete collegare ogni pin del modulo a pin opportuni sul Raspberry Pi come indicato di seguito:

  1. collegate il pin VCC del sensore PIR al pin 5V del Raspberry Pi. Questo pin fornisce l'alimentazione al sensore PIR;
  2. collegate il pin GND del sensore PIR a un qualunque pin Ground sul Raspberry Pi. Questo pin completa la sezione di alimentazione;
  3. collegate il pin OUT del sensore PIR al GPIO pin 4 del Raspberry Pi. Il livello di tensione su questo pin indica lo stato di rilevamento del movimento o meno (Figura 4).
Fonte: www.raspberrypi.org

Figura 4: Collegamento del sensore PIR alla Raspberry Pi [Fonte: www.raspberrypi.org]

Testiamo il sensore di movimento

Utilizzeremo il linguaggio di programmazione Python per scrivere il codice che rileverà il movimento, e visualizzerà qualche log di testo; estenderemo poi il programma in modo tale da includere la gestione del modulo fotocamera. Il programma è abbastanza semplice. Inizialmente verranno configurati i pin di GPIO della Raspberry Pi, in modo tale che il pin 4 sia un pin di ingresso; il suo compito sarà quello di indicare quando il modulo PIR ha rilevato un movimento. Dovremo controllare continuamente lo stato del pin, per cui utilizzeremo un loop while True. Come sappiamo si tratta di un loop infinito, per cui il programma continuerà a girare sino a quando verrà interrotto manualmente con la sequenza di tasti Ctrl + F6.

Aprite IDLE (Menu>Programming>Python3 (IDLE)) e copiate il codice seguente.

from gpiozero import MotionSensor

pir = MotionSensor(4)
while True:
    if pir.motion_detected:
        print("Motion detected!")

Salvate poi il file e premete F5 per eseguirlo.

Ogni volta che il sensore PIR rileva un movimento, dovrebbero apparire nella shell IDLE le parole Motion detected!. Premete Ctrl + F6 quando volete interrompere l'esecuzione del programma.

Fonte: www.raspberrypi.org

Figura 5: Componenti nel sensore PIR [Fonte: www.raspberrypi.org]

Sul modulo PIR potete osservare la presenza di due componenti color arancio (figura 5) con un incavo a croce. Si tratta di due potenziometri che permettono di regolare, rispettivamente, la sensibilità del sensore e il tempo di rilevamento del movimento. Inizialmente dovrete impostare la sensibilità al massimo e il tempo al minimo, per poi aggiustarli in base alle vostre preferenze a livello pratico.

Impostazione fotocamera

Prima di proseguire con il progetto, occorre collegare la fotocamera. Dovrete eseguire questa operazione prima di accendere il Pi, oppure, se è già acceso, fermarlo digitando sudo-halt.

Seguite queste istruzioni in merito all'impostazione e alla configurazione della fotocamera. Fermatevi non appena avrete potuto sperimentare con successo alcuni dei comandi di esempio.

Infine, se siete riusciti a procurarvene uno, installate il supporto per la fotocamera. Quest'ultimo aiuterà a orientare la fotocamera verso la parte desiderata della camera.

Programmiamo la fotocamera

A questo punto siamo pronti per estendere il nostro programma in modo tale da aggiungere la funzionalità di controllo della fotocamera. Per iniziare, cominciamo a visualizzare ciò che la fotocamera vede quando il movimento viene rilevato; imposteremo la registrazione su file successivamente.

Dovremo anzitutto aggiungere l'istruzione import picamera all'inizio del codice; questa permetterà al nostro programma di accedere al codice pre-costruito per il controllo del modulo fotocamera. Dichiareremo successivamente l'oggetto camera, che fornisce tutte le funzioni necessarie per controllare la fotocamera. All'interno del ciclo while possiamo poi far partire la preview ogni volta che viene rilevato un movimento.

Copiate e incollate, oppure inserite a mano, il codice seguente:

from gpiozero import MotionSensor
from picamera import PiCamera

camera = PiCamera()
pir = MotionSensor(4)
while True:
    pir.wait_for_motion()
    camera.start_preview()
    pir.wait_for_no_motion()
    camera.stop_preview()

Registrazione e riproduzione del video

Possiamo ora aggiungere del codice per registrare il video su file, e per poterlo riprodurre in un momento successivo. Se gli intrusi nella vostra stanza sono più di uno, vorrete catturare su video ciascuno di essi, e non solo quello introdottosi per ultimo. Per fare ciò, ci occorre un modo per generare un nuovo file automaticamente ogni volta che un movimento viene rilevato. Il modo più semplice e sicuro per realizzare ciò è quello di creare ogni volta un file nel cui nome siano presenti riferimenti alla data e all'ora. Per esempio, se la data corrente corrisponde all'11 febbraio 2014, ore 10:24 AM e 18 secondi, il nome del file dovrebbe essere del tipo: 2014-02-11_10.24.18.h264. Viene quindi utilizzato il formato YEAR-MONTH-DAY_HOUR.MINUTE.SECOND.h264; h264 si riferisce al formato del video in esso registrato, ed è lo stesso formato utilizzato su YouTube. Dovremo importare il modulo Python datetime e scrivere una funzione per generare il nome del file. Si potranno a questo punto utilizzare i comandi per avviare e interrompere la registrazione utilizzando il nome del file generato.

Copiate e incollate, oppure inserite manualmente il seguente codice:

from gpiozero import MotionSensor
from picamera import PiCamera
from datetime import datetime

camera = PiCamera()
pir = MotionSensor(4)
while True:
    pir.wait_for_motion()
    filename = datetime.now().strftime("%Y-%m-%d_%H.%M.%S.h264")
    camera.start_recording(filename)
    pir.wait_for_no_motion()
    camera.stop_recording()

Salvate ed eseguite lo script. Potete uscire una volta che è stato testato e sono stati prodotti alcuni video.

Playback

Se guardate nel file browser, potrete osservare che sono stati creati alcuni file. Potete riprodurli nel terminale (Ctrl+Alt+t) digitando:

omxplayer <file> -o hdmi

Per esempio:

omxplayer 2014-02-11_10.24.18.h264 -o hdmi

Oppure potete rinominare il file in mp4 e aprirlo nel web browser Epiphany.

Sviluppi futuri

Anche se a questo punto il rilevatore di genitori è completo, perchè non passare a un livello successivo utilizzandolo in modalità sicura? Per fare ciò potete disabilitare il LED presente sulla fotocamera, che si accende ogni volta che lo script Python viene eseguito. Occorre in questo caso modificare il file di configurazione del Raspberry Pi inserendo il seguente comando:

sudo nano /boot/config.txt

Aggiungete la seguente linea di codice alla fine del file:

disable_camera_led=1

Premete Ctrl + O per salvare il file e Ctrl + X per uscire. Le modifiche avranno effetto solo dopo un reboot, per cui inserite anche il seguente comando:

sudo reboot

Se desiderate lasciare il monitor collegato e acceso mentre il programma sta girando, è buona idea modificare il codice Python in modo tale da disabilitare la camera preview. Utilizzate il carattere # all'inizio di ogni riga per commentarla. Potreste anche decidere di eseguire il vostro programma Python con un login differente. Per fare ciò, premete ALT - F2 prima del login; verrà mostrato il prompt relativo a un nuovo login, eseguite l'accesso e lanciate il programma Python. Se ora premete ALT - F1 verrete rediretti al consueto prompt di login.

Link

Link all'articolo originale: https://www.raspberrypi.org/learning/parent-detector/

 

Scarica subito una copia gratis

2 Commenti

  1. Avatar photo Maurizio 29 Giugno 2016
  2. Avatar photo Ernesto Sorrentino 30 Giugno 2016

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend