lunedì 9 luglio 2012

Camera SMT-SNP-3120 con PTZ

Recentemente mi e' capitato di lavorare con la telecamera in oggetto che ha uno zoom ottico di 12x con una risoluzione di 795x596 Pixel (reale 704x576 quindi niente di che rispetto alle comuni e economiche webcam 640x480) , autofocus

L'alimentazione viene fornita tramite Ethernet via POE
La rotazione e' di 360° sull'asse orizzontale e di 180° su quello verticale

Il sistema di gestione principale e' costituito da un programma in Silverlight che ovviamente non funziona via Linux (a meno di non rischiare la via Moonlight che francamente ho scartato) .. fortunatamente ci sono un po' di sostituzioni

Per la visualizzazione delle immagini si puo' tranquillamente usare VLC collegato in modalita' rtsp all'indirizzo

rtsp://192.168.1.100/profile2/media.smp

per utilizzare la modalita' PTZ ovvero la possibilita' di muovere la telecamera le cose sono piu' complicate
Sono disponibili dei comandi http

http://192.168.1.100/cgi-bin/ptz.cgi?movepan=100 (il parametro e' un angolo da 0° a 359°)
http://192.168.1.100/cgi-bin/ptz.cgi?movetilt=90 (il parametro e' un angolo da -5° a 185°)
http://192.168.1.100/cgi-bin/ptz.cgi?movezoom=3 (il parametro e' un valore da 1 a 12)

il problema grosso e' che non si puo' creare uno script (per esempio in Python) per muovere la telecamera in quanto in sistema monta un sistema di autenticazione via http che NON e' possibile disattivare (almeno su questo modello di camera)

Di seguito un esempio di codice Python per inviare comandi http che  NON funziona a causa del sistema di autenticazione
--------------------------------------------------------------------
import pygame
import urllib


from pygame import *
pygame.init()
pygame.display.set_mode((500,500),OPENGLBLIT|OPENGL|DOUBLEBUF)
exitt = 0
inte = 4096
while not exitt:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exitt = True
        if event.type == pygame.KEYDOWN and event.key == pygame.K_a:

        params = urllib.urlencode({'movepan': '100'})
         url = "http://192.168.1.4//cgi-bin/ptz.cgi?%s" % params
        f = urllib.urlopen(url)
      
if event.type == pygame.KEYDOWN and event.key == pygame.K_s:
        params = urllib.urlencode({'movepan': '200'})
         url = "http://192.168.1.4//cgi-bin/ptz.cgi?%s" % params
        f = urllib.urlopen(url)

--------------------------------------------------------------------


Come workaround ho installato apache sulla macchina ed ho creato una pagina  fatta di soli link su http://localhost/index.html alle varie funzioni della camera
per esempio

<a href http://192.168.1.100/cgi-bin/ptz.cgi?movepan=100> Pan 100</a>
<a href http://192.168.1.100/cgi-bin/ptz.cgi?movepan=120> Pan 120</a>
<a href http://192.168.1.100/cgi-bin/ptz.cgi?movepan=140> Pan 140</a>



cliccando sul link, se non autenticati, la camera richiede l'autenticazione
In questo modo si sfrutta il browser per gestire il lato autenticazione http






sabato 30 giugno 2012

Salvare un video da VLC

VLC permette di salvare (anche con compressione al volo) lo stream che deriva da una periferica di acquisizione..ovviamente piu' il flusso e' veloce e corposo maggiore e' la richiesta di processore.
Le operazioni da eseguire sono le seguenti

Da VLC selezionare il menu Media/Apri periferica di acquisizione, selezionare il dispositivo di input video e poi in basso accanto a Riproduci cliccare sulla freccia in basso e selezionare Converti (ALT+C)

si apre il menu sottostante in cui si puo' indicare il file da salvare ed il tipo di codifica richiesta
importante per salvare e contemporaneamente visualizzare lo stream e' flaggare Mostra Risultato

con le impostazioni sopra riportate lo stream di una webcam 640x480 del portatile genera un flusso di circa 5Mb per minuto di ripresa quindi decisamente accettabile come occupazione di spazion disco

giovedì 21 giugno 2012

Creazione di amplificatore reale con LM358

 Nel caso reale di costruzione di un amplificatore e' stato utilizzato l'operazionale LM358 per operare una amplificazione di guadagno pari a 2 in modalita' invertente
per questo motivo le due resistenze sull'operazionale sono uguali a pari a 1 KOhm

Il cavo verde indica il segnale da amplificare (sul Pin 3)
Il cavo rosso indica l'uscita del segnale amplificato (sul Pin 1)
Il cavo nero indica la terra (sul Pin 4)

Le resistenza sul circuito di alimentazione dell'integrato sono entrambi da 10 KOhm



Il Pin 1 e' in alto a sinistra (una resistena da 10 KOhm e' parzialmente coperta dal filo verde)
 
L'integrato a sinistra non e' impiegato

Visione complessiva

Clone di Arduino Nano 3.0

Un po' perche' mi serve, un po' perche' costa poco ed e' molto piccola, mi sono comprata su Dealer Extreme un clone di Arduino Nano 3.0 (circa 10 Euro)
E' molto difficile da inserire sulla breadboard a causa del numero di piedini..bisogna fare attenzione ed avere mano ferma

Dall'alto

Dal basso

Montata sulla breadboard


martedì 19 giugno 2012

Mettendo tutto insieme


Diodo

Il diodo e' un componente semiconduttore che permette il passaggio di corrente quando l'anodo e' piu' positivo del catodo (forward biased)

Simbologia sul componente - La striscia indica il catodo





Simbologia sui circuiti

Nel corso di inversione della polarita' del diodo (reverse biased) c'e' un modesto passaggio di corrente (Corrente inversa Ir) che e' dell'ordine di qualche nanoampere. In caso di corrente inversa troppo alta si puo' avere la rottura del componente (PRV o PIV)



Amplificatore con LM358

Per sviluppare un amplificatore di segnale da accoppiare ad un sensore e' stato impiegato l'integrato LM358 che consiste in due separati operazionali comandati da una sola sorgente (nell'esempio ne verra' usato solo uno)
PIN dell'Integrato LM358 con indicatore a punto

Pin dell'integrato LM358 con indicatore non puntuale
per creare un amplificatore deve essere realizzata una configurazione da amplificatore non  invertente che e' determinato dalla grandezza delle resistenze R1 ed R2
Amplificatore Non Invertente (da Wikipedia)

Il fattore di amplificazione e' dato dal parametro Vi=1+(R2/R1)

La massima tensione di alimentazione Vcc e' +- 16V

Nella realta' devono essere collegati sulla breadboard
1) la resistenza R2 deve essere collegata al Pin 1 e Pin 2
2) la resistenza R1 deve essere collegata al Pin 2 e Pin 4
3) l'alimentazione deve essere collegata con il + al Pin 8 ed il - al Pin 4
4) il segnale in ingresso (da amplificare) deve essere inserito ai Pin 2 (-) e Pin 3 (+)
5) il segnale in uscita (amplificato) deve essere preso ai pin 4 (-) e Pin 1 (+)

Nel caso reale sono stati impiegati un valore di R1 = 1KOhm ed un valore di R2= 100KOhm per ottenere un fattore di amplificazione di circa 100, piu' precisamente 1+(R2/R1) (per avere una migliore scalabilita' si puo' mettere una resistenza variabile su R2). L'alimentazione e' fornita da una pila a 9 V


In configurazione invertente si presenta come segue

Amplificatore Invertente (da Wikipedia)
Il guadagno di tensione e' dato dal rapporto  tra R2/R1

Il valore massimo di tensione in uscita dall'amplificatore e' dato dalla tensione di Vcc (9V nel caso reale) meno 1.5 V

Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...