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);
- un sensore di movimento PIR (figura 2);
- 3 cavetti jumper femmina-femmina (Figura 3).
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:
- collegate il pin VCC del sensore PIR al pin 5V del Raspberry Pi. Questo pin fornisce l'alimentazione al sensore PIR;
- collegate il pin GND del sensore PIR a un qualunque pin Ground sul Raspberry Pi. Questo pin completa la sezione di alimentazione;
- 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).
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.
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
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/
Con la Raspberry Pi 3 che ha il modulo Wireless incorporato si potrebbe rendere il video accessibile online…oppure inviare una schermata della camera ad ogni istante di tempo da definire, o comunque in accordo al segnale di motion detection. Interessante progetto con tanti sviluppi futuri!
Un bel progetto, impressionante ancora di più la semplicità di programmazione; grazie alle librerie pronte all’uso. Ottimo da utilizzare come “antifurto” per piccoli ambienti.