INHOUDSOPGAWE:

Kolibrie-detektor/prentmaker: 12 stappe (met prente)
Kolibrie-detektor/prentmaker: 12 stappe (met prente)

Video: Kolibrie-detektor/prentmaker: 12 stappe (met prente)

Video: Kolibrie-detektor/prentmaker: 12 stappe (met prente)
Video: Часть 2. Аудиокнига Виктора Эпплтона «Том Свифт и его мотоцикл» (гл. 13–25) 2024, November
Anonim
Kolibrie Detector/Picture-Taker
Kolibrie Detector/Picture-Taker

Ons het 'n kolibrie -voerder op ons agterdek en die afgelope paar jaar neem ek foto's daarvan. Kolibries is ongelooflike klein wesens, baie territoriaal en hul gevegte kan skreeusnaaks en ongelooflik wees. Maar ek was moeg daarvoor om soos 'n standbeeld teen die agterkant van my huis te staan om foto's van hulle te neem. Ek het 'n manier nodig om foto's te neem sonder om lank agter die huis te hoef te wag. Ek weet dat ek 'n afstandsbediende sluiter kon gebruik, maar ek wou dat foto's outomaties geneem word sonder dat ek daar moes wees. Daarom het ek besluit om 'n toestel te maak om die kolibries op te spoor en outomaties 'n foto te neem.

Ek was altyd van plan om 'n mikrobeheerder hiervoor te gebruik. Die mikrobeheerder kan die kamera -sluiter onder sagteware -beheer bestuur. Maar die sensor om 'n klein kolibrie op te spoor, was 'n ander ding. Ek kon 'n bewegingsensor gebruik het, maar ek wou iets unieks probeer. Ek het besluit om klank as sneller te gebruik.

Stap 1: Kies 'n mikrobeheerder

Kies 'n mikrobeheerder
Kies 'n mikrobeheerder

Die mikrobeheerder wat ek gekies het, was 'n PJRC Teensy. Die Teensy gebruik 'n ARM -mikrobeheerder, spesifiek 'n ARM Cortex M4. Die Cortex M4 bevat die hardeware om 'n FFT (Fast Fourier Transform) uit te voer wat die opsporing sou doen. PJRC verkoop ook 'n klankbord waarmee u die Teensy kan gebruik om musiek te speel, sowel as om klank op te neem met 'n eksterne ingang, of 'n klein mikrofoon wat u op die bord kan voeg. My plan was om die Teensy 'n FFT op die klank van die mikrofoon te laat uitvoer.

Stap 2: FFT?

FFT?
FFT?

'N FFT is 'n wiskundige formule/algoritme wat 'n sein van die tyddomein na die frekwensiedomein omskakel. Wat dit beteken, is dat dit die tyd-bemonsterde klank van die mikrofoon neem en dit verander in die frekwensies van die frekwensies wat in die oorspronklike golf voorkom. U sien, enige willekeurige, deurlopende golf kan opgebou word uit 'n reeks sinus- of cosinusgolwe wat heelgetalle veelvoude van 'n basisfrekwensie is. 'N FFT doen die teenoorgestelde: dit neem 'n willekeurige golf en verander dit in die grootte van die golwe wat, as dit saamgevat word, die oorspronklike willekeurige golf sou skep. 'N Nog eenvoudiger manier om dit te sê, is dat ek van plan was om sagteware en die FFT -hardeware in die Teensy te gebruik om vas te stel of dit die vlerk van 'n kolibrie' hoor 'op die frekwensie dat die vlerkklappe voorkom. As dit 'n kolibrie 'hoor', stuur ek 'n opdrag na 'n kamera om 'n foto te neem.

Dit het gewerk! Dus, hoe het ek dit gedoen, hoe kon u dit doen en hoe kan u dit nog beter maak?

Stap 3: Hoe klink 'n swewende kolibrie?

Hoe klink 'n swewende kolibrie?
Hoe klink 'n swewende kolibrie?

Eerstens moes ek uitvind watter frekwensie ek die kolibrie se vlerkklappe sou hoor. Om dit te bepaal, het ek my iPhone gebruik. Ek het die iPhone aan 'n driepoot gekoppel en het 'n slow motion -video reg voor die kolibrie -voerder op ons dek laat opneem. Na 'n tydjie het ek die kamera verwyder en die video afgelaai. Ek kyk toe na die video op soek na 'n kolibrie voor die voerder. Toe ek 'n goeie volgorde kry, het ek die aantal individuele rame getel wat die kolibrie nodig gehad het om sy vlerke van een posisie af tot by dieselfde posisie te klap. Slow motion op die iPhone is ongeveer 240 rame per sekonde. Ek het 'n kolibrie voor die voerder sien sweef en ek het 5 rame getel om sy vlerke van die vorentoe na die agterste posisie te beweeg en dan terug te keer na die vorentoe. Dit is 5 rame uit 240. Onthou, ons hoor 'n geluid op elke slag van die kolibrie se vlerkklappe (een op die voorwaartse slag en een op die agteruitslag). Vir 5 rame vir 'n siklus of periode kan ons die frekwensie bereken as een gedeel deur die periode, d.w.s. 1 / (5/240) of 48 Hz. Dit beteken dat wanneer hierdie kolibrie sweef, die geluid wat ons hoor, twee keer so of ongeveer 96 Hz moet wees. Die frekwensie is waarskynlik hoër as hulle vlieg en nie sweef nie. Dit kan ook beïnvloed word deur hul massa, maar ek dink ons kan aanvaar dat die meeste voëls van dieselfde spesie ongeveer dieselfde massa het.

Stap 4: Fourier -reeks en die tienerjare

Fourier -reeks en die Teensy
Fourier -reeks en die Teensy

Die Teensy (ek het 'n Teensy 3.2 gebruik) is gemaak deur PJRC (www.pjrc.com). Die FFT word bereken op 'n klankmonster. Om die klank te verkry, verkoop PJRC 'n klankadapterbord vir Teensy (TEENSY3_AUDIO - $ 14,25). Hulle verkoop ook 'n klein mikrofoon wat aan die klankadapterbord gesoldeer kan word (MIKROFOON - $ 1,25). Die klankadapterbord gebruik 'n chip (SGTL5000) waarmee die Teensy kan praat oor 'n seriële bus (I2S). Die Teensy gebruik die SGTL5000 om die klank uit die mikrofoon te neem en dit te digitaliseer, dit wil sê 'n stel getalle wat die klank wat die mikrofoon hoor, verteenwoordig.

'N FFT is slegs 'n vinnige weergawe van wat 'n Discrete Fourier Transform (DFT) genoem word. 'N DFT kan op 'n willekeurige aantal monsters uitgevoer word, maar 'n FFT moet die monsters in stelle met binêre veelvoude laat stoor. Die Teensy -hardeware kan 'n FFT op 'n stel 1024 monsters (1024 = 2^10) uitvoer, so dit is wat ons sal gebruik.

'N FFT produseer gewoonlik, as sy uitset, die groottes EN die faseverhoudings tussen die verskillende golwe wat voorgestel word. Vir hierdie toepassing is ons nie betrokke by die faseverhoudings nie, maar ons is geïnteresseerd in omvang en die frekwensie daarvan.

Die Teensy -klankbord monster klank met 'n frekwensie van 44, 100 Hz. Dus, 1024 monsters teen hierdie frekwensie verteenwoordig 'n tydsinterval van 1024/44100 of ongeveer 23,2 millisekondes. In hierdie geval produseer die FFT as uitset, groottes wat heelgetalle veelvoude is van die steekproeftydperk van 43 Hz (weer, 1/0,0232 is ongeveer 43 Hz). Ons wil soek na groottes wat ongeveer twee keer hierdie frekwensie is: 86 Hz. Dit is nie presies die frekwensie van ons berekende kolibrie -vlerkklappe nie, maar dit is naby genoeg soos ons sal sien.

Stap 5: Gebruik Fourier -data

Gebruik Fourier -data
Gebruik Fourier -data

Die biblioteke wat PJRC voorsien, stel die Teensy in staat om die monsters te verwerk en 'n groot aantal waardes terug te gee. Ons sal na elke grootte in die teruggekeerde skikking as 'n houer verwys. Die eerste bak (teen nul in die skare data wat ons terugkry) is die GS -verrekening van die golf. Ons kan hierdie waarde veilig ignoreer. Die tweede bak (teen 1) sal die grootte van die 43 Hz -komponent verteenwoordig. Dit is ons basiese tydperk. Die volgende asblik (teen offset 2) verteenwoordig die grootte van die 86 Hz -komponent, ensovoorts. Elke daaropvolgende bin is 'n heelgetal veelvoud van die basisperiode (43 Hz).

Nou word dit 'n bietjie vreemd. As ons 'n FFT gebruik om 'n volmaakte 43 Hz -klank te ontleed, sou die FFT die eerste bak in 'n groot mate terugstuur en sou die res van die asblikke gelyk wees aan nul (weer in 'n perfekte wêreld). As die klank wat ons vasgelê en ontleed het, 86 Hz was, dan sou die bak by die verrekening een nul wees en die bak by die 2 (die tweede harmoniese) 'n groot omvang en die res van die asblikke nul, ensovoorts. Maar as ons die geluid van 'n kolibrie opneem en dit was 96 Hz (soos ek op my een voël gemeet het), dan sou die 2 bin 86 Hz -offset 'n effens laer waarde hê (as die perfekte 86 Hz -golf) en die asblikke daar rondom (een laer en 'n paar hoër) sou elkeen 'n afnemende waarde van nul hê.

As die steekproefgrootte vir ons FFT groter as 1024 was of as ons klankmonsterfrekwensie laer was, kon ons die resolusie van ons asblikke beter (dit wil sê kleiner) maak. Maar selfs al verander ons hierdie dinge om ons FFT -asblikke 1 Hz veelvoude van die basisperiode te maak, sal ons steeds hierdie gemors moet hanteer. Dit is omdat ons nooit 'n vlerkfrekwensie sou kry wat altyd en presies op 'n enkele as beland het nie. Dit beteken dat ons ons opsporing van 'n kolibrie nie net kan baseer op die waarde in die 2 -bak nie, en die res kan ignoreer. Ons benodig 'n manier om die data in 'n paar asblikke te ontleed om dit sinvol te maak. Meer hieroor later.

Stap 6: Begin bou

Begin bou
Begin bou
Begin bou
Begin bou

Vir my prototipe kolibrie-detektor gebruik ek ekstra lang mannetjies-mannetjies wat aan die penne in die Teensy gesoldeer is. Ek het dit gedoen sodat ek die Teensy kon aansluit op 'n klein broodbord sonder soldeer. Ek het dit gedoen omdat ek aangeneem het dat ek baie veranderinge in die prototipe sou aanbring en met die broodbord, ek kon dit verander en net drade dra waar ek nodig het. Ek het vrouestroke aan die onderkant van die klankbord gesoldeer, sodat dit bo -op die Teensy geprop kan word. Die mikrofoon is aan die bokant van die klankbord gesoldeer (sien foto's). Meer besonderhede oor die montering kan gevind word op die PJRC -webwerf:

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

Stap 7: Hardeware om 'n prentjie te maak

Hardeware om 'n prentjie te maak
Hardeware om 'n prentjie te maak
Hardeware om 'n prentjie te maak
Hardeware om 'n prentjie te maak

Ek het (wel, my vrou het) 'n Canon Rebel Digital Camera. Daar is 'n jack op die kamera waarmee u 'n handmatige afstandsbediening kan aansluit. Ek het 'n handmatige afstandsbediening by B&H Photo gekoop. Die kabel het die regte aansluiting om aan die een kant van die kamera te pas en is ongeveer 6 voet lank. Ek sny die kabel aan die einde naby die knoppie -kontrolekas en ek trek die drade terug en soldeer dit aan drie kopstukke wat ek in die broodbord kan steek. Daar is 'n kaal draad wat gemaal word en twee ander seine: die punt is sneller (pienk) en die ring (wit) is fokus (sien die foto's). Deur die punt en/of ring op die grond te kort, werk die sluiter en die fokus op die kamera.

Met 'n springdraad loop ek 'n gemeenskaplike grond van die Teensy af na 'n gebied waar ek dit op die broodbord kan gebruik. Ek het ook die anode van 'n LED aan pen 2 op die Teensy en die katode van die LED gekoppel aan 'n weerstand (100-220 ohm) op die grond. Ek het ook pen 2 van die Teensy aan 'n 10K -weerstand gekoppel en die ander kant van die weerstand wat ek aan die basis van 'n NPN -transistor gekoppel het ('n 2N3904 wat oral gevind word). Ek het die emitter van die transistor met die aarde verbind en die kollektor wat ek aan die wit en pienk drade gekoppel het, van die kabel wat na die kamera gaan. Die kaal draad was weer aan die grond gekoppel. Elke keer as die LED deur die Teensy aangeskakel word, sal die NPN -transistor ook aanskakel en dit sal die kamera (en die fokus) aktiveer. Sien die skematiese.

Stap 8: Stelselontwerp

Stelsel ontwerp
Stelsel ontwerp

Omdat die kolibrie se vlerkfrekwensie -frekwensies waarskynlik nie hoër as 'n paar honderd Hz gaan nie, hoef ons nie regtig klankfrekwensies op te neem nie, byvoorbeeld 'n paar honderd Hz. Wat ons nodig het, is 'n manier om slegs die frekwensies wat ons wil, uit te filter. 'N Bandpas- of selfs laagdeurlaatfilter sal wonderlik wees. Tradisioneel sou ons 'n filter in hardeware implementeer met behulp van OpAmps of filters met skakelaars. Maar danksy die digitale seinverwerking en die sagteware -biblioteke van die Teensy, kan ons 'n digitale filter gebruik (geen soldeer nodig nie … net sagteware).

PJRC het 'n uitstekende GUI waarmee u u klankstelsel vir die Teensy en die klankbord kan sleep. U kan dit hier vind:

www.pjrc.com/teensy/gui/

Ek het besluit om een van die PJRC-biquadratiese watervalfilters te gebruik om die klankfrekwensies van die mikrofoon (filter) te beperk. Ek het drie sulke filters laat val en dit vir bandpass -werking op 100 Hz gestel. Hierdie filter laat die stelselfrekwensies toe, 'n bietjie bo en 'n bietjie onder die frekwensie waarin ons belangstel.

In die blokdiagram (sien prent) is i2s1 die klankinvoer na die klankbord. Ek het albei klankkanale aan 'n menger gekoppel en dan aan die filters (die mikrofoon is slegs een kanaal, maar ek het albei gemeng, sodat ek nie hoef uit te vind watter kanaal dit is nie … noem my lui). Ek voer die uitset van die filter na die klankuitset (sodat ek die klank kan hoor as ek wil). Ek het ook die klank van die filters aan die FFT -blok gekoppel. In die blokdiagram is die blok met die naam sgtl5000_1 die klankbeheerder -chip. Dit benodig geen verbindings in die diagram nie.

Nadat u al hierdie blokbouwerk gedoen het, klik u op Uitvoer. Dit bring 'n dialoogvenster oop waar u die kode wat uit die blokdiagram gegenereer is, kan kopieer en dit in u Teensy -toepassing kan plak. As u na die kode kyk, kan u sien dat dit 'n weergawe is van elke kontrole saam met die 'verbindings' tussen die komponente.

Stap 9: Kode

Kode
Kode

Dit sal te veel ruimte in hierdie instruksie neem om die sagteware in detail te ondersoek. Wat ek sal probeer doen, is om 'n paar van die belangrikste stukkies kode uit te lig. Maar dit is in elk geval nie 'n baie groot toepassing nie. PJRC het 'n wonderlike video -tutoriaal oor die gebruik van Teensy en die klankbiblioteke/gereedskap (https://www.youtube.com/embed/wqt55OAabVs).

Ek het begin met 'n FFT -voorbeeldkode van PJRC. Ek het wat ek van die ontwerpstelsel vir die klankstelsel gekry het, bo -aan die kode geplak. As u daarna na die kode kyk, sal u 'n paar inisialisering sien, en dan begin die stelsel klank vanaf die mikrofoon digitaliseer. Die sagteware betree die 'ewig' -lus () en wag totdat FFT -data beskikbaar is met 'n oproep na die funksie fft1024_1.available (). As FFT -data beskikbaar is, neem ek 'n afskrif van die data en verwerk dit. Let daarop dat ek slegs data gryp as die grootste houertjie groter is as 'n vasgestelde waarde. Hierdie waarde is hoe ek die stelsel se sensitiwiteit stel. As die asblikke bo die ingestelde waarde is, normaliseer ek die golf en dra dit oor na 'n tydelike skikking vir verwerking, anders ignoreer ek dit en wag ek op 'n ander FFT. Ek moet noem dat ek ook die mikrofoon -versterkingsfunksie gebruik om die sensitiwiteit van die kring aan te pas (sgtl5000_1.micGain (50)).

Om die golf te normaliseer, beteken net dat ek al die asblikke aanpas sodat die bak met die grootste waarde gelyk is aan een. Alle ander asblikke word met dieselfde verhouding afgeskaal. Dit maak die data makliker om te ontleed.

Ek het verskeie algoritmes gebruik om die data te ontleed, maar ek het besluit om slegs twee te gebruik. Een algoritme bereken die oppervlakte onder die kromme wat deur die asblikke gevorm word. Dit is 'n eenvoudige berekening wat net die waardes van die asblikke in die belangegebied toevoeg. Ek vergelyk hierdie gebied om te bepaal of dit bo 'n drempel is.

Die ander algoritme gebruik 'n konstante reeks waardes wat 'n genormaliseerde FFT voorstel. Hierdie gegewens is die resultate van 'n regte (optimale) kolibrie -handtekening. Ek noem dit 'n heining. Ek vergelyk die verskansingsdata met die genormaliseerde FFT -data om te sien of die ooreenstemmende asblikke binne 20% van mekaar is. Ek het 20% gekies, maar hierdie waarde kan maklik aangepas word.

Ek tel ook hoeveel keer die individuele algoritmes dink dat hulle 'n pasmaat het, wat beteken dat hulle 'n kolibrie hoor. Ek gebruik hierdie telling as deel van die kolibrie -bepaling, omdat valse sneller kan voorkom. Byvoorbeeld, as 'n geluid hard is of die voëls se vlerkfrekwensie bevat, soos hande klap, kan u 'n sneller kry. Maar as die telling bo 'n sekere getal is ('n getal wat ek kies), sê ek dat dit 'n kolibrie is. As dit gebeur, skakel ek die LED aan om aan te dui dat ons 'n treffer het en dieselfde stroombaan aktiveer die kamera via die NPN -transistor. In die sagteware stel ek die sneltyd van die kamera op 2 sekondes (die tyd dat die LED en die transistor aan is).

Stap 10: Montering

Montering
Montering

U kan op die foto sien hoe ek (sonder seremonie) die elektronika gemonteer het. Ek het die Teensy in 'n broodbord geplaas wat saam met 'n ander (ongebruikte) Arduino -versoenbare ('n Arduino Zero) aan 'n draagbord vasgeplak is. Ek het die hele ding vasgemaak aan 'n metaal afdakpaal op my dek (ek het ook 'n spanningverligting by die kabel wat na die kamera loop) bygevoeg. Die paal was reg langs die kolibrie -voerder. Ek het die elektronika aangedryf met 'n klein LiPo -baksteen wat jy kan gebruik om 'n dooie selfoon te herlaai. Die kragsteen het 'n USB -aansluiting op wat ek gebruik het om die Teensy oor te dra. Ek het die afgeleë snellerkabel na die kamera toe oorgedra en ingeprop. Ek was gereed vir 'n bietjie voëlaksie!

Stap 11: Resultate

Resultate
Resultate

Ek het die kamera op 'n driepoot naby die voerder gesit. Ek het die kamera op die voorkant van die toevoer gefokus en dit in die sportmodus gestel, wat verskeie vinnige foto's neem as die sluiter ingedruk word. Met die sluiter tyd van 2 sekondes het ek ongeveer 5 foto's per sneller gebeurtenis geneem.

Ek het 'n paar uur lank met die sagteware rondgekuier die eerste keer dat ek dit probeer het. Ek moes die sensitiwiteit en die opeenvolgende treffer van die algoritme aanpas. Ek het dit uiteindelik aangepas en ek was gereed.

Die eerste foto wat dit geneem het, was van 'n voël wat in die raam gevlieg het asof hy 'n hoëspoedbankdraai soos 'n straaljagter sou neem (sien hierbo). Ek kan jou nie vertel hoe opgewonde ek was nie. Ek het 'n rukkie rustig aan die ander kant van die dek gesit en die stelsel laat werk. Ek kon baie foto's opneem, maar ek het 'n hele paar weggegooi. Dit blyk dat jy soms net 'n voëlkop of stert kry. Ek het ook vals snellers gekry, wat kan voorkom. In totaal dink ek dat ek 39 foto's gehou het. Dit het die voëls 'n paar ritte na die voerder geneem om aan die sluitergeluid van die kamera gewoond te raak, maar dit het uiteindelik gelyk of hulle dit ignoreer.

Stap 12: Laaste gedagtes

Laaste gedagtes
Laaste gedagtes

Dit was 'n prettige projek en dit werk. Maar, soos die meeste dinge, is daar genoeg ruimte vir verbetering. Die filter kan beslis anders wees (soos 'n laepasfilter of veranderinge aan die rangskikking en/of parameters), en dit kan dit moontlik beter laat werk. Ek is ook seker dat daar beter algoritmes is om te probeer. Ek sal dit in die somer probeer.

Daar is vir my gesê dat daar 'n oopbron-kode vir masjienleer is … miskien kan die stelsel 'opgelei' word om kolibries te identifiseer! Ek is nie seker of ek dit sal probeer nie, maar miskien.

Watter ander dinge kan by hierdie projek gevoeg word? As die kamera 'n datum-/tydstemper het, kan u die inligting by die foto's voeg. Nog 'n ding wat u kan doen, is om die klank op te neem en op 'n uSD -kaart te stoor (die PJRC -klankbord het 'n gleuf vir een). Die gestoorde klank kan moontlik gebruik word vir die opleiding van 'n leeralgoritme.

Miskien kan 'n skool vir Ornitologie 'n toestel soos hierdie gebruik? Hulle kan moontlik inligting insamel, soos voedingstye, voedingsfrekwensie, en met die foto's kan u spesifieke voëls identifiseer wat terugkeer na die voer.

My hoop is dat iemand anders hierdie projek uitbrei en dit wat hulle maak met ander deel. Sommige mense het vir my gesê dat hierdie werk wat ek gedoen het, 'n produk moet word. Ek is nie so seker nie, maar ek sal dit eerder as 'n leerplatform en vir wetenskap beskou.

Dankie vir die lees!

Om die kode wat ek gepos het te gebruik, benodig u die Arduino IDE (https://www.arduino.cc/en/Main/Software). U benodig ook die Teensyduino -kode van PJRC (https://www.pjrc.com/teensy/td_download.html).

Aanbeveel: