Kazalo:

Detektor kolibri/slikar: 12 korakov (s slikami)
Detektor kolibri/slikar: 12 korakov (s slikami)

Video: Detektor kolibri/slikar: 12 korakov (s slikami)

Video: Detektor kolibri/slikar: 12 korakov (s slikami)
Video: Минная опасность деоккупированных территорий. Что нужно знать? Лекция взрывотехника и сапера 2024, Julij
Anonim
Detektor kolibri/slikar
Detektor kolibri/slikar

Na zadnji palubi imamo hranilnik kolibrijev in zadnjih nekaj let jih fotografiram. Kolibri so neverjetna mala bitja, zelo teritorialna in njihovi boji so lahko smešni in neverjetni. A naveličal sem se stati kot kip ob hrbtu hiše, da bi jih fotografiral. Potreboval sem način za snemanje slik, ne da bi moral dolgo čakati za hišo. Vem, da bi lahko uporabil zaklop na daljinsko upravljanje, vendar sem želel, da se slike posnamejo samodejno, ne da bi mi bilo treba biti tam. Zato sem se odločil, da naredim napravo za zaznavanje kolibri in samodejno fotografiranje.

Za to sem vedno nameraval uporabiti mikrokrmilnik. Mikrokrmilnik bi lahko upravljal zaklop fotoaparata pod programsko opremo. Toda senzor za zaznavanje drobnega kolibrija je bila druga stvar. Lahko bi uporabil senzor gibanja, vendar sem hotel poskusiti nekaj edinstvenega. Odločil sem se uporabiti zvok kot sprožilec.

1. korak: Izbira mikrokrmilnika

Izbira mikrokrmilnika
Izbira mikrokrmilnika

Mikrokrmilnik, ki sem ga izbral, je bil PJRC Teensy. Teensy uporablja mikrokrmilnik ARM, natančneje ARM Cortex M4. Cortex M4 vsebuje strojno opremo za izvedbo FFT (Fast Fourier Transform), ki bi zaznala. PJRC prodaja tudi zvočno ploščo, ki vam omogoča uporabo Teensyja za predvajanje glasbe in snemanje zvoka z zunanjim vhodom ali majhen mikrofon, ki ga lahko dodate na ploščo. Moj načrt je bil, da bi Teensy izvedel FFT zvoka iz mikrofona.

2. korak: FFT?

FFT?
FFT?

FFT je matematična formula/algoritem, ki pretvori signal iz časovnega področja v frekvenčno področje. To pomeni, da iz mikrofona vzame časovno vzorčen zvok in ga spremeni v velikosti frekvenc, ki so prisotne v prvotnem valu. Vidite, vsak poljuben, neprekinjen val je mogoče sestaviti iz niza sinusnih ali kosinusnih valov, ki so celobrojni večkratniki neke osnovne frekvence. FFT dela nasprotno: vzame poljuben val in ga spremeni v velikosti valov, ki bi, če bi jih sešteli skupaj, ustvarili prvotni poljubni val. Še enostavnejši način, da to rečem, je, da sem v Teensyju nameraval uporabiti programsko opremo in strojno opremo FFT, da bi ugotovil, ali 'sliši' udarjanje krila kolibri pri pogostosti pojavljanja krilnih zavihkov. Če ne sliši kolibrija, bom kameri poslal ukaz za fotografiranje.

Delovalo je! Torej, kako sem to naredil, kako bi ti to lahko naredil in kako bi lahko bil še boljši?

3. korak: Kako zveni lebdeči kolibri?

Kako zveni lebdeči kolibri?
Kako zveni lebdeči kolibri?

Najprej sem moral ugotoviti, na kakšni frekvenci bom slišal krila kolibri. Za to sem uporabil svoj iPhone. IPhone sem pritrdil na stojalo in ga posnel s počasnim videom neposredno pred podajalnikom kolibri na naši palubi. Čez nekaj časa sem odstranil kamero in naložil video. Nato sem si ogledal videoposnetek, ki je pred napajalnikom iskal kolibrija. Ko sem našel dobro zaporedje, sem preštel število posameznih okvirjev, ki jih je potreboval, da je kolibri zamahnil s krili iz enega položaja vse do istega položaja. Počasno gibanje na iPhoneu je približno 240 sličic na sekundo. Opazoval sem kolibrija, ki je lebdel pred podajalnikom, in preštel sem 5 okvirjev, da je premaknil krila iz položaja naprej v položaj nazaj in se nato vrnil v položaj naprej. To je 5 sličic od 240. Ne pozabite, da slišimo zvok pri vsakem udarcu krilnih zavihkov kolibri (enega pri udarcu naprej in enega pri udarcu nazaj). Za 5 sličic za cikel ali obdobje lahko frekvenco izračunamo kot eno, deljeno s obdobjem, tj. 1 / (5/240) ali 48 Hz. To pomeni, da mora biti, ko ta kolibri lebdi, zvok, ki ga slišimo dvakrat večji ali približno 96 Hz. Pogostost je verjetno večja, ko letijo in ne lebdijo. Na to lahko vpliva tudi njihova masa, vendar mislim, da lahko domnevamo, da ima večina ptic iste vrste približno enako maso.

4. korak: Fourierjeve serije in Teensy

Fourierjeve serije in najstniki
Fourierjeve serije in najstniki

Teensy (uporabil sem Teensy 3.2) izdeluje PJRC (www.pjrc.com). FFT bo izračunan na vzorcu zvoka. Za pridobitev zvoka PJRC prodaja ploščo za avdio adapter za Teensy (TEENSY3_AUDIO - 14,25 USD). Prodajajo tudi majhen mikrofon, ki ga lahko spajkate na ploščo za zvočni adapter (MIKROFON - 1,25 USD). Plošča za zvočni adapter uporablja čip (SGTL5000), s katerim se Teensy lahko pogovarja prek serijskega vodila (I2S). Teensy uporablja SGTL5000 za vzorčenje zvoka iz mikrofona in njegovo digitalizacijo, torej ustvarjanje niza številk, ki predstavljajo zvok, ki ga sliši mikrofon.

FFT je le hitra različica tako imenovane diskretne Fourierjeve transformacije (DFT). DFT je mogoče izvesti na poljubnem številu vzorcev, vendar mora imeti FFT vzorce shranjene v nizih, ki so binarni večkratniki. Strojna oprema Teensy lahko izvede FFT na nizu 1024 vzorcev (1024 = 2^10), zato bomo to uporabili.

FFT običajno kot svoj izhod proizvede velikosti IN fazna razmerja med različnimi predstavljenimi valovi. Za to aplikacijo se ne ukvarjamo s faznimi razmerji, ampak nas zanimajo velikosti in njihova pogostost.

Zvočna plošča Teensy vzorči zvok pri frekvenci 44, 100 Hz. Torej 1024 vzorcev pri tej frekvenci predstavlja časovni interval 1024/44100 ali približno 23,2 milisekund. V tem primeru bo FFT kot izhod proizvedel velikosti, ki so celobrojni večkratniki vzorčnega obdobja 43 Hz (spet je 1/0,0232 enako približno 43 Hz). Želeli bi poiskati velikosti, ki so približno dvakrat večje od te frekvence: 86 Hz. To ni ravno pogostost naših izračunanih zavihkov krila kolibri, vendar je dovolj blizu, kot bomo videli.

5. korak: Uporaba Fourierjevih podatkov

Uporaba Fourierjevih podatkov
Uporaba Fourierjevih podatkov

Knjižnice, ki jih PJRC ponuja za Teensy, bodo obdelale vzorce in vrnile niz vrednosti. Vsako velikost v vrnjeni matriki bomo označevali kot posodo. To vrednost lahko varno prezremo. Drugi pladenj (pri odmiku 1) bo predstavljal velikost komponente 43 Hz. To je naše osnovno obdobje. Naslednji koš (pri odmiku 2) bo predstavljal velikost komponente 86 Hz itd. Vsak naslednji koš je celoštevilčni večkratnik osnovnega obdobja (43 Hz).

Zdaj je to malo čudno. Če bi uporabili FFT za analizo popolnega zvoka 43 Hz, bi FFT vrnil prvo posodo z veliko velikostjo in vsi preostali posodi bi bili enaki nič (spet v popolnem svetu). Če bi bil zvok, ki smo ga zajeli in analizirali, 86 Hz, bi bila posoda pri odmiku enaka nič in posoda pri odmiku 2 (drugi harmonik) neke velike velikosti, preostali posodi pa bi bili nič itd. Če pa bi posneli zvok kolibrija in bi bil 96 Hz (kot sem meril na svoji eni ptici), bi imel odmik 2 bin pri 86 Hz velikost nekoliko nižje vrednosti (kot bi bil popoln val 86 Hz) in vsaka posoda okoli nje (ena nižja in nekaj višja) bi imela vsak manjšo vrednost, ki ni nič.

Če bi bila velikost vzorca za naš FFT večja od 1024 ali če bi bila frekvenca vzorčenja zvoka nižja, bi lahko izboljšali ločljivost posod (tj. Zmanjšali). Toda tudi če bi te stvari spremenili tako, da bi naši zabojniki FFT 1 Hz bili večkratniki osnovnega obdobja, bi se morali še vedno spoprijeti s tem "razlitjem" koša. To je zato, ker nikoli ne bi dobili frekvence krila, ki bi vedno in natančno pristala na enem samem pladnju. To pomeni, da odkrivanja kolibri ne moremo temeljiti le na vrednosti v zavihku 2, ostale pa prezreti. Potrebujemo način za analizo podatkov v nekaj posodah, da jih poskusimo razumeti. Več o tem kasneje.

Korak 6: Začnite gradnjo

Začnite gradnjo
Začnite gradnjo
Začnite gradnjo
Začnite gradnjo

Za svoj prototip detektorja kolibri sem uporabil zelo dolge moško-moške zatiče, spajkane na zatiče v Teensyju. To sem naredil, da sem lahko Teensy priključil na majhno ploščo brez spajkanja. To sem storil, ker sem domneval, da bom v prototipu naredil veliko sprememb, z načrtno ploščo pa lahko to spremenim in samo preskočim žice, kjer koli potrebujem. Na spodnjo stran avdio plošče sem spajkal ženske trakove, ki omogočajo, da se priklopi na vrh Teensyja. Mikrofon je spajen na zgornji strani zvočne plošče (glej slike). Več podrobnosti o montaži najdete na spletnem mestu PJRC:

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

7. korak: Strojna oprema za snemanje slike

Strojna oprema za fotografiranje
Strojna oprema za fotografiranje
Strojna oprema za fotografiranje
Strojna oprema za fotografiranje

Imam (no, moja žena ima) digitalni fotoaparat Canon Rebel. Na fotoaparatu je priključek, ki omogoča priključitev ročnega daljinskega upravljalnika zaklopa. Ročni daljinski upravljalnik sem kupil pri B&H Photo. Kabel ima ustrezen priključek za namestitev fotoaparata na en konec in je dolg približno 6 čevljev. Kabel sem prerezal na koncu v bližini krmilne omarice z gumbi, odstranil sem žice in jih spajkal na tri zatiče glave, ki sem jih lahko priključil na ploščo. Obstaja gola žica, ki je ozemljena, in dva druga signala: konica je sprožilec (roza) in obroč (bel) je v fokusu (glej slike). S krajšanjem konice in/ali obroča na tla upravljate zaklop in ostrenje fotoaparata.

S skakalno žico sem od Teensyja speljal skupno mesto do območja, kjer bi ga lahko uporabil na plošči. Priključil sem tudi anodo LED na pin 2 na Teensyju in katodo LED na upor (100-220 ohmov) na maso. Tudi pin 2 Teensyja sem priključil na 10K upor, drugo stran upora pa na osnovo tranzistorja NPN (povsod najdemo 2N3904). Oddajnik tranzistorja sem priključil na ozemljitev, kolektor pa sem priključil na bele in roza žice iz kabla, ki gre do kamere. Gola žica je bila spet povezana z ozemljitvijo. Kadarkoli Teensy prižge LED, se vklopi tudi tranzistor NPN in sproži kamero (in ostrenje). Oglejte si shemo.

8. korak: Oblikovanje sistema

Oblikovanje sistema
Oblikovanje sistema

Ker frekvence zamahanja kolibri ne presegajo nekaj sto Hz, nam zvočnih frekvenc pravzaprav ni treba snemati, recimo, nekaj sto Hz. Potrebujemo način, da filtriramo samo frekvence, ki jih želimo. Pasovni ali celo nizkoprepustni filter bi bil odličen. Tradicionalno bi v strojni opremi uporabili filter z OpAmps ali filtri s preklopno kondenzatorjem. Toda zahvaljujoč digitalni obdelavi signalov in knjižnicam programske opreme Teensy lahko uporabimo digitalni filter (spajkanje ni potrebno … samo programska oprema).

PJRC ima na voljo odličen grafični vmesnik, ki vam omogoča, da povlečete in spustite zvočni sistem za Teensy in avdio ploščo. Najdete ga tukaj:

www.pjrc.com/teensy/gui/

Odločil sem se, da bom za omejevanje zvočnih frekvenc iz mikrofona (filtra) uporabil enega od bikvadratnih kaskadnih filtrov, ki jih ponuja PJRC. Tri take filtre sem kaskadiral in nastavil za pasovno delovanje pri 100 Hz. Ta filter bo omogočil vstop na sistemske frekvence malo nad in malo pod frekvenco, ki nas zanima.

Na blokovnem diagramu (glej sliko) je i2s1 zvočni vhod na zvočno ploščo. Oba zvočna kanala sem priključil na mešalnik in nato na filtre (mikrofon je samo en kanal, vendar sem oba zmešal, tako da mi ni bilo treba ugotoviti, za kateri kanal gre … pokliči me len). Izhod filtra usmerim v avdio izhod (tako da lahko slišim zvok, če želim). Zvok iz filtrov sem priključil tudi na blok FFT. V blokovnem diagramu je blok z oznako sgtl5000_1 čip avdio krmilnika. V diagramu ne potrebuje nobenih povezav.

Ko končate vso to konstrukcijo bloka, kliknete Izvozi. Odpre se pogovorno okno, v katerem lahko kopirate kodo, ki je bila ustvarjena iz blokovnega diagrama, in jo prilepite v aplikacijo Teensy. Če pogledate kodo, lahko vidite, da gre za primerek vsakega kontrolnika skupaj s 'povezavami' med komponentami.

9. korak: Koda

Koda
Koda

V tem navodilu bi potrebovali preveč prostora, da bi podrobneje preučili programsko opremo. Poskušal bom izpostaviti nekatere ključne dele kode. Vendar to vseeno ni zelo velika aplikacija. PJRC ima odlično video vadnico o uporabi Teensyja in zvočnih knjižnic/orodij (https://www.youtube.com/embed/wqt55OAabVs).

Začel sem z nekaj vzorčno kodo FFT iz PJRC. Kar sem dobil od orodja za oblikovanje avdio sistema, sem prilepil na vrh kode. Če po tem pogledate kodo, boste videli nekaj inicializacije, nato pa bo sistem začel digitalizirati zvok iz mikrofona. Programska oprema vstopi v zanko "forever" () in počaka, da bodo podatki FFT na voljo s klicem funkcije fft1024_1.available (). Ko so podatki FFT na voljo, vzamem kopijo podatkov in jih obdelam. Upoštevajte, da podatke zajemam le, če je največja velikost koša nad nastavljeno vrednostjo. Na ta način nastavim občutljivost sistema. Če so koši nad nastavljeno vrednostjo, val normaliziram in ga prenesem v začasno matriko za obdelavo, sicer pa ga prezrem in čakam na nov FFT. Naj omenim, da tudi za nastavitev občutljivosti vezja uporabljam funkcijo nadzora ojačitve mikrofona (sgtl5000_1.micGain (50)).

Normalizacija vala pomeni le, da prilagodim vse posode tako, da je koš z največjo vrednostjo enak ena. Vsi drugi koši so pomanjšani za enak delež. Tako je podatke lažje analizirati.

Za analizo podatkov sem uporabil več algoritmov, vendar sem se odločil za uporabo samo dveh. En algoritem izračuna površino pod krivuljo, ki jo tvorijo posode. To je preprost izračun, ki samo doda vrednosti košev v celotni regiji, ki nas zanima. Primerjam to področje, da ugotovim, ali je nad pragom.

Drugi algoritem uporablja konstantno polje vrednosti, ki predstavljajo normaliziran FFT. Ti podatki so rezultat pravega (optimalnega) podpisa kolibri. Temu pravim hedge. Primerjam podatke o varovanju pred tveganjem z normaliziranimi podatki FFT, da vidim, ali so ustrezni zabojniki med 20% drug od drugega. Izbral sem 20%, vendar je to vrednost mogoče enostavno prilagoditi.

Štejem tudi, kolikokrat posamezni algoritmi mislijo, da se ujemajo, kar pomeni, da mislijo, da slišijo kolibri. To število uporabljam kot del določanja kolibri, ker lahko pride do lažnega sprožanja. Na primer, če je kateri koli zvok glasen ali vsebuje frekvenco ptičjega krila, kot je ploskanje z rokami, lahko dobite sprožilec. Če pa je število nad določenim številom (število, ki ga izberem), pravim, da je kolibri. Ko se to zgodi, vklopim LED, da pokažem, da smo zadeli, in to isto vezje sproži kamero prek tranzistorja NPN. V programski opremi sem nastavil čas sprožilca kamere na 2 sekundi (čas, ko sta LED in tranzistor vklopljeni).

10. korak: Montaža

Montaža
Montaža

Na sliki lahko vidite, kako sem (brez ceremonije) montiral elektroniko. Teensy sem imel priključen na ploščo, ki je bila pritrjena na nosilno ploščo skupaj z drugim (neuporabljenim) združljivim Arduinom (mislim, da je Arduino Zero). Vse sem z žico privezal na kovinski tendi na palubi (kablu, ki vodi do kamere, sem dodal tudi razbremenitev). Palica je bila tik ob hranilniku kolibri. Elektroniko sem napajal z majhno napajalno ploščico LiPo, ki bi jo lahko uporabili za polnjenje mrtvega mobilnega telefona. Na napajalni opeki je bil priključek USB, ki sem ga uporabil za prenos energije v Teensy. Kabel daljinskega sprožilca sem pripeljal do kamere in ga priključil. Pripravljen sem bil na akcijo ptic!

11. korak: Rezultati

Rezultati
Rezultati

Kamero sem nastavil na stativ blizu podajalnika. Fotoaparat sem imel osredotočen na sam sprednji rob podajalnika in ga nastavil na športni način, ki ob pritisku zaklopa naredi več hitrih slik. S časom zaklopa 2 sekundi sem posnel približno 5 fotografij na dogodek sprožilca.

Ko sem prvič poskusil s tem, sem nekaj ur brskal po programski opremi. Moral sem prilagoditi občutljivost in število zaporednih zadetkov algoritma. Končno sem ga popravil in bil sem pripravljen.

Prva slika je bila ptica, ki je priletela v okvir, kot da bi pri hitrem zavoju zavila kot reaktivni lovnik (glej zgoraj). Ne morem vam povedati, kako sem bil navdušen. Nekaj časa sem tiho sedel na drugi strani palube in pustil, da sistem deluje. Uspelo mi je posneti veliko slik, a kar nekaj sem jih zavrgel. Izkazalo se je, da včasih dobiš samo ptičjo glavo ali rep. Prav tako sem dobil lažne sprožilce, do katerih lahko pride. Skupaj mislim, da sem ohranil 39 slik. Ptice so potrebovale nekaj izletov do podajalnika, da so se navadile na zvok zaklopa s fotoaparata, vendar se je na koncu zdelo, da ga niso upoštevali.

12. korak: Zadnje misli

Zaključne misli
Zaključne misli

To je bil zabaven projekt in deluje. Toda, tako kot večina stvari, je še veliko prostora za izboljšave. Filter bi bil lahko drugačen (na primer nizkoprepustni filter ali spremembe razporeditve in/ali parametrov) in morda bi zaradi tega deloval bolje. Prepričan sem tudi, da obstajajo boljši algoritmi za preizkušanje. Nekaj tega bom poskusil poleti.

Povedali so mi, da obstaja odprtokodna koda za strojno učenje … morda bi sistem lahko "usposobili" za prepoznavanje kolibrij! Nisem prepričan, da bom to poskusil, ampak mogoče.

Kaj bi še lahko dodali temu projektu? Če bi imela kamera datum/čas, lahko te podatke dodate slikam. Druga stvar, ki jo lahko naredite, je, da posnamete zvok in ga shranite na kartico USB (zvočna plošča PJRC ima režo za eno). Shranjeni zvok bi lahko uporabili za usposabljanje učnega algoritma.

Mogoče bi nekje ornitološka šola uporabila takšno napravo? Morda bodo lahko zbrali informacije, kot so čas hranjenja, pogostost hranjenja in s slikami boste morda lahko prepoznali posebne ptice, ki se vračajo v krmo.

Upam, da bo nekdo drug razširil ta projekt in svoje ustvarjanje delil z drugimi. Nekateri so mi rekli, da je treba to delo, ki sem ga opravil, spremeniti v izdelek. Nisem tako prepričan, vendar bi raje videl, da se uporablja kot učna platforma in za znanost.

Hvala za branje!

Za uporabo kode, ki sem jo objavil, potrebujete Arduino IDE (https://www.arduino.cc/en/Main/Software). Potrebovali boste tudi kodo Teensyduino iz PJRC (https://www.pjrc.com/teensy/td_download.html).

Priporočena: