Obsah:

Hummingbird Detector/Picture-Taker: 12 kroků (s obrázky)
Hummingbird Detector/Picture-Taker: 12 kroků (s obrázky)

Video: Hummingbird Detector/Picture-Taker: 12 kroků (s obrázky)

Video: Hummingbird Detector/Picture-Taker: 12 kroků (s obrázky)
Video: 🠠 HOTWAV POZNÁMKA 12 - PODROBNÁ RECENZE A TESTY 2024, Červenec
Anonim
Hummingbird Detector/Picture-Taker
Hummingbird Detector/Picture-Taker

Na zadní palubě máme krmítko pro kolibříky a posledních pár let je fotím. Kolibříci jsou úžasná malá stvoření, velmi teritoriální a jejich boje mohou být veselé i úžasné. Ale už mě unavovalo stát jako socha proti zadní části mého domu, abych je mohl vyfotit. Potřeboval jsem způsob, jak zachytit obrázky, aniž bych musel dlouho čekat za domem. Vím, že jsem mohl použít dálkově ovládanou závěrku, ale chtěl jsem, aby se snímky pořizovaly automaticky, aniž bych tam musel být. Rozhodl jsem se tedy vyrobit zařízení pro detekci kolibříků a automatické pořízení snímku.

Vždy jsem měl v úmyslu k tomu použít mikrokontrolér. Mikrokontrolér by dokázal ovládat spoušť fotoaparátu pod softwarovým ovládáním. Ale senzor pro detekci malého kolibříka byl něco jiného. Mohl jsem použít pohybový senzor, ale chtěl jsem vyzkoušet něco jedinečného. Rozhodl jsem se použít zvuk jako spoušť.

Krok 1: Výběr mikrokontroléru

Výběr mikrokontroléru
Výběr mikrokontroléru

Mikrokontrolér, který jsem si vybral, byl PJRC Teensy. Teensy používá mikrokontrolér ARM, konkrétně ARM Cortex M4. Cortex M4 obsahuje hardware k provedení FFT (Fast Fourier Transform), který by provedl detekci. PJRC také prodává zvukovou desku, která vám umožňuje používat Teensy k přehrávání hudby i záznamu zvuku s externím vstupem nebo malým mikrofonem, který můžete přidat na desku. Mým plánem bylo nechat Teensy provést FFT na zvuku z mikrofonu.

Krok 2: FFT?

FFT?
FFT?

FFT je matematický vzorec/algoritmus, který transformuje signál z časové domény do frekvenční domény. To znamená, že odebírá časově vzorkovaný zvuk z mikrofonu a mění jej na velikosti frekvencí přítomných v původní vlně. Vidíte, libovolnou souvislou vlnu lze sestrojit ze série sinusových nebo kosinusových vln, které jsou celočíselnými násobky nějaké základní frekvence. FFT dělá opak: vezme libovolnou vlnu a přemění ji na velikosti vln, které by v případě součtu vytvořily původní libovolnou vlnu. Ještě jednodušší způsob, jak to říci, je, že jsem plánoval použít software a hardware FFT v Teensy, abych zjistil, jestli 'slyší' mávání křídel kolibříka na frekvenci, kdy se objevují křídlové klapky. Pokud uslyší kolibříka, pošlu fotoaparátu příkaz, aby pořídil snímek.

Fungovalo to! Jak jsem to tedy udělal, jak jste to mohli udělat a jak byste to mohli ještě vylepšit?

Krok 3: Jak zní vznášející se kolibřík?

Jak zní vznášející se kolibřík?
Jak zní vznášející se kolibřík?

Nejprve jsem potřeboval zjistit, jakou frekvenci uslyším klapky křídel kolibříka. Abych to zjistil, použil jsem svůj iPhone. Upevnil jsem iPhone na stativ a nechal jsem jej nahrávat zpomalené video přímo před kolibří krmítko na naší palubě. Po určité době jsem vyjmul kameru a stáhl video. Potom jsem sledoval video hledající kolibříka před krmítkem. Když jsem našel dobrou sekvenci, spočítal jsem počet jednotlivých snímků, které kolibřík potřeboval, aby mával křídly z jedné polohy až do stejné polohy. Zpomalený pohyb na iPhone je asi 240 snímků za sekundu. Pozoroval jsem kolibříka, který se vznášel před krmítkem, a napočítal jsem 5 snímků, aby mohl přesunout křídla z přední polohy do zadní polohy a poté se vrátit do přední polohy. Jedná se o 5 snímků z 240. Pamatujte, že při každém zdvihu křídel kolibříka (jeden při dopředném zdvihu a jeden při zpětném zdvihu) slyšíme zvuk. Pro 5 snímků za cyklus nebo období můžeme vypočítat frekvenci jako jeden dělený periodou, tj. 1 / (5/240) nebo 48 Hz. To znamená, že když se tento kolibřík vznáší, zvuk, který slyšíme, musí být dvakrát větší nebo asi 96 Hz. Frekvence je pravděpodobně vyšší, když létají a ne vznášejí se. Může to být také ovlivněno jejich hmotností, ale myslím, že můžeme předpokládat, že většina ptáků stejného druhu má přibližně stejnou hmotnost.

Krok 4: Fourierova řada a Teensy

Fourierova řada a Teensy
Fourierova řada a Teensy

Teensy (použil jsem Teensy 3.2) vyrábí společnost PJRC (www.pjrc.com). FFT bude vypočítán na vzorku zvuku. K získání zvuku prodává PJRC desku zvukového adaptéru pro Teensy (TEENSY3_AUDIO - 14,25 $). Prodávají také malý mikrofon, který lze připájet na desku zvukového adaptéru (MICROPHONE - 1,25 USD). Deska zvukového adaptéru používá čip (SGTL5000), se kterým může Teensy komunikovat přes sériovou sběrnici (I2S). Teensy používá SGTL5000 k vzorkování zvuku z mikrofonu a jeho digitalizaci, tj. Vytvoření sady čísel, která představují zvuk, který mikrofon slyší.

FFT je jen rychlá verze toho, čemu se říká diskrétní Fourierova transformace (DFT). DFT lze provádět na libovolném počtu vzorků, nicméně FFT musí mít vzorky uložené v sadách, které jsou binárními násobky. Hardware Teensy může provádět FFT na sadě 1024 vzorků (1024 = 2^10), takže to použijeme.

FFT obvykle produkuje jako výstup veličiny A fázové vztahy mezi různými zastoupenými vlnami. U této aplikace nám nejde o fázové vztahy, ale zajímají nás veličiny a jejich frekvence.

Zvuková deska Teensy vzorkuje zvuk na frekvenci 44, 100 Hz. 1024 vzorků na této frekvenci tedy představuje časový interval 1024/44100 nebo přibližně 23,2 milisekund. V tomto případě bude FFT produkovat jako výstup magnitudy, které jsou celočíselnými násobky vzorkovací periody 43 Hz (opět 1/0,0232 se rovná asi 43 Hz). Chtěli bychom hledat magnitudy, které jsou zhruba dvojnásobkem této frekvence: 86 Hz. Není to přesně frekvence našich vypočítaných klapek kolibřího křídla, ale je dost blízko, jak uvidíme.

Krok 5: Použití Fourierových dat

Použití Fourierových dat
Použití Fourierových dat

Knihovny, které PJRC poskytuje pro Teensy, zpracují vzorky a vrátí řadu hodnot velikosti. Každou velikost ve vráceném poli budeme označovat jako přihrádku. První přihrádka (při offsetu nula v poli dat, která dostaneme zpět) je DC offset vlny. Tuto hodnotu můžeme bezpečně ignorovat. Druhý zásobník (na offsetu 1) bude představovat velikost složky 43 Hz. Toto je naše základní období. Další přihrádka (na offsetu 2) bude představovat velikost složky 86 Hz atd. Každý následující bin je celočíselný násobek základní periody (43 Hz).

Tady to začíná být trochu divné. Pokud bychom použili FFT k analýze dokonalého zvuku o frekvenci 43 Hz, pak by FFT vrátil první koš o nějaké velké velikosti a všechny ostatní koše by byly rovny nule (opět v dokonalém světě). Pokud by zvuk, který jsme zachytili a analyzovali, byl 86 Hz, pak by bin při offsetu jedna byl nulový a bin při offsetu 2 (druhá harmonická) by měl nějakou velkou velikost a zbytek zásobníků by byl nulový atd. Pokud bychom ale zachytili zvuk kolibříka a byl 96 Hz (jak jsem změřil na svém jednom ptákovi), pak by ofset 2 bin při 86 Hz měl velikost o něco nižší hodnoty (než by to byla dokonalá 86 Hz vlna) a koše kolem něj (jeden nižší a několik vyšších) by každý měl klesající nenulovou hodnotu.

Pokud by velikost vzorku pro náš FFT byla větší než 1024 nebo pokud by naše vzorkovací frekvence zvuku byla nižší, mohli bychom zlepšit rozlišení našich zásobníků (tj. Menší). Ale i kdybychom tyto věci změnili tak, aby naše zásobníky FFT byly 1 Hz násobky základní doby, stejně bychom se museli vypořádat s tímto „rozlitím“koše. Důvodem je, že bychom nikdy nedostali frekvenci křídla, která by vždy a přesně přistála na jediném zásobníku. To znamená, že nemůžeme svou detekci kolibříka založit pouze na hodnotě v odsazeném 2 zásobníku a zbytek ignorovat. Potřebujeme způsob, jak analyzovat data v několika přihrádkách, abychom se o to pokusili dát smysl. Více o tom později.

Krok 6: Zahájení stavby

Zahájit stavbu
Zahájit stavbu
Zahájit stavbu
Zahájit stavbu

Pro svůj prototyp detektoru kolibříků jsem použil extra dlouhé kolíky samec-samec připájené k pinům v Teensy. Udělal jsem to, abych mohl zapojit Teensy do malého nepájivého prkénka. Udělal jsem to, protože jsem předpokládal, že u prototypu udělám spoustu změn a pomocí prkénka jsem to mohl změnit a propojit vodiče, kdekoli jsem potřeboval. Na spodní stranu zvukové desky jsem připájel samičí proužky, které umožňují její připojení k horní části Teensy. Mikrofon je připájen k horní straně zvukové desky (viz obrázky). Více podrobností o montáži najdete na stránkách PJRC:

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

Krok 7: Hardware k pořízení obrázku

Hardware k pořízení obrázku
Hardware k pořízení obrázku
Hardware k pořízení obrázku
Hardware k pořízení obrázku

Mám (no, moje žena má) digitální fotoaparát Canon Rebel. Na fotoaparátu je konektor, který vám umožní připojit ruční dálkové ovládání závěrky. Koupil jsem ruční dálkový ovladač od B&H Photo. Kabel má správný konektor pro připojení kamery na jeden konec a je dlouhý asi 6 stop. Přerušil jsem kabel na konci u ovládací skříňky s tlačítky a odizoloval jsem dráty a připájel je ke třem kolíkovým konektorům, které jsem mohl zapojit do prkénka. Je zde holý vodič, který je uzemněn, a dva další signály: hrot je spouštěcí (růžový) a prstenec (bílý) je zaostřený (viz obrázky). Zkrácení špičky a/nebo prstence k zemi aktivuje závěrku a zaostření na fotoaparát.

Pomocí propojovacího drátu jsem od Teensy přeběhl společnou zem do oblasti, kde jsem ji mohl použít na prkénku. Také jsem připojil anodu LED na pin 2 na Teensy a katodu LED na odpor (100-220 ohmů) k zemi. Také jsem připojil pin 2 Teensy k 10K rezistoru a druhou stranu rezistoru jsem připojil k základně tranzistoru NPN (2N3904 se nachází všude). Připojil jsem vysílač tranzistoru k zemi a kolektor jsem připojil k bílým a růžovým vodičům z kabelu, který jde do kamery. Holý drát byl opět připojen k zemi. Kdykoli Teensy zapne LED, zapne se také tranzistor NPN a spustí kameru (a zaostření). Viz schéma.

Krok 8: Návrh systému

Systémový design
Systémový design

Protože kmitající frekvence Hummingbirdova křídla pravděpodobně nepřesahují několik stovek Hz, pak ve skutečnosti nepotřebujeme zaznamenávat zvukové frekvence nad řekněme několik stovek Hz. Potřebujeme způsob, jak odfiltrovat pouze požadované frekvence. Skvělý by byl pásmový nebo dokonce dolní propust. Tradičně bychom implementovali filtr v hardwaru pomocí filtrů OpAmps nebo filtrů s přepínaným kondenzátorem. Ale díky digitálnímu zpracování signálu a softwarovým knihovnám společnosti Teensy můžeme použít digitální filtr (není třeba pájení … pouze software).

PJRC má k dispozici skvělé grafické uživatelské rozhraní, které vám umožní přetáhnout váš audio systém pro Teensy a audio desku. Najdete ho zde:

www.pjrc.com/teensy/gui/

Rozhodl jsem se použít jeden z biquadratických kaskádových filtrů poskytovaných PJRC k omezení frekvencí zvuku z mikrofonu (filtru). Kaskádoval jsem tři takové filtry a nastavil je pro pásmový provoz na 100 Hz. Tento filtr umožní vstup do systémových frekvencí trochu nad a trochu pod frekvenci, která nás zajímá.

V blokovém schématu (viz obrázek) je i2s1 zvukový vstup do zvukové desky. Oba zvukové kanály jsem připojil k mixu a poté k filtrům (mikrofon je pouze jeden kanál, ale oba jsem smíchal, takže jsem nemusel zjišťovat, který kanál to je … říkej mi líný). Spustím výstup filtru na zvukový výstup (abych slyšel zvuk, pokud chci). Také jsem připojil zvuk z filtrů k bloku FFT. V blokovém schématu je blok označený sgtl5000_1 čipem řadiče zvuku. V diagramu nepotřebuje žádná připojení.

Poté, co provedete celou tuto stavbu bloku, kliknete na Exportovat. Zobrazí se dialogové okno, kde můžete zkopírovat kód vygenerovaný z blokového diagramu a vložit jej do aplikace Teensy. Pokud se podíváte na kód, můžete vidět, že se jedná o instanci každého ovládacího prvku spolu s „připojeními“mezi součástmi.

Krok 9: Kód

Kód
Kód

Trvalo by příliš mnoho místa v tomto Instructable, aby bylo možné podrobně projít software. Pokusím se zvýraznit některé klíčové části kódu. Ale stejně to není příliš velká aplikace. PJRC má skvělý video návod k používání Teensy a zvukových knihoven/nástrojů (https://www.youtube.com/embed/wqt55OAabVs).

Začal jsem s nějakým ukázkovým kódem FFT od PJRC. Vložil jsem to, co jsem dostal z nástroje pro návrh audiosystému, do horní části kódu. Pokud se podíváte na kód, uvidíte inicializaci a systém začne digitalizovat zvuk z mikrofonu. Software vstupuje do smyčky „navždy“() a čeká na dostupnost dat FFT pomocí volání funkce fft1024_1.available (). Když jsou k dispozici data FFT, vezmu kopii dat a zpracuji je. Všimněte si toho, že data získávám pouze v případě, že největší velikost bin je nad nastavenou hodnotou. Touto hodnotou nastavuji citlivost systému. Pokud jsou koše nad nastavenou hodnotou, normalizuji vlnu a přenesu ji do dočasného pole pro zpracování, jinak ji ignoruji a čekám na další FFT. Měl bych zmínit, že k nastavení citlivosti obvodu používám také funkci ovládání zisku mikrofonu (sgtl5000_1.micGain (50)).

Normalizace vlny prostě znamená, že upravím všechny přihrádky, takže přihrádka s největší hodnotou je nastavena na jednu. Všechny ostatní koše jsou škálovány stejným poměrem. To usnadňuje analýzu dat.

K analýze dat jsem použil několik algoritmů, ale rozhodl jsem se použít pouze dva. Jeden algoritmus vypočítá oblast pod křivkou tvořenou zásobníky. Jedná se o jednoduchý výpočet, který pouze sečte hodnoty zásobníků v oblasti zájmu. Tuto oblast porovnávám, abych určil, zda je nad prahovou hodnotou.

Druhý algoritmus používá konstantní řadu hodnot, které představují normalizovaný FFT. Tato data jsou výsledkem skutečného (optimálního) kolibřího podpisu. Tomu říkám živý plot. Porovnávám data zajištění s normalizovanými údaji FFT, abych zjistil, zda jsou odpovídající zásobníky od sebe do 20%. Vybral jsem 20%, ale tuto hodnotu lze snadno upravit.

Počítám také, kolikrát si jednotlivé algoritmy myslí, že mají shodu, to znamená, že si myslí, že slyší kolibříka. Tento počet používám jako součást určení kolibříka, protože může dojít k falešnému spuštění. Například, když je jakýkoli zvuk hlasitý nebo obsahuje frekvenci křídel ptáků, jako tleskání rukou, můžete spustit spoušť. Ale pokud je počet nad určitým číslem (číslo, které si vyberu), říkám, že je to kolibřík. Když se to stane, rozsvítím LED, abychom indikovali, že máme hit, a stejný obvod spouští kameru přes tranzistor NPN. V softwaru jsem nastavil čas spuštění kamery na 2 sekundy (čas, kdy svítí LED a tranzistor).

Krok 10: Montáž

Montáž
Montáž

Na obrázku vidíte, jak jsem (bez okolků) namontoval elektroniku. Měl jsem Teensy zapojený do prkénka, které bylo přilepené k nosné desce spolu s dalším (nepoužívaným) kompatibilním s Arduino (myslím Arduino Zero). Celou věc jsem přivázal na kovový sloupek markýzy na mé palubě (také jsem přidal odlehčení tahu na kabelu vedeném ke kameře). Pól byl hned vedle krmítka pro kolibříky. Napájel jsem elektroniku malou LiPo napájecí kostkou, kterou můžete použít k dobití mrtvého mobilního telefonu. Napájecí kostka měla na sobě USB konektor, kterým jsem napájel Teensy. Přejel jsem dálkovým spouštěcím kabelem ke kameře a zapojil ho. Byl jsem připraven na nějakou ptačí akci!

Krok 11: Výsledky

Výsledek
Výsledek

Fotoaparát jsem postavil na stativ poblíž krmítka. Nechal jsem fotoaparát zaostřit na přední okraj podavače a nastavil jsem ho na sportovní režim, který po stisknutí spouště pořídí několik rychlých snímků. Při době vypnutí 2 sekundy jsem zachytil asi 5 fotografií na jednu spouštěcí událost.

Strávil jsem pár hodin pohráváním se softwarem, když jsem to poprvé zkoušel. Musel jsem upravit citlivost a počet po sobě jdoucích algoritmů. Nakonec jsem to vyladil a byl jsem připraven.

První snímek, který pořídil, byl pták, který letěl do rámu, jako by se otáčel vysokorychlostní bankou jako proudový stíhač (viz výše). Nedokážu říct, jak jsem byl nadšený. Chvíli jsem tiše seděl na druhé straně paluby a nechal systém fungovat. Podařilo se mi nahrát spoustu obrázků, ale pár jsem jich vyhodil. Ukázalo se, že někdy dostanete ptačí hlavu nebo ocas. Také jsem dostal falešné spouště, které se mohou vyskytnout. Celkem si myslím, že jsem si nechal 39 obrázků. Ptákům trvalo několik výletů do krmítka, aby si zvykli na zvuk závěrky z fotoaparátu, ale nakonec to vypadalo, že to ignorují.

Krok 12: Závěrečné myšlenky

Závěrečné myšlenky
Závěrečné myšlenky

Byl to zábavný projekt a funguje to. Ale jako většina věcí existuje spousta prostoru pro zlepšení. Filtr se určitě může lišit (například nízkoprůchodový filtr nebo změny uspořádání a/nebo parametrů) a možná by to mohlo fungovat lépe. Jsem si také jistý, že existují lepší algoritmy k vyzkoušení. V létě něco z toho vyzkouším.

Bylo mi řečeno, že existuje kód strojového učení s otevřeným zdrojovým kódem … možná by mohl být systém „vyškolen“k identifikaci kolibříků! Nejsem si jistý, jestli to zkusím, ale možná.

Jaké další věci by mohly být přidány k tomuto projektu? Pokud měl fotoaparát razítko data/času, můžete tyto informace přidat k obrázkům. Další věc, kterou můžete udělat, je zaznamenat zvuk a uložit jej na kartu uSD (zvuková deska PJRC má slot pro jeden). Uložený zvuk může být možné použít pro nácvik algoritmu učení.

Možná by někde škola ornitologie mohla použít takové zařízení? Mohou být schopni shromáždit informace, jako jsou časy krmení, frekvence krmení, a podle obrázků můžete identifikovat konkrétní ptáky, kteří se vrací ke krmení.

Doufám, že někdo další rozšíří tento projekt a podělí se o to, co vyrobí, s ostatními. Někteří lidé mi řekli, že tato práce, kterou jsem udělal, by měla být přeměněna na produkt. Nejsem si tak jistý, ale spíše bych to viděl jako výukovou platformu a pro vědu.

Děkuji za přečtení!

K použití kódu, který jsem zveřejnil, budete potřebovat Arduino IDE (https://www.arduino.cc/en/Main/Software). Budete také potřebovat kód Teensyduino od PJRC (https://www.pjrc.com/teensy/td_download.html).

Doporučuje: