Modifications

Sauter à la navigation Sauter à la recherche
2 901 octets ajoutés ,  5 septembre 2012 à 10:46
aucun résumé de modification
Ligne 64 : Ligne 64 :     
  <nowiki>
 
  <nowiki>
  Du code ici
+
 
 +
 
 +
    // This sketch will send out a Nikon D50 trigger signal (probably works with most Nikons)
 +
    // See the full tutorial at http://www.ladyada.net/learn/sensors/ir.html
 +
    // this code is public domain, please enjoy!
 +
    int IRledPin = 13; // LED connected to digital pin 13
 +
    // The setup() method runs once, when the sketch starts
 +
    void setup() {
 +
    // initialize the IR digital pin as an output:
 +
    pinMode(IRledPin, OUTPUT);
 +
    Serial.begin(9600);
 +
    }
 +
    void loop()
 +
    {
 +
    Serial.println("Sending IR signal");
 +
    SendNikonCode();
 +
    delay(60*1000); // wait one minute (60 seconds * 1000 milliseconds)
 +
    }
 +
    // 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, you can also change this to 9 if its not working
 +
    digitalWrite(IRledPin, LOW); // this also takes about 3 microseconds
 +
    delayMicroseconds(10); // hang out for 10 microseconds, you can also change this to 9 if its not working
 +
    // 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);
 +
    }
 
  </nowiki>
 
  </nowiki>
 +
 +
void pulseIR(long microsecs) is our helper procedure, it will create the PWM IR signal like we saw before. I used my scope to fine-tune it so that the delays added up right. We use the not-often-discussedcli()and sei()procedures to turn off interrupts. The arduino does a couple things in the background like looking for serial data to read or write, keeping track of time, etc. Most of the time we can just ignore it but for delicate high speed signals like this we want to keep quiet so that we get a nice clean signal
 +
 +
If you look at SendNikonCode() you will see the IR command code that we deduced in the previous project by timing the pulses from the IR sensor.
 +
 +
[[Image:IR-Interval-5.jpg]]
 +
 +
We wired this up and it worked great, make sure to point the IR LED at the camera properly
 +
 +
[http://github.com/adafruit/Nikon-Intervalometer You can also get the latest code at github]
 +
    
{{ADF-Accord}}
 
{{ADF-Accord}}
    
{{MCH-Accord}}
 
{{MCH-Accord}}
29 861

modifications

Menu de navigation