Progetto Intervalometer per fulmini. Problema con il led.

Salve, rieccomi con un altro problema :sweat_smile:

Prendendo spunto dal progetto Intervalometer per fotocamere Nikon ho creato quest'altro che permette (in teoria) di comandare lo scatto della fotocamera tramite una fotoresistenza. Lo scopo e' quello di fotografare i fulmini. Il metodo alternativo e' quello di lasciare la fotocamera in posa Bulb per tempi piu o meno lunghi, ma non mi piace particolarmente. Lo sketch e il circuito vanno alla perfezione. Il problema sorge quando devo puntare il Led Ir verso il sensore della fotocamera. Ho fatto viarie prove a varie angolazioni. Se ad esempio lo punto perpendicolare al sensore non riceve il segnale, a qualsiasi distanza ( o se lo riceve e' dopo qualche impulso).
Per l'utilizzo che voglio farne e' fondamentale che vada al primo colpo. Inoltre ho notato che "di rimbalzo" funziona sempre, se punto il led verso superfici vicine.
Il led e' recuperato da un telecomando tv. Il sensore sono sicuro che non e' guasto perche' con il telecomandino originale Nikon va alla grande.

Allego un orribile schema che ho fatto :blush: : http://i.imgur.com/SxNpb.jpg
E lo sketch:

int IRledPin =  13;   
const int sensorPin = A0;
int sensorValue = 0;
int cal = 0;
int sens = 25;  //sensibilità 

long previousMillis = 0;       
long interval = 250;           

void setup()   {                
  
  pinMode(IRledPin, OUTPUT);      
  pinMode(sensorPin, INPUT);
  Serial.begin(9600);
  cal = analogRead(sensorPin);
  }
 
void loop()                     
{
  sensorValue = analogRead(sensorPin);
  
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval) {
    
    previousMillis = currentMillis;   
  Serial.println((sensorValue)-(cal+sens));
  }
  
  if(sensorValue > cal+sens) 
  SendNikonCode();
 
  
}
 
// This procedure sends a 38KHz pulse to the IRledPin 
// for a certain # of microseconds. We'll use this whenever we need to send codes
void pulseIR(long microsecs) {
  // we'll count down from the number of microseconds we are told to wait
 
  cli();  // this turns off any background interrupts
 
  while (microsecs > 0) {
    // 38 kHz is about 13 microseconds high and 13 microseconds low
   digitalWrite(IRledPin, HIGH);  // this takes about 3 microseconds to happen
   delayMicroseconds(10);         // hang out for 10 microseconds
   digitalWrite(IRledPin, LOW);   // this also takes about 3 microseconds
   delayMicroseconds(10);         // hang out for 10 microseconds
 
   // so 26 microseconds altogether
   microsecs -= 26;
  }
 
  sei();  // this turns them back on
}
 
void SendNikonCode() {
  // This is the code for my particular Nikon, for others use the tutorial
  // to 'grab' the proper code from the remote
 
  pulseIR(2080);
  delay(27);
  pulseIR(440);
  delayMicroseconds(1500);
  pulseIR(460);
  delayMicroseconds(3440);
  pulseIR(480);
 
 
  delay(65); // wait 65 milliseconds before sending it again
 
  pulseIR(2000);
  delay(27);
  pulseIR(440);
  delayMicroseconds(1500);
  pulseIR(460);
  delayMicroseconds(3440);
  pulseIR(480);
}

Grazie, Anispir.

prova a fare un condo di cartone, e metterlo intorno al led. in questo modo "miri" il fascio IR verso il sensore

e se la resistenza sul led fosse troppa? magari per quello non vede bene il segnale.. la butto li eh ..

lollotek:
e se la resistenza sul led fosse troppa? magari per quello non vede bene il segnale.. la butto li eh ..

Normalmente un led IR si pilota con una R da 100ohm, se ha messo una 220ohm gli manda metà corrente, effettivamente potrebbe creargli problemi;
@Anispir:
dovresti vedere se effettivamente lo stai pilotando a 38KHz, come dicono i commenti nello sketch, ma ti serve uno strumento di misura idoneo.
L'idea di lesto di creare un cono (ma anche un cilindro, tipo telescopio, per capirci) per puntare il fascio non è male; fai un po' di prove e vedi cosa ne tiri fuori.

In che stato é il IR-LED? Potrebbe essere ceco (superfice opaca in punta alla lente) in centro a causa del uso nel telecomando?
Prova con un altro IR-LED; non costano tanto.
Prova di usare l' entrata dell'scatto elettrico se il Tuo modello di macchina fotografica ce l'ha.
Ciao Uwe

Personalmente nell'intervallometro che ho realizzato per la mia Nikon ho adottato due strade, una agganciando la scatola (nella quale ho messo il circuito) sul cavalletto in modo tale che il led si trovi frontalmente a quello della fotocamera, un'altra basta portare fuori il led con due fili saldati sul + e - del led e proteggendo quest'ultimi con una guaina termoretraibile lasciando fuori solamente una parte del diodo (come nel telecomando), in questo modo puoi agganciare il led sempre sul cavalletto in modo tale che rimanga sempre frontale a quello della fotocamera, e ti tieni la scatola (o quello che hai) da un'altra parte.

ma queste besteie di reflex non hanno connettori fisici esterni da poter usare ?
non esistono ad esempio pulsanti per scattare ? si deve scattare per forza con tasto meccanico o infrarossi ?

@lesto: ottima idea...provero' senz'altro.

@lollotek: il tutorial usava quella resistenza, una prova con quella da 100 non mi costa nulla vediamo che succede.

@menniti: sono quasi certo che sia a 38khz. Il led deriva da un telecomando di tv.

@uwefed: ciao Uwe!...purtroppo ha solo l'entrata ir. Se aveva quella con Jack lo avrei fatto subito. Ho provato con 2 led diversi recuperati da telecomandi. Provero' con un terzo

@Cello62: il led e' gia' staccato dalla breadboard. Ci aggiungero' una guaina come dici.

@Testato: Pur essendo una reflex e' una Entry-level e non ha il connettore fisico.

Per quanto riguarda i tempi di reazione della fotocamera non trovo nulla, ma di Arduino?
Magari dico una boiata, ma dato che il Clock Speed e' di 16 MHz, vuol dire che lo sketch viene eseguito 16 000 000 volte al secondo?
Se cosi' fosse direi che sono piu' che sufficienti al mio scopo.

Grazie a chi ha risposto =)

Anispir:
Magari dico una boiata, ma dato che il Clock Speed e' di 16 MHz, vuol dire che lo sketch viene eseguito 16 000 000 volte al secondo?
Se cosi' fosse direi che sono piu' che sufficienti al mio scopo.

No, dice solo che il micro esegue 16.000.000 di cicli al secondo. Leggendo il datasheet, molte istruzioni semplici (parliamo di istrizioni in LINGUAGGIO MACCHINA, non istruzioni in linguaggi di alto livello come il C) richiedono 1 o 2 cicli macchina, però non è materialmente possibile ciò che dici.

stavo per dare la stessa risposta, e' importante capire la differenza tra il tempo necessario al ciclo macchina contro l'intero sketch.

leo ma fare 1+1=2 quanti cicli macchina occupa ? e quindi sul nostro 16MHz quante somme si possono fare al secondo ?

per misurare quanto tempo serve per fare 1+1 :

leggi la differenza con millis() tra un for di 1000 cicli, prima senza e poi con 1+1. La differenza dei due diviso per 1000 é il tempo per fare 1+1.

Ciao Uwe

Ad esser pignoli anche la lettura di millis influisce sul tempo di esecuzione. Per esser sicuri del tempo andrebbe calcolato quanti cicli macchina impiegano le istruzioni (sempre in linguaggio macchina) relative alla somma di 2 numeri. Qui però devo precisare che sommare 2 numeri in C è una cosa, in linguaggio macchina è un'altra. Ad esempio, potresti sommare 2 numeri contenuti in 2 variabili di tipo long (interi a 4 byte) ed il conto sarebbe lungo, oppure sommare 2 interi di tipo in (2 byte ciascuno) oppure 2 numeri di tipo byte (1 byte l'uno).