ViharVadász kamera stabilizálása

A Időkép wikiből
A lap korábbi változatát látod, amilyen Próbaszerkesztő (vitalap | szerkesztései) 2013. április 1., 15:11-kor történt szerkesztése után volt. (Párhuzamos port)

(eltér) ←Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

A probléma

A viharvadasz.hu-n preferált nagy felbontású Canon típusú kamerák firmware-je hajlamos naponta akár 2-3 alkalommal is kifagyni, mely traumát a vezérlő gépen futó szoftver, driver több-kevesebb (inkább utóbbi) sikerrel tudják lekezelni.

A Canon is tud a problémáról amit a nem megfelelően megírt drivernek tulajdonítanak.

A legújabb típusú Canon gépeknél viszont már javították ezt a hibát, és az egyik VV kamera tulajdonosa szerint valóban így is van.

A probléma csak ott van, hogy ezek a gépek még nagyon drágák.?

TODO: milyen típusú és kinél működik jól?

A probléma hagyományos megoldása, hogy fizikailag odamegyünk a kamerához és ki-be kapcsoljuk, szükség esetén elvesszük tőle a tápfeszültséget, valamint visszaülve a gép elé újra életet lehelünk az értetlenkedő vezérlőprogramunkba.

A lehetséges megoldás

A problémára egyetlen megoldás kínálkozik, mégpedig a kamera kifagyása esetén emulálni/szimulálni azt a tevékenységet, amit a szorgos viharvadász/észlelő is tesz.

A kamera gombjának automatizált nyomkodásához ki kell vezetnünk a nyomógomb érintkezőit a gépből. (a profi kategóriás gépeknél ez ugye gyárilag kis jack aljzatra van kivezetve)
Ehhez persze szükségeltetik némi kézügyesség, és egy jó (Weller) páka.
Szereljük annyira szét a kamerát, míg hozzá nem férünk a ki-be kapcsoló gomb lapjához

TODO: A kamera házának megbontása képekben (majd ha a kezembe kerül egy gomb kivezetésre váró gép)

Forrasszunk a gomb két lábához egy lapkábelt, melyet ügyesen tekergetve az alkatrészek mellett esztétikusan ki tudunk vezetni az elemek taróján lévő résen, így később is rendeltetésszerűen tudjuk majd használni gépünket a szalagkábel elemtartóba való visszahajtásával.
A vezérlő- és a fényképezőgép áramkörét érdemes mindkét fél védelme érdekében galvanikusan egy 4n25-ös optocsatolóval szétválasztani.
TODO: ábra és kép a bekötésről
Ezek után jöhet a vezérlő áramkör kiválasztása, elkészítése.

A vezérlő áramkör

Számtalan módja van a számítógépről való vezérlésnek a rendelkezésre álló programtól és hardvertől, és egyéb adottságoktól függően. (szabad protok hiánya, számítógép-kamera távolsága, vezérelni kívánt kamerák és egyéb dolgok száma)

Párhuzamos port

A legegyszerűbb és legolcsóbb megoldás a párhuzamos porton a rendelkezésre álló 8db adatvezetékeinek a használata. Ezeket programból +5V és 0V állapotba tudjuk hozni, és egy LED terhelését is képes probléma nélkül elviselni a megfelelő áramkorlátozó ellenállással.
A kapcsolás egyszerűségét azt hiszem nem kell túlmagyarázni. 2-től 9-ig van a 8db adatvezeték, melyek egyikét rákötjük a 4n25 (vagy 4n35) optocsatoló LED-jére. Az optokapu tranzisztorának kollektorára kötjük a fényképező tápfeszültségét, az emitterre pedig a pozitívra felhúzandó gomb másik lábát. (ha fordítva kötjük nem lesz semmi baj, csak nem fog működni)

Vcam parport.png

Linkek

Ha ennél még részletesebb leírás kell:

Vezérlés az LPT-porton alfától Omegáig. I.
Vezérlés az LPT-porton alfától Omegáig. II.
Vezérlés az LPT-porton alfától Omegáig. III.
Vezérlés az LPT-porton alfától Omegáig. IV.
Vezérlés az LPT-porton alfától Omegáig. V.
Vezérlés az LPT-porton alfától Omegáig. VI.
Az LPT port vezérlése W2k és WXP alatt
Vezérlés az LPT-porton alfától Omegáig. VII.
Vezérlés az LPT-porton alfától Omegáig. VIII.
Vezérlés az LPT-porton alfától Omegáig. IX.
Vezérlés az LPT-porton alfától Omegáig. X.
A Codexonline 11. száma zip-ben tömörítve

Discolitez - Vezérlés akár 32 csatornáig
How To Build Parallel Port Prototypes

Soros port

A soros port vezérlő vezetékeit is - hasonlóan a párhuzamos portéhoz - használhatjuk az optocsatoló LED-jének a meghajtásához.
Ezek a vonalak -12V és +12V közötti veszültséggel működnek, így sokkal hosszabb kábelt is alkalmazhatunk.
A kapcsolási rajz hasonó a párhuzamos portéhoz, csak itt a modem kimeneti vezértlőbuszait használjuk:

  • RTS - Request to Send
  • DTR - Data Terminal Ready

Soros port a wikipedián

Soros port mikrokontrollerrel

Egyedi készítésű nyákon, a soros port adatvezetékein (hagyományosan) egy mikrokontrollernek küldünk parancsokat, mely azok alapján emelgeti a lábait.
Ezzel a megoldással korlátlan mennyiségű és logikával lehet reléket, optocsatolókat vezérelni.
Extraként szenzorok is csatlakoztathatók, úgy mint fénymérő, hőmérő, légnyomásmérő, páratartalom mérő, stb.

Ez a megoldás akkor jöhet szóba, ha

  • 8-nál több kamerát illetve egyéb dolgokat is akarunk vezérelni
  • valamilyen okból nem áll rendelkezésre párhuzamos port
  • nincs soros port, illetve nem elég a 2 vezérlő vezeték sem

TODO: képek, kapcs rajzok a prototípusról

USB port mikrokontrollerrel

Hasonlóan az előzőhöz, csak a soros helyett egy FTDI SUB illesztő IC-vel kommunikálunk a mikrokontrollerrel.
Újabban már az FTDI chip is kispórolható a mikrokontroller firmware-éből való USB kezeléssel.

TODO: kapcsrajz

GPIO PIN routeren

Ez egy speciális eset, amikor a vezérlő számítógép nem egy hagyományos PC, hanem egy ADSL router az OpenWRT Linux disztribúcióval.
A router-t szétszedve találhatunk pár szabad GPIO kivezetést, melyeket programból +3.3V és 0V állapotba tudunk helyezni.
Jelenleg erre a célra egy ASUS WL500g Deluxe tipusú routert használok, de ezt ma már nagyon nehéz beszerezni, helyette viszont van a kicsit nagyobb tudású Asus WL500g Premium, mely olyan 21-22kHUF körül beszerezhető.
Az OpenWRT támogatott routerek listáját és azok specifikációit megtalálhatjuk az OpenWRT wikijében
A GPIO PIN-ek elhelyezkedése router tipustól és hardver verziótól erősen függ, de a google-ban általában lehet találni képeket a GPIO PIN-ek elhelyezkedésére vonatkozóan.

A vezérlő program

Linux alatt

Linux alatt a capture programmal nagyon szépen lehet szkriptből automatizálni a sorozatos képek készítését úgy, hogy közben a kamerának ne kelljen ki-be húznia az optikáját. A capture persze függ a libusb és a libptp2 függvénykönyvtáraktól. A libptp-ben van az a speciális PictBridge kiterjesztés implementálva, mely a számunkra elengedhetetlen az automatizált USB-n keresztüli fényképkésztítéshez. Így ha arra a kérdésre keressük a választ, hogy működni fog-e az X tipusú kameránk ezzel a módszerrel, akkor a libptp doksijait kell olvasgatnunk. A README fileban írják is, hogy ez nem a teljes lista, hiszen a támogatott kamerák tpiusainak nyilvántartása nehezebb mint maga a driver megírása. Mint ahogy a man irja is, nem minden kamera támogatja a ptp összes funcióját, pl a Sony kamerák messziről híresek a rossz ptp megvalósításaik miatt.
Egy majdnem teljes lista találhato a gphoto oldalán. Ez persze nem jelenti azt, hogy ha a kameránk nincs a listában, akkor az nem is fog működni.
Valamint a capture készítői által "bevizsgált" gépek listája:

  • Canon PowerShot S50
  • Canon PowerShot A60
  • Canon PowerShot A70
  • Canon PowerShot A75
  • Canon PowerShot A80
  • Canon PowerShot A85
  • Canon PowerShot A95
  • Canon PowerShot A510
  • Canon PowerShot A520
  • Canon PowerShot G5
  • Canon PowerShot G6
  • Canon Digital IXUS 400 (aka PowerShot S400)
  • Canon PowerShot S410
  • Canon PowerShot S500

Telepítés PC-re

Ez a művelet nem igazán tekinthető nagy kihívásnak: Vesszük kedvenc Linux disztribúciónkat, feltelepítjük egy jó régi és leselejtezett PC-re, majd sorra lefordítjuk a libusb, libptp és capture csomagokat. Disztribúcióként ajánlom a Debian-t, illetve az Ubuntu-t, ahol a libusb fordítását meg is spórolhatjuk a libusb-dev csomaggal. Miután a fordítás sikerült, paracvdccsorból ki is próbálhatjuk a capture helyes műkösését. A következő módon készíthetünk nappali fényviszonyok mellett fényképetvg

capture 'start' 'zoom 0' 'size medium2' 'qual normal'
capture 'capture cam.jpg'

Persze ugyanezt megtehetjük interaktív módon is a capture termináljában, de szkriptből majd a fenti módon fogjuk tudni használni.
Ezek után már nincs más teendőnk, mint hogy írjunk egy szkriptet a kedvenc nyelvünkön (bash, perl, php, python, stb), mely percenként fényképez, és feltölti a képet a viharvadasz.hu-ra.cx De pl este be is állíthatja a gépet éjszakai üzemmódba, vagy kezelheti a fényképezőgép lefagyásait a géphez épített harveres xíymegoldás segítségével.
A szkriptet bash-ban írtam, mivel az OpenWrt-re kezdtem el megírni, és a helyhiány miatt szinte csak ez áll a rendelkezésre.
TODO: vv.sh feltöltése

Telepítés Routerre

Az OpenWrt telepítését itt most nem irnám le, hisz már megtették azt az OpenWRT wikijében. A kezdeti nehézségek ott kezdődnek, hogy mindmáig senki nem készített ipkg csomagot a libptp és capture progikból, és még a WhiteRussian RC5 idejében az SDK túl macerás volt, ezért a natív fordítást választottam: (OpenWrt wiki
Ezen megoldás hátránya, hogy így csomagot ugyan nem tudunk gyártani, viszont Debian környezetben már gyerekjáték lefordítani a kívánt alkalmazásainkat. A probléma ott kezdődik, amikor a belső flash memóriára szeretnénk másolni a binárisokat. A jó pár Debian specifikus libek átmásolgatásával (nem túl szép megoldás) végülis azt mondhatjuk hogy működik a dolog.
Reprodukálni viszont már rendkívül macerás, főleg ha szeretnénk másnak is hasonló rendszer beüzemelésében segíteni. Természetesen le lehetne menteni az egész jffs2 filerendszert, de akkor inkább már a csomaggyártás.

Tehát csomaggyártás. A WhiteRussian RC6 SDK-jához egyetlen howto létezik, ami egyben a dokumentáció is, és eléggé felületes. Ezen első körben el is véreztem, de szerencsére a legújabb, kamikaze kódnevű fejlesztés SDK-ja meglepő módon nagyon jól összeszedett, amivel sikerült is többé-kevésbé hivatalos módon csomagot gyúrni a kívánt alkalmazásainkból.
Ezeket a csomagok idővel megtalálhatóak lesznek az OpenWrt svn-jében is, csak még a capture-nak kellene gyúrni egy buildroot kompatibilis Makefile-t. Azt tervezem, hogy az összes szükséges csomagból, szkriptből és beállításokból egyetlen egy binárist (.trx) gyúrok, amit feltöltve a routerbe, pár alapkonfiguráció módosításával rendelkezésünkre állhat a viharvadász állomás.

A telepítés menete
  • dugjuk az 1-4-es portok egyikébe a hálózati kábelt (tehát nem a WAN-ba!)
  • flash-be felir http://a.dyn.hu/~andrew/openwrt-brcm-2.4-squashfs.trx valamilyen tftp-vel (lasd még: openwrt doksi). Legegyszerűbben ezt a routerhez adott CD-n található Firmware restoration proggival lehet feltölteni. Táp lehúzva, restore gomb lenyomva tartása mellett tápkábelt bedugni, és amint villogni kezd a Power LED, elengedni a gombot. Programban fájlt kiválasztani (Browse), majd Upload gombot megnyomni.
  • várjunk 6 percet, hogy biztos hogy kiíródott az image
  • Flashelés után ég az AIR, Power LED, és az a portled ahol a kábel van más nem
  • telnet-el belépünk a 192.168.1.1-re
  • jelszót változtatunk:
passwd 
  • ssh-val ellenőrizzük, hogy be tudunk-e lépni a 192.168.1.1-re
  • /etc/firewall.user -t szerkesztjük
vi /etc/firewall.user
  • a következő sorok elől ki kell venni a #-ot: (kurzorral odamegy, x-el töröl a sor elejéről, majd a végén :wq parancsal elment és kilép)
# iptables -t nat -A prerouting_wan -p tcp --dport 22 -j ACCEPT
# iptables        -A input_wan      -p tcp --dport 22 -j ACCEPT
  • ürítjük a gyorsítótárat
sync
sync
  • újraindítunk:
reboot
  • amint lebont a putty, tápkábel le, kábel átdug WAN-ba, tápkábel vissza
  • várjunk, míg nem gyullad ki a WAN, az AIR és a Power LED
  • keressük meg a netet szolgáltató routerünkben, hogy milyen címet kapott, (pl 192.168.1.50) és ssh-val lépjünk be
  • ha sikerült, következő lépés a szükséges csomagok telepítése
wget http://a.dyn.hu/~andrew/vvpackages.tar.gz
cd /tmp
tar xzf vvpackages.tar.gz
ipkg install *.ipk
  • Ellenőrizzük, hogy a következő csomagok feltelepültek
ipkg list_installed
base-files-brcm-2.4 - 8-6226 -
bridge - 1.0.6-1 -
busybox - 1.4.0-1 -
capture - 1.0.3-cvs-20060706-1 -
dnsmasq - 2.35-1 -
dropbear - 0.48.1-1 -
iptables - 1.3.5-1 -
kernel - 2.4.34-brcm-1 -
kmod-brcm-wl - 2.4.34+4.80.53.0-1 -
kmod-diag - 1+2.4.34-brcm-1 -
kmod-ipt-nathelper - 2.4.34-brcm-1 -
kmod-ppp - 2.4.34-brcm-1 -
kmod-pppoe - 2.4.34-brcm-1 -
kmod-switch - 2.4.34-brcm-1 -
kmod-usb-core - 2.4.34-brcm-1 -
kmod-usb-uhci - 2.4.34-brcm-1 -
kmod-wlcompat - 2.4.34+brcm-4 -
libgcc - 3.4.6-8 -
libptp2 - 1.1.0-1 -
libusb - 0.1.10a-1 -
mtd - 5 -
nas - 4.80.53.0-1 -
ntpclient - 2003_194-2 -
nvram - 1 -
powerswitch - 0.01-1 -
ppp - 2.4.3-7 -
ppp-mod-pppoe - 2.4.3-7 -
uclibc - 0.9.28-8 -
usbutils - 0.71-1 -
wireless-tools - 28-1 -
wlc - 4.80.53.0-1 -
Done.
  • mivel az usbprocfs nem csatolódik fel magától, ezért nekünk kell róla gondoskodni egy init szkirptben:
cd /etc/init.d
wget http://a.dyn.hu/~andrew/cams
chmod +x cams
ln -s /etc/init.d/cams /etc/rc.d/S90cams
  • majd indítsuk újra a routert, vagy futtassuk le az init szkriptet:
/etc/rc.d/S90cams start
  • ellenőrizzük, hogy látjuk-e így az usb eszközöket:
lsusb
  • ha csatlakoztatva van(nak) a kamerá(i)nk, és be van(nak) kapcsolva, akkor valami hasonlót kell látnunk a listában:
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
Bus 001 Device 002: ID 0451:2046 Texas Instruments, Inc. TUSB2046 Hub
Bus 001 Device 003: ID 16c0:05dc
Bus 001 Device 011: ID 04a9:30c2 Canon, Inc.
Bus 001 Device 010: ID 04a9:30b5 Canon, Inc.
  • A név előtti oszlop tartalmazza a kameránk egyedi azonosítóját, (nekem pl 04a9:30c2 és 04a9:30b5) melyet jegyezzünk fel. (Ez több kamera használata esetén elengedhetetlen az egyértelmű azonosítás céljából)
  • próbáljuk ki a kamerát, hogy tudunk-e képet készíteni vele
capture
  • itt kapunk egy interaktív parancssort. Az elérhető parancsok listáját a "help"-el kérhetünk, egy paracs paramétereiről pedig a "help parancsnev" segítségével kaphatunk több infót.
  • legegyszerűbben képet így készíthetünk ebből a parancssorból:
start 011
  • a 011 helyére helyettesítsük be az eszközünk aktiális USB sorszámát, mely az lsusb kimenetében a Device utáni szám. Ez az eszközünk USB buszon elfoglalt sorszáma. Ez minden újracsatlakozás esetén változik, és csak ennél a próbánál van jelentősége. A későbbiekben ezt a vezérlő szkript automatikusan meg fogja keresni.
  • ha semmi hibaüzenetet nem kaptunk, és a kamera kinyújtotta a szemét, akkor rögtön készíthetünk is egy képet:
capture /tmp/cam.jpg
  • ha nincs hibaüzenet, akkor másoljuk a /tmp/cam.jpg filet scp segítségével a gépünkre, és csodáljuk meg első fényképünket :)
  • majd lépjünk ki a capture programból, melyen hatására a kamera behúzza a szemét:
quit
  • Ezek után telepíthetjük a vezérlő szkriptet:
cd /usr/bin
wget http://a.dyn.hu/~andrew/vvmulti.sh
chmod +x vvmulti.sh
  • futtassuk parancssorból a szkriptet a következő paraméterekkel: (TODO: esetleg vezérlőmodul nélküli szkriptet is kellene csinálni)
kamera_neve felhasznalonev jelszo rele_azonosito gomb_azonosito eszkoz_id
  • például:
vvmulti.sh A75 kandras2 titok 2 4 04a9:30b5
  • figyeljük a megjelenő (hiba)üzeneteket. Ha nem volt hiba, akkor már fel is másolódott az első képünk a viharvadász szerverére
  • Legvégül a percenkénti fényképkészítéshez írjuk be a fenti parancsot a conrtab-ba a 'crontab -e' paranccsal
*       *       *       *       *       /usr/bin/vvmulti.sh A75 kandras2 titok 2 4 04a9:30b5
Távoli menedzselhetőség

Még ha NAT mögött is van a doboz, akkor is van lehetőség a nagyvilágból elérni egy openvpn telepítésével. Ezen keresztül ugyanúgy be lehet SSH-n keresztül jelenzkezni az eszközbe mint egyébként, és lehet hibaelhárítást végezni.

Ismert hibák
  • Azonos tipusú fényképezők használata esetén probléma lesz az eszközök azonosítása, mert mind utóbb kiderült, minden Canon A75-ös gépnek 04a9:30b5 az azonosítója

Windows alatt

Folyamatban van egy soros porton keresztül a lefagyást kezelni képes VVtv vezérlő program. Lesz hozzá gyártva vezértlő modul, mely valószinüleg mindenféle extra dolgot is fog majd tudni.

Feszültség stabilizátor

A canon gépek ugyan elég eltűrőknek mutatkoznak tápellátás szempontjából, de tapasztalataim szerint drasztikusan csökkenthető a fagyások száma, ha hajszál pontosan a gépek által megkívánt feszültséget adjuk nekik. Én ezt a problémát egy TS317 állítható feszstab IC-vel oldottam meg. A kapcsolás és a képlet az IC adatlapjából:

Fájl:Ts317.jpg

Ha nincs kedvünk számolgatni, akkor tegyünk az R1 helyére egy 1K-s ellenállást, az R2 helyére pedig egy 10K-s trimmer potmétert, melynek tekergetésével egyszerűen beállíthatjuk a kívánt feszültséget.

Fájl:IMG 7277 .JPG

A témával kapcsolatos linkek

Képek

Fájl:PICT7882 k.JPG
Az optocsatoló egy kontroll leddel


Fájl:PICT7884 k.JPG
Kamera alulról a plexi házban kicsit maszek módon rögzítve. A fehér lapkébelen jön ki a ki/be kapcsoló gomb.


Fájl:PICT7962 k.JPG
ASUS WL-500g Deluxe megbontva. A GPIO kivezetések szépen ki vannak vezetve tüskékre.


Fájl:PICT7966 k.JPG
A GPIO kivezetések szépen feliratozva. A gyártók gondoltak ránk!


Fájl:PICT7885 k.JPG
A régebbi összeállítás a "hőpajzsos" kameraházzal és a routerrel

Fájl:PICT7893 k.JPG
Egy többkamerás soros vonali vezérlő prototípusa

Fájl:PICT7978 k.JPG
A legújabb, két kamerás rendszer immár USB-s vezérlőmodullal (ami időközben egy nagy vihar áldazata lett...)

A jelenlegi panoráma

Kapcsolat: andrew kukac viharvadasz.hu