Skocz do zawartości

Jak z kompakta zrobić automatyczne obserwatorium?


Kurak

Rekomendowane odpowiedzi

Witam!

 

1.Wstęp

W tym małym i dość ogólnym artykóliku postanowiłem przybliżyć niezwykłe możliwości jakie drzemią w naszych kompaktach, skrzętnie ukrytych przez producentów, a dokładnie przez firme Canon. Jak zapewne większość posiadaczy PowerShot'ów i innych nielustrzanek wie że istnieje nieoficjalna nakładka na oprogramowanie naszych małych skabów o nazwie CHDK (Canon Haker Development Kit) , który oprócz wielu bardzo przydatnych funkcji cały czas udoskonalanych (TUTAJ coś wiecej na ten temat) udostępnia nam możliwość programowania skryptów w uBasicu na nasze cacuszka. Nie trzeba chyba mówić co to oznacza dla nas! Wszak teraz można z naszego małego kompakciku zrobić automatyczne obserwatorium, stacje bolidową czy też wykrywacz ruchu jednym słowem co nam do głowy przyjdzie :D

 

2. Wymagania:

Nie trzeba być programistą, zawodowym informatykiem czy też geniuszem komputerowym aby zacząć uruchamiać i pisać proste ale jakże satysfakcjonujące skrytpy. Nie mniej do tworzenia przyda się chociaż podstawowa wiedza, nabyta na przykład w czasie nauki na Trubo Pascalu, na temat algorytmów i struktór jezyków programowania. No i oczywiście trzeba mieć aparat dla którego będziemy te skrypty pisać i testować, czyli jeden z tych oto modeli:

A450, Fw: 1.00d 
A460, Fw: 1.00d 
A530, Fw: 1.00a 
A540, Fw: 1.00b 
A550, Fw: 1.00c 
A560, Fw: 1.00a 
A570 IS, Fw: 1.00e, 1.01a 
A610, Fw: 1.00e, 1.00f, (1.00d with CHDK version for 1.00e) 
A620, Fw: 1.00f ( 1.00e is not compatible. You must upgrade to 1.00f first (see here)) 
A630, Fw: 1.00c 
A640, Fw: 1.00b 
A650 IS, Fw: 1.00d 
A700, Fw: 1.00b 
A710 IS, Fw: 1.00a 
A720 IS, Fw: 1.00c 
S2 IS, Fw: 1.00e, 1.00f, 1.00g, (1.00i with CHDK version for 1.00g) 
S3 IS, Fw: 1.00a 
S5 IS, Fw: 1.01a 1.01b 
G7, Fw: 1.00e, 1.00g, 1.00i, 1.00j 
SD400 (IXUS50), Fw: 1.01a, 1.01b 
SD450 (IXUS55), Fw: 1.00b, 1.00c, 1.00d 
SD500(IXUS700), Fw: 1.01a, 1.01b 
SD600 (IXUS60), Fw: 1.00a, 1.00d (beta) 
SD630 (IXUS65), Fw: 1.00a 
SD700 IS (IXUS800), Fw: 1.00b, 1.01b, (1.01a with CHDK version for 1.01b) 
SD750 (IXUS75), Fw: 1.01a, (1.01b with CHDK version for 1.01a) 
SD800 IS (IXUS850), Fw: 1.00e, (1.00d with CHDK version for 1.00e) 
SD850 IS (IXUS950), Fw: 1.00c 
SD870 IS (IXUS860), Fw: 1.00c 
SD1000 (IXUS70), Fw: 1.01b, 1.02a, (1.01a with CHDK version for 1.01b) 
SX100 IS, Fw: 1.00c 
TX1, Fw: 1.00g, 1.01b

Oczywiście jeszcze potrzeba karty pamięci i czytnika aby wgrywać soft i skrypty prosto na karte z ominięciem aparatu. Wiecej na temat wygrywania softu TUTAJ po polsku lub po angielsku tutaj. Istnieje wiele wersji CHDK, do wykrywania ruchu, fotografowania przez piloty na USB, robienia zdjęć stereograficznych za pomocą dwóch sprzężonych aparatów. Ale jeżeli nie szukamy konkretnych zastosowań to warto najpierw pobawić się z wersją AllBest, która posiada wszystkie popularne i potrzebne opcje. Warto tez często sprawdzać uaktualnienia naszego softu gdyż co miesiąc cos jest uaktualniane i poprawiane.

 

3. Zaczynamy, podstawy!

Trzeba zaznaczyć że CHDK jest nieoficjalną nakładką na soft aparatu i niestety nie można uniknąć błędów. Wieć prosze się nie zdziwić jak jakieś dziwaczne żeczy zaczną się czasami z aparatem dziać. Oczywiście nie istnieje zagrożenie zniszczanie czy uszkodzenia aparatu, chodzi o sytuacje nielogicznego zachowania kiedy wszystko zrobiliśmy jak należało a ten skrypt jak nie działał tak nie działa. Oczywiście są to sytuacje żadkie ale się zdażają. Dość tego straszenia czas przejść do działania! Podspodem przedstawiam wam skrypt mojego autorstwa na którym ukaże sposób zgyrwania, uruchamiania i ustawiania skryptu na aparacie.

 

@title Pstryk kontrolowany
@param a ilosc zdjec
@default a 5
@param b sekund do pierwszego
@default b 10
@param c sekund do nastepnego
@default c 5

if a<1 then let a=1
if b<0 then let b=0
if c<0 then let c=0



print "za",b,"sekund pstrykne",a,"zdjec"

let b=b*1000
let c=c*1000

sleep b

for n=1 to a 
shoot
print "zdjecie",n,"jeszcze",a-n,"zdjec"
sleep c 
next n

wend

 

Informatycy już zapewne wiedzą co ten sprypt robi i jak działa, ale ci co nie wiedzą niech się nie zrażają czarną magią tych napisów. Wszak większość skryptów będziemy kopiować z internetu (np z TĄD) wszak po co pisać coś dwa razy, i wymyślać koło na nowo. Procedura jest prosta i jasna więc nikt nie powinien mieć problemu z jej przeprowadzeniem :D. Otwieramy Notatnik lub inne oprogramowanie z możliwością zapisywania w TXT ale nie Wordów czy Writerów i innaych zaawansowanych edytorów gdyż one dorzucają do plików różne nagłowki i inne śmieci. Nam trzeba coś co napisze CZYSTY tekst. Kopjujemy scrypt do notatnika i zapisujemy go jako TXT. Jeżeli wczesniej tego nie zrobiliśmy instalujemy za pomocą aparatu CHDK na karcie. Następnie wkładamy kate SD od czytnika i kopiujemy nasz skrypt do odpowiedniego folderu a mianowicie:

CHDK\Scripts

Następnie dobra manierą jest dodanie jeszcze tego samego pliku (z doklejonym opisem) do

CHDk\Books

Aby w razie jakiś wątpliwości spojrzeć na niego w aparacie.

Tak oto mamy już skrypt na karcie! Teraz wkładamy ją do aparatu odpalamy CHDK i testujemy :D

Wciskamy przycisk ALT (jest to ten z niebieską lampką, oznaczający komunikacje aparatu z drukarką lub Wi FI) a następnie ENTER (inaczej Func. Set). Pojawia się nam okienko dialogowe właczania skryptów. Mamy więc

Load script from file => ładowanie skryptu z pliku TXT

Script shoot delay (.1s) => czyli opuźnienie startu scryptu w dziesiątych cześciach sekudny liczony

Script Autpstart => Automatycznie uruchamianie skryptu wraz z CHDK

Enable remote (USB) => ruchomienie komunikacji przez USB ale prosze się nie cieszyć! Nie chodzi o soft Canona który umożliwi nam fotografowanie przez komputer lecz komuniakcje pilotów domowej produkcji z aparatem.

Dalej mamy Curent script pod którym jest nazwa bierzącego skryptu.

I dalej Script parameters czyli parametry skryptu.

Zaczynamy od załadowania za pomocą Loda script from file naszego "Pstryk kontrolowany.txt". Wyświetla nam się odrazu nazwa "Pstryk kontrolowany" pod Cuerent script i pojawiają się ustawienia parametrów. Jak widzimy są one już opisane krótko:

ilosc zdjec							[			5]
Sekudn od pierwszego		[	10]
Sekudn od nastepnego		[	 5]

I teraz mianowice opiszemy do czego właściwie służy ten skrypt. Psytrk kontorlowany polega na robieniu dowolnej ilości zdjęć ze stałym odstępem czasu. Napisałem go dla kumpla który męczył się z kopiowaniem ksiażki, teraz tylko ustawia aparat na statywie uruchamia skrypt i każe robić 500 zdjęc z odstępem 5 sekund. I teraz wystarczy tylko kartki przekładać, aparat zrobi za niego wszystko oczywiście dopóki baterie mu na to pozwolą :) Skrypt początkowo jest ustawiony na zrobienie 5 zdjęć. Od uruchomienia skryptu mija 10 sekund do pierwszego zdjęcia, każde następne robione jest co 5 sekund. Oczywiście można za pomocą Script shoot delay zrobić to samo co "Sekund do pierwszego" ale tak mi jest wygodniej. Teraz można uruchomić skrypt naciskająć migawke, oczywiście trzeba przejść w tryb robienia zdjęć aby je zrobić xD jak również można wybrać tryb jakim się chce je zrobić czy to automatyczny czy manualny. Innymi sowy skrypt to takie wirtualne paluchy które obsługują aparat żebyś ty mógł się lenić :D Wcisneliśmy migawke i teraz obserwujemy jak w lewym dolnym rogu skrypt się z nami komunikuje. Wypisał

***Started***
za 10 sekdunf pstrykne 5 z		 (miało być "zdjec" ale obcienło niestety)
zdjecie 1 jeszcze 4 zdjec

Możemy teraz nacisnąć ALT aby pauzować wykonywanie skryptu i kolejny raz ALT aby wznowić. Możemy też nacisnąć migawke (tzw SHOOT) aby "zastrzelić" skrypt. Wtedy pojawi się nam:

***INTERRUPTED***

I tyle na temat uruchamiania skryptów. Powinniśmy dokładnie czytać opisy skryptów, zazwyczaj po angielsku, dlatego że parametry w aparacie będą opisane jednym słowem lub jakimś skrutem, z którego nie będziemy się wiele mogli domyślić na temat ich funkcjonowania. Trzeba też zwracać uwage dla jakiego aparatu i jakiego rodzaju softu były one programowane, niestety zdażać się będzie że niektóre aparaty nie będą wykonywały niektórych poleceń. Tak samo z CHDK trzeba się starać zawsze mieć najnowszą odpowiednią wersje (najlepiej AllBest która jest teraz dynamicznie rozwijana) mając starego GrandBuild nie będzie się dało uruchomić np. polecenia "md_detect_motion" czyli jakże ciekawego wykrywania ruchu przez aparat :D

Poniżej zamieszczam bardzo ciekawy skrypt używający właśnie polecenia md_detect_motion do "chwytania" błyskawic w locie!

 

Motion/Lightning Detect 
Written for/on: Canon A640 
Also works on: Other Canon AXXX (Not tested), Canon A720 (tested), Canon A710 (tested), Canon A540 (tested) 
{i oczywiście działa na moim A630 ale żadnej błyskawicy nie złapałem gydż okazji nie miałem :/ }
Motion/Lightning Detect by Johan Van Barel (http://www.vanbarel.com) 

The purpose of this script is to take pictures when motion is detected. The screen will be divided into a number of Rows and Columns. The Treshold value determines the treshold for detection. Recommended experimental values are 10=Lightning, 12=Sunshine, 24=Cloudy, 36=Dawn/Dusk. Motion can be detected in the following Modes: 0=U, 1=Y, 2=V, 3=R, 4=G, 5=B. The Pixel Blocksize determines how many pixels are seen as one block. Smaller blocks are more accurate but detection will be slower. 

An important parameter is the Triggering Delay value. A value of 0 is meant for ultrafast motion detection (fi. lightning). In this mode, the shoot-button will be pressed half before detection is started, so the actual shooting is very fast. Disadvantage is that (in Auto-mode) the focus/aperture/shutter will be fixed before the moving object is detected (except when using all manual settings like manual focus/aperture/shutter). If you choose a value > 0, the shoot-button will not be half-pressed before detection, so the moving object's focus/aperture/shutter will be set after motion is detected. Important: you should be careful that the value is big enough to avoid shoot-looping after first detection. A value of at least 16 (=1.6 secs) will be ok. If you want to motion-detect for longer periods, you should disable the power-save options of your camera, so that your camera will not power-off after a certain time. 

ps. for long detection periods you should disable the Power Saving options of your camera. This can be done in the <ALT> menu. In the Miscellaneous Stuff menu item set the Disable LCD Off value to Script, so the display won't turn off while in <ALT> mode or while a script is running. 

Documentation/Help (save as MotionDetect.txt" file to your /CHDK/SCRIPTS/ folder) 

Select P, Tv, Av, M or C mode on your Canon A640. 

Parameters: 
Number Of Columns (Default=6) 
Number Of Rows (Default=4) 
Treshold (0-255) (Default=24) recommended values: 10=Lightning, 12=Sunshine, 24=Cloudy, 36=Dawn/Dusk 
Comparison Interval (mSec) (Default=1) 
Triggering Delay (.1 Sec) (Default=0) recommended values: 0=Ultrafast(Lightning), 16=Normal, 32=Slow 
Pixel BlockSize (Default=8) number of pixels as one block (smaller size is more accurate but slower) 
Detection Mode (Default=1) values: 0=U, 1=Y, 2=V, 3=R, 4=G, 5=B 
Initial Delay (Sec) (Default=1) 

Script Code (save as "MotionDetect.bas" to your /CHDK/SCRIPTS/ folder) 
rem Johan Van Barel 05-04-2008
rem Motion/Lightning-Detect for Canon A640

@title Motion Detect
@param a Cols
@default a 6
@param b Rows
@default b 4
rem Treshold: 10=Lightning, 12=Sunshine, 24=Cloudy, 36=Dawn/Dusk
@param c Threshold (0-255)
@default c 24
@param d Interval (mSec)
@default d 1
rem Delay: 0=Ultrafast(Lightning), 16=Normal, 32=Slow
@param e Delay (.1 Sec)(0=UltraFast)
@default e 0
@param f BlockSize
@default f 8
@param g Mode(U=0,Y=1,V=2)
@default g 1
@param h Initial Delay (Sec)
@default h 1

if a<1 then a=1
if b<1 then b=1
if c<0 then c=0
if e<0 then e=0
if f<1 then f=1
if g<0 then g=0
if g>5 then g=5
if r<0 then r=0
if h<0 then h=0

e=e*100

rem time in msecs md will detect
x=5000

sleep h*1000

i=0
while 1
if e=0 then
	press "shoot_half"
	do
		get_prop 205 p
	until p=1
endif
t=0
md_detect_motion a, b, g, x, d, c, 1, t, 0, 1, 1, a, b, 0, f, e
if t>0 then
	click "shoot_full"
	do
		get_prop 205 p
	until p<>1
	i=i+1 
	print "Pic", i, "(blocks="; t; ")"

endif
wend

 

Mam nadzieje że opis tego skryptu w języku angielskim nie jest nie zrozumiały. Jeżeli dla kogos jest to zapora nie do przebycia moge pare ciekawych skryptów opisać na forum, jeżeli będzie jakieś zainteresowanie. Nie chciałem absolutnie wyczerpywać całego tematu możliwości skryptów CHDK, mam nadzieje że pare osób zchęciłem to zgłębienia tego tematu. Myśle że dla takich nietypowych zastosowań jak Astrofotografia takie narzędzie bardzo się przyda, wszak nic nie stoi na przeszkodzie napisania programu w którym za pomocą wirtualnych łap, które w pełni zastępują ludzkie, nasz aparacik zrobi sam z siebie zdjęcia z różnymi parametrami, dorobi blakframy, czy też będzie wykrywał tak samo jak błyskawice bolidy. Jak równierz dla zastosowań poza astronomią, jak za pomocą aparatu na półce z skryptem wykrywania ruchu i jego nagrywania ;)

 

4. Linki

Polecam dla zainteresowanych te linki, oczywiście wymagana znajomość angielskiego:

Oficjalna strona CHDK

Blog winiarro z ciekawym opisem możliwości softu

Polskie forum na temat CHDK

Topic poświęcony MotionDetection

Podręcznik pisania skryptów uBasic dla CHDK

 

Pozdrówko!

P.S. Pszepraszam za wszelkie błędy pisowni jakie z pewnością się wkradły w tekst :unsure:

Edytowane przez Kurak
Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.