Tato stránka navazuje na článek na serveru astro.cz, věnovaný automatizovanému fotografování úplného zatmění Slunce. Jsou zde uvedeny některé technické a programátorské detaily, které se do článku nevešly. Budou průběžně aktualizovány.

Vítejte na stránce věnované fotografování zatmění Slunce

pomocí PC/notebooku/Arduina.

Menu:

GPHOTO2

Program gphoto2 je k dispozici patrně pro všechny známější linuxové distribuce (Fedora, Debian,...) a také pro uživatele MacOS. Dorozumí se s více jak 2300 fotoaparáty a umožňuje ovládání fotoaparátu přes sériovou USB linku. V případě fotografování úplného zatmění Slunce umí fotoaparátu poslat sérii příkazů například pro fotografování koróny, které ji exponují v dynamickém rozsahu 10 a více expozičních čísel.

Ovládání programu, resp. fotoaparátu, je velmi jednoduché. Fotoaparáty připojené k počítači USB kabelem zjistíme příkazem

gphoto2 --auto-detect

Výpis může vypadat třeba takto:

K počítači na portu usb:002,018 je připojen fotoaparát Canon 5D MkII. Ovládat prostřednictvím programu gphoto2 můžeme řadu parametrů. Expoziční hodnoty, tj. rychlost závěrky, clona a citlivost se nastavují pomocí klíčových slov shutterspeed, aperture a iso. Chceme-li například zjistit, jaké hodnoty clony lze na objektivu připojeném k fotoaparátu nastavit, napíšeme příkaz

gphoto2 --port=usb:002,018 --get-config aperture,

kde přes parametr --port předáváme označení portu, ke kterému je fotoaparát připojen. Pokud máme připojen jen fotoaparát, lze parametr --port (po zavolání --auto-detect) vynechat. Výpis příkazu s dotazem na možná nastavení clony může vypadat takto:

Za slovem Current je informace o aktuálně nastavé cloně (4). Změna hodnoty clonové čísla se provede použitím příkazu --set-config a uvedením hodnoty clony, například 8:

gphoto2 --port=usb:002,018 --set-config aperture="8",

Hodnota v nastavení --set-config aperture se musí shodovat s jednou z hodnot uvedenou ve výpisu možných nastavení clony. Jinak se příkaz neprovede. Například není možné nastavit clonu 4.0, musíme zadat 4.

Podobným příkazem můžeme měnit rychlost závěrky a citlivost. GPhoto2 umí také přepnout režim fotoaparátu (M,Tv,Av,...) bez ohledu na nastavení voliče na těle fotoaparátu. Následující řádky ukazují sekvenci příkazů, které fotoaparát přepnou do módu M (v něm lze nastavovat všechny expoziční parametry - čas, clonu a citlivost), nastaví ukládání obrázků v RAW formátu, nastaví kontinuální snímání a zvolí jako úložiště snímků paměťovou kartu ve fotoaparátu (funguje pro Canon 5D MkII, pro jiné fotoaparáty nutno otestovat, popř. upravit):

gphoto2 --port=usb:002,018 --set-config autoexposuremode="Manual" --set-config imageformatexthd="RAW"

gphoto2 --port=usb:002,018 --set-config drivemode="Continuous" --set-config capturetarget="1"

Například pro Canon 50D musíme upravit hodnotu parametru drivemode. Dotazem --get-config=drivemode dostaneme výsledek:

Můžeme si vybrat mezi dvěma rychlostmi kontinuálního snímání - s nízkou (~3 snímky/s) a vysokou (~5 snímků/s) rychlostí. Příkaz by pak mohl vypadat takto:

gphoto2 --port=usb:002,018 --set-config drivemode="Continuous low speed" --set-config capturetarget="1"

nebo s předáním číselné hodnoty

gphoto2 --port=usb:002,018 --set-config drivemode=2 --set-config capturetarget="1"

Zbývá ještě zmáčknout spoušť... To je možné provést, v případě fotoaparátů Canon (ověřeno na 5D MkII a 50D), dvěma způsoby. Univerzální, který zřejmě bude fungovat na všech fotoaparátech, je použití příkazu --capture-image,

gphoto2 --port=usb:002,018 --capture-image

Další příkazy jsou fotoaparátem přijímány až po uložení snímku na paměťovou kartu. Rychlejší snímkování lze pořídit pomocí příkazu --eosremoterelease. Tento příkaz bude nejspíše podporován jen u (některých) zrcadlovek Canon, nutno ověřit pro daný fotoaparát. Stisk spouště je pomocí uvedeného příkazu zavolán příkazy

gphoto2 --port=usb:002,018 --set-config eosremoterelease=2 --wait-event=0.5s --set-config eosremoterelease=4 --wait-event=1s

Hodnota 2 předaná parametru eosremoterelease znamená stisk spouště, počkáme půl vteřiny a spoušť uvolníme (eosremoterelease=4). Poslední příkaz čeká jednu vteřinu na uložení snímku alespoň do vyrovnávací paměti fotoaparátu. Tuto hodnotu je třeba odladit s ohledem na expoziční dobu. Pokud je příliš krátká, nebude fotoaparát další příkazy přijímat a nastavená sekvence snímání se tím pokazí.

Další informace ohledně přípravy fotografování sluneční koróny programem gphoto2 naleznete na tomto videu:



Zde jsou ke stažení ve videu zmiňované skripty: capture_total_eclipse a total_eclipse .

EOS_ECLIPSE

Program eos_eclipse je inspirován programem multican. K ovládání fotoaparátu využívá knihovnu libgphoto2 a v principu není omezen jen na fotoaparáty značky Canon. Program byl testován na fotoaparátech Canon 5D MkII a 50D.

Zdrojové kódy programu lze stáhnout zde. Archiv rozbalíme příkazem

tar xvf eos_canon_src.tar.gz

V nově vytvořeném podadresáři eos_eclipse_src jsou uloženy zdrojové kódy. Ty je třeba přeložit. K úspěšnému překladu je potřeba mít nainstalované knihovny libgphoto2 a ncurses, překladač gcc a program make. Překladač gcc i program make jsou součástí linuxových distribucí. Překlad provedeme zavoláním příkazu make. Po úspěšném překladu se v adresáři vytvoří spustitelný soubor eos_eclipse.

Program rozeznává připojené fotoaparáty podle výrobního čísla. Ne vždy se programem zjištěné výrobní číslo shoduje s číslem uvedeným na štítku na těle fotoaparátu. Připojené fotoaparáty zjistíme zavoláním programu bez parametrů, tj.

./eos_eclipse

Výsledek příkazu může vypadat třeba i takto:

Vidíme, že výrobní číslo detekované programem je dokonce záporné. Nejspíše se jedná o chybu v knihovně libgphoto2. Pokud se toto stane, budeme za výrobní číslo považovat absolutní hodnotu nalezeného čísla.

Programu musíme předat vstupní soubor, který bude popisovat co a jak se má během zatmění fotografovat. Chceme-li fotografovat celé zatmění, může vstupní soubor vypadat třeba takto:

enter
p 1/4000 5.6 100 5
enter
b 1/4000 5.6 100
enter
c 1/4000 5.6 100
c 1/2000 5.6 100
c 1/1000 5.6 100
c 1/500 5.6 100
c 1/250 5.6 100
c 1/125 5.6 100
c 1/60 5.6 100
c 1/30 5.6 100
c 1/15 5.6 100
c 1/8 5.6 100
c 1/4 5.6 100
c 0.5 5.6 100
c 1 5.6 100
c 2 5.6 100
c 4 5.6 100
enter
b 1/4000 5.6 100
enter
p 1/4000 5.6 100 5
enter
end

Řádky s příkazem enter znamenají, že program čeká na stisk klávesy enter. Druhý řádek

p 1/4000 5.6 100 5

definuje, jak se bude fotografovat částečná fáze zatmění. Vhodné hodnoty expozičních časů lze zjistit zde. V našem případě se bude částečná fáze (p - partial, částečná) exponovat časem 1/4000s, clona bude nastavena na 5.6 a ISO na hodnotu 100, snímky se budou pořizovat každých 5 vteřin. Exponování částečné fáze je ukončeno stiskem enteru.

Další řádek

b 1/4000 5.6 100

se týká fotografování Baily perel (písmenko b na začátku řádku), tj. přechodové fáze mezi částečnou a úplnou fází. Fotografuje se již bez slunečního filtru. Expoziční hodnoty jsou stejné jako v případě fotografování částečného zatmění. Program v této části zatmění simuluje trvalý stisk spouště (fotoaparát musí být přepnut do kontinuálního režimu snímkování) a do dalšího stisku enteru fotografuje několik snímků za vteřinu.

Řádky začínající písmenem c fotografují úplnou fázi zatmění, resp. sluneční korónu, řadou expozic s proměnným expozičním časem (lze měnit i ISO, viz článek). V našem případě fotografujeme s časy od 1/4000s do 4s, tj. pokryjeme dynamický rozsah 14 expozičních čísel.

Na dalších řádcích se ji opakuje fotografování Bailyho perel (na konci úplné fáze) a snímání je ukončeno časosběrem částečné fáze. Ukázku použití programu eos_eclipse si můžete prohlédnout na videu níže:

PHOTO-ECLIPSE-INO

Ovládat fotoaparát, tedy konkrétně zrcadlovku Canon, lze i bez notebooku/počítače. Respektive pécéčka. Existují i platformy, které umí skoro totéž co výše uvedené programy a vejdou se do paměti malého procesoru. Jednou z nich je Arduino. Photo-Eclipse-ino vychází z projektu Olega Mazurova, který pomocí protokolu PTP (Picture Transfer Protocol) dokázal ovládat například nastavení expozičních hodnot.

Photo-Eclipse-Ino je složeno z desky Arduino Uno Rev.3, do které je připojen tzv. USB shield a do něj je zapojena deska s několika součástkami a konektory. Expozice zatmění Slunce se ovládá jen jedním tlačítkem. Expoziční hodnoty se zobrazují na LCD displeji. Ze zařízení vede do fotoaparátu USB kabel (mezi fotoaparátem a USB shieldem) a kabel do konektoru externí spouště fotoaparátu (na obrázku je konektor označen černou čarou s textem).


Schéma zapojení desky ovládání fotoaparátu je zde:

Ovládání externí spouště fotoaparátu (konektor označený EOS Shutter) je opticky odděleno fototranzistorem. Na Arduinu je ovládání spouště připojeno na pin D2, na kterém lze zavolat přerušení. To znamená, že po stisku tlačítka se ihned provede požadovaná akce. Zákmity ovládacího tlačítka (konektor Shutter Button) jsou ošetřeny invertujícím Schmittovým klopným obvodem a RC členem.

Externí spoušť je připojena kablíkem s 2.5mm stereo jack-konektorem (platné pro Canon 5DMkII/50D). Zapojení konektoru je následující:

"Špička" konektoru je spojena s pinem 1 konektoru EOS Shutter (P2), poslední část se zemí (pin 2), prostřední část není zapojena. Pokud se zapojí obráceně je trvale stisknuta spoušť.

V programu EOSRemote_Eclipse jsou naprogramovány funkce pro fotografování částečného zatmění, Bailyho perel a koróny za úplné fáze.

Částečná fáze se podobně jako v programu Eos_eclipse snímá časosběrem. Funkci se předává časový interval snímkování v sekundách. Čas expozice je zadán v těle této funkce:

void PartialEclipse(int interval) {
       uint8_t T;
       T=0x98;
       Eos.SetProperty(EOS_DPC_ShutterSpeed,T); // 1/4000 s
       delay(250);

       if (WhatIsShooting==0 || WhatIsShooting==4 && IsShooting==1) {
             if ((millis()-timelapse)>interval*1e3) {
                   Eos.Capture();
                   timelapse=millis();
             }
             Usb.Task();
       }
}

Času 1/4000s odpovídá v tabulce expozičních časů hodnota 0x98. Tabulka je uložena v souboru eosvaluestitle.h. Funkce pro expozici Bailyho perel vypadá podobně,

void BeadsEclipse() {
       uint8_t T;
       T=0x98;
       Eos.SetProperty(EOS_DPC_ShutterSpeed,T); // 1/4000 s
       delay(250);
       while (1) {
             PressShutter();delay(100);ReleaseShutter();
             delay(1000);
       }
}

Stisk spouště se simuluje voláním funkcí PressShutter() a ReleaseShutter(), snímek se exponuje každou vteřinu (delay(1000)) a snímkování se ukončí stiskem ovládacího tlačítka, které vyvolá přerušení a nekonečná smyčka (while(1)) se tím ukončí.

Úplná fáze zatmění se fotografuje sadou snímků s různým expozičním časem. V programu se o fotografování koróny stará funkce

void TotalEclipse() {
      uint8_t T;
       int i;
       int waiting_time;
       float delay_time0;
       T=0x98; // 1/4000s
       delay_time0=1.0/4000.0;
       Eos.SetProperty(EOS_DPC_ShutterSpeed,T); // 1/4000 s
       delay(250);
       for (i=0;i<15;i++) {
             Eos.Capture();
             if (delay_time0<1) {
                   waiting_time=2500;
             } else {
                   waiting_time=delay_time0*1000+2500;
             }
             delay(waiting_time);
             T=T-8; // T->T*2 (shift of -1EV)
             delay_time0=delay_time0*2.0;
             Eos.SetProperty(EOS_DPC_ShutterSpeed,T); // new shutterspeed
             delay(250);
             Usb.Task();
             delay(250);
       }
       IsShooting=0;
       WhatIsShooting++;
}

Exponovat se začíná s časem 1/4000s a expoziční čas se pro každý další snímek zdvojnásobí. V tabulce expozic (eosvaluestitle.h) zjistíme, že změna času o -1EV odpovídá odečtení osmičky od "kódu" času. Ve funci TotalEclipse se v cyklu provede 15 expozic, po každé expozici se čeká určitou dobu na uložení snímku na kartu. Tuto dobu je potřeba odladit pro daný typ fotoaparátu. Pokud je příliš krátká hrozí situace, že fotoaparát nebude přijímat další příkazy, dokud neuloží snímek. Po skončení série expozic se nastaví nové hodnoty pomocných proměnných IsShooting a WhatIsShooting.

V programu lze ve funkci loop() navolit, zda-li se bude exponovat celé zatmění nebo jen koróna, popř. i Bailyho perly. Připojení externí spouště fotoaparátu je potřebné jen pro fotografování Bailyho perel (rychlá sekvence), ostatní expozice se řídí příkazy přes USB kabel. Sekvence fotografování zatmění je v Arduinu zapsána a nelze ji měnit jinak, než upravit zdrojový kód, ten přeložit a nahrát do Arduina.

Pod videem jsou uvedeny odkazy na zdrojové kódy programu a knihovny pro komunikace protokolem PTP a USB. Podařilo se mi uvedený program úspěšně přeložit v prostředí Arduino IDE verze 1.5.2 pod OS Windows 7. S jinými verzemi IDE se překlad nezdařil. Mezi odkazy naleznete i soubory k plošnému spoji, který je připojen k USB shieldu pro program KiCAD. Plošný spoj si lze nechat vyrobit například na www.plosnaky.cz.


Odkazy:

GPS-ECLIPSE-INO

GPS-Eclipse-ino není aplikace na bázi Arduina určená k ovládání fotoaparátu. Je tvořena GPS modulem (typ GPS NEO-6M GYNEO6MV2), který je přes sériovou linku připojen k desce Arduino Nano v. 3. Z GPS modulu jsou vyčteny souřadnice pozorovatele a na jejich základě jsou určeny parametry zatmění 21.8.2017. Je použit algoritmus výpočtu využívajícího tzv. Besselovy elementy, které jsou k dispozici na stránkách NASA. Postup výpočtu lze nalézt například v [1], ukázka funkčnosti je v článku na astro.cz.

Schéma zapojení je uvedeno níže s odkazem na hex soubory pro nahrání do Arduina Nano.

Ve schématu chybí připojení pinu 7 na LCD displeji Nokia 5110. Tento pin slouží k zapnutí osvětlení displeje (spojení s GND). K napájení celého zařízení lze použít power-banku připojenou k usb konektoru na desce Arduina.

  • hex soubor s tabulkou Besselových elementů pro zatmění 21.8.2017
  • hex soubor s tabulkou Besselových elementů pro zatmění 20.3.2015, pro ověření funkčnosti

Hex soubor se nahraje do Arduina prostřednictvím programu avrdude (instaluje se spolu s Arduino IDE) příkazem

avrdude -p m328p -c arduino -b 57600 -P /dev/ttyUSB0 -U GPS_Eclipse_ino_nano_2017.cpp.hex,

kde /dev/ttyUSB0 je označení portu, na kterém je Arduino Nano připojeno k počítači. Ve vašem případě se může změnit, je třeba napsat správnou hodnotu.

Literatura

[1] Jean Meeus, Carl C. Grosjean, Willy Vanderleen, Canon of Solar Eclipses, Oxford, Pergamon Press, 1966.

počítadlo.abz.cz