Google+

Remote Shooter BT 2.0: Controllare una Nikon D50 (e non solo) via Bluetooth con APP Android e PC



Come anticipato qualche tempo fa, dopo aver realizzato Remote Shooter BT 1.0, la soluzione per il controllo remoto dello scatto di macchine fotografiche digitali via BT con funzioni di Time Lapse e ad eventi, abbiamo ora aggiunto nuovi comandi all'interfaccia grafica, realizzando una App per dispositivi Android impiegando App Inventor, e da PC utilizzando Microsoft VC2005 o SharpDeveloper.

NEW:
Testato su:
Nikon D50 (funzioni complete, vedi video)
Nikon Coolpix AW100
Nikon D90
Nikon D7100
Canon Powershot A300
Canon Poweshot S500
              
 

E' nato Remote Shooter BT 2.0, con funzioni estese per leggere o settare le proprietà ed il controllo  apertura diaframma, controllo tempi di otturazione, sensibilità iso, comandi sperimentali etc.
Questa versione è stata realizzata per controllare una Nikon D50, ma può controllare altre macchine digitali (sicuramente Nikon) che utilizzano lo standard PTP, tutto dipende dalle funzioni specifiche messe a disposizione dalla macchina fotografica che si possiede.
Una volta connessa alla porta USB la macchina fotografica, con la funzione di esplorazione di Remote Shooter 2.0 sarà possibile verificare quali comandi e proprietà sono disponibili, in base ai quali impostare i parametri di interesse.



Progetto: Remote Shooter BT 2.0
Componenti necessari:

1) 1 scheda Pic-Ap-Board
2) 1 modulo Bluetooth seriale
3) 1 smartphone/tablet Android o PC con Windows XP o Seven
4)  Il nostro software di gestione per PC o App per Android 

Funzioni di Remote Shooter BT 2.0:

 
#1 Scatto remoto;
#2 Time Lapse (intervallo in sec, numero di scatti);
#3 Settaggio del tempo di esposizione;
#4 Settaggio del diaframma;
#5 Settaggio della sensibilità ISO;
#6 Bracketing on/off;
#7 Shake&Shoot; (scuoti lo smartphone per comandare lo scatto remoto, potrebbe essere utile anche per persone diversamente abili)
#8 Invio sperimentale di get/set di operazioni PTP 


 Riportiamo il video dimostrativo delle funzioni disponibili su una Nikon D50.

L'idea nasce dalla curiosità di sperimentare su Android con App Inventor e dalla necessità pratica di espandere l'interfaccia grafica del Remote Shooter 1.0 per rendere al contempo più semplice e rapido l'inserimento dei parametri di Time Lapse o di future funzioni allo studio.
Nel caso infatti fosse necessario inserire grandi intervalli di tempo o numero di scatti, ci siamo resi conto che poteva essere complicato e forse anche tedioso, usare solo i tasti up/down sulla board.
Per chi non conoscesse il progetto Remote Shooter 1.0, è sostanzialmente un sofisticato telecomando per lo scatto remoto (ma non solo) di macchine fotografiche digitali tramite la porta USB, molti modelli infatti di compatte e  DSLR, Nikon e Canon ad esempio, sono compatibili in PTP mode con la scheda USB PIC-AP-BOARD (PIC Auto Programming Board) ed il firmware RemShoot 1.0 (Remote Shooter).
La possibilità di attivare remotamente molte funzioni (prima di tutto lo scatto) sulle macchine fotografiche digitali, rende possibile realizzare fotografie a volte impossibili o almeno difficili da realizzare con il metodo tradizionale a causa dei tempi di reazione umani.
Il protocollo PTP e applicazioni nella fotografia.
Gran parte delle macchine fotografiche digitali di fascia medio alta mettono a disposizione un set di comandi PTP per il loro controllo remoto, o semplicemente per il trasferimento delle immagini su un pc.
Utilizzando gli opportuni comandi e proprietà l’appassionato di fotografia potrà:
1) Remotizzare il pulsante di scatto (shutter),
2) Realizzare un Intervallometro (Time Lapse)
3) Scattare foto automatiche sulla base di eventi rilevati da sensori di luce e suono.
Fare scatti nel mondo della fotografia ad alta velocita’ (caduta di una goccia d’acqua o altro liquido, esplosioni di palloncini etc) o fare scatti a intervalli regolari (anche di molte ore) con la funzione Time Lapse (ad esempio per registrare lo sbocciare di un fiore o lo schiudersi di un uovo) e’ facilmente realizzabile abbinando a questo sistema opportuni sensori di movimento, luce o suono.
Per verificare se la tua fotocamera può essere controllata da RemShoot 1.0 o RemShoot BT 1.0 si consiglia di eseguire il test di compatibilità con l’applicazione per windows (XP e Seven):
http://goo.gl/2BVMg
Una volta effettuato il download estraete il file, lanciate l’eseguibile PTPControlCheck.exe e seguite le istruzioni.
Interessante caratteristica di RemShoot BT 2.0 è che il firmware è aggiornabile tramite una chiavetta USB.



Aggiornamento del firmware RemShoot BT 2.0 con la chiavetta USB
Il sistema è in continua evoluzione, altre funzioni potranno quindi essere aggiunte in futuro mediante aggiornamento del firmware che pubblicheremo sul sito.
Va evidenziato che molti comandi sono strettamente dipendenti dalle caratteristiche e dal subset di comandi specifici della propria fotocamera.
Riportiamo alcuni operation codes standard PTP, dove il comando 0x100E determina lo scatto di una foto.
/* Operation Codes */
#define PTP_OC_Undefined                0x1000
#define PTP_OC_GetDeviceInfo            0x1001
#define PTP_OC_OpenSession              0x1002
#define PTP_OC_CloseSession             0x1003
#define PTP_OC_GetStorageIDs            0x1004
#define PTP_OC_GetStorageInfo           0x1005
#define PTP_OC_GetNumObjects            0x1006
#define PTP_OC_GetObjectHandles         0x1007
#define PTP_OC_GetObjectInfo            0x1008
#define PTP_OC_GetObject                0x1009
#define PTP_OC_GetThumb                 0x100A
#define PTP_OC_DeleteObject             0x100B
#define PTP_OC_SendObjectInfo           0x100C
#define PTP_OC_SendObject               0x100D
#define PTP_OC_InitiateCapture          0x100E
#define PTP_OC_FormatStore              0x100F
#define PTP_OC_ResetDevice              0x1010
#define PTP_OC_SelfTest                 0x1011
#define PTP_OC_SetObjectProtection      0x1012
#define PTP_OC_PowerDown                0x1013
#define PTP_OC_GetDevicePropDesc        0x1014
#define PTP_OC_GetDevicePropValue       0x1015
#define PTP_OC_SetDevicePropValue       0x1016
#define PTP_OC_ResetDevicePropValue     0x1017


Un aggiornamento per chi avesse interesse sul progetto, visti i costi di sviluppo, da alcuni giorni stiamo promuovendo con una campagna di crowdfunding, su Indiegogo.com, la versione 3.0. Oltre al time-lapse, il controllo dei tempi, dell'apertura del diaframma e della sensibilità ISO, lo scatto a distanza sarà attivato anche sfruttando i sensori di uno smartphone android, ad esempio un suono captato dal suo microfono o il semplice scuotimento del cellulare rilevato dall'accelerometro.
Tutti i dettagli sul sito
 http://igg.me/at/remshoot30 o http://www.pic-ap-board.blogspot.it





Il nuovo firmware Remshoot BT 2.0
RemShoot BT 2.0 è una evoluzione del precedente che sfruttando un modulo Bluetooth seriale (low cost) trasferisce il menu grafico su una app realizzata in OpenSource per Android, o su un PC, migliorandone radicalmente la usabilità.
Per mezzo di semplici comandi seriali appositamente implementati tra board e device (Android o PC) si è di fatto svincolato il sottosistema di controllo PTP dall'interfaccia utente che era necessariamente limitata dall'uso di un piccolo display e 3 pulsanti.

Per Android si è scelto App Inventor per creare l'interfaccia grafica modificabile da chiunque, così come sarà semplice aggiungere altre funzioni, correlare lo scatto di una foto con i sensori del dispositivo (accelerometro, GPS, bussola magnetica etc), comandi vocali o trigger esterni (es SMS, comandi da web etc), gettando così le basi per future implementazioni per tutte le esigenze, limitate solo dalla fantasia dello sviluppatore.

Elenchiamo il set di comandi previsti per questa nuova versione:
N.b: Tutti i comandi terminano sempre con un punto.
 Comando                  Azione
SHOOT.                    Scatto immediato

GETPROP?.              Recupero proprietà disponibili
GETEVENT?.           Recupero eventi disponibili
GETOPCODE?.        Recupero comandi disponibili 
GETPROPVAL?#prop. Legge valore corrente proprietà #prop
SETPROPVAL=#prop,valore. Setta per la proprietà #prop il valore.
TIMERIP=nnnnn.       Setta numero di scatti da 1 a 32768
TIMERIP?.                Legge num scatti configurati
TIMEINT=nnnnn.       Setta secondi di intervallo tra ogni     scatto (da 1 a 32768)

TIMEINT?                  Legge i secondi di intervallo
ENTIMER=1.             Abilita Time Lapse

ENTIMER=0.             Disattiva Time Lapse
ENTIMER?.               Legge stato Time Lapse (attivo/disattivo
DELAYSENS=nnnnn. Setta delay sensore in microsecondi (da 0 a 32768)
DELAYSENS?.          Legge valore delay impostato
ENSENS=1.              Abilita Sensore

ENSENS=0.              Disabilita Sensore
 

ENSENS?.                Legge stato sensore (attivo/Disattivo)
SENDCMD!Opcode,Param1,Param2,Param3,Param4,,Param5,Numeroparametri.
dove il primo parametro è il comando, gli altri 5 valori sono i parametri e l'ultimo è il numero di parametri.

Nel caso dell'opcode standard per scatto remoto 100E, non  sono previsti parametri;
es SENDCMD!100E,0,0,0,0,0,0.
per un comando che prevede un parametro sarà: 
es SENDCMD!D100,D7,0,0,0,0,1.




Descrizione Tecnica

Il progetto software della APP è riassunto in questo schema (Block Editor) dove sono definite azioni, eventi e proprietà di ogni componente.
Per la gestione del client Bluetooth, l'app si basa su un template di uno sviluppatore  Mike Schoenborn che ha realizzato diversi progetti molto interessanti in connubio tra Android e Arduino.


Per dare l'idea della programmazione visuale a "Puzzle" di APP Inventor riporto il dettaglio della costruzione dei tre comandi che saranno inviati alla board al click del bottone associato, nell'ordine:
1)  Scatto immediato (SHOOT.)
2)  Impostazione intervallo (in secondi) tra uno scatto e l'altro nel Time Lapse (es TIMEINT=10.)
3)  Abilitazione sensore (ENSENS=1.)



Il Pannello di APP Inventor dove viene definito il design dell'app selezionando bottoni textbox etc dalla palette dei componenti a sx.



L'app è stata ottimizzata per schermi da 3"- 3,5" , testata su diversi device LG e Samsung e su un tablet Archos101.
Da notare che per un bug dello stack Bluetooth della Broadcomm, alcuni device come il Samsung Galaxy Ace non riconoscono il profilo BT SPP (Serial Port Profile), mappato su molte periferiche con COD (Class of Device  = 0×00), di conseguenza il modulo (con nome HC-05) non viene individuato e quindi neanche associato. Ho personalmente sperimentato una app gratuita (Bluetooth Class zero) reperibile sul Google Market che ne consente l'associazione e quindi l'utilizzo con la nostra app. 

Per l'interfaccia PC è stata realizzato un progetto base ma già pronto all'uso con le principali funzioni, in Microsoft VC2005 (utilizzabile anche con SharpDevelop)





A titolo di esempio riportiamo una sessione PTP che estrae tutte le feature disponibili per la Nikon D50 e ne imposta alcune:
GETPROP?.5001,5003,5004,5005,5007,5008,500A,500B,500C,500D,500E,500F,5010,5011,5013,              
5018,501C,D01F,D025,D026,D02A,D02B,D02C,D02D,D045,D054,D056,D05E,D05F,D062,D063,                D064,D06B,D06C,D07C,D08A,D090,D091,D092,D0C3,D0C4,D0E0,D0E1,D0E2,D0E3,D0E4,
D0E5,D0E6,D100,D101,D102,D103,D104,D105,D106,D108,D109,D10A,D10B,D10D,D10E,D120,           
D121,D122,D124,D125,D126,D140,D142,D160,D161,D163,D164,D165,D166,D167,D16A,D16B,                  
D16D,D180,D190,D1B0,D1C0,D1C1.                 

Cambio tempo di esposizione (Nikon D50 in Manual Mode))
GETPROPVAL?D100.0001007D. (1/125)

SETPROPVAL=D100,00010019.2001.GETPROPVAL?D100.00010019.  (1/25)
SETPROPVAL=D100,00010064.2001.GETPROPVAL?D100.00010064.  (1/100)
SETPROPVAL=D100,0001007D.2001.GETPROPVAL?D100.0001007D. (1/125)

NIKON Auto Bracketing Set(0xd07c):(readwrite) (type=0x2) Range [0 - 2, step 1] value: 0
Auto Exposure Bracket Count(0xd0c3):(read only) (type=0x2) Range [1 - 3, step 1] value: 1
Bracketing Frames and Steps(0xd190):(readwrite) (type=0x2) Range [0 - 12, step 2] value: 2

L'hardware

Alla nostra USB PIC-AP-BOARD è stato collegato in seriale un modulo Bluetooth dual role Master/Slave alimentato a 3.3Volt. Il modulo scelto è molto economico (poco più di 5 euro su Ebay) ma estremamente potente, controllabile anche via I2C e USB ed ha una serie di pin di IO configurabili.

La PIC-AP-BOARD



Dettaglio del modulo BT, per il funzionamento sono richiesti solo 4 pin: 3.3Volt, GND, RX e TX. In basso il layout del modulo e la descrizione dei pin









Vista d'insieme dell'hardware.


Le specifiche del modulo Bluetooth
Bluetooth protocol    Bluetooth Specification v2.0+EDR
USB protocol         USB v1.1/2.0
Frequency        2.4GHz ISM band
Modulation       GFSK(Gaussian Frequency Shift Keying)
Transmit power         ≤4dBm, Class 2
Sensitivity            ≤-84dBm at 0.1% BER
Rate                  Asynchronous: 2.1Mbps(Max) / 160 kbps
                    Synchronous: 1Mbps/1Mbps
Security features         Authentication and encryption
Support profiles          Bluetooth serial port (master & slave)
Power Supply       +3.3VDC 50mA
Working temperature   –5 ~ +45 Centigrade



Di seguito alcune immagini di dettaglio per chi si volesse cimentare nella autocostruzione.
oltre alla Pic-AP-Board e il modulo BT già descritto, è stata utilizzata una scatola modello 1553CGYBAT della Hammond, un cavo di circa 20 cm con presa USB femmina e un interruttore di accensione da pannello.






     

Riferimenti:

Remote Shooter 1.0: sistema di controllo remoto USB per macchine fotografiche

Controllare una fotocamera digitale tramite porta USB in modalità PTP 1/2

Controllare una fotocamera digitale tramite porta USB in modalità PTP 2/2

App Inventor for Android di Google Labs diventerà presto Open Source.

 

Il progetto software dell'app BT per Android che si interfaccia con la scheda PIC-AP-BOARD è stato realizzato da Telegiangi61 e Agosillo, e viene rilasciato in Open Source.
Per successivi approfondimenti o evoluzioni http://pic-ap-board.blogspot.it/
Per limiti di spazio, l'app è scaricabile
o direttamente dal cellulare tramite il qrcode

 

Nessun commento:

Posta un commento