English

NIKON D70

TELECOMANDO INFRAROSSO

Come costruire un economico e personalizzabile telecomando simile al modello ML-L3. Progettato per la Nikon D70, dovrebbe funzionare correttamente con tutte le macchine fotografiche supportate dai modelli ML-L1 e ML-L3.

 

Agosto 2006 : le informazioni in questa pagina non sono aggiornate.

Per le ultime novità consultate la versione in inglese. Grazie.

 

La storia
Mentre ero alla ricerca di un'alternativa economica per controllare la mia Nikon D70, trovai un piccolo programma per il Palm. Questo lavora perfettamente, ma il Palm non è proprio comodo da usare per questo scopo.
A questo punto decisi di costruire un piccolo circuito tascabile, usando un micro-controller, per far scattare da lontano la macchina fotografica. La scelta su quale processore scegliere fu semplice: ho lavorato per diversi anni con i controllori della famiglia ST6, ma recentemente ho scoperto i micro a 8 bit della AVR. Perchè non usare uno di questi? Niente di meglio che realizzare una semplice ma reale applicazione per imparare ad usare questi fantastici integrati.

 

Un po' di teoria
Utilizzando un demodulatore all'infrarosso ed un oscilloscopio digitale ho catturato la forma d'onda generata dal Palm. Fortunatamente questa è particolarmente semplice, così la realizzazione di hardware e software diventa, nel complesso, piuttosto facile. I dati catturati con l'oscilloscopio erano qualche cosa di simile a quanto riportato in figura 1


Figure 1

Note: Il livello alto indica che il led di trasmissione è acceso, il livello basso indica che il led è spento. La stessa forma d'onda viene ripetuta una seconda volta dopo circa 63 msec. Il diagramma non è in scala.


Sono convinto che il ricevitore della DSLR sia realizzato con un programma e non con un decoder hardware dedicato, e dovrebbe funzionare più o meno come segue:
- Aspetta l'impulso di start (circa 2,25msec)
- Non ci devono essere segnali per 27,6msec (pausa)
- Ricevi un impulso (650usec)
- Ci deve essere una pausa (1,375msec)
- Ricevi un impulso corto (575usec)
- Pausa lunga (3,35msec)
- Ricevi l'ultimo impulso (650usec)

Se anche uno solo dei passi non viene rispettato la ricezione viene scartata.
Prima di concludere questo paragrafo, bisogna spendere alcune parole su come funziona la trasmissione. La maggior parte delle trasmissioni fatte all'infrarosso funzionano modulando il led trasmittente ad una frequenza relativamente alta (solitamente a 38 o 40KHz). Questo significa che quando viene trasmesso un bit di valore "1" il led viene acceso e spento 38000 o 40000 volte al secondo. Quando viene trasmesso un bit di valore "0", il led rimane spento. Il mio Palm usa una frequenza di modulazione di 40KHz, ma non conosco la frequenza utilizzata dal telecomando Nikon ML-L3. Per questa applicazione, comunque, non è un grande problema: utilizzando i 40KHz il tutto funziona alla perfezione!
Ora che conosciamo come lavora il telecomando, siamo pronti per passare alla fase di progettazione.

 

Hardware
Come già menzionato, ho deciso di utilizzare un microcontroller AVR della serie 8-bit RISC. Ho scelto il modello ATTiny2313 per varie ragioni: costa poco, è facile da reperire, inoltre era l'unico tipo che avevo nel cassetto (a parte un più costoso ed ingombrante ATMega8535). Se preferite adoperare un tipo diverso, credo che qualsiasi AT90, ATMega e ATTiny possa funzionare correttamente ricompilando il software. Sarebbe stato possibile utilizzare una versione SMD per ridurre le dimensioni del circuito, ma ho voluto rendere il montaggio il più semplice possibile, pertanto ho preferito utilizzare la versione DIP.
Per mantenere le dimensioni compatte bisogna alimentare il circuito utilizzando una batteria piccola: penso che una batteria al litio tipo la CR2032 sia una buona scelta. E' facile, inoltre, recuperare il relativo portabatteria da vecchie piastre madri per computer.
Nel prossimo paragrafo vedremo che per generare una buona onda quadra a 40KHz abbiamo bisogno di un oscillatore di clock molto stabile e preciso, per questo motivo viene utilizzato un oscillatore al quarzo. Nel solito cassetto ho parecchi quarzi a 8MHz, così ho deciso di utilizzare questa frequenza di clock. Qualcuno potrebbe obiettare che più è alta la frequenza, più è alto il consumo del processore. Questo è vero, ma bisogna ricordare che la trasmissione dura pochi istanti, e la corrente assorbita dal micro è decisamente inferiore rispetto a quella del led. Ad ogni modo, è possibile abbassare la frequenza leggendo con attenzione la prossima sezione ed applicando le modifiche del caso al programma.
I dettagli dell'hardware sono stati fissati, è tempo di scrivere il programma.

 

Software
Prima di tutto, abbiamo bisogno di un riferimento preciso per far lampeggiare il led a 40KHz. Tradotto in altri termini, il led si deve accendere per 12.5usec, quindi rimanere spento per altrettanto tempo e così via. Per ottenere questo, dobbiamo sapere esattamente a quale frequenza sta lavorando il processore e quanti cicli di clock servono per raggiungere il tempo di 12.5usec. La frequenza la conosciamo: 8MHz. Ogni ciclo di clock, quindi, richiede 125 nanosecondi, o 0.125 microsecondi. E' ovvio che dopo 100 cicli di clock abbiamo raggiunto il tempo richiesto. Tenendo in considerazione che le istruzioni “CALL”, “RET”, “SBI” (led acceso) e “CBI” (led spento) richiedono cicli di clock, possiamo scrivere la seguente routine per attendere che trascorrano i 100 cicli richiesti::

delay125:
; This is a 12.5 uS delay (100 cycles @ 8MHz)
;
; sbi/cbi = 2 cycles
; rcall = 3 cycles
;
ldi DelayReg,30 ; 1 cycle
delay125_0:
dec DelayReg    ; 1 cycle
brne delay125_0 ; 2 cycle if jump to label, 1 if not
ret             ; 4 cycles

Con questa routine è come se avessimo un generatore di clock con un periodo di 12.5 microsecondi: perchè non utilizzarlo per generare tutta la forma d'onda richiesta?
Provo a spiegare il concetto con un esempio: l'impulso di inizio (start) richiede che il led lampeggi per 2.25msec o, in altre parole, 180 * 12.5usec. Se noi contiamo per 90 volte "led acceso per 12.5usec, led spento per 12.5usec" abbiamo ottenuto l'impulso di start!
Ecco il codice:

;(Start pulse)
ldi R17,90      ; (12.5 uS * 2 ) * 90 = 2.25 mS
startpulse:
sbi PORTD,0     ; Led on
rcall delay125  ; Wait 12.5 uS
cbi PORTD,0     ; Led off
rcall delay125  ; wait 12.5 uS
dec R17
brne startpulse

E' sufficiente scrivere altri cicli simili a questo, calibrati a seconda del tempo richiesto, ed abbiamo terminato. Non bisogna dimenticare, comunque, che il circuito deve inviare solo due volte un treno di impulsi completo, poi deve fermarsi. Per risparmiare batterie, se si tiene premuto il pulsante, viene utilizzato il comando "SLEEP" per far "dormire" il processore e risparmiare corrente.
Per ottenere il codice sorgente completo e funzionante, date un'occhiata alla sezione "download".

 

Considerazioni finali
Nel titolo ho scritto "economico" e "personalizzabile". Perchè? Beh, "economico" è facile da spiegare: con meno di 10 Euro è possibile costruire un telecomando perfettamente funzionante per la vostra Nikon.
Per "personalizzabile", provate ad immaginare le seguenti situazioni:
- Siete dietro alla macchina fotografica di qualche metro, magari nascosti da un albero o dietro un muro.
- La macchina è montata sul treppiede, e volete scattare una foto senza toccare l'attrezzatura. Non è molto comodo allungare il braccio davanti alla DSLR per eseguire lo scatto.
- Vi trovate 50-100 metri lontano dall'apparato e chiaramente il led infrarosso non ha una portata così estesa (assicuratevi che nessuno possa rubare il vostro gioiello).
- Volete scattare una foto ogni 1, 2, 5 o 10 minuti automaticamente.

Avete l'hardware (completo di schemi), avete il software (con i sorgenti), avete un cervello (con un po' di neuroni): usate il tutto e troverete una soluzione per ogni necessità!

Se non avete idee, ecco alcuni suggerimenti:
- Collegate un cavo elettrico lungo e flessibile tra lo stampato ed il pulsante. Fissate il contenitore del telecomando da qualche parte di fronte alla macchina. Avete ottenuto un telecomando azionabile (anche da dietro) da qualche metro di distanza.
- Collegate un cavo elettrico molto flessibile, non troppo lungo, tra lo stampato ed il led. Fissate il led (magari utilizzando la cinghia della macchina) davanti all'apparato. Tenete in mano la scatoletta del telecomando ed avrete un comodo flessibile per lo scatto.
- Utilizzate un radio comando per attivare il telecomando all'infrarosso. Collegando un transistor in modalità open-collector potete simulare la pressione del pulsante. Ecco un valido sistema per scattare da molto lontano.
- Costruite un timer programmabile con uscita a relè o open-collector. Potete scattare fotografie ad intervalli regolari automaticamente. Ricordate che dopo 15 minuti di inattività la camera disattiva il ricevitore infrarosso. Un soluzione migliore potrebbe essere quella di modificare il software presentato per trasmettere i due treni di impulsi ad intervalli regolari programmabili. In questo caso, comunque, potrebbe essere necessario utilizzare una batteria più capiente.
- Potere collegare un secondo pulsante al telecomando. Modificando il programma potreste inviare le sequenze di impulsi ininterrottamente. Questo farà lavorare la D70 in modalità "scatto continuo" fino a quando non rilasciate il pulsante.

 

Download
Schema PDF  -  Postscript
Stampate PDF  -  Postscript  -  Postscript (divreso tipo di driver)  -  EPS
Software Sorgente ml3.asm  -  Compilato (ATTiny2313 e AT90S2313) ml3.hex.zip

 

Galleria foto

La prima foto in assoluto utilizzando il circuito presentato. Durante le prove stavo facendo delle misure sul circuito montato su una basetta millefori (di quelle senza saldatura), quando, con mia grande sorpresa il circuito ha funzionato. Ho ottenuto così la foto della mia pancia! Non che sia una foto interessante, ma è la prima…

La prima foto scattata con il telecomando montato su stampato

Telecomando, vista lato componenti

Telecomando, vista lato saldature

Il telecomando inserito nel suo contenitore

La scatola chiusa

 

Ringraziamenti:
- Gerhard Schmidt (DG4FAC) – AVR tutorial - http://www.avr-asm-tutorial.net/index.html
- Brian Hammill - Idee di base per la routine a 40KHz - http://www.ipass.net/~hammill
- Pitronics - SP12 AVR software per il programmatore - http://www.xs4all.nl/~sbolt/e-spider_prog.html#programmer
- Tamiko per la correzione del testo in inglese

 

Per qualsiasi domanda, scrivete a : ir-control[NO]@[SPAM]bigmike.it
(togliete [NO] e [SPAM])

 

Commenti? Saluti? Visitate il mio libro degli ospiti: