Wyzwalanie aparatu firmy Nikon za pomoca portu IR


Tomasz Bartuś



2016-09-22
Wyzwalanie aparatu firmy Nikon za pomoca portu IR

Wstęp

Projekt układu wyzwalania aparatów firmy Nikon za pomocą kanału podczerwieni (IR) zrealizowano wg pomysłu i rozwiązania autorstwa Bartosza Zielińskiego opublikowanego na portalu Majsterkowo.pl

Lista części

  1. platforma prototypowa Arduino (tu Leonardo),
  2. dioda LED,
  3. dioda IR,
  4. przycisk montażowy,
  5. płytka prototypowa,
  6. rezystor 470Ω (2 szt.),
  7. rezystor 10kΩ (1 szt.),
  8. przewody.

Szkic:

int diodaIR = 8;                           // PIN diody IR
int diodaLED = 9;                          // PIN diody LED
const int okres_sygn_38kHz = 26;           // okres trwania 1 taktu sygnału o częstotliwości 38kHz [mikrosek.] (T=1/f)

// Funkcja opisująca działanie pojedynczego taktu sygnału
void sygnal_38kHZ(){
   digitalWrite(diodaIR, HIGH);
   delayMicroseconds(okres_sygn_38kHz / 2); // połowa okresu => współczynnik wypełnienia = 0,5
   digitalWrite(diodaIR, LOW);
   delayMicroseconds(okres_sygn_38kHz / 2); 
}

// Funkcja opisująca stan niski
void stan_1(int ilosc_cykli){
   for(int i = 0; i < ilosc_cykli; i++)
      sygnal_38kHZ();
}

// Funkcja opisująca stan wysoki
void stan_0(int ilosc_cykli){
   delayMicroseconds(ilosc_cykli * okres_sygn_38kHz);
}

// Funkcja generująca sygnał wyzwalający Nikon
void zrobZdjecie(){
  digitalWrite(diodaLED, HIGH);           // sygnalizacja LED wykonywania zdjęcia
  for (int i=0; i < 2; i++) {             // sygnał wzrocowy ma być powtórzony 2x
     stan_1(76);                          // 76 cykli "1"
     stan_0(1064);                        // 1064 cykli "0"
     stan_1(15);                          // 15 cykli "1"
     stan_0(60);                          // 60 cykli "0"
     stan_1(15);                          // 15 cykli "1"
     stan_0(136);                         // 136 cykli "0"
     stan_1(15);                          // 15 cykli "1"
     stan_0(2423*2);                      // 2423 cykli "0"
  }
   delay(100);                           //trzeba było przedłużyć, gdyż czas wysyłania 
                                         //informacji do aparatu był za krótki
  digitalWrite(diodaLED, LOW);
}
int button = 7;

void setup() { 
  pinMode(button, INPUT); 
  pinMode(diodaIR, OUTPUT); 
  pinMode(diodaLED, OUTPUT); 
} 

void loop(){ 
  if(digitalRead(button)){ 
    digitalWrite(diodaLED, HIGH); 
    zrobZdjecie();
    delay(400); //szybciej może aparat odmówić posłuszeństwa 
    digitalWrite(diodaLED, LOW); 
  } 
}

 
 

Doktorat

Spis treści
Rozdzialy
Abstrakt [pl]
Abstract [eng]