time lapse, test red infrarossi

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!

.. quindi tendenzialmente con un arduino MEGA (che, magari, è più veloce) potrebbe essere un valore di 12?

Visto che le prove sono semplici, prova a scendere a da 10 a 9, e prova anche ad aumentare o diminuire la pausa (a passi da 500, inutile usare valori inferiori)

mantissa00:
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..

La Leonardo e la UNO usano 2 micro differenti, può essere che ci siano leggerissimi tempi differenti di gestione delle porte. Però è una mia supposizione, non so.