Obsah:

Detektor kolibríkov/fotograf: 12 krokov (s obrázkami)
Detektor kolibríkov/fotograf: 12 krokov (s obrázkami)

Video: Detektor kolibríkov/fotograf: 12 krokov (s obrázkami)

Video: Detektor kolibríkov/fotograf: 12 krokov (s obrázkami)
Video: ELF/EMBARC Bronchiectasis conference 2023 with subtitles 2024, Júl
Anonim
Detektor kolibríkov/fotograf
Detektor kolibríkov/fotograf

Na zadnej palube máme kŕmidlo pre kolibríky a posledných pár rokov ich fotím. Kolibríky sú úžasné malé tvory, veľmi územné a ich boje môžu byť veselé aj úžasné. Ale už ma unavovalo stáť ako socha oproti zadnej časti domu, aby som ich mohol odfotiť. Potreboval som spôsob, ako zachytiť obrázky bez toho, aby som musel dlho čakať za domom. Viem, že som mohol použiť diaľkovo ovládanú uzávierku, ale chcel som, aby sa fotografie robili automaticky bez toho, aby som tam bol. Preto som sa rozhodol vyrobiť zariadenie na detekciu kolibríkov a automatické fotografovanie.

Vždy som mal v úmysle použiť na to mikrokontrolér. Mikrokontrolér by dokázal ovládať spúšť fotoaparátu pod softvérovým ovládaním. Senzor na detekciu malého kolibríka bol však iná vec. Mohol som použiť snímač pohybu, ale chcel som skúsiť niečo jedinečné. Rozhodol som sa použiť zvuk ako spúšťač.

Krok 1: Výber mikrokontroléra

Výber mikrokontroléra
Výber mikrokontroléra

Mikrokontrolér, ktorý som si vybral, bol PJRC Teensy. Teensy používa mikrokontrolér ARM, konkrétne ARM Cortex M4. Cortex M4 obsahuje hardvér na vykonanie FFT (Fast Fourier Transform), ktorá by vykonala detekciu. PJRC tiež predáva zvukovú dosku, ktorá vám umožňuje používať Teensy na prehrávanie hudby aj nahrávanie zvuku s externým vstupom alebo malým mikrofónom, ktorý môžete pridať na dosku. Mojím plánom bolo, aby Teensy vykonali FFT na zvuk z mikrofónu.

Krok 2: FFT?

FFT?
FFT?

FFT je matematický vzorec/algoritmus, ktorý transformuje signál z časovej domény do frekvenčnej oblasti. Čo to znamená, že odoberie časovo vzorkovaný zvuk z mikrofónu a zmení ho na veľkosti frekvencií, ktoré sú prítomné v pôvodnej vlne. Vidíte, akúkoľvek ľubovoľnú, spojitú vlnu je možné zostaviť zo série sínusových alebo kosínusových vĺn, ktoré sú celočíselnými násobkami nejakej základnej frekvencie. FFT robí opak: vezme ľubovoľnú vlnu a zmení ju na veľkosti vĺn, ktoré by v prípade súhrnu vytvorili pôvodnú ľubovoľnú vlnu. Ešte jednoduchší spôsob, ako to povedať, je, že som plánoval použiť softvér a hardvér FFT v spoločnosti Teensy, aby som zistil, či „počuje“mávanie krídlami kolibríka vo frekvencii výskytu klapiek krídla. Ak kolibrík „počuje“, pošlem fotoaparátu príkaz, aby urobil fotografiu.

Fungovalo to! Ako som to teda urobil, ako ste to mohli urobiť a ako by ste to mohli ešte vylepšiť?

Krok 3: Ako znie vznášajúci sa kolibrík?

Ako znie vznášajúci sa kolibrík?
Ako znie vznášajúci sa kolibrík?

Najprv som musel zistiť, ako často budem počuť chlopne kolibríka. Aby som to určil, použil som svoj iPhone. IPhone som pripevnil na statív a nechal som ho nahrávať spomalené video priamo pred krmítko pre kolibríky na našej palube. Po určitom čase som odstránil fotoaparát a video som stiahol. Potom som si pozrel video, ako hľadám kolibríka pred krmítko. Keď som našiel dobrú sekvenciu, spočítal som počet jednotlivých snímok, ktoré kolibríkovi hodilo krídlami z jednej polohy až do tej istej polohy. Spomalený záber na iPhone je asi 240 snímok za sekundu. Pozoroval som kolibríka vznášajúceho sa pred podávačom a napočítal som mu 5 snímok, aby posunul krídla z prednej polohy do zadnej polohy a potom sa vrátil do prednej polohy. Toto je 5 snímok z 240. Nezabudnite, že pri každom zdvihu kolibríkových krídel počujeme zvuk (jeden pri zdvihu dopredu a jeden pri zdvihu dozadu). Pre 5 snímok za cyklus alebo obdobie môžeme frekvenciu vypočítať ako delenú periódou, tj. 1 / (5/240) alebo 48 Hz. To znamená, že keď sa tento kolibrík vznáša, zvuk, ktorý počujeme, musí byť dvakrát taký alebo približne 96 Hz. Frekvencia je pravdepodobne vyššia, keď lietajú a nevznášajú sa. Môže to byť tiež ovplyvnené ich hmotnosťou, ale myslím si, že môžeme predpokladať, že väčšina vtákov rovnakého druhu má približne rovnakú hmotnosť.

Krok 4: Fourierova séria a Teensy

Fourierova séria a mladiství
Fourierova séria a mladiství

Teensy (použil som Teensy 3.2) vyrába spoločnosť PJRC (www.pjrc.com). FFT sa vypočíta na vzorke zvuku. Na získanie zvuku predáva spoločnosť PJRC dosku zvukového adaptéra pre spoločnosť Teensy (TEENSY3_AUDIO - 14,25 dolárov). Predávajú tiež malý mikrofón, ktorý je možné spájkovať s doskou zvukového adaptéra (MIKROFÓN - 1,25 dolára). Doska zvukového adaptéra používa čip (SGTL5000), s ktorým sa Teensy môže rozprávať cez sériovú zbernicu (I2S). Teensy používa SGTL5000 na vzorkovanie zvuku z mikrofónu a jeho digitalizáciu, to znamená, že vytvorí sadu čísel, ktoré predstavujú zvuk, ktorý mikrofón počuje.

FFT je len rýchla verzia toho, čo sa nazýva diskrétna Fourierova transformácia (DFT). DFT je možné vykonať na ľubovoľnom počte vzoriek, avšak FFT musí mať vzorky uložené v množinách, ktoré sú binárne násobky. Hardvér Teensy môže vykonávať FFT na súprave 1024 vzoriek (1024 = 2^10), takže to použijeme.

FFT zvyčajne produkuje ako svoj výkon veličiny A fázové vzťahy medzi rôznymi reprezentovanými vlnami. V tejto aplikácii nám nejde o fázové vzťahy, ale zaujímajú nás veličiny a ich frekvencia.

Zvuková doska Teensy vzorkuje zvuk na frekvencii 44, 100 Hz. 1024 vzoriek pri tejto frekvencii teda predstavuje časový interval 1024/44100 alebo približne 23,2 milisekúnd. V tomto prípade bude FFT produkovať ako výstup magnitúdy, ktoré sú celočíselnými násobkami vzorkovacej periódy 43 Hz (opäť 1/0,0232 sa rovná asi 43 Hz). Chceli by sme hľadať veličiny, ktoré sú približne dvojnásobkom tejto frekvencie: 86 Hz. Nie je to presne frekvencia našich vypočítaných klapiek kolibríkov, ale je dosť blízko, ako uvidíme.

Krok 5: Použitie Fourierových údajov

Použitie Fourierových údajov
Použitie Fourierových údajov

Knižnice, ktoré Teensy poskytuje PJRC, spracuje vzorky a vráti množstvo hodnôt. Každú veľkosť vo vrátenom poli budeme označovať ako bin. Prvý bin (pri offsetovej nule v poli dát, ktoré dostaneme späť) je DC offset vlny. Túto hodnotu môžeme pokojne ignorovať. Druhý zásobník (s posunom 1) bude predstavovať veľkosť zložky 43 Hz. Toto je naše základné obdobie. Nasledujúci zásobník (s posunom 2) bude predstavovať veľkosť 86 Hz zložky a tak ďalej. Každý nasledujúci bin je celočíselným násobkom základnej periódy (43 Hz).

Teraz je to tu trochu divné. Ak by sme použili FFT na analýzu dokonalého zvuku s frekvenciou 43 Hz, FFT by vrátil prvý kôš s nejakou veľkou veľkosťou a všetky ostatné zásobníky by sa rovnali nule (opäť v perfektnom svete). Ak by zvuk, ktorý sme zachytili a analyzovali, bol 86 Hz, potom by bin pri offsete jeden bol nula a bin pri offsete 2 (druhá harmonická) by bol nejakej veľkej veľkosti a zvyšok zásobníkov by bol nulový, a tak ďalej. Ak by sme však zachytili zvuk kolibríka a bol by 96 Hz (ako som nameral na svojom jednom vtákovi), potom by ofsetový 2 bin pri 86 Hz mal veľkosť o niečo nižšiu hodnotu (ako by mala dokonalá 86 Hz vlna) a koše okolo neho (jeden nižší a niekoľko vyšší) by mali každú klesajúcu nenulovú hodnotu.

Ak by veľkosť vzorky pre náš FFT bola väčšia ako 1024 alebo ak by bola naša vzorkovacia frekvencia zvuku nižšia, mohli by sme rozlíšenie našich zásobníkov zlepšiť (tj. Zmenšiť). Ale aj keby sme tieto veci zmenili tak, aby naše zásobníky FFT boli 1 Hz násobky základnej doby, stále by sme sa museli s týmto „rozliatím“koša vysporiadať. Dôvodom je, že by sme nikdy nedostali frekvenciu krídla, ktorá by vždy a presne pristála v jednom koši. To znamená, že nemôžeme svoju detekciu kolibríka založiť iba na hodnote v odsadenom 2 zásobníku a ostatné ignorovať. Potrebujeme spôsob, ako analyzovať údaje v niekoľkých zásobníkoch, aby sme sa im pokúsili porozumieť. Viac o tom neskôr.

Krok 6: Začnite s výstavbou

Začnite so stavbou
Začnite so stavbou
Začnite so stavbou
Začnite so stavbou

Pre môj prototyp detektora kolibríka som použil extra dlhé samčie a samčie kolíky spájkované s kolíkmi v Teensy. Urobil som to, aby som mohol Teensy zapojiť do malého nepájivého chleba. Urobil som to, pretože som predpokladal, že urobím veľa zmien v prototype a na doske, môžem to zmeniť a prepojiť káble, kdekoľvek budem potrebovať. Samé prúžky som spájkoval na spodnú stranu zvukovej dosky, čo umožňuje jej zapojenie na vrch Teensy. Mikrofón je spájkovaný s hornou stranou zvukovej dosky (pozri obrázky). Viac podrobností o montáži nájdete na stránke PJRC:

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

Krok 7: Hardvér na zachytenie obrázku

Hardvér na zachytenie obrázku
Hardvér na zachytenie obrázku
Hardvér na zachytenie obrázku
Hardvér na zachytenie obrázku

Mám (no, moja manželka má) digitálny fotoaparát Canon Rebel. Na fotoaparáte je konektor, ktorý vám umožní pripojiť manuálne diaľkové ovládanie spúšte. Kúpil som si manuálny diaľkový ovládač od B&H Photo. Kábel má na jednom konci správny konektor, aby sa zmestil do fotoaparátu, a je asi 6 stôp dlhý. Prestrihol som kábel na konci v blízkosti ovládacej skrinky s tlačidlami a odizoloval som káble a spájkoval ich s tromi kolíkovými konektormi, ktoré som mohol zapojiť do dosky. Existuje uzemnený drôt a dva ďalšie signály: hrot je spúšťací (ružový) a prstenec (biely) je zaostrený (pozri obrázky). Skrátením špičky a/alebo prstenca k zemi sa aktivuje uzávierka a zaostrenie na fotoaparát.

Pomocou prepojovacieho drôtu som prešiel od Teensyho k spoločnému uzemneniu do oblasti, kde som ho mohol použiť na doske. Tiež som pripojil anódu LED k pinu 2 na Teensy a katódu LED k odporu (100-220 ohmov) k zemi. Tiež som pripojil pin 2 Teensy k 10K odporu a druhú stranu rezistora som pripojil k základni tranzistora NPN (2N3904 sa nachádza všade). Pripojil som vysielač tranzistora k zemi a kolektor som pripojil k bielym a ružovým vodičom z kábla, ktorý ide k fotoaparátu. Holý drôt bol opäť spojený so zemou. Kedykoľvek Teensy zapne diódu LED, zapne sa aj tranzistor NPN a spustí fotoaparát (a zaostrenie). Pozri schému.

Krok 8: Návrh systému

Systémový dizajn
Systémový dizajn

Pretože kmitajúce frekvencie Hummingbirdovho krídla pravdepodobne nepresahujú niekoľko stoviek Hz, potom skutočne nepotrebujeme zaznamenávať zvukové frekvencie nad, povedzme, niekoľko stoviek Hz. Potrebujeme spôsob, ako odfiltrovať iba požadované frekvencie. Skvelý by bol pásmový alebo dokonca dolnopriepustný filter. Tradične by sme implementovali filter v hardvéri pomocou filtrov OpAmps alebo filtrov s kondenzátorovým filtrom. Ale vďaka digitálnemu spracovaniu signálu a softvérovým knižniciam spoločnosti Teensy môžeme použiť digitálny filter (nie je potrebné spájkovanie … iba softvér).

PJRC má k dispozícii skvelé grafické rozhranie, ktoré vám umožní drag and drop váš audio systém pre Teensy a audio dosku. Nájdete ho tu:

www.pjrc.com/teensy/gui/

Rozhodol som sa použiť jeden z biquadratických kaskádových filtrov poskytovaných PJRC na obmedzenie zvukových frekvencií z mikrofónu (filtra). Kaskádoval som tri takéto filtre a nastavil som ich na prevádzku pásmového signálu na 100 Hz. Tento filter vpustí do frekvencií systému niečo nad a trochu pod frekvenciu, ktorá nás zaujíma.

V blokovom diagrame (pozri obrázok) i2s1 je zvukový vstup do zvukovej dosky. Pripojil som oba zvukové kanály k mixéru a potom k filtrom (mikrofón je iba jeden kanál, ale zmiešal som oba, aby som nemusel zisťovať, ktorý kanál to je … hovorte mi lenivý). Spustím výstup filtra na zvukový výstup (aby som mohol počuť zvuk, ak chcem). Pripojil som aj zvuk z filtrov k bloku FFT. V blokovom diagrame je blok označený sgtl5000_1 čipom radiča zvuku. V diagrame nepotrebuje žiadne pripojenia.

Potom, čo urobíte celú túto stavbu bloku, kliknite na Exportovať. Zobrazí sa dialógové okno, kde môžete skopírovať kód vygenerovaný zo blokového diagramu a vložiť ho do aplikácie Teensy. Ak sa pozriete na kód, vidíte, že je to inštancia každého ovládacieho prvku spolu s „prepojeniami“medzi komponentmi.

Krok 9: Kód

Kód
Kód

Podrobný popis softvéru v tomto návode by vyžadoval príliš veľa miesta. Pokúsim sa zdôrazniť niektoré kľúčové bity kódu. Ale aj tak to nie je príliš veľká aplikácia. PJRC má skvelý video návod na používanie Teensy a zvukových knižníc/nástrojov (https://www.youtube.com/embed/wqt55OAabVs).

Začal som s nejakým ukážkovým kódom FFT od PJRC. Do hornej časti kódu som vložil to, čo som dostal z nástroja na návrh audiosystému. Keď sa pozriete na kód, uvidíte inicializáciu a systém začne digitalizovať zvuk z mikrofónu. Softvér vstupuje do slučky „navždy“() a čaká na dostupnosť údajov FFT pomocou volania funkcie fft1024_1.available (). Keď sú údaje FFT k dispozícii, vezmem si kópiu údajov a spracujem ich. Všimnite si toho, že údaje získavam iba vtedy, ak je najväčšia veľkosť bin nad nastavenou hodnotou. Touto hodnotou nastavujem citlivosť systému. Ak sú PRIESTORY nad nastavenou hodnotou, vlnu normalizujem a prenesiem do dočasného poľa na spracovanie, v opačnom prípade ju ignorujem a čakám na ďalší FFT. Mal by som spomenúť, že na nastavenie citlivosti obvodu používam aj funkciu ovládania zisku mikrofónu (sgtl5000_1.micGain (50)).

Normalizácia vlny len znamená, že upravím všetky zásobníky, takže kôš s najväčšou hodnotou je nastavený na hodnotu jeden. Všetky ostatné zásobníky sú zmenšené o rovnaký podiel. To uľahčuje analýzu údajov.

Na analýzu údajov som použil niekoľko algoritmov, ale rozhodol som sa použiť iba dva. Jeden algoritmus vypočíta oblasť pod krivkou tvorenou zásobníkmi. Toto je jednoduchý výpočet, ktorý len sčíta hodnoty zásobníkov v regióne záujmu. Porovnávam túto oblasť, aby som zistil, či je nad prahovou hodnotou.

Druhý algoritmus používa konštantné pole hodnôt, ktoré predstavujú normalizovaný FFT. Tieto údaje sú výsledkom skutočného (optimálneho) podpisu kolibríka. Tomu hovorím živý plot. Porovnávam údaje o zaistení s normalizovanými údajmi FFT, aby som zistil, či sú zodpovedajúce zásobníky od seba maximálne 20%. Vybral som 20%, ale túto hodnotu je možné ľahko upraviť.

Tiež počítam, koľkokrát si jednotlivé algoritmy myslia, že majú zhodu, to znamená, že si myslia, že počujú kolibríka. Tento počet používam ako súčasť určenia kolibríka, pretože môže dôjsť k falošnému spusteniu. Napríklad, keď je akýkoľvek zvuk hlasný alebo obsahuje frekvenciu vtáčieho krídla, napríklad tlieskanie rukou, môže dôjsť k spusteniu. Ale ak je počet vyšší ako určité číslo (číslo, ktoré si vyberiem), hovorím, že je to kolibrík. Keď sa to stane, zapnem LED diódu, aby sme naznačili, že máme zásah, a ten istý obvod spúšťa kameru prostredníctvom tranzistora NPN. V softvéri som nastavil čas spustenia fotoaparátu na 2 sekundy (čas, počas ktorého svietia LED a tranzistor).

Krok 10: Montáž

Montáž
Montáž

Na obrázku vidíte, ako som (bez okolkov) namontoval elektroniku. Nechal som Teensy zapojiť do doštičky, ktorá bola prilepená k doske nosiča, spolu s ďalším (nepoužitým) kompatibilným s Arduino (myslím, že Arduino Zero). Celé som to uviazal na kovový stĺpik markízy na palube (káblu vedenému k fotoaparátu som pridal aj odľahčenie napätia). Stĺp bol hneď vedľa krmítka pre kolibríky. Elektroniku som napájal malou napájacou tehlou LiPo, ktorú môžete použiť na dobitie mŕtveho mobilného telefónu. Napájacia tehla mala na sebe konektor USB, ktorý som použil na prenos energie do Teensy. Viedol som diaľkovým spúšťacím káblom k fotoaparátu a zapojil ho. Bol som pripravený na akciu s vtákmi!

Krok 11: Výsledky

Výsledky
Výsledky

Fotoaparát som postavil na statív blízko podávača. Fotoaparát som nechal zaostriť na predný okraj podávača a nastavil som ho na športový režim, ktorý po stlačení spúšte nasníma niekoľko rýchlych záberov. S časom vypnutia 2 sekundy som zachytil asi 5 fotografií na jednu spúšťaciu udalosť.

Keď som to prvýkrát vyskúšal, strávil som pár hodín pohrávaním si so softvérom. Musel som nastaviť citlivosť a počet zásahov algoritmu za sebou. Nakoniec som to vyladil a bol som pripravený.

Prvá fotografia, ktorú urobil, bola vták, ktorý vletel do rámu, ako keby sa otáčal vysokorýchlostnou zákrutou ako prúdová stíhačka (pozri vyššie). Nemôžem vám povedať, ako som bol nadšený. Chvíľu som ticho sedel na druhej strane paluby a nechal systém fungovať. Podarilo sa mi nahrať veľa fotografií, ale niekoľko som vyhodil. Ukazuje sa, že niekedy dostanete iba vtáčiu hlavu alebo chvost. Tiež som dostal falošné spúšťače, ktoré sa môžu vyskytnúť. Celkovo si myslím, že som si nechal 39 fotografií. Vtákom trvalo niekoľko výletov do podávača, aby si zvykli na zvuk spúšte z fotoaparátu, ale nakoniec sa zdalo, že to ignorujú.

Krok 12: Záverečné myšlienky

Záverečné myšlienky
Záverečné myšlienky

Bol to zábavný projekt a funguje to. Ale ako väčšina vecí, aj tu je veľa priestoru na zlepšenie. Filter môže byť určite odlišný (ako napríklad dolnopriepustný filter alebo zmeny v usporiadaní a/alebo parametroch) a možno by aj lepšie fungoval. Som si tiež istý, že existujú lepšie algoritmy, ktoré je možné vyskúšať. V lete niečo z toho vyskúšam.

Povedali mi, že existuje kód strojového učenia s otvoreným zdrojovým kódom … možno by mohol byť systém „vyškolený“na identifikáciu kolibríkov! Nie som si istý, či to skúsim, ale možno.

Aké ďalšie veci by bolo možné pridať k tomuto projektu? Ak mal fotoaparát razítko dátumu/času, mohli by ste tieto informácie pridať k obrázkom. Ďalšia vec, ktorú môžete urobiť, je nahrať zvuk a uložiť ho na kartu uSD (zvuková doska PJRC má slot pre jeden). Uložený zvuk možno bude možné použiť na školenie algoritmu učenia.

Možno by niekde škola ornitológie mohla používať takéto zariadenie? Môžu zbierať informácie, ako sú časy kŕmenia, frekvencia kŕmenia, a pomocou obrázkov môžete identifikovať konkrétne vtáky, ktoré sa vracajú do krmiva.

Dúfam, že niekto iný rozšíri tento projekt a podelí sa o to, čo vyrobí, s ostatnými. Niektorí ľudia mi povedali, že táto práca, ktorú som urobil, by sa mala zmeniť na produkt. Nie som si taký istý, ale skôr by som to videl ako platformu vzdelávania a pre vedu.

Vďaka za prečítanie!

Na použitie kódu, ktorý som zverejnil, budete potrebovať Arduino IDE (https://www.arduino.cc/en/Main/Software). Budete tiež potrebovať kód Teensyduino od PJRC (https://www.pjrc.com/teensy/td_download.html).

Odporúča: