Webcam Reflex - ARI Vittorio Veneto

Vai ai contenuti
Progetti > Varie
Webcam Reflex
by IW3HNP - Marzo 2021
A novembre 2020 è stata installata presso il Rifugio Città di Vittorio Veneto (Monte Pizzoc), una nuova webcam basata su fotocamera reflex e per coloro che fossero interessati agli aspetti tecnici, di seguito si trova una descrizione dettagliata della sua realizzazione.
Introduzione
Il progetto di utilizzare una fotocamera reflex come webcam, anziché una telecamera per videosorveglianza o un fotocamera compatta, nacque qualche anno fa, dopo che Angelo IK3JLT mi fece conoscere il sito Foto-Webcam.eu. Rimasi subito colpito dalle immagini ottenute dalle reflex, soprattutto in notturna e fu subito chiaro che quella sarebbe stata la strada da seguire. Cercai da prima una soluzione pronta all'uso e già collaudata, così da minimizzare lo sforzo ed i tempi di realizzazione, ma i tentativi fatti con quanto allora disponibile sul mercato non diedero i risultati sperati, così ben presto mi resi conto che avrei dovuto rimboccarmi le maniche ed arrangiarmi. Viste però le mie basiche conoscenza informatiche non sarei andato certo lontano se sulla strada non avessi incontrato il sito di Max Piantoni, a cui vanno i miei complimenti per lo splendido lavoro fatto e soprattutto per averlo condiviso nel web. Nel suo sito sono infatti descritte con dovizia di particolari tutte le operazioni necessarie ad installare e configurare il Raspberry per realizzare una webcam basata su fotocamere compatte Canon. Il passaggio dalle compatte ad una reflex Canon è stato piuttosto semplice, grazie anche alle informazioni trovate su Foto-Webcam.eu (...e di un buon traduttore online!). Infine un sentito ringraziamento và poi a Paolo IK3QTC, che trascinato in quest'avventura ha sviluppato tutto il codice necessario alla visualizzazione delle foto sul sito, inclusa la possibilità di navigare con una barra di scorrimento, eseguire l'avanzamento automatico (effetto timelapse) e richiamare le foto dall'archivio immagini. Proprio un bel lavoro!

Fig. 1 - Foto dell'interno a realizzazione ultimata.

Perchè una fotocamera reflex come webcam?
Ormai sono sempre di più i luoghi che possono essere osservati tramite una webcam ed il loro numero è in costante aumento, la stragrande maggioranza delle webcam però ha in comune una cosa: la pessima qualità delle immagini, specialmente notturne. Questo perché nella maggior parte dei casi vengono utilizzate delle comuni telecamere IP, che in termini di definizione, gestione della luminosità, di gamma dinamica e rumore non sono certo allo stato dell'arte (anche se c'è da riconoscere che ultimamente la qualità di questi dispositivi è notevolmente migliorata). Una soluzione alternativa del recente passato è stata quella di utilizzare fotocamere compatte, in genere Canon, gestite tramite Raspberry. Queste garantiscono ottimi risultati diurni, ma a causa dei limitati tempi di esposizione (che in genere non superano i 30 secondi) non consentono di ottenere risultati altrettanto soddisfacenti negli scatti notturni. Le fotocamere digitali reflex invece, avendo sensori più grandi e di miglior qualità oltre che ottiche più luminose e tempi di scatto lunghissimi, garantiscono immagini notturne straordinariamente buone, possiedono inoltre una robusta meccanica che le rende idonee allo scopo (purché sistemate in un contenitore stagno), non ultimo sono ormai reperibili sul mercato dell'usato a cifre abbordabili.
Schema elettrico
Nello schema di figura 2 si possono vedere gli elementi necessari alla realizzazione. Il cuore del sistema è costituito dal mini-computer Raspberry Pi 3 Model B e dalla fotocamera Canon EOS 1100 D. A questi si aggiungono una sonda di temperatura/umidità (per il monitoraggio delle condizioni interne al contenitore) e un modulo relè, uno dei quali è usato per gestire da remoto lo spegnimento della fotocamera (in caso si renda necessario un riavvio forzato) e l'altro per accendere il riscaldatore (usato per "sbrinare" il vetro davanti l'obiettivo nel caso di neve o appannamento esterni, collaudato positivamente quest'inverno). L'alimentazione è a 24V e proviene dalle batterie che sono collegate all'impianto fotovoltaico installato sul rifugio. La tensione viene prima filtrata per eliminare disturbi e radiofrequenza, quindi regolata da due convertitori DC-DC (step-down), uno a 7,2 V per la Canon e l'altro a 5 V per il Raspberry.
Fig. 2 - Schema elettrico
Realizzazione pratica
Buona parte degli elementi sono acquistabili già assemblati e funzionati, come il Raspberry, i due convertitori DC-DC ed il modulo relè. Il filtro invece è stato realizzato assemblando i componenti su una basetta millefori, mentre per il riscaldatore i componenti sono stati montati direttamente sull'aletta di raffreddamento. Per la cronaca, esistono metodi più raffinati per realizzare il riscaldatore (qui un esempio), ma per una questione di costi e tempistiche alla fine ho optato per quello che si vede in foto (che funziona bene ugualmente!).

Fig. 3 - A destra si può notare il blocco alettato del modulo riscaldatore, sotto di esso si intravvedono i moduli step-down.

Fig. 4 - A sinistra si può notare il Raspberry, sotto di esso si intravvede il modulo relè ed a lato il filtro per l'alimentazione. Si noti anche la sonda di temperatura/umidità fissata tramite una sottile piastrina in plastica alla slitta porta flash della fotocamera.

Per quanto strano possa sembrare, il contenitore si è dimostrato l'elemento più critico di tutta la realizzazione. Dal momento che quelli appositamente predisposti per le webcam non hanno dimensioni adeguate ad accogliere una reflex, ho cercato da prima un'altro contenitore metallico stagno (IP67 o IP68), ma pare che non ne esistano di altezza sufficiente a contenere una reflex, ripiegando poi verso un contenitore plastico IP66 resistente ai raggi UV (della OBO), che però ha mostrato i suoi limiti non appena installato all'esterno. Al primo temporale infatti si sono manifestate copiose infiltrazioni d'acqua e solo dopo svariate prove sono riuscito a capirne le cause e a porvi rimedio. La scarsa tenuta è legata al design del contenitore, che presenta una fessura orizzontale tra coperchio e contenitore, questa favorisce l'ingresso ed il ristagno d'acqua (essenzialmente per effetto capillarità). Questo aspetto, sommato al cattivo funzionamento della guarnizione integrata al coperchio, fa sì che ogni volta che si crea una certa differenza di pressione tra l'interno e l'esterno del contenitore, ad esempio dovuta a fenomeni atmosferici significativi, l'acqua viene praticamente "risucchiata" all'interno del contenitore. Il problema è stato risolto applicando una guarnizione aggiuntiva per sigillare la fessura e creando una "cappottina" per evitare infiltrazioni dalle viti del coperchio (altro punto dolente). L'insieme dei due elementi si è dimostrato per il momento sufficiente allo scopo.

Installazione sistema operativo e programmi sul Raspberry
Si faccia riferimento alle istruzioni riportate sul sito di Max Piantoni per l’installazione del sistema operativo e per la sua configurazione iniziale, nonché per l'installazione dei programmi necessari alla gestione della fotocamera, che per comodità riassumo di seguito:
  • Raspbian, sistema operativo (derivazione di Debian Linux);
  • Gphoto2, programma per la gestione della fotocamera;
  • NCFTP, programma per l'invio delle immagini tramite FTP al sito/hosting;
  • ImageMagick, programma per la gestione delle immagini;
  • PHP7 e librerie varie;
Facendo sempre riferimento alle istruzioni presenti nel sito sopra indicato, passiamo ora a descrivere i vari script necessari al funzionamento della webcam reflex, che sono stati rivisti e adattati al caso specifico e che nell'ordine sono:
  1. scatto_hires.sh, scatta la foto in alta risoluzione, ne sovrappone la grafica e le scritte e prepara la miniatura.
  2. dn.php, calcola le effemeridi di alba e tramonto per poter modificare i parametri di scatto tra giorno e notte.  
  3. upload_slideshow.sh, rinomina la foto con ora e minuti e la carica nella cartella "slideshow" del vostro sito.
  4. upload_slideshowmini.sh, rinomina la miniatura con ora e minuti e la carica nella cartella "slideshow" del vostro sito.
  5. mdir_slideshow.sh, crea la cartella giorno mese e anno all'interno della cartella "slideshow".

Script 1: scatto_hires.sh
Il primo script è in linguaggio Bash. Per la sua creazione è necessario digitare dal terminale sudo nano scatto_hires.sh, si aprirà così la schermata vuota dell'editor nano in cui si andrà a copiare il codice riportato sotto, salviamo poi con ctrl+x, confermando la scelta con si (o yes, se la lingua installata è l'inglese). In verde sono evidenziati i commenti utili a comprendere il funzionamento del codice, in blu la grafica da sovrapporre all'immagine ed in viola i testi, che andranno modificati in base alle proprie esigenze:
#!/bin/bash

dn=$(php /home/pi/dn.php)

echo $dn "$uT"
if [ $dn = "1" ]
then
echo "Abilito la modalità giorno"

############### Reflex Monte Pizzoc ################

#### Imposto i parametri di scatto della fotocamera Canon EOS 1100D e salvo la foto in reflex0.jpg ####
gphoto2 --camera "Canon EOS 1100D" --set-config-value iso=Auto --set-config-index imageformat=1 \
--set-config-index picturestyle=2 --set-config-index whitebalance=0 --capture-image-and-download --force-overwrite --filename /home/pi/reflex0.jpg

#### HIRES - aggiungo le bande con il logo e salvo in reflexHI1.png (usando un formato lossless per minimizzare la perdita di qualità) ####
/usr/bin/convert /home/pi/reflex0.jpg /home/pi/Bande_4272x2848.png -geometry +0+0 -composite /home/pi/reflexHI1.png

#### HIRES - aggiungo la data e l'ora e salvo in reflexHI2.png (usando un formato lossless per minimizzare la perdita di qualità) ####
/usr/bin/convert /home/pi/reflexHI1.png -pointsize 48 -fill white -gravity Southwest \
-draw "text 390,22 \"$(date "+%H:%M  %d-%m-%Y"|sed -e ' s/\"/\\\"/g' )\"" /home/pi/reflexHI2.png

#### HIRES - aggiungo una descrizione in basso nella foto e salvo in reflexHI3.png (usando un formato lossless per minimizzare la perdita di qualità) ####
/usr/bin/convert /home/pi/reflexHI2.png -font /usr/share/fonts/truetype/msttcorefonts/Arial.ttf -pointsize 48 \
-draw "gravity Southwest \
fill white text 26,94 'Monte Pizzoc (1.575m slm), panorama sud verso la pianura - TV, Veneto, Italia' \
fill white text 26,22 'Immagine delle:' \
fill white text 26,2780 'Foto scattata con Canon EOS 1100D (12 MP)' \
fill white text 2500,2780 'Associazione Radioamatori Italiani, Sezione di Vittorio Veneto - www.arivv.it' " \
/home/pi/reflexhires.jpg

#### Miniature - ridimensiono la foto reflex0 a 150x100 come miniatura per lo slideshow ####
/usr/bin/convert /home/pi/reflex0.jpg -resize 150x100 /home/pi/reflexmini.jpg

exit 0

else
if [ $dn = "2" ]
then
echo "Abilito la modalità notte"

############### Reflex Monte Pizzoc ################

#### Imposto i parametri di scatto della fotocamera Canon EOS 1100D e salvo la foto in reflex0.jpg ####
gphoto2 --camera "Canon EOS 1100D" --set-config-value iso=800 --set-config-index imageformat=1 \
--set-config-index picturestyle=3 --set-config-index whitebalance=0 --capture-image-and-download --force-overwrite --filename /home/pi/reflex0.jpg

#### HIRES - aggiungo le bande con il logo e salvo in reflexHI1.png (usando un formato lossless per minimizzare la perdita di qualità) ####
/usr/bin/convert /home/pi/reflex0.jpg /home/pi/Bande_4272x2848.png -geometry +0+0 -composite /home/pi/reflexHI1.png

#### HIRES - aggiungo la data e l'ora e salvo in reflexHI2.png (usando un formato lossless per minimizzare la perdita di qualità) ####
/usr/bin/convert /home/pi/reflexHI1.png -pointsize 48 -fill white -gravity Southwest \
-draw "text 390,22 \"$(date "+%H:%M  %d-%m-%Y"|sed -e ' s/\"/\\\"/g' )\"" /home/pi/reflexHI2.png

#### HIRES - aggiungo una descrizione in basso nella foto e salvo in reflexHI3.png (usando un formato lossless per minimizzare la perdita di qualità) ####
/usr/bin/convert /home/pi/reflexHI2.png -font /usr/share/fonts/truetype/msttcorefonts/Arial.ttf -pointsize 48 \
-draw "gravity Southwest \
fill white text 26,94 'Monte Pizzoc (1.575m slm), panorama sud verso la pianura - TV, Veneto, Italia' \
fill white text 26,22 'Immagine delle:' \
fill white text 26,2780 'Foto scattata con Canon EOS 1100D (12 MP)' \
fill white text 2500,2780 'Associazione Radioamatori Italiani, Sezione di Vittorio Veneto - www.arivv.it' " \
/home/pi/reflexhires.jpg

#### Miniature - ridimensiono la foto reflex0 a 150x100 come miniatura per lo slideshow  ####
/usr/bin/convert /home/pi/reflex0.jpg -resize 150x100 /home/pi/reflexmini.jpg

exit 0

fi
fi

exit 0
Ora rendiamo lo script eseguibile con il comando chmod 777 scatto_hires.sh. Quindi, per fare in modo che venga eseguito ad intervalli regolari, andiamo ad aggiungerlo alla funzione di crontab. Digitiamo sudo crontab -e ed inseriamo dopo l'ultima riga il codice che segue, salviamo poi con ctrl+x, confermando con si (o yes):
15,30,45,00 * * * * /home/pi/./scatto_hires.sh
In questo modo la fotocamera scatterà ogni 15 minuti, cioè al 15°, al 30°, al 45° ed al minuto 00 di ogni ora.

Script 2: dn.php
Lo script successivo è in linguaggio PHP ed è stato preso dal sito http://www.meteoliri.it/. Per la sua creazione digitiamo sudo nano dn.php e nella schermata vuota dell'editor nano copiamo il codice riportato sotto, salviamo poi con ctrl+x, confermando con si (o yes). Le coordinate di latitudine e longitudine sono espresse in gradi e andranno modificate in base alla posizione della vostra webcam. Agendo invece sul valore di alba (sunrise) e tramonto (sunset) si potrà anticipare o posticipare il passaggio dei parametri di scatto da notte a giorno e viceversa. Nel mio caso l'impostazione è +60 minuti per l'alba e -60 minuti per il tramonto, ma sono da regolare in base all'esposizione della reflex. I parametri da modificare sono stati evidenziati in viola per maggior chiarezza:
#!/usr/bin/php
<?php
$lat=46.04;
$long=12.34;
date_default_timezone_set('Europe/Rome');
$uT=time();
$sun_info = date_sun_info($uT, $lat,$long);
$sunrise = $sun_info['civil_twilight_begin'];
$sunset = $sun_info['civil_twilight_end'];
$alba = $sunrise+60;
$tramonto = $sunset-60;
if ($uT>$alba && $uT<$tramonto) echo "1";
else
echo "2";
?>

Script 3: upload_slideshow.sh
Il terzo script è ancora in linguaggio Bash e gestisce la rinomina della foto in alta risoluzione con ora e minuti ed il suo caricamento nella cartella "slideshow" del nostro sito (che dovremmo aver già creato). Digitiamo quindi sudo nano upload_slideshow.sh ed incolliamo il codice che segue, ricordiamoci di sostituire i testi evidenziati in viola con le nostre credenziali di accesso al sito via FTP, poi salviamo con ctrl+x, confermando con si (yes):
#!/bin/bash
#### script per rinominare la foto reflexhires.jpg con ora e minuti e caricarla nella cartella slideshow del proprio sito ####

cd /home/pi/
ORA=`date '+ %-H'`
MIN=`date '+ %-M'`
let ORA=ORA*100
TEMPO=$[$ORA+$MIN]
today=$(date +%Y-%m-%d)
temsca=$(date +%y-%m-%d_%H-%M)
echo $temsca
sleep 150
if [ $TEMPO -ge 0000 ] && [ $TEMPO -le 2350 ]
then        
cp reflexhires.jpg  $temsca".jpg"
ncftpput -R -v -u username -p password myftpsyte /slideshow/$today
$temsca".jpg"
rm $temsca".jpg"
fi

exit 0
Rendiamolo ora eseguibile con il comando chmod 777 upload_slideshow.sh e usiamo ancora la funzione crontab per fare in modo che lo script venga eseguito ad intervalli regolari, digitando sudo crontab -e ed inserendo dopo l'ultima riga il codice che segue, salviamo poi con ctrl+x, confermando la scelta con sì (o yes):
15,30,45,00 * * * *   /home/pi/./upload_slideshow.sh.
In questo modo lo script sarà eseguito al 15°, al 30°, al 45° e al minuto 00 di ogni ora, ma di fatto la rinomina ed il caricamento della foto avverranno con un ritardato di circa 2 minuti e mezzo (funzione sleep 150 presente nel codice), per dare modo allo script “scatto_hires.sh” di essere completato anche durante la notte, quando i tempi di scatto sono particolarmente lunghi (oltre il minuto) e ai quali si sommano i tempi di elaborazione per la riduzione automatica del rumore (qual’ora la funzione sia abilitata).

Script 4: upload_slideshowmini.sh
Il quarto script, molto simile al precedente, si occupa di gestire la rinomina della miniatura con ora e minuti ed il suo caricamento nella cartella "slideshow" del nostro sito (che dovremmo aver già creato). Digitiamo quindi sudo nano upload_slideshowmini.sh ed incolliamo il codice che segue, ricordiamoci di inserire le nostre credenziali di accesso al sito via FTP sostituendole ai testi evidenziati in viola, poi salviamo con ctrl+x, confermando con si (yes):
#!/bin/bash
#### script per rinominare la foto reflexmini.jpg con ora e minuti e caricarla nella cartella slideshow del proprio sito ####

cd /home/pi/
ORA=`date '+ %-H'`
MIN=`date '+ %-M'`
let ORA=ORA*100
TEMPO=$[$ORA+$MIN]
today=$(date +%Y-%m-%d)
temsca=$(date +%y-%m-%d_%H-%M)
echo $temsca
sleep 130
if [ $TEMPO -ge 0000 ] && [ $TEMPO -le 2350 ]
then        
cp reflexmini.jpg "miniatura"$temsca".jpg"
ncftpput -R -v -u username -p password myftpsyte /slideshow/$today
"miniatura"$temsca".jpg"
rm "miniatura"$temsca".jpg"
fi

exit 0
Rendiamlo ora eseguibile con il comando chmod 777 upload_slideshowmini.sh e usiamo sempre la funzione crontab per fare in modo che sia eseguito ad intervalli regolari. Digitiamo quindi sudo crontab -e ed inseriamo dopo l'ultima riga il codice che segue, salviamo poi con ctrl+x, confermando la scelta con sì (o yes):
15,30,45,00 * * * *   /home/pi/./upload_slideshowmini.sh.
Come nel caso precedente, questo script sarà eseguito al 15°, al 30°, al 45° e al minuto 00 di ogni ora, ma di fatto la rinomina ed il caricamento della miniatura avverranno con un ritardato di poco più di 2 minuti (funzione sleep 130 presente nel codice), per dare modo allo script “scatto_hires.sh” di essere completato anche durante le ore notturne, quando i tempi di scatto sono particolarmente lunghi (oltre il minuto) e ai quali si sommano anche i tempi di elaborazione per la riduzione automatica del rumore (qual’ora la funzione sia abilitata).

Script 5: mdir_slideshow.sh
L'ultimo script, sempre in codice Bash, si occupa di creare la cartella giorno-mese-anno all'interno della cartella "slideshow" nel nostro sito, digitiando sudo nano mdir_slideshow.sh ed incollando il codice che segue. Ricordiamoci sempre di inserire le nostre credenziali di accesso al sito via FTP, sostituendole ai testi evidenziati in viola e salviamo poi con ctrl+x, confermando con si (yes):
#!/bin/bash
#### script per creare ogni giorno la cartella anno-mese-giorno all'interno della cartella slideshow nel ns. sito ####

today=$(date +%Y-%m-%d)
mkdir $today
chmod 777 $today

ncftpput -R -v -u username -p password myftpsyte /slideshow/$today
rmdir $today

exit 0
Rendiamlo ora eseguibile con il comando chmod 777 mdir_slideshow.sh e usiamo ancora una volta la funzione crontab per fare in modo che lo script sia eseguito alle 00.00 di ogni giorno. Digitiamo quindi sudo crontab -e ed inseriamo dopo l'ultima riga il codice che segue, salviamo poi con ctrl+x, confermando la scelta con sì (o yes):
00 0 * * *   /home/pi/mdir_slideshow.sh
Se tutto è stato svolto correttamente, le seguenti quattro righe dovrebbero costituire la parte finale del codice presente nella funzione crontab:
15,30,45,00 * * * *   /home/pi/./scatto_hires.sh
15,30,45,00 * * * *   /home/pi/./upload_slideshowmini.sh
15,30,45,00 * * * *   /home/pi/./upload_slideshow.sh
00 0 * * * /home/pi/mdir_slideshow.sh

Quale fotocamera usare?
Per questo aspetto faccio riferimento al sito Foto-Webcam.eu, che ritengo senz'altro autorevole in materia, visto che ad oggi ha realizzato ed installato oltre 200 webcam reflex in Europa e nel mondo. Senza dubbio le fotocamere più adatte ad essere utilizzate come webcam reflex sono le Canon e per due importanti ragioni:
  • sono controllabili da remoto, sia per quanto concerne lo scatto che nelle impostazioni (incluso il reset);
  • hanno un funzionamento affidabile, cioè ritornano ad uno stato definito dopo un'interruzione di corrente, lasciando anche l'obiettivo nella posizione impostata;
I modelli più consigliati per via delle loro caratteristiche sono la Canon EOS 1100D e la Canon EOS 1200D.

Impostazioni Canon EOS 1100D
Per ottenere un funzionamento automatico ottimale è necessario effettuare diverse impostazioni direttamente nel menu della fotocamera. Sebbene alcuni parametri possono anche essere modificati da remoto (come risoluzione e ISO), la maggior parte di essi deve essere impostato prima di installare la fotocamera. Sempre facendo riferimento alle informazioni disponibili sul sito Foto-Webcam.eu, riporto di seguito i parametri da impostare:
  • La modalità P (esposizione automatica) si è dimostrata il miglior compromesso:

  • Lo stabilizzatore dell'immagine (se presente) dovrebbe rimanere spento (OFF) ed il fuoco impostato su manuale (MF):

  • Nel menu 1 deve essere impostata la risoluzione (alta qualità, formato JPEG) e il flash (spento):



  • Il menu 2 può rimanere con le impostazioni predefinite:


  • Il menu 3 può rimanere con le impostazioni predefinite:


  • Il menu 4 può rimanere con le impostazioni predefinite:

  • I menu 5 e 6 (in blu) influiscono solo sulla riproduzione e anche questi possono rimanere con le impostazioni predefinite.

  • Nel menu 7 lo spegnimento automatico deve essere spento (OFF, molto importante!), così come la rotazione (OFF, in realtà non importante):


  • Il menu 8 può rimanere con le impostazioni predefinite, è possibile però abbassare la luminosità dello schermo LCD per aiutare i consumi:  


  • Il menu 9 richiama delle funzioni personalizzate, come la riduzione del rumore:




Le informazioni qui riportate si basano sulle esperienze acquisite e sulla lettura di svariati siti web (oltre a quelli già indicati nell'articolo) ed hanno un fine puramente divulgativo, non intendono costituire un manuale di costruzione.

73 di IW3HNP, Luca

Ultimo aggiornamento 15 Marzo 2021
Web designer IW3HNP
Copyright © 2016 Sito Web ARI Vittorio Veneto - IQ3VV, tutti i diritti riservati.
Privacy Policy
Torna ai contenuti