Realizzazione di una webcam motorizzata comandata da un computer
Pubblicato il 15 gennaio 2011 (aggiornato il 20 luglio 2011)

Premessa
Introduzione
Cosa serve
Quanto si spende per realizzare il tutto?
Configurazione del decoder PTZ
Guida ai software per il movimento del brandeggio
Download software
Pregi e difetti

Premessa

Un doveroso ringraziamento a Massimo per le innumerevoli ore perse con me nella realizzazione di questo progetto, ad Andrea per la completa programmazione dei software di comunicazione tra PC e brandeggio, a Francesco e Roberto per le lavorazioni meccaniche, a i' Pera per i lavori di fissaggio del palo, a i' Gala per il PC regalatomi e agli amici di Meteonetwork per le numerose informazioni passatemi.

Introduzione

La stazione meteo di Molino del Piano (FI) dispone da febbraio 2011 di una fotocamera Canon installata su un brandeggio motorizzato. Sia la fotocamera che il motore del brandeggio sono comandati da un computer, cosa che rende possibile l'acquisizione di più immagini scattate in diverse direzioni in maniera del tutto automatica.
In questa pagina sono riportate le istruzioni per comandare il brandeggio motorizzato con un PC.

firenzemeteo.it non si assume alcuna responsabilità nell'utilizzo di questo progetto.

Cosa serve

La webcam motorizzata di firenzemeteo.it dispone dei seguenti componenti:

Il brandeggio motorizzato è costituito da 6 ingressi: AUTO, RIGHT, LEFT, UP, DOWN, COMMON. Fornendo ad esempio 24V AC tra RIGHT e COMMON, il brandeggio azionerà il motore responsabile del movimento azimutale, ottenendo una rotazione verso destra; se invece i 24V sono applicati tra l'UP ed il COMMON, il brandeggio azionerà il motore responsabile del movimento verticale, ottenendo una rotazione verso l'alto.
Fornendo 24V tra l'AUTO ed il COMMON il brandeggio eseguirà una scansione continua destra-sinistra, mentre in tutti gli altri casi il movimento cessa una volta raggiunto il fine corsa.
Nella seguente immagine è mostrato il brandeggio motorizzato sul quale è fissata la fotocamera.

schema

Il motore della stazione meteo di Molino del Piano (acquistato su Ebay in Italia) è senza marca (c'è scritto solo Mod. 303). Nella seguente tabelle sono riassunte le sue principali caratteristiche:

Parametro Valore
Alimentazione AC 24V - 50Hz
Corrente 960 mA
Angoli di rotazione massima Pan: 350°
Tilt: ±35°
Velocità di rotazione Pan: 7°/s
Tilt: 1.5°/s
Carico massimo Orizzontale: 25 kg
Verticale: 12 kg
Temperature di funzionamento -40 °C ÷ +60 °C
Peso 4 kg
Dimensioni 200(⌀)x248(H) mm

La comunicazione tra PC e motore avviene tramite una scheda (decoder PTZ, acronimo di Pan-Tilt-Zoom) alimentata a 24V AC. La scheda risponde ai comandi inviati dal PC, fornendo in uscita 24V alle opportune porte, a seconda dal comando inviato. Il motore è quindi collegato unicamente al decoder e sarà sempre il decoder stesso ad occuparsi della sua alimentazione. Nella seguente immagine è mostrato uno schema dell'intero sistema.


schema


Sul mercato esistono decoder PTZ alimentati a 220V e aventi al loro interno un trasformatore 220V-24V. L'acquisto di un decoder PTZ di questo tipo può essere conveniente in termini di costi complessivi. Nel mio caso, avendo già un trasformatore 220V-24V AC, ho optato per l'acquisto di una scheda alimentata a 24V AC.
La scheda PTZ è in grado di eseguire anche alcuni controlli sulle ottiche di una webcam, ma nel mio caso non ho mai sfruttato questa potenzialità, visto che come webcam utilizzo una fotocamera Canon, le cui ottiche sono comandabili direttamente da un PC tramite collegamento USB.

Come accennato (si osservi anche lo schema mostrato prima), i comandi escono dal computer attraverso la porta seriale RS232; agganciata a quest'ultima occorre inserire un convertitore RS232-RS485, all'uscita del quale 2 cavi elettrici saranno collegati a 2 opportuni ingressi del decoder PTZ. I decoder PTZ sono frequentemente comandati via RS485 perché con tali collegamenti si ottengono range di funzionamento di oltre 1 km senza perdita sensibile di segnale, offrendo quindi la possibilità di muovere telecamere anche a grandi distanze.

Il convertitore RS232-RS485 non necessita di alimentazione propria, dato che essa viene garantita dalla seriale RS232 del computer.

Nelle seguenti immagini (clicca per ingrandire) è mostrato il convertitore RS232-RS485 (Marca: Hexin). L'immagine più a sinistra è uno zoom sul connettore da agganciarsi alla porta seriale RS232 del computer, mentre l'immagine centrale evidenzia i 3 punti di uscita del convertitore. Uno di essi è il GROUND e non viene utilizzato in questo progetto. Le altre 2 uscite (uscita + e uscita -) sono collegate ad un opportuno ingresso del decoder (vedi più avanti).

immagine non presente immagine non presente immagine non presente

Il convertitore è stato sfruttato con successo anche con portatili non aventi RS232, utilizzando una scheda PCMCIA con uscita RS232 (vedi immagini seguenti, clicca per ingrandire).
immagine non presente immagine non presente

Esistono anche convertitori USB-RS485, ma non ho avuto modo di testarli, ed i software utilizzati e qui distribuiti sfruttano solo uscite seriali RS232.


Quanto si spende per realizzare il tutto?

Ho acquistato (nel 2010) i vari componenti su Ebay, sia da negozi in Italia che all'estero. La spesa maggiore è per il brandeggio motorizzato, mentre gli accessori per l'interfaccia con il computer hanno costi contenuti. Nella seguente tabella sono riassunti i costi di ciascun componente (spese di spedizione incluse):

Oggetto Prezzo
Brandeggio motorizzato da esterno 24V AC 72.00 €
Decoder PTZ 16.19 €
Convertitore RS232-RS485 8.16 €
Scheda PCMCIA con uscita seriale RS232 (*) 11.05 €
TOTALE 107.40 €

(*) Componente opzionale utilizzato per comandare il brandeggio con un portatile non avente porta seriale RS232.

Configurazione del decoder PTZ

Qui sotto è mostrata una immagine del decoder PTZ (clicca per ingrandire) e lo schema con i vari componenti.

immagine non presente immagine non presente

Ecco una descrizione delle varie sezioni del decoder:

immagine non presente


La seguente immagine è uno zoom sui riquadri 3, 4, 5 e 6:

immagine non presente

Guida ai software di comunicazione

Il mitico Andrea (voi non lo conoscete, ma io per fortuna sì), ha realizzato due software di comunicazione con il decoder PTZ. Entrambi svolgono lo stesso lavoro, ovvero consentono che il brandeggio possa essere mosso da un computer, solo che uno ha un'interfaccia grafica, l'altro viene eseguito da riga di comando.
Entrambi funzionano in ambienti Microsoft Windows a 32 bit con .NET Framework 4.0 installato (si suggerisce quindi di aver il sistema operativo aggiornato) e non necessitano di essere installati. Ho testato i programmi su Windows XP SP3, ma essi dovrebbero funzionare sia su Windows Vista che su Windows 7 (fermo restando la presenza di .NET Framework).

Il software con interfaccia grafica (ptz_win32) è scaricabile qui. Esso, come detto, non necessita di installazione: per avviarlo fare doppio clic sull'icona. La seguente immagine è uno screen-shot del software.

immagine non presente

Per impostare correttamente i parametri della porta seriale RS232 (riquadro in alto denominato "Impostazioni porta seriale") occorre prima di tutto individuare in Windows la porta seriale del computer alla quale è stato agganciato il convertitore RS232-RS485. In Windows XP cliccando su "Start", poi con il tasto destro su "Risorse del computer", quindi su "Proprietà", selezionare la scheda "Hardware" ed infine "Gestione Periferiche" appare la seguente schermata sulla quale sono visualizzate le varie periferiche del computer (con Windows Vista cliccare sull'icona di Windows in basso a sinistra, poi clic con il tasto destro su "Computer", poi "Proprietà" e infine "Gestione Dispositivi"):

immagine non presente

Come si può vedere nella schermata qui sopra, nel mio caso la porta seriale è la COM3. Cliccare con il tasto destro su PC_COM (COM3), poi su "Proprietà" ed infine andare sulla scheda "Impostazioni della porta". Qui va impostato il Boud Rate (Bit per secondo) con lo stesso valore impostato sulla scheda (nel mio caso 2400) e assicurarsi che i restanti quattro valori siano impostati nel modo visualizzato nella seguente figura:

immagine non presente

Solo il Baud Rate è un campo che ciascuno può impostare a proprio piacere (fermo restando che sia lo stesso valore settato sul decoder), mentre gli altri devono essere settati nel modo mostrato! Cliccando OK la porta seriale è configurata e pronta all'uso.
A questo punto, tornando sul software ptz_win32, selezionare la porta seriale ed il Baud Rate:

immagine non presente

Accanto al pulsante "Connetti" l'icona rossa ci indica che il software non è in comunicazione con la porta seriale. A questo punto, premendo su "Connetti", se tutto è stato impostato correttamente, l'icona diventerà verde e la sezione bassa di ptz_win32 (denominata "Controllo Motore") diventerà attiva:

immagine non presente

L'ultimo parametro da selezionare è l'indirizzo della scheda che è stato settato sul decoder (indirizzo 1 nel mio caso). Una volta configurati questi parametri si seleziona una delle 4 direzioni e la velocità. Premendo "MUOVI" il brandeggio inizia muoversi, con "FERMA" si fermerà. Se si seleziona "Auto" il brandeggio si muove verso destra e sinistra indefinitamente arrivando ogni volta ai fine corsa meccanici del brandeggio (che nel mio caso supporta una scansione orizzontale massima di 350°) fino a quando sarà premuto il pulsante "FERMA".

immagine non presente

Il brandeggio in mio possesso a quanto pare non supporta la regolazione della velocità, e quindi, anche impostando sul programma una velocità intermedia, il risultato è che il motore si muove sempre alla massima velocità (anche l'opzione Turbo nel mio caso è ininfluente). Tuttavia, il software invia il corretto codice PELCO-D con il parametro velocità, per cui se si utilizza un brandeggio idoneo è possibile ottenere la velocità desiderata.

Il software non gestisce il controllo del diaframma e dell'obiettivo della telecamera, dato che è stato realizzato pensando unicamente alla gestione dei motori del brandeggio.

Il software senza interfaccia grafica (ptz_shell) è scaricabile qui. Esso, essendo utilizzato solo da riga di comando, consente di muovere il brandeggio automaticamente con opportune operazioni pianificate o con l'utilizzo di personali software in grado di chiamarlo. Anch'esso non necessita di installazione.
Per vedere come funziona, aprire la Command Line di Windows digitando su "Esegui" "cmd" (oppure andare su "Programmi", "Accessori" e cliccare su "Prompt dei comandi"). Per aprire ptz_shell collocarsi con la Command Line di Windows all'interno della cartella dove è presente ptz_shell. Di solito, aprendo il Prompt dei Comandi esso si posizione in "C:\User\NomeUtente", per cui se il programma fosse in "C" occorre digitare due volte "cd ..", oppure con un unico comando digitando "cd ..\..\" ("..\" significa sali su).
N.B.: cliccando due volte sull'icona di ptz_shell si ottiene solo una rapida apertura e chiusura di una finestra del Prompt dei Comandi.
Con il Prompt dei Comandi posizionato sulla cartella dove è presente ptz_shell, se a questo punto digitassimo su di esso solamente "ptz_shell" otterremo la seguente schermata di avviso nella quale si fa presente che non è stato inviato nessun parametro utile alla porta seriale:

immagine non presente

La schermata ci avvisa però che per avere la lista delle opzioni basta digitare "ptz_shell -h". Con questo comando si ottiene la seguente schermata:

immagine non presente

I parametri nelle parentesi quadre sono parametri opzionali, dato che per essi esistono dei valori di default già preimpostati. Essi sono la velocità della porta seriale (valore preimpostato: 2400), l'indirizzo della scheda (valore preimpostato: 1), la velocità del movimento (valore preimpostato: massima velocità).
Gli altri parametri sono obbligatori: se non specificati, il comando per il movimento del brandeggio sarà incompleto e non si otterrà nessun risultato utile. I parametri obbligatori sono il nome della porta (ad esempio COM3), la direzione del movimento, e la durata in secondi del movimento.

Un esempio di comando funzionante è il seguente:

ptz_shell -com COM3 -dir r -t 5

che, sfruttando la porta COM3 (-com COM3), fa muovere il motore verso destra (-dir r significa "a destra") per 5 secondi (-t 5).

Un altro comando buono è il seguente:

ptz_shell -com COM3 -br 4800 -dir l -t 6

che fa muovere il motore verso sinistra (-dir l significa "a sinistra") per 6 secondi, ma con un Boud Rate della porta seriale pari a 4800. Come già detto, il risultato sarà buono solo se il Boud Rate pari a 4800 è stato impostato sia sul computer che sul decoder.

Download

ptz_win32 e ptz_shell sono due programmi freeware qui scaricabili gratuitamente:
ptz_win32 (ultima versione: 1.1, rilasciata il 15/01/2011)
ptz_shell (ultima versione: 1.2, rilasciata il 20/07/2011)

Pregi e difetti

Del software con interfaccia grafica (ptz_win32) è stata finora sempre rilasciata la versione 1.1, versione che per ora non ha ancora fatto registrare alcun errore.
Di ptz_shell, invece, fino al 20/07/2011 era presente la versione 1.1, che però presentava un errore corretto poi nella versione 1.2 (attualmente disponibile per il download). La versione 1.1 non considerava i decimali dei secondi del movimento del motore, per cui ad esempio il comando -t 6.3 faceva in realtà muovere il motore per 6 secondi netti. Adesso la versione 1.2 gestisce anche i decimali.
In caso di qualsiasi problema, mandare una segnalazione via e-mail all'indirizzo info@firenzemeteo.it.
Un difetto generale imputabile al motore utilizzato è che, non essendo un motore passo-passo, non consente di essere riposizionato in maniera esatta. Questo è un problema per chi desidera pianificare cicli con scatti a prefissate e precise direzioni. Ad esempio, quando il motore è posizionato nell'estremità di destra (c'è un blocco meccanico che limita le escursioni) e si invia il comando di movimento verso sinistra per un tot di secondi, esso non è detto che al ciclo successivo si riposizioni nello stesso punto. Ciò può essere fastidioso per chi vuole creare delle animazioni con i vari scatti di un giorno: se la fotocamera non si riposiziona esattamente, l'animazione sarà costituita da continui zig-zag verso sinistra e destra (anche se comunque molto contenuti). E chiaro che il problema esposto non si ha nei due punti di estrema scansione orizzontale: i blocchi meccanici garantiscono il corretto posizionamento.
Ho risolto questo difetto con un software di analisi automatica delle immagini, ma non posso condividere questo lavoro per motivi di licenza.