Go Down

Topic: Modif programme détecteur/déclencheur foudre. (Read 410 times) previous topic - next topic

coxcoxinelle

Bonjour a tous,

j'ai fabriquer un d'éclairs a l'aide de différents éléments pris de ci de la sur le web. 

J'ai un petit soucis de programmation, je m'explique :

le programme que j'ai injecter sert a déclencher un appareil photo a l'aide d'une led IR.
Moi je veux le faire déclencher par câble de télécommande.

j'ai donc remplacer la led IR par un optocoupleur.

Ma modif ne fonctionne pas, je pense que le programme est fait pour créer une sorte d'oscillation a envoyer vers la led IR.
J'imagine que c'est a cause de cela que l'optocoupleur ne commute pas.

quelqu'un peut il me dire si je cherche dans la bonne direction?
Et si tel est le cas, quelle modif dois-je apporter au programme pour passer le pin 12 en "on/off"

voici une copie du programme injecté :

// ----- C -------
/**
* arduino   Nikon IR remote with light(ning) sensor
* @license  Creative commons: Attribution-Noncommercial-Share Alike 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/)
* @Credit:  Aurelien ANTOINE (Nikon IR Remote Code) http://ilpleut.be/doku.php/code:nikonremote:start
* @Credit:  M Ribble (Lightning Trigger code and schematic) http://www.glacialwanderer.com/hobbyrobotics/?p=16
* @Author:  Jason Charles http://tinyurl.com/nikonlightning
* version   1.2
* date:     04/03/2012
* Modified by: Julien ARNOULD
**/

#define PIN_STATUS 13
#define PIN_IR_LED 12
#define FREQ 38400  // IR frequence
#define LIGHTNING_TRIGGER_ANALOG_PIN 0
#define TRIGGER_THRESHHOLD 50
#define TRIGGER_ADJUSTMENT_ANALOG_PIN 1
 
//séquence d'obturation (on, off, on, off ... en microsecondes)
unsigned long sequence[] = {2000,27830,390,1580,410,3580,400,63200,2000,27830,390,1580,410,3580,400,0};
int seq_l;
int lightningVal;
int triggerVal;

//OSCD est un retard dans la microseconde utilisé à chaque oscillation.
int oscd;
 
void oscillate(int pin, unsigned long n, int shine){
    int ir_status=0;
    while(n>0){
        n--;
        delayMicroseconds(oscd);
        ir_status  =  !ir_status;
        digitalWrite(pin,  ir_status && shine);
    }
}
 
void snap(){
    int i;
    digitalWrite(PIN_STATUS,  1);
    for(i=0;i<seq_l;i++){
        oscillate(PIN_IR_LED, sequence, i%2==0);
    }
    digitalWrite(PIN_STATUS,  0);
}
 
void setup() {
    lightningVal = analogRead(LIGHTNING_TRIGGER_ANALOG_PIN);
    triggerVal = analogRead(TRIGGER_ADJUSTMENT_ANALOG_PIN);
   
        int min=1, max=100, i;
    int last_oscd=0;
    unsigned long before, intervalle;
    oscd=max;
 
    seq_l = sizeof(sequence)/sizeof(unsigned long);
 
    pinMode(PIN_STATUS, OUTPUT);
    pinMode(PIN_IR_LED, OUTPUT);
    Serial.begin(9600);
 
    //ce «While» va traiter le meilleur "OSCD"
    Serial.println("Ready");
    while(last_oscd!=oscd){
        last_oscd=oscd;
        oscd=(min+max)>>1;
 
        before=millis();
        oscillate(PIN_STATUS, FREQ, 1);
        intervalle=millis()-before;
 
        if(intervalle >= 1000) max=oscd;
        else min=oscd;
 
        Serial.print(intervalle);
        Serial.print(" : ");
        Serial.print(min);
        Serial.print("<->");
        Serial.println(max);
    }
 
    Serial.print("oscd: ");
    Serial.println(oscd);
 
    //réécriture de la séquence matrice, on remplace toutes les valeurs de la microseconde par le nombre d'oscillation
    for(i=0;i<seq_l;i++){
        Serial.print(sequence);
        Serial.print("->");
        sequence = (sequence * FREQ) / (intervalle * 1000);
        Serial.println(sequence);
    }
}
 
 
void loop() {   
    {
  int cmd;
  int newLightningVal = analogRead(LIGHTNING_TRIGGER_ANALOG_PIN);
  int triggerVal = analogRead(TRIGGER_ADJUSTMENT_ANALOG_PIN);
  int triggerValCal = (triggerVal/6);
 
  Serial.print(lightningVal, DEC);
  Serial.print("|");
  Serial.println(triggerValCal, DEC);
   
  if (abs(newLightningVal - lightningVal) > triggerValCal)
  {
    snap();
    Serial.println("Shutter triggered");
    digitalWrite(PIN_IR_LED, 0);
    //delay(200);
  }

  lightningVal = newLightningVal;
}

}





Merci d'avance

dfgh

hello
tu n'as pas de reponses car tu n'as pas lu CECI

de plus tu n'es pas au bon endroit sur le forum

pomper un code sur internet n'est pas la solution
ton prg ne compile pas, il ne peut donc pas mal fonctionner
j'ai modifié ton prg pour qu'il mette la sortie 12 à 1 pendant 1 milliseconde
ce serait vraiment marrant que ton prg fonctionne

to prg ( sous toutes réserves que le principe de détection fonctionne
Code: [Select]
#define PIN_STATUS 13
#define PIN_OPTO 12
#define FREQ 38400  // IR frequence
#define LIGHTNING_TRIGGER_ANALOG_PIN 0
#define TRIGGER_THRESHHOLD 50
#define TRIGGER_ADJUSTMENT_ANALOG_PIN 1
 
//séquence d'obturation (on, off, on, off ... en microsecondes)
unsigned long sequence[] = {2000,27830,390,1580,410,3580,400,63200,2000,27830,390,1580,410,3580,400,0};
int seq_l;
int lightningVal;
int triggerVal;

//OSCD est un retard dans la microseconde utilisé à chaque oscillation.
int oscd;
 /*
void oscillate(int pin, unsigned long n, int shine){
    int ir_status=0;
    while(n>0){
        n--;
        delayMicroseconds(oscd);
        ir_status  =  !ir_status;
        digitalWrite(pin,  ir_status && shine);
    }
}
 */
void snap(){
    int i;
    digitalWrite(PIN_STATUS,  1);
  //  for(i=0;i<seq_l;i++){
  //     oscillate(PIN_OPTO, sequence[i], i%2==0);
  //  }
   delay(1);//délai pendant lequel le déclenchement est commandé
    digitalWrite(PIN_STATUS,  0);
}
 
void setup() {
    lightningVal = analogRead(LIGHTNING_TRIGGER_ANALOG_PIN);
    triggerVal = analogRead(TRIGGER_ADJUSTMENT_ANALOG_PIN);
   
        int min=1, max=100, i;
    int last_oscd=0;
    unsigned long before, intervalle;
    oscd=max;
 
    seq_l = sizeof(sequence)/sizeof(unsigned long);
 
    pinMode(PIN_STATUS, OUTPUT);
    pinMode(PIN_OPTO, OUTPUT);
    Serial.begin(9600);
 
    //ce «While» va traiter le meilleur "OSCD"
    Serial.println("Ready");
    while(last_oscd!=oscd){
        last_oscd=oscd;
        oscd=(min+max)>>1;
 
        before=millis();
        oscillate(PIN_STATUS, FREQ, 1);
        intervalle=millis()-before;
 
        if(intervalle >= 1000) max=oscd;
        else min=oscd;
 
        Serial.print(intervalle);
        Serial.print(" : ");
        Serial.print(min);
        Serial.print("<->");
        Serial.println(max);
    }
 
    Serial.print("oscd: ");
    Serial.println(oscd);
 
    //réécriture de la séquence matrice, on remplace toutes les valeurs de la microseconde par le nombre d'oscillation
    for(i=0;i<seq_l;i++){
        Serial.print(sequence[i]);
        Serial.print("->");
        sequence[i] = (sequence[i] * FREQ) / (intervalle * 1000);
        Serial.println(sequence[i]);
    }
}
 
 
void loop() {   
    {
  int cmd;
  int newLightningVal = analogRead(LIGHTNING_TRIGGER_ANALOG_PIN);
  int triggerVal = analogRead(TRIGGER_ADJUSTMENT_ANALOG_PIN);
  int triggerValCal = (triggerVal/6);
 
  Serial.print(lightningVal, DEC);
  Serial.print("|");
  Serial.println(triggerValCal, DEC);
   
  if (abs(newLightningVal - lightningVal) > triggerValCal)
  {
    snap();
    Serial.println("Shutter triggered");
    //digitalWrite(PIN_OPTO, 0);//déjà remis à 0 dans la fonction Snap
    //delay(200);
  }

  lightningVal = newLightningVal;
}

}
 

Go Up