Tartalomjegyzék:

Kolibri detektor/képkészítő: 12 lépés (képekkel)
Kolibri detektor/képkészítő: 12 lépés (képekkel)

Videó: Kolibri detektor/képkészítő: 12 lépés (képekkel)

Videó: Kolibri detektor/képkészítő: 12 lépés (képekkel)
Videó: MiyaGi - Колибри (Music Clip) 2024, November
Anonim
Kolibri érzékelő/képkészítő
Kolibri érzékelő/képkészítő

A hátsó fedélzetünkön van egy kolibri etető, és az elmúlt pár évben fényképeztem őket. A kolibrik csodálatos kis lények, nagyon területi jellegűek, és a harcuk vidám és csodálatos is lehet. De kezdtem belefáradni abba, hogy szoborként állok a házam háta mögött, hogy lefotózzam őket. Szükségem volt arra, hogy képeket készítsek anélkül, hogy hosszú ideig várakoznom kellene a ház mögött. Tudom, hogy használhattam volna távirányítású redőnyt, de azt akartam, hogy a képek automatikusan készüljenek anélkül, hogy ott kellene lennem. Ezért úgy döntöttem, hogy készítek egy eszközt a kolibri észlelésére, és automatikusan készítek egy képet.

Mindig egy mikrokontrollert akartam használni ehhez. A mikrokontroller szoftvervezérléssel képes lenne meghajtani a kamera redőnyét. De az apró kolibri észlelésére szolgáló érzékelő más dolog volt. Használhattam volna mozgásérzékelőt is, de szerettem volna valami egyedit kipróbálni. Úgy döntöttem, hogy hangot használok kiváltó okként.

Lépés: Válasszon mikrokontrollert

Mikrokontroller kiválasztása
Mikrokontroller kiválasztása

Az általam választott mikrovezérlő egy PJRC Teensy volt. A Teensy ARM mikrokontrollert használ, pontosabban ARM Cortex M4 -et. A Cortex M4 tartalmazza a hardvert az FFT (Fast Fourier Transform) végrehajtásához, amely elvégzi az észlelést. A PJRC értékesít egy hangkártyát is, amely lehetővé teszi a Teensy használatát zenelejátszáshoz, valamint hangfelvételhez külső bemenettel, vagy egy kis mikrofont, amelyet hozzáadhat a táblához. Az volt a tervem, hogy a Teensy végrehajtson egy FFT -t a mikrofon hangján.

2. lépés: FFT?

FFT?
FFT?

Az FFT egy matematikai képlet/algoritmus, amely átalakítja a jelet az időtartományból a frekvenciatartományba. Ez azt jelenti, hogy elveszi az időmintavételezett hangot a mikrofonból, és az eredeti hullámban jelenlévő frekvenciák nagyságrendjévé alakítja át. Látod, bármilyen tetszőleges, folytonos hullám felépíthető szinusz- vagy koszinuszhullámok sorozatából, amelyek valamilyen alapfrekvencia egész többszörösei. Az FFT az ellenkezőjét teszi: tetszőleges hullámot vesz fel, és olyan hullámok nagyságává alakítja át, amelyek összegezve létrehozzák az eredeti tetszőleges hullámot. Egy még egyszerűbb módja annak, hogy ezt mondjam, azt terveztem, hogy szoftvert és az FFT hardvert használok a Teensy -ben annak megállapítására, hogy „hallja -e” a kolibri szárnycsapását a szárnycsapások előfordulási gyakoriságán. Ha „hall” egy kolibrit, parancsot küldök a kamerának, hogy készítsen képet.

Működött! Szóval, hogyan csináltam, hogyan teheted meg, és hogyan tudnád még jobbá tenni?

3. lépés: Hogyan hangzik egy lebegő kolibri?

Hogyan hangzik egy lebegő kolibri?
Hogyan hangzik egy lebegő kolibri?

Először is ki kellett találnom, hogy milyen gyakorisággal hallom a kolibri szárnycsapásait. Ennek megállapításához az iPhone készülékemet használtam. Rögzítettem az iPhone -t egy állványra, és lassított felvételt készítettem közvetlenül a fedélzetünkön lévő kolibri etető előtt. Egy idő után levettem a kamerát és letöltöttem a videót. Ezután megnéztem a videót, amely egy kolibrit keresett az etető előtt. Amikor találtam egy jó sorozatot, megszámoltam az egyes képkockák számát, amelyek szükségesek voltak ahhoz, hogy a kolibri szárnyait egy pozícióból egészen ugyanabba a helyzetbe csapja. Az iPhone lassítása körülbelül 240 képkocka / másodperc. Megfigyeltem, hogy egy kolibri lebeg az adagoló előtt, és számítottam 5 képkockát, hogy szárnyai az elülső helyzetből a hátsó helyzetbe kerüljenek, majd visszatérjenek előre. Ez 5 képkocka a 240 -ből. Ne feledje, hangot hallunk a kolibri szárnycsapásainak minden mozdulatán (egyet az előre és egyet a hátrafelé). Egy ciklus vagy időszak 5 képkockája esetén kiszámíthatjuk a frekvenciát osztva az 1 / (5/240) vagy 48 Hz periódussal. Ez azt jelenti, hogy amikor ez a kolibri lebeg, a hallott hangnak kétszer akkora vagy körülbelül 96 Hz -esnek kell lennie. A gyakoriság valószínűleg magasabb, amikor repülnek, és nem lebegnek. Lehet, hogy a tömegük is befolyásolja, de azt hiszem, feltételezhetjük, hogy az azonos fajú madarak többsége körülbelül azonos tömegű.

4. lépés: Fourier sorozat és a Teensy

Fourier sorozat és a Teensy
Fourier sorozat és a Teensy

A Teensy (én a Teensy 3.2 -et használtam) a PJRC (www.pjrc.com). Az FFT egy hangminta alapján kerül kiszámításra. A hang megszerzéséhez a PJRC elad egy audio adapter kártyát a Teensy számára (TEENSY3_AUDIO - 14,25 USD). Eladnak egy kicsi mikrofont is, amely forrasztható az audioadapter -kártyához (MIKROFON - 1,25 USD). Az audio adapterlap egy chipet (SGTL5000) használ, amellyel a Teensy soros buszon (I2S) keresztül tud beszélni. A Teensy az SGTL5000 segítségével mintát vesz a mikrofonból és digitalizálja azt, vagyis számkészletet hoz létre, amely a mikrofon által hallott hangot reprezentálja.

Az FFT csak az úgynevezett diszkrét Fourier -transzformáció (DFT) gyors változata. A DFT tetszőleges számú mintán elvégezhető, azonban az FFT -nek a mintákat bináris többszörös halmazokban kell tárolnia. A Teensy hardver képes FFT -t végrehajtani egy 1024 mintás sorozaton (1024 = 2^10), ezért ezt fogjuk használni.

Egy FFT általában kimenetként a nagyságrendeket ÉS a fázisviszonyokat állítja elő a különböző hullámok között. Ennél az alkalmazásnál nem a fázisviszonyokkal foglalkozunk, hanem a nagyságrendekkel és azok gyakoriságával.

A Teensy hangkártya 44, 100 Hz frekvencián vesz mintát. Tehát 1024 minta ezen a frekvencián 1024/44100 vagy körülbelül 23,2 milliszekundum időintervallumot jelent. Ebben az esetben az FFT kimenetként olyan nagyságrendeket hoz létre, amelyek a 43 Hz -es mintaperiódus egész számú többszörösei (ismét 1/0,0232 körülbelül 43 Hz). Szeretnénk olyan nagyságrendeket keresni, amelyek ennek a frekvenciának körülbelül kétszeresei: 86 Hz. Ez nem pontosan a számított kolibri szárnycsapások gyakorisága, de elég közel van, mint látni fogjuk.

5. lépés: A Fourier -adatok használata

A Fourier -adatok használata
A Fourier -adatok használata

A PJRC által a Teensy számára biztosított könyvtárak feldolgozzák a mintákat, és nagyságrendű értékeket adnak vissza. A visszaküldött tömb minden nagyságát tárnak fogjuk nevezni. Az első tálca (nulla eltolással a visszakapott adatsorban) a hullám egyenáramú eltolása. Nyugodtan figyelmen kívül hagyhatjuk ezt az értéket. A második rekesz (az 1. eltolásnál) a 43 Hz -es komponens nagyságát képviseli. Ez a mi bázisidőszakunk. A következő tálca (2. eltoláskor) a 86 Hz -es komponens nagyságát jelzi, és így tovább. Minden következő tálca a bázisperiódus egész számú többszöröse (43 Hz).

Most ez egy kicsit furcsa lesz. Ha egy FFT -t használunk a tökéletes 43 Hz -es hang elemzésére, akkor az FFT visszaadja az első tárolót nagy nagyságrendben, és az összes többi tartály nulla lesz (ismét egy tökéletes világban). Ha a hang, amelyet rögzítettünk és elemeztünk, 86 Hz volt, akkor az első eltolású tároló nulla, a 2 -es eltolású tálca (a második felharmonikus) nagy nagyságrendű, a többi tartály pedig nulla, és így tovább. De ha egy kolibri hangját rögzítenénk, és az 96 Hz lenne (ahogy az egyik madaramon mértem), akkor a 2 bin @ 86 Hz eltolású érték kissé alacsonyabb lesz (mint a tökéletes 86 Hz -es hullám), és a körülötte lévő tárolók (eggyel alacsonyabb és néhány magasabb) mindegyikének csökkenő, nullától eltérő értéke lenne.

Ha az FFT mintánk mérete nagyobb lenne, mint 1024, vagy ha a hangmintavételi gyakoriságunk alacsonyabb lenne, akkor javíthatnánk a tárolók felbontását (azaz kisebb). De még ha megváltoztatnánk ezeket a dolgokat, hogy az FFT tárolóink 1 Hz -es többszörösei legyenek a bázisidőszaknak, akkor is foglalkoznunk kell ezzel a hulladékgyűjtéssel. Ennek az az oka, hogy soha nem kapunk olyan szárnyfrekvenciát, amely mindig és pontosan egyetlen tárolóba került. Ez azt jelenti, hogy nem alapozhatjuk csak meg a kolibri észlelését a 2 ofszet értékében, és figyelmen kívül hagyhatjuk a többit. Szükségünk van arra, hogy néhány tárolóban elemezzük az adatokat, hogy megpróbáljuk megérteni azokat. Erről bővebben később.

6. lépés: Az építés megkezdése

Kezdje el az építkezést
Kezdje el az építkezést
Kezdje el az építkezést
Kezdje el az építkezést

A kolibri-detektor prototípusához extra hosszú hím-hím csapokat használtam, amelyek a Teensy-ben lévő csapokhoz vannak forrasztva. Ezt azért tettem, hogy a Teensy-t egy kis forrasztás nélküli kenyértáblához csatlakoztassam. Ezt azért tettem, mert feltételeztem, hogy sok változtatást fogok végrehajtani a prototípuson, és a kenyértáblával, meg tudom változtatni ezt, és csak áthidalni a vezetékeket, ahol csak kell. A hanglemez alsó oldalára forrasztottam női csíkokat, amelyek lehetővé teszik, hogy a Teensy tetejére csatlakoztassák. A mikrofon az audio tábla felső oldalához van forrasztva (lásd a képeket). Az összeszerelésről további részletek a PJRC oldalán találhatók:

(https://www.pjrc.com/store/teensy3_audio.html).

7. lépés: Hardver a kép elkészítéséhez

Hardver a kép elkészítéséhez
Hardver a kép elkészítéséhez
Hardver a kép elkészítéséhez
Hardver a kép elkészítéséhez

Van (a feleségemnek) egy Canon Rebel digitális fényképezőgépem. A fényképezőgépen van egy csatlakozó, amely lehetővé teszi a kézi távvezérlő csatlakoztatását. Kézi távirányítót vásároltam a B&H Photo -tól. A kábelnek az egyik végén a megfelelő csatlakozója van, amely illeszkedik a fényképezőgéphez, és körülbelül 6 láb hosszú. Elvágtam a kábelt a gombvezérlő doboz melletti végén, és lecsupaszítottam a vezetékeket, és forrasztottam őket három fejlécre, amelyeket be tudtam dugni a kenyértáblába. Van egy csupasz vezeték, amely földelt, és két másik jel: a csúcs ravasz (rózsaszín) és a gyűrű (fehér) fókuszban van (lásd a képeket). A hegy és/vagy a gyűrű földhöz zárása működteti a zárat és a fókuszt a fényképezőgépen.

Egy jumperdrót segítségével egy közös földet futottam a Teensy -től egy olyan területre, ahol használhattam a kenyértáblán. A LED anódját a Teensy 2-es tűjéhez, a LED katódját pedig egy ellenálláshoz (100-220 ohm) kötöttem a földhöz. A Teensy 2. tűjét is egy 10K ellenálláshoz csatlakoztattam, az ellenállás másik oldalát pedig egy NPN tranzisztor bázisához (2N3904 mindenhol megtalálható). Csatlakoztattam a tranzisztor emitterét a földhöz, a kollektor pedig a fehér és rózsaszín vezetékekhez a kamerához vezető kábelről. A csupasz vezeték ismét a földhöz volt csatlakoztatva. Amikor a Teensy bekapcsolja a LED -et, az NPN tranzisztor is bekapcsol, és aktiválja a kamerát (és a fókuszt). Lásd a vázlatot.

8. lépés: Rendszertervezés

Rendszertervezés
Rendszertervezés

Mivel a Kolibri szárnycsapkodási frekvenciája valószínűleg nem haladja meg a néhány száz Hz -et, akkor valójában nincs szükség hangszórók rögzítésére, mondjuk néhány száz Hz felett. Szükségünk van arra, hogy csak a kívánt frekvenciákat szűrjük ki. Nagyszerű lenne egy sávos vagy akár aluláteresztő szűrő. Hagyományosan hardveres szűrőt alkalmazunk OpAmps vagy kapcsolt kondenzátor szűrők használatával. De a digitális jelfeldolgozásnak és a Teensy szoftverkönyvtárainak köszönhetően digitális szűrőt használhatunk (forrasztás nem szükséges… csak szoftver).

A PJRC nagyszerű grafikus felhasználói felülettel rendelkezik, amely lehetővé teszi az audiorendszer húzását a Teensy és az audio tábla számára. Itt megtalálod:

www.pjrc.com/teensy/gui/

Úgy döntöttem, hogy a PJRC által biztosított biquadratic kaszkád szűrők egyikét használom a mikrofon (szűrő) hangfrekvenciájának korlátozására. Három ilyen szűrőt kaszkádoztam, és 100 Hz -es sávos átvitelre állítottam őket. Ez a szűrő engedi be a rendszer frekvenciáit, amelyek kissé meghaladják és kissé alacsonyabbak az általunk érdekelt frekvenciánál.

A blokkdiagramban (lásd a képet) az i2s1 az audio tábla audio bemenete. Mindkét hangcsatornát egy keverőhöz, majd a szűrőkhöz kötöttem (a mikrofon csak egy csatorna, de mindkettőt összekevertem, így nem kellett rájönnöm, melyik csatorna az … hívjon lustának). A szűrő kimenetét az audio kimenetre futtatom (így hallhatom a hangot, ha akarom). A szűrők hangját is az FFT blokkhoz kötöttem. A tömbvázlaton az sgtl5000_1 feliratú blokk az audiovezérlő chip. Nincs szükség semmilyen kapcsolatra a diagramban.

Miután mindezt befejezte, kattintson az Export gombra. Ekkor megjelenik egy párbeszédpanel, ahol lemásolhatja a blokkdiagramból létrehozott kódot, és beillesztheti a Teensy alkalmazásba. Ha megnézi a kódot, láthatja, hogy az egyes vezérlőelemek példánya, valamint az összetevők közötti „kapcsolatok”.

9. lépés: Kód

Kód
Kód

Ebben az utasításban túl sok helyet foglalna el a szoftver részletes áttekintése. Megpróbálok kiemelni néhány kulcsfontosságú kódrészletet. De ez egyébként nem túl nagy alkalmazás. A PJRC nagyszerű oktatóvideóval rendelkezik a Teensy és az audio könyvtárak/eszközök használatáról (https://www.youtube.com/embed/wqt55OAabVs).

Kezdtem néhány FFT példakóddal a PJRC -től. Amit az audiorendszer -tervező eszközből kaptam, beillesztettem a kód tetejére. Ha ezek után megnézi a kódot, némi inicializációt lát, majd a rendszer elkezdi digitalizálni a mikrofonból származó hangot. A szoftver belép az „örökké” hurokba (), és várja az FFT adatok elérhetőségét az fft1024_1.available () függvény hívásával. Ha rendelkezésre állnak az FFT adatok, előveszem az adatok másolatát, és feldolgozom. Vegye figyelembe, hogy csak akkor veszek adatokat, ha a legnagyobb tároló nagysága meghaladja a beállított értéket. Ezzel az értékkel állíthatom be a rendszer érzékenységét. Ha a tárolók a beállított érték felett vannak, akkor normalizálom a hullámot, és átviszem egy ideiglenes tömbbe feldolgozásra, ellenkező esetben figyelmen kívül hagyom, és várom az újabb FFT -t. Meg kell említenem, hogy a mikrofon erősítés vezérlő funkcióját is használom az áramkör érzékenységének beállításához (sgtl5000_1.micGain (50)).

A hullám normalizálása csak annyit jelent, hogy az összes tálcát úgy állítom be, hogy a legnagyobb értékű tálca egyenlő legyen. Az összes többi rekesz méretaránya azonos. Ez megkönnyíti az adatok elemzését.

Több algoritmust használtam az adatok elemzésére, de csak kettőt választottam. Egy algoritmus kiszámítja a tárolók által alkotott görbe alatti területet. Ez egy egyszerű számítás, amely csak összeadja a tárolók értékeit az érdekelt régióban. Összehasonlítom ezt a területet, hogy megállapítsam, hogy meghaladja -e a küszöbértéket.

A másik algoritmus állandó értékek tömbjét használja, amelyek normalizált FFT -t képviselnek. Ezek az adatok egy valódi (optimális) kolibri aláírás eredményei. Ezt sövénynek nevezem. Összehasonlítom a fedezeti adatokat a normalizált FFT adatokkal, hogy lássam, a megfelelő tárolók 20% -on belül vannak -e egymáshoz képest. 20% -ot választottam, de ez az érték könnyen beállítható.

Azt is számolom, hogy az egyes algoritmusok hányszor gondolják, hogy van egyezésük, vagyis azt hiszik, hogy kolibrit hallanak. Ezt a számot a kolibri meghatározásának részeként használom, mert előfordulhat hamis kiváltás. Például, ha bármelyik hang hangos, vagy tartalmazza a madarak szárnyfrekvenciáját, például a kezek tapsolását, akkor kiváltó okot kaphat. De ha a szám egy bizonyos szám felett van (egy szám, amelyet én választok), azt mondom, hogy ez egy kolibri. Amikor ez megtörténik, bekapcsolom a LED -et, jelezve, hogy találatot kaptunk, és ugyanaz az áramkör indítja el a kamerát az NPN tranzisztoron keresztül. A szoftverben a kamera aktiválási idejét 2 másodpercre állítottam (amikor a LED és a tranzisztor világít).

10. lépés: Szerelés

Beépítési
Beépítési

Láthatja a képen, hogyan (szertartás nélkül) szereltem fel az elektronikát. A Teensy -t egy kenyérsütő deszkához csatlakoztattam, amely a hordozó táblához volt ragasztva, egy másik (nem használt) Arduino -kompatibilis (szerintem Arduino Zero) mellett. Az egészet dróttal kötöttem a fedélzetemen lévő fém napellenző póznához (a kamerához futó kábelhez húzást is adtam). Az oszlop közvetlenül a kolibri etető mellett volt. Az elektronikát egy kis LiPo tápegységgel tápláltam, amellyel feltölthet egy halott mobiltelefont. A tápegység USB -csatlakozóval volt ellátva, amelyet a Teensy -nek használtam. Átfutottam a távvezérlő kábelét a fényképezőgéphez, és bedugtam. Készen álltam néhány madár akcióra!

11. lépés: Eredmények

Eredmények
Eredmények

Felállítottam a kamerát egy állványra az adagoló közelében. A fényképezőgépet az adagoló legelső szélére fókuszáltam, és Sport módba állítottam, amely több gyors képet készít, amikor lenyomja a zárat. 2 másodperces leállítási idővel kb. 5 fényképet készítettem trigger eseményenként.

Néhány órát töltöttem a szoftverrel babrálva, amikor először kipróbáltam ezt. Be kellett állítanom az érzékenységet és az egymást követő algoritmus találatok számát. Végre beállítottam és kész voltam.

Az első kép egy madárról készült, amely úgy repült a keretbe, mintha nagysebességű partfordulatot hajtana végre, mint egy sugárhajtású vadászgép (lásd fent). El sem tudom mondani, mennyire izgatott voltam. Csendben ültem a fedélzet másik oldalán, és hagytam, hogy a rendszer működjön. Sok képet sikerült rögzítenem, de jó néhányat kidobtam. Kiderül, hogy néha csak madárfejet vagy farkat kap. Ezenkívül hamis triggereket kaptam, amelyek előfordulhatnak. Összességében azt hiszem, 39 képet őriztem meg. A madaraknak néhány kirándulásra volt szükségük az etetőhöz, hogy hozzászokjanak a fényképezőgép zárhangjához, de végül úgy tűnt, hogy figyelmen kívül hagyják.

12. lépés: Utolsó gondolatok

Végső gondolatok
Végső gondolatok

Ez egy szórakoztató projekt volt, és működik. De mint a legtöbb dologban, bőven van hova fejlődni. A szűrő minden bizonnyal más is lehet (például aluláteresztő szűrő vagy az elrendezés és/vagy a paraméterek megváltoztatása), és talán ez javíthatja a működését. Biztos vagyok abban is, hogy vannak jobb algoritmusok, amelyeket ki kell próbálni. Nyáron kipróbálok néhányat.

Azt mondták nekem, hogy van nyílt forráskódú gépi tanulási kód odakint … talán a rendszer "betanítható" a kolibri azonosítására! Nem biztos, hogy kipróbálom, de talán.

Milyen egyéb dolgokat lehetne hozzáadni ehhez a projekthez? Ha a fényképezőgép dátum/idő bélyegzővel rendelkezik, akkor ezeket az információkat hozzáadhatja a képekhez. Egy másik dolog, amit tehet, rögzítse a hangot, és mentse el egy uSD -kártyára (a PJRC hangkártya rendelkezik egy nyílással). A mentett hangot fel lehet használni egy tanulási algoritmus betanítására.

Esetleg valahol egy Madártani Iskola használhat ilyen eszközt? Lehet, hogy képesek lesznek olyan információkat gyűjteni, mint az etetési idők, az etetési gyakoriság, és a képekkel azonosítani lehet azokat a madarakat, amelyek visszatérnek a táplálékhoz.

Remélem, hogy valaki más kiterjeszti ezt a projektet, és megosztja másokkal, amit készítenek. Vannak, akik azt mondták, hogy ezt a munkát, amit végeztem, termékké kell alakítani. Nem vagyok benne olyan biztos, de inkább azt látnám, hogy tanulási platformként és tudományként használják.

Köszönöm, hogy elolvasta!

Az általam közzétett kód használatához szüksége lesz az Arduino IDE -re (https://www.arduino.cc/en/Main/Software). Szüksége lesz a PJRC Teensyduino kódjára is (https://www.pjrc.com/teensy/td_download.html).

Ajánlott: