Webcam Reflex - ARI Vittorio Veneto

Vai ai contenuti
Progetti > Varie
Webcam Reflex
by IW3HNP - Dicembre 2020
A novembre 2020 è stata installata presso il Rifugio Città di Vittorio Veneto (Monte Pizzoc), una nuova webcam reflex e per coloro 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 compatta o una camera da videosorveglianza, nacque qualche anno fa, dopo che Angelo IK3JLT mi fece conoscere il sito foto-webcam.eu. Rimasi subito colpito dalle immagini ottenibili dalle webcam reflex, soprattutto dalle foto notturne e fu subito chiaro che quella sarebbe stata la strada da perseguire. Cercai quindi una soluzione già collaudata per minimizzare sia lo sforzo che i tempi di realizzazione, ma i tentativi fatti con quanto allora disponibile non diedero i risultati sperati, così ben presto mi resi conto che avrei dovuto rimboccarmi le maniche. Viste però le mie conoscenza informatiche piuttosto basiche e nessuna esperienza col Raspberry, non sarei andato certo lontano se sulla mia strada non avessi incontrato il sito di Max Piantoni (che ringrazio vivamante), in cui sono descritte con dovizia di particolari tutte le operazioni necessarie ad installare e configurare a dovere il Raspberry con tutti i programmi necessari alla gestione di una fotocamera Canon. Un'altro sentito ringraziamento và a Paolo IK3QTC, che trascinato in quest'avventura ha sviluppato tutto il codice necessario a visualizzare sul sito web le foto scattate dalla webcam reflex.

Fig. 1 - Foto della realizzazione ultimata.

Schema elettrico
Nello schema di figura 2 si possono vedere gli elementi necessari alla realizzazione. Il cuore del sistema è costituito dalla fotocamera Canon EOS 1100 D e dal mini-computer Raspberry Pi 3 Model B. A quest'ultimo sono collegati anche una sonda di temperatura/umidità (per il monitoraggio costante dell'interno del contenitore) e un modulo con due relè, uno 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). L'alimentazione stabilizzata è fornita da due convertitori DC-DC (step-down) regolati a 7,2 V per la Canon e 5 V per il Raspberry. Sull'alimentazione è presente anche un filtro per bloccare eventuali interferenze esterne.  

Fig. 2 - Schema elettrico
Realizzazione pratica
Buona parte degli elementi sono aquistabili già assemblati e funzionati, come il Raspberry, i due convertitori DC-DC ed il modulo relè. Mentre il filtro per l'alimentazione è stato assemblato su una basetta millefori, mentre i componenti del riscaldatore sono stati montati direttamente sull'aletta di raffreddamento. Per la cronaca, esistono profilati tubolari con alettatura interna che risultano decisamente più adatti allo scopo (qui un esempio) e costituiscono senz'altro una soluzione più raffinata, 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.

Anche se potrebbe non sembrare, il contenitore si è dimostrato l'elemento più critico di tutta la realizzazione. Dal momento che quelli appositamente predisposti per le webcam non hanno le dimensioni adeguate ad accogliere una reflex, ho cercato un'altro contenitore metallico stagno (IP67 o IP68), ma anche qui pare che non ce ne siano di altezza sufficiente a contenere una reflex. Così alla fine ho dovuto ripiegare verso un contenitore plastico IP66, resistente ai raggi UV (OBO), che però ha mostrato tutti i suoi limiti non appena il sistema è stato installato in ambiente esterno. Infatti, sin dal primo temporale ho riscontrato copiose infiltrazioni d'acqua e ci sono volute diverse prove per capire a fondo il problema e porvi rimedio. La scarsa tenuta è essenzialmente legata al design del contenitore, che ha una fessura tra coperchio e contenitore che favorisce il ristagno d'acqua, che poi per effetto capillarità, per la scarsa tenuta della guarnizione e per la differenza di pressione che si genera tra interno ed esterno durante fenomeni atmosferici intensi, viene praticamente "risucchiata" all'interno del contenitore.

Installazione sistema operativo e programmi sul Raspberry
Si faccia riferimento alle istruzioni riportate sul sito di Max Piantoni per eseguire 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 le librerie varie;

Script per la gestione dello scatto
Facendo sempre riferimento alle istruzioni presenti nel sito sopra indicato, passiamo ora a descrivere lo script in linguaggio Bash per la gestione dello scatto. Per la creazione del file è necessario digitare dal terminale sudo nano scatto_hires.sh, si aprirà così la schermata vuota dell'editor nano in cui andare a copiare il codice riportato sotto (in verde sono evidenziati i commenti per comprenderne meglio il funzionamento del codice). Ovviamente le righe contenenti le informazioni da visualizzare sulla foto andranno modificate in base alle proprie esigenze:
scatto_hires.sh
#!/bin/bash

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

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

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

#### parametri di scatto della fotocamera Canon EOS 1100D ####
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  ####
/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'orario e salvo in reflexHI2.png ####
/usr/bin/convert /home/pi/reflexHI1.png -pointsize 46 -fill white -gravity Southwest \
-draw "text 410,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 ####
/usr/bin/convert /home/pi/reflexHI2.png -font /usr/share/fonts/truetype/msttcorefonts/Arial.ttf -pointsize 46 \
-draw "gravity Southwest \
fill white text 26,92 'Monte Pizzoc (1.575m slm), panorama sud verso la pianura - TV, Veneto, Italia' \
fill white text 26,22 'Immagine delle:' \
fill white text 26,2782 'Foto scattata con Canon EOS 1100D (12 MP)' \
fill white text 2550,2782 '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 ################

#### parametri di scatto della fotocamera Canon EOS 1100D ####
gphoto2 --camera "Canon EOS 1100D" --set-config-value iso=400 --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

#### 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

#### HIRES - aggiungo le bande con il logo e salvo in reflexHI1.png  ####
/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'orario e salvo in reflexHI2.png ####
/usr/bin/convert /home/pi/reflexHI1.png -pointsize 46 -fill white -gravity Southwest \
-draw "text 410,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 ####
/usr/bin/convert /home/pi/reflexHI2.png -font /usr/share/fonts/truetype/msttcorefonts/Arial.ttf -pointsize 46 \
-draw "gravity Southwest \
fill white text 26,92 'Monte Pizzoc (1.575m slm), panorama sud verso la pianura - TV, Veneto, Italia' \
fill white text 26,22 'Immagine delle:' \
fill white text 26,2782 'Foto scattata con Canon EOS 1100D (12 MP)' \
fill white text 2550,2782 'Associazione Radioamatori Italiani, Sezione di Vittorio Veneto - www.arivv.it' " \
/home/pi/reflexhires.jpg

exit 0

fi
fi

exit 0
Lo script successivo è in linguaggio PHP e gestisce il calcolo effemeridi di alba e tramonto, questo ci servirà per modificare i parametri di scatto della fotocamera tra il giorno e la notte. In questo caso il sito di origine è http://www.meteoliri.it/. Per la creazione del file è necessario digitare sudo nano dn.php, si aprirà così la schermata vuota dell'editor nano in cui copiare il codice riportato sotto, salviamo poi con ctrl+x, confermando con si (o yes se la lingua installata nel Raspberry è l'inglese). Le coordinate espresse in gradi per latitudine e longitudine andranno ovviamente modificate in base alla posizione finale della webcam:
dn.php
#!/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";
?>
Per fare in modo che lo script venga eseguito ad intervalli regolari andremo ad aggiungerlo alla funzione di crontab. Digitiamo quindi sudo crontab -e, si aprirà così la schermata dell'editor nano, a questo punto inseriamo dopo l'ultima riga il codice che segue. Così facendo la fotocamera scatterà ogni 15 minuti cioè al 15°, al 30°, al 45°, ed al minuto 00 di ogni ora: 15,30,45,00 * * * *    /home/pi/./scatto_hires.sh
Script per caricare le foto sul sito (hosting)
Il primo script in linguaggio Bash gestisce la rinomina della foto in alta risoluzione con ora e minuti e la salva nella cartella "slideshow" (che dovremmo aver già creato sul nostro sito). Le credenziali Ftp ed il percorso di salvataggio della foto sono riportati nella riga di codice che inizia con ncftpput e andranno modificate secondo le proprie esigenze. Digitiamo sudo nano upload_slideshow.sh ed incolliamo il codice che segue, poi salviamo con ctrl+x, confermando con si (yes):
rename_foto_giorno_hi.php
#!/usr/bin/php
#### Script per rinominare la foto reflexhires.jpg con ora e minuti per le foto del giorno nella cartella: foto_giorno ####
<?php
$filename="reflexhires.jpg";
$ora = date("H-i");
sleep(90);
$dir = "/home/pi/".$filename;
copy($dir, "/home/pi/foto_giorno/".$filename);
$new_file_name=$ora.'.'."jpg";
rename("/home/pi/foto_giorno/reflexhires.jpg", "/home/pi/foto_giorno/".$new_file_name);// rinomina
?>
Ora rendiamo lo script eseguibile con il comando chmod 777 upload_slideshow.sh. Per impostare l'esecuzione automatica dello script usiamo ancora una volta crontab, digitando sudo crontab -e, aggiungendo dopo l'ultima riga il codice 17,32,47,02 * * * *   /home/pi/./upload_slideshow.sh.
Con questa impostazione lo script sarà eseguito al 17°, al 32°, al 47° e al 2° minuto di ogni ora. La scelta di ritardare di 2 minuti il caricamento della foto rispetto al suo scatto nasce dall'osservazione che di notte l’esposizione può superare il minuto, a cui va aggiunto anche il tempo di elaborazione necessario a ridurre il rumore da lunga esposizione (funzionalità abilitata nella fotocamera usata):
Il secondo script  in linguaggio Bash gestisce invece la rinomina della miniatura con ora e minuti e la salva nella cartella "slideshow" (che dovremmo aver già creato sul nostro sito). Anche in questo caso le credenziali Ftp ed il percorso di salvataggio della foto sono riportati nella riga di codice che inizia con ncftpput e andranno modificate secondo le proprie esigenze. Digitiamo sudo nano upload_slideshowmini.sh e incolliamo il codice che segue, salviamo quindi con ctrl+x confermando con si (yes):
upload_foto_giorno_hi.sh
#!/bin/bash
#### script per rinominare la foto reflexhires.jpg con ora e minuti e salvarla nello slideshow ####
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 reflexhires.jpg  $temsca".jpg"
        ncftpput -R -v -u username -p password myftpsite /slideshow/$today $temsca".jpg"
        rm $temsca".jpg"
fi
exit 0
Dopo aver salvato lo script rendiamolo eseguibile con il comando chmod 777 upload_slideshow.sh. Come in precedenza andiamo ad usare crontab per automatizzare la sua esecuzione digitando sudo crontab -e, aggiungiamo quindi dopo l'ultima riga il codice: 17,32,47,02 * * * *   /home/pi/./ upload_slideshowmini.sh che in questo caso farà eseguire lo script al 17°, al 32°, al 47° e al 2° minuto di ogni ora.

Il terzo script in codice Bash si occupa di salvare una miniatura nella stessa cartella creata dal terzo script per lo slide show dell'archivio storico sul nostro sito.

upload_foto_giorno_hi.sh
Ultimo aggiornamento 8 Dicembre 2020
Web designer IW3HNP
Copyright © 2016 Sito Web ARI Vittorio Veneto - IQ3VV, tutti i diritti riservati.
Torna ai contenuti