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:
