Canon EOS sterowany Arduino

Autorzy: KG + ?
Zaawansowanie: już działa (choć są plany rozbudowy)
Cel: fotografia timelaps, astrofotografia, nauka Arduino, nauka programowania

Motywacja

Podczas wakacyjnego pobytu w polskich Tatrach byłem świadkiem pięknego spektaklu – około godziny 6-tej nad ranem niespodziewanie pojawiła się mgła i szybko opanowała całe góry, przeciskając się między koronami drzew… Żałowałem, że nie jestem przygotowany na timelapsa, którego nie jestem wielkim fanem (choć często podziwiam!). Pojedyncze zdjęcia, które wykonałem nie oddają ani dynamiki, ani magii tamtej chwili – wszystko rozegrało się w kwadrans, a mi pozostały jedynie wspomnienia… Powie ktoś – to Twój aparat nie ma samowyzwalacza? cyklicznego? No niestety nie ma, bo to lustrzanka – a tutaj się płaci za każdy „ficzer” 😛 Dlatego po powrocie do domu odpaliłem Arduino i postanowiłem kontrolować swojego EOSa mikrokontrolerem 🙂 No i na koniec dodam, że wyzwalanie automatyczne to jedno, natomiast fotografia nieba – to drugie. Tu już nie poradzi byle tani aparat, bo ekspozycja często jest po kilka minut. Takiego czasu nie ma w standardzie. Trzeba wykorzystać tryb B i samemu trzymać tyle czasu otwartą migawkę, ile chcemy (a czas kontrolować zerkając na zegarek lub komórkę :P). Ale ja nie chcę trzymać „spustu”, niech robi to Arduino.

Poruszenie zdjęć (popsucie!) przy dłuższej ekspozycji

Raczej nie ma problemu z poruszeniem zdjęć, gdy robimy je z czasem 1/500 s czy nawet 1/100 s (oczywiście obowiązuje nas zasada 1/ogniskowa). Jednak dla dłuższych ekspozycji (1/2 s, lub nawet kilka sekund) w momencie naciskania spustu w aparacie możemy spowodować drgania. Producenci oferują albo tryb „zegarek” (na ogół 10 s opóźnienia, wykorzystywany przede wszystkim do zdjęć grupowych, na których sami chcemy być) lub „mały zegarek” (np. 2 sekundy opóźnienia). Te dodatkowe opóźnienie zagwarantuje, że drgania po wciśnięciu guzika się wygaszą, a nasze zdjęcie naświetli się bez poruszenia. Jednak nie zawsze jest to możliwe, lub nasz sprzęt posiada wiele ograniczeń (najczęściej softwerowych, bo dlaczego u licha mam wybierać pomiędzy 2 i 10 sekund, dlaczego nie mogę ustawić swojego ulubionego opóźnienia? Ponoć mogę, ale w sprzęcie za 10k pln :P). Z pomocą przychodzą rozwiązania „zdalnego” przycisku – bezprzewodowego, lub „na kabelku”.

Powyżej oryginalny pilot przewodowy do Canona EOS. Cena około 100zł, więc nie majątek. Ale zamienniki są już po ~20pln. Tanio jak barszcz, ale po co kupować? Ważne, że wejście to stereo audio jack 2.5mm (do EOS 350D, 400D, 60D i innych) to kwota około 2 zł.

Audio jack 2.5mm

Wejście do EOS-a to mini jack 2.5mm, o jego specyfikacji możemy przeczytać z Elektrodroida

Natomiast znaczenie kanału lewego i prawego odnaleźć można, np. tu. Jak widać, kanał LEWY to SHUTTER, a PRAWY to FOCUS.

Na poniższym zdjęciu: przewód ZIELONY to shutter, CZERWONY to focus a bez owijki to GND. Skąd to wiem? Doświadczalnie 😉 łączymy przewody i patrzymy, co się dzieje 😉 Nie ma obawy o problemy, gdy coś „źle” połączymy NIC się nie dzieje. Gdy połączymy „dobrze” jest akcja – zdjęcie, lub ruch obiektywu (oczywiście w trybie Auto-Focus). Moje testowanie na gołych przewodach widać na filmikach w kolejnej sekcji „Testowanie bez Arduino”. Poniżej zdjęcia i trochę pomiarów zachęcąjcych do samodzielnego próbowania:

Podczas normalnej pracy aparatu (tj. kadrowania), napięcie na pinach focus, shutter wynosi 3.3V, co  sprawdziłem miernikiem – poniżej sondy podpięte do GND i shutter (ZIELONY przewód).

Prąd sprawdziłem na łapaniu ostrości, bo miernik ma swoją bezwładność i potrzebuje czasu, aby pomierzyć wartości. Ostrzenie trwa chwilkę (dłuższą niż pstryk zdjęcia) więc właśnie to wykorzystałem. Wyszło mi 0.069 mA co widać na zdjęciu poniżej:

Co wynika z tych pomiarów? Najwyraźniej elektronika aparatu działa na 3.3V, a opornik podłączony do przycisku ma wartość 47.826 kΩ (proste prawo Ohma: R=U/I, obie wartości przed chwilą zmierzyłem). Pewnie ten opornik to 50 kΩ lub coś bardziej standardowego, u  mnie po prostu taki (tani) miernik i takie pomiary. Nie, nie będę tego jakoś specjalnie wykorzystywać, ale już wiem, że do Arduino UNO bezpośrednio nie podepnę – bo działa na 5V a nie na 3.3V. Coś z tym zrobić trzeba.

Testowanie bez Arduino

Wymuszanie ustawienia ostrości. U mnie przewód koloru czerwonego (focus) i GND.

Zwolnienie migawki – u mnie przewód koloru zielonego (shutter) i GND. Dla bajeru wysunąłem lampkę 😉

Kod

Prosty kod do automatycznego wyzwolenia migawki automatycznie co 5 sekund (TWAIT), wciśnięcie „przycisku” trwa 2 s (TPRESS). A dlaczego przyciski są podpięte pod analogi?

#define BFOCUS A3
#define BTRIGG A0
#define TWAIT 5000
#define TPRESS 2000
void setup() {
   pinMode(BFOCUS, INPUT);
   pinMode(BTRIGG, INPUT);
   Serial.begin(9600);
}
int licz=0;
void loop() {
Serial.print(millis());
Serial.print(" ");
Serial.print(licz);
Serial.print(" ");
Serial.print("BTRIGG ON ");
pinMode(BTRIGG, OUTPUT);
digitalWrite(BTRIGG, 0);
delay(TPRESS);
pinMode(BTRIGG, INPUT);
Serial.println("BTRIGG OFF");
delay(TWAIT-TPRESS);
licz++;
}

Wyzwalanie migawki/ostrości to zwarcie odpowiednich przewodów do masy – czyli gdy podłączę je do Arduino, to muszę podać sygnał LOW – proste. Ale ale… aby nie było zdjęcia – muszę podać stan HIGH, czyli 5V – no a wcześniej sprawdziłem, że aparat działa na 3.3V. Dlatego nie mogę więc używać digitalWrite(HIGH). Mogę zastosować tranzystor (pewnie MOSFET), ale kombinuję bez niego… Wydaje się bezpieczne podpiąć przewód migawka/ostrość do pinów cyfrowych w Arduino w trybie INPUT – nic nie powinno się dziać. Sprawdzam to (w końcu to podejście fizyka!) ale okazuje się, że przy takim podłączeniu napięcie spada o połowę (do 1.7V). Zmieniam tryb INPUT na INPUT_PULLUP i bez zmian. Dlaczego tak się dzieje – nie wiem… Kombinuję dalej i podłączam te przewody do wejść analogowych. Bingo! nie ma spadku napięcia – ciągle mam 3.3V. I co z tego? Jak teraz wymusić zwarcie do masy tych przewodów? Ano przełączyć analogi w tryb cyfrowy i dać bezpieczne digitalWrite(LOW). Ponownie bingo! to zadziałało! W sumie dlaczego – nie wiem 😛 Wnioski? Czasami można kombinować – w moim przypadku wszystko wydawało się bezpieczne, bo podpinanie elektroniki 3.3V do pinów w trybie INPUT musi być OK. Czyli to nie totalne szaleństwo, a kontrolowane szaleństwo 😉

Śliwki robaczywki – czyli pierwsze testy 😉

Uważne oko czytającego ten blog zauważy Arduino UNO zasilane akumulatorkiem 9V (podłączonym przez wejście baryłkowe) leżące na poszyciu daszku.

Pierwsze próby – 37 zdjęć w trybie manualnym (1/800s, f8, ISO 100) wykonanych co 1 min. Potem sklejone w filmik z 25 fps.