time lapse, test red infrarossi

Ascolta, io ho usato un comune LED IR, tipo il tuo per creare una barriea infrarossi, con 30-35mA di corrente sono arrivato a diversi metri di distanza, non credo sia un problema di potenza del LED, piuttosto di comunicazione oppure di tempi di attesa necessari alla tua fotocamera. P.es. se usi il FLASH essa non ti fa scattare nulla finché il condensatore del flash non si ricarica.
Se fosse un problema di potenza magari ad una certa distanza potrebbe comportarsi come dici, ma se metti la tua fotocamera a 10cm dal LED IR qualsiasi potenza, anche la più ridicola lo deve pilotare, se ricominciano i giochini vuol dire che la fotocamera non è in grado di reggere i ritmi oppure c'è qualcosa che si perde nel dialogo. Perché non fai questa prova:
imposta il delay a 5000 e vedi se lo scatto ogni 5 secondi lo fa, questo è importante come indizio, non ti pare?

si è un test che ho già fatto, con 6 secondi fra una foto e l'altra funziona bene, meno.. da problemi

ho rifatto il test, anche con 6-8-9 secondi stesso problema, qualche shoot lo manca in pieno

Dunque vedo ora che stai usando un alimentatore da 6V, sono troppo pochi, quindi è probabile che la scheda sia alimentata male, quindi conviene comunque fare le prove con la USB. Cosa hai collegato alla Leonardo oltre al LED IR?
Circa il LED IR, sei sicuro che operi correttamente a 38KHz? Alcuni lavorano su gamme vicine ma comunque differenti, questo potrebbe giustificarne tale comportamento; riguardo il transitor, se posti il link da cui scaricare la libreria, possa dare un'occhiata e vedere se riesco a farti uno schemino, ma sono stra-convinto che non si tratti di un problema di potenza, se fai la prova a dieci cm di distanza assolutamente non può essere un problema di potenza.
invece non è che hai lampade a risparmio energetico o neon accesi o altra strumentazione che possa generare disturbi? Fai una prova completamente al buio con tutto spento, ma comunque ricollega l'USB e stacca l'alimentatore da 6V, è inutile.

il link dello schemino col transistor è questo: http://sebastian.setz.name/wp-content/uploads/2011/01/arduino_multi_camera_ir_control_Library_wiring.png
volevo solo capire che transistor e che resistenze mettere.. e magari aggiungendo un altro led.. si dovrebbe dimezzare la resistenza in entrata se ho capito qualcosa.. se mi dai una mano con i calcoli mi fai un piacere enorme così almeno mi tolgo lo sfizio di sapere se è o no la potenza del led

quello che mi fa pensare alla potenza è che se lo metto sul pin 13 (che se non sbaglio ha già una resistenza e quindi è un po' meno potente) non va del tutto, e che col cellulare riesco a intravedere un bagliore ma è proprio labile labile solo in mezzo alle due gambine.. se tengo il cellulare puntato sopra esattamente..

pensavo che l'usb del computer fosse a 5v...

come faccio a sapere se opera esattamente 38KHz? me li hanno venduti sfusi.. fra l'altro 5 led 9 euro alla faccia.. magari posso provare a cambiarli..

per il momento non ho null'altro collegato al leonardo.. e lo sto alimentando sia con usb (per avere i print sulla seriale) sia con l'alimentatore

Andiamo con ordine.
NON puoi usare contemporaneamente alimentatore esterno e USB, sulla scheda c'è un comparatore che verifica se dalla fonte esterna c'è una tensione superiore a 3,3V, in questo caso esclude l'USB (che è a 5V!); però nel tuo caso specifico avrai una tensione di 4V circa e quindi è MOLTO meglio se togli l'alimentatore esterno e continui a fare le prove con l'USB, altrimenti qui giochiamo con i cavoli fritti. Se vuoi usare un alimentatore esterno devi avere ALMENO 7V, su questo non c'è da discutere.
Il pin 13 ha una resistenza SOLO verso il led L, quindi è un pin come gli altri, ma è pur vero che se alimenti lì il LED IR una parte della corrente farà accendere il LED L, quindi certamente è il meno indicato, continua col 12.
Quello schema fa schifo, è sbagliata la R di base ed il TR è invertito rispetto allo standard TO92.
Comunque collega al pin 12 una R da 1 kohm; l'altro capo alla base di un BC547 (o un NPN alternativo), l'emettitore del BC lo metti a GND, al collettore colleghi il catodo del LED IR, all'anodo del LED IR colleghi una R da 100 ohm, l'altro capo della R a 5V. In questo modo il LED IR lavora a circa 50mA, oltre significa rovinarlo, ma anche questi non sono affatto pochi.
Quando ho letto la storia del bagliore in mezzo alle gambe ho pensato ad una topina fosforescente :stuck_out_tongue_closed_eyes:, ma poi mi sono riscordato che parlavi del LED IR, però, scherzi a parte non hai detto come lo vedi il bagliore sul pin 12, e comunque non ti puoi aspettare la luce di un normale LED, infatti tiho detto che devi vedere una luce bianca o rosa, NON un faro!!
Purtroppo non c'è modo di vedere a che frequenza lavora il LED, bisognerebbe sapere la sigla e cercare il datasheet, devi informarti dove l'hai comprato

ok niente mi sono tolto lo sfizio della potenza.. non è quello, il comportamento è sempre lo stesso.. su 10 lampeggiamenti mi fa 5 o 6 foto

mantissa00:
ok niente mi sono tolto lo sfizio della potenza.. non è quello, il comportamento è sempre lo stesso.. su 10 lampeggiamenti mi fa 5 o 6 foto

se avessi avuto più fiducia ti saresti risparmiato il tempo; ora ti rifaccio la domanda:
messo il LED sul pin 12 e guardandolo "in faccia" con la tua Canon, riesci a stabilire se il lampeggio avviene una volta al secondo?

si avviene una volta al secondo. l'ho testato con:

  1. un led normale rosso, lampeggia una volta al secondo
  2. guardandolo con la telecamera del cellulare, lampeggia una volta al secondo
    se spengo tutte le luci (a parte il monitor del computer), col cellulare lo vedo bello e chiaro

bene, quindi l'impulso viene emesso regolarmente ed è certamente sempre uguale, per cui credo che sia la tua fotocamera a non interpretarlo sempre in modo corretto. Come ultima prova dovresti distanziare in modo abnorme gli impulsi, tipo ogni 15 secondi; se in queste condiziono non perdi un colpo vuol dire che è lei dopo ogni scatto a dover compiere qualche operazione che non sempre la mette in condizioni di essere pronta per l'impulso successivo; hai detto di aver provato fino a 6-7 secondi, prova fino a 15 e vediamo che succede

idem appena provato ne becca uno ogni due o tre.
ma non è sicuramente questo, ho anche usato una schedina sd classe 10 che usa apposta per i video..

l'unica è fare la prova del 9 con un'altra macchina.. o ci sono altre possibilità?

forse qualcosa nella libreria, non so come funziona, ma se ogni macchina o marca ha il proprio sistema di comunicazione può essere che ci sia qualcosa di non corretto che viene trasmesso :cold_sweat:

giusto per curiosità sto provando a rivedere la funzione per triggerare la canon..
allora, si parte da questo articolo: www.doc-diy.net :: Canon RC-1 remote control reverse engineered
e viene dato questo codice: www.doc-diy.net :: DIY Canon RC-1 IR remote control clone
(scritto in puro C, non arduino)

e il codice che ho trovato nella libreria è questo:

void shutterNow()
{
  for(int i=0; i<16; i++) { 
    digitalWrite(_pin, HIGH);
    delayMicroseconds(11);
    digitalWrite(_pin, LOW);
    delayMicroseconds(11);
  } 
  delayMicroseconds(7330); 
  for(int i=0; i<16; i++) { 
    digitalWrite(_pin, HIGH);
    delayMicroseconds(11);
    digitalWrite(_pin, LOW);
    delayMicroseconds(11);
  }
}

confrontando i due codici ho visto che il delayTime potrebbe essere 15 e non 11,
ma la cosa che proprio non capisco è quando parla di Burst frequency, che vuol dire? possibile che con il leonardo la cosa sia diversa?

La frequenza di burst dovrebbe essere quella di pilotaggio del LED IR, e da quello che leggo mi pare di capire che sia intorno ai 32KHz, quindi forse non è in grado di pilotare correttamente quel LED che è invece a 38KHz, ma sono mie supposizioni; inoltre mi pare di capire che sia fondamentale settare correttamente la tempistica in base al clock al quale lavora il micro; quindi gli elementi che giustificano il malfunzionamento ci sarebbero, purtroppo non ho mai fatto prove con queste lib, quindi non si aiutarti oltre. Inizia a fare qualche temtativo con i delay

oddio no non saprei cosa mettere.. ho provato a documentarmi un po' su wikipedia
ho capito che 1khz sono mille oscillazioni al secondo, quindi..
diciamo che il leonardo va a 38khz, il led deve essere pilotato a 32khz, devo mettere del delay.. x, devo trovare questa x per cui 38 hz * x secondi = 32 hz; e 1 hz è un battito ogni 1/T s..
x = 38/32 = 1.1875.. e poi??
e delay o delayMicroseconds? direi delay.. millisecondi.., visto che parliamo di kilo hz.. ma sto sparando a caso più che altro..

non so non ho capito bene come deve stare in piedi il ragionamento..

non è così semplice, intanto il LED IR è a 38KHz mentre la lib sembra generare 32kHz, quindi bisognerebbe modificare la lib per ottenere 38khz, non puoi certo farlo aggiungendo dei delay; a questo punto, senza l'aiuto di uno che la conosce diventa poco possibile risolvere il problema.

bah.. colto dalla disperazione ho iniziato a dare i numeri prima di spegnere il computer..
ho utilizzato il codice che ho postato sopra ma al posto di delayMicroseconds(11) ho messo 10,
e va decisamente meglio di prima, su una 50 di scatti me ne salta solo 1 o 2 direi che va benissimo rispetto a rpima....

ma comunque una cosa, che cosa si intende come velocità del leonardo a 32khz? dov'è scritto? ho provato a guardare le specifiche del leonardo ma non c'è nulla che sia un numero vicino al 30 della grandezza di khz..

32KHz NON è la velocità di Leonardo, il cui clock è 16 MHz, bensì la frequenza che il micro di Leonardo genera sul pin che pilota il LED IR, lo fa mediante opportuna manipolazione dei registri, cosa che avviene certamente a livello di libreria; quindi si potrebbe verificare qual è il punto della lib che genera i 32KHz e portarli a 38Khz; però se già agendo sui delay, come ti consigliavo prima sei arrivato a questi risultati è una cosa buona; secondo me pilotando il LED a 38khz si risolve tutto.

Se il codice è quello postato, allora la risposta è: No. Quella libreria non manipola nessun registro.
Genera un'onda quadra semplicemente con la tecnica del bit-banging, ossia mette HIGH/LOW velocemente il segnale del pin.

void shutterNow()
{
  for(int i=0; i<16; i++) { 
    digitalWrite(_pin, HIGH);
    delayMicroseconds(11);
    digitalWrite(_pin, LOW);
    delayMicroseconds(11);
  } 
  delayMicroseconds(7330); 
  for(int i=0; i<16; i++) { 
    digitalWrite(_pin, HIGH);
    delayMicroseconds(11);
    digitalWrite(_pin, LOW);
    delayMicroseconds(11);
  }
}

Partendo dall'articolo in cui si menzionano i tempi richiesti dalla macchina fotografica, hanno scritto questo codice che dovrebbe simulare quando richiesto in tema di frequenza e tempi di on/off dell'impulso.
Ovviamente tutto si basa sul tempo che il micro impiega ad eseguire la digitalWrite, che non è proprio velocissima. Senza un frequenzimetro per misurare il segnale che ti esce sul pin, è difficile. Non ti resta che andare per tentativi. Potresti manipolare direttamente i registri relativi per guadagnare in tempi di esecuzione.

Bene, il codice che hai postato rappresenta il burst, cioè il treno di impulsi: sono 16+16 intervallati da una pausa; la precisione non ha molta importanza, però se quei valori generano circa 32KHz sono lontani dal range del LED IR, seppur riconosciuti. Quindi lui può agire variando contemporaneamente quei quattro "11" oppure variando la pausa; certo un oscilloscopio aiuterebbe, ma a questo punto servirebbero anche le specifiche di pilotaggio della fotocamera.

Ok.. insomma senza frequenziometro ne oscillosciopio non faccio molto, e non li ho ne saprei come usarli.

Il tempo esatto del bit-banging dovrebbe essere 15 microsecondi. Ma arduino ci impiega un po' a fare la digitalWrite.. quindi bisogna sottrarre qualcosa a questo tempo..

Il fatto che con Arduino UNO sembrava andare meglio quando avevo fatto le prove un mesetto fa.. si può spiegare con fatto che l'UNO magari il tempo impiegato per la digitalWrite era leggermente minore..

bah, più o meno ho capito, non saprei come risolvere se non a tentativi random, per fortuna che ora la macchna va molto meglio.. spero che questo post sia utile anche a qualcunaltro!