Sisukord:

Koolibri detektor/pildistaja: 12 sammu (piltidega)
Koolibri detektor/pildistaja: 12 sammu (piltidega)

Video: Koolibri detektor/pildistaja: 12 sammu (piltidega)

Video: Koolibri detektor/pildistaja: 12 sammu (piltidega)
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Juuli
Anonim
Kolibri detektor/pildistaja
Kolibri detektor/pildistaja

Meil on seljatekil koolibri söötja ja paar viimast aastat olen neid pildistanud. Koolibrid on hämmastavad väikesed olendid, väga territoriaalsed ja nende võitlused võivad olla nii lõbusad kui ka hämmastavad. Aga mul hakkas kõrini seisma nagu kuju oma maja taga, et neid pildistada. Vajasin võimalust piltide jäädvustamiseks, ilma et peaksin kaua maja taga seisma. Ma tean, et oleksin võinud kasutada kaugjuhtimisega katikut, kuid soovisin, et pildid tehtaks automaatselt, ilma et oleksin pidanud seal olema. Niisiis otsustasin teha seadme koolibrite tuvastamiseks ja automaatselt pildi tegemiseks.

Ma kavatsesin alati kasutada mikrokontrollerit. Mikrokontroller saaks kaamera katikut tarkvara juhtimise all juhtida. Kuid andur pisikese koolibri tuvastamiseks oli teine asi. Oleksin võinud kasutada liikumisandurit, kuid tahtsin proovida midagi ainulaadset. Otsustasin käivitamiseks kasutada heli.

Samm: mikrokontrolleri valimine

Mikrokontrolleri valimine
Mikrokontrolleri valimine

Minu valitud mikrokontroller oli PJRC Teensy. Teensy kasutab ARM -i mikrokontrollerit, täpsemalt ARM Cortex M4. Cortex M4 sisaldab riistvara FFT (Fast Fourier Transform) teostamiseks, mis tuvastaks selle. PJRC müüb ka heliplaati, mis võimaldab Teensyt kasutada nii muusika esitamiseks kui ka heli salvestamiseks välise sisendiga või väikese mikrofoni, mille saate tahvlile lisada. Minu plaan oli lasta Teensyl teha mikrofoni helilt FFT.

2. samm: FFT?

FFT?
FFT?

FFT on matemaatiline valem/algoritm, mis muudab signaali ajadomeenist sageduspiirkonnaks. See tähendab, et see võtab mikrofonist ajaproovitud heli ja muudab selle alglaine sageduste suurusteks. Näete, suvalist pidevat lainet saab konstrueerida siinus- või koosinuslainete seeriast, mis on mõne baassageduse täisarvulised kordajad. FFT teeb vastupidist: võtab suvalise laine ja muudab selle lainete suurusjärkudeks, mis kokku liidetuna tekitaksid esialgse suvalise laine. Veelgi lihtsam viis seda öelda on, et kavatsesin kasutada tarkvara ja FFT riistvara Teensy's, et teha kindlaks, kas see kuuleb kolibri tiibade lehvitamist sagedusel, mida tiibade klapid tekitavad. Kui see "kuuleb" koolibri, saadan kaamera pildistamiseks käsu.

See töötas! Niisiis, kuidas ma seda tegin, kuidas sa said seda teha ja kuidas saaksid seda veelgi paremaks muuta?

3. samm: kuidas kõlab hõljuv kolibri?

Kuidas kõlab hõljuv kolibri?
Kuidas kõlab hõljuv kolibri?

Esiteks pidin ma välja mõtlema, millisel sagedusel ma koolibri tiibade klappe kuulen. Selle kindlakstegemiseks kasutasin oma iPhone'i. Ma kinnitasin iPhone'i statiivi külge ja lasin tal salvestada aegluubis videot otse meie tekil oleva kolibri sööda ette. Mõne aja pärast eemaldasin kaamera ja laadisin video alla. Vaatasin siis videot, mis otsis söötja ette koolibri. Kui leidsin hea jada, lugesin kokku üksikute kaadrite arvu, mis kulus koolibril, et ta oma tiibu ühest asendist tagasi klappiks. Aegluubis on iPhone'is umbes 240 kaadrit sekundis. Jälgisin, kuidas kolibri söötja ees hõljus ja lugesin kokku 5 kaadrit, et see liigutaks oma tiivad eesmisest asendist tagumisse asendisse ja naaseks seejärel edasi. See on 5 kaadrit 240 -st. Pidage meeles, et kuuleme heli koolibrilindude tiibade iga löögi korral (üks edasi ja teine tahapoole). Tsükli või perioodi 5 kaadri puhul saame sageduse arvutada nii, et see jagatakse perioodiga 1 / (5/240) või 48 Hz. See tähendab, et kui see koolibri hõljub, peab heli, mida kuuleme, olema kaks korda suurem või umbes 96 Hz. Sagedus on tõenäoliselt suurem, kui nad lendavad ja ei hõlju. Seda võib mõjutada ka nende mass, kuid arvan, et võime eeldada, et enamikul sama liigi lindudel on umbes sama mass.

4. samm: Fourieri seeria ja Teensy

Fourieri seeria ja Teensy
Fourieri seeria ja Teensy

Teensy (ma kasutasin Teensy 3.2) on teinud PJRC (www.pjrc.com). FFT arvutatakse heliproovi põhjal. Heli omandamiseks müüb PJRC Teensy jaoks audioadapteriplaati (TEENSY3_AUDIO - 14,25 dollarit). Nad müüvad ka väikest mikrofoni, mida saab joota audioadapteri plaadile (MIKROFON - 1,25 dollarit). Heliadapteri plaat kasutab kiipi (SGTL5000), millega Teensy saab jadabussi (I2S) kaudu rääkida. Teensy kasutab SGTL5000, et proovida mikrofonist heli ja digiteerida see, st luua numbrikomplekt, mis esindab heli, mida mikrofon kuuleb.

FFT on lihtsalt kiire versioon sellest, mida nimetatakse diskreetseks Fourier -teisenduseks (DFT). DFT -d saab teha suvalise arvu proovidega, kuid FFT peab proovid säilitama binaarsete kordajatena. Teensy riistvara saab teostada FFT 1024 proovi komplektiga (1024 = 2^10), nii et me kasutame seda.

FFT toodab tavaliselt väljundina suurused JA faasisuhted erinevate kujutatud lainete vahel. Selle rakenduse puhul ei tegele me faasisuhetega, vaid oleme huvitatud suurustest ja nende sagedusest.

Teensy heliplaat proovib heli sagedusega 44, 100 Hz. Niisiis tähistab 1024 proovi sellel sagedusel ajavahemikku 1024/44100 või umbes 23,2 millisekundit. Sel juhul toodab FFT väljundina suurusi, mis on 43 Hz prooviperioodi täisarvulised kordajad (1/0,0232 võrdub umbes 43 Hz). Tahaksime otsida suurusi, mis on umbes kaks korda suuremad kui 86 Hz. See ei ole täpselt meie arvutatud koolibri tiibade klapide sagedus, kuid see on piisavalt lähedal, nagu näeme.

Samm: Fourier -andmete kasutamine

Fourier'i andmete kasutamine
Fourier'i andmete kasutamine

Teegid, mida PJRC näeb ette, töötlevad proove ja tagastavad suurusjärgu väärtuste massiivi. Tagastatud massiivi iga suurust nimetame prügikastiks. Esimene prügikast (null nihkega tagasi saadud andmemassiivis) on laine alalisvoolu nihe. Võime seda väärtust ohutult ignoreerida. Teine prügikast (nihkega 1) tähistab 43 Hz komponendi suurust. See on meie baasperiood. Järgmine prügikast (nihkega 2) tähistab 86 Hz komponendi suurust jne. Iga järgnev prügikast on baasperioodi täisarvuline kordaja (43 Hz).

Nüüd läheb see koht veidi imelikuks. Kui me kasutaksime FFT -d täiusliku 43 Hz heli analüüsimiseks, tagastaks FFT esimese prügikasti mõne suurusega ja kõik ülejäänud prügikastid oleksid võrdsed nulliga (jällegi täiuslikus maailmas). Kui heli, mida me püüdsime ja analüüsisime, oli 86 Hz, oleks nihkega null null ja nihkega 2 (teine harmooniline) oleks mõnevõrra suur ja ülejäänud prügikastid oleksid null jne. Aga kui me jäädvustaksime koolibri heli ja see oleks 96 Hz (nagu ma mõõtsin oma ühel linnul), siis oleks nihkega 2 bin @ 86 Hz suurusjärk pisut madalam (kui täiuslik 86 Hz laine oleks) ja selle ümber olevatel prügikastidel (üks madalam ja mõni kõrgem) oleks kummalgi vähenev nulliväärtus.

Kui meie FFT valimi suurus oli suurem kui 1024 või kui meie helivõtmise sagedus oli madalam, võiksime oma prügikastide eraldusvõimet paremaks muuta (st väiksemaks). Kuid isegi kui me muudaksime neid asju, et muuta meie FFT -prügikastid 1 Hz baasperioodi kordajaks, peaksime selle prügikasti „lekkega” ikkagi tegelema. Seda seetõttu, et me ei saaks kunagi tiibade sagedust, mis maanduks alati ja täpselt ühele prügikastile. See tähendab, et me ei saa oma koolibri tuvastamisel lähtuda nihke 2 prügikasti väärtusest ja ignoreerida ülejäänud osa. Meil on vaja võimalust analüüsida andmeid mõnes prügikasti, et seda mõista. Sellest lähemalt hiljem.

6. samm: ehituse alustamine

Alustage ehitust
Alustage ehitust
Alustage ehitust
Alustage ehitust

Oma kolibri-detektori prototüübi jaoks kasutasin Teensy tihvtide külge joodetud eriti pikki isas-isaseid tihvte. Ma tegin seda, et saaksin Teensy ühendada väikese jootmiseta leivalauaga. Tegin seda, sest eeldasin, et teen prototüübis palju muudatusi ja leivaplaadiga saan seda muuta ja lihtsalt juhtmeid hüpata kõikjal, kus vaja. Jootsin naissoost ribad heliplaadi alumisele küljele, mis võimaldab selle ühendada Teensy peal. Mikrofon on joodetud heliplaadi ülemisele küljele (vt pilte). Lisateavet kokkupaneku kohta leiate PJRC saidilt:

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

Samm: riistvara pildi tegemiseks

Riistvara pildi tegemiseks
Riistvara pildi tegemiseks
Riistvara pildi tegemiseks
Riistvara pildi tegemiseks

Mul on (noh, mu naisel) Canon Rebel digikaamera. Kaameral on pistik, mis võimaldab ühendada käsitsi katiku kaugjuhtimispuldi. Ostsin B&H Photo'ilt käsitsi kaugjuhtimispuldi. Kaablil on kaameraga sobitamiseks sobiv pesa ja see on umbes 6 jalga pikk. Lõikasin kaabli nuppude juhtimiskarbi lähedal asuvast otsast lahti ja võtsin juhtmed tagasi ning jootsin need kolme päisepoldi külge, mille sain leivalaua külge ühendada. Seal on tühi traat, mis on maandatud, ja kaks muud signaali: ots on päästik (roosa) ja rõngas (valge) on fookuses (vt pilte). Otsa ja/või rõnga maapinnale lühistamine katik ja kaamera fookus.

Kasutades hüppajatraati, jooksin Teensy'st ühisosa piirkonda, kus sain seda leivalaual kasutada. Samuti ühendasin LED-i anoodi Teensy tihvtiga 2 ja LED-i katoodi takistiga (100–220 oomi) maandusega. Samuti ühendasin Teensy tihvti 2 10K takisti külge ja takisti I teise külje ühendasin NPN -transistori alusega (2N3904 leidub kõikjal). Ühendasin transistori emitteri maandusega ja kollektori ühendasin valge ja roosa juhtmetega kaablist, mis läheb kaamerale. Paljas juhe oli jälle maandusega ühendatud. Kui Teensy LED -i sisse lülitab, lülitub sisse ka NPN -transistor ja see käivitab kaamera (ja fookuse). Vaadake skeemi.

8. etapp: süsteemi projekteerimine

Süsteemi disain
Süsteemi disain

Kuna koolibri tiibade lehvitamissagedused ei tõuse tõenäoliselt üle mõnesaja Hz, siis pole meil tegelikult vaja salvestada helisagedusi, mis ületavad näiteks mõnisada Hz. Me vajame võimalust filtreerida ainult soovitud sagedused. Ribalaiuse või isegi madalpääsfilter oleks suurepärane. Traditsiooniliselt kasutame riistvaras filtrit, kasutades OpAmpsi või lülitatud kondensaatorfiltreid. Kuid tänu digitaalsele signaalitöötlusele ja Teensy tarkvararaamatukogudele saame kasutada digitaalset filtrit (jootmist pole vaja … lihtsalt tarkvara).

PJRC -l on saadaval suurepärane GUI, mis võimaldab Teensy ja heliplaadil helisüsteemi lohistada. Selle leiate siit:

www.pjrc.com/teensy/gui/

Otsustasin kasutada ühte PJRC pakutavatest biquadratic kaskaadfiltritest, et piirata mikrofoni (filtri) helisagedusi. Kaskaadisin kolm sellist filtrit ja seadsin ribalaiuse tööks 100 Hz. See filter võimaldab süsteemi sagedustel, mis on meid huvitavat sagedust veidi kõrgemal ja veidi madalamal.

Plokkskeemil (vt pilti) on i2s1 heliplaadile helisisend. Ühendasin mõlemad helikanalid mikseriga ja seejärel filtritega (mikrofon on ainult üks kanal, kuid segasin mõlemad kokku, nii et ma ei pidanud aru saama, mis kanal see on … kutsuge mind laisaks). Käitan filtri väljundi heliväljundini (et saaksin heli kuulda, kui tahan). Ühendasin ka heli filtritest FFT plokiga. Plokkskeemil on plokk sildiga sgtl5000_1 helikontrolleri kiip. See ei vaja diagrammil mingeid ühendusi.

Kui olete kõik selle ploki ehituse teinud, klõpsake nuppu Ekspordi. See avab dialoogiboksi, kus saate plokkskeemist genereeritud koodi kopeerida ja oma Teensy rakendusse kleepida. Kui vaatate koodi, näete, et see on iga juhtelemendi näide koos komponentide vaheliste ühendustega.

9. samm: kood

Kood
Kood

Tarkvara üksikasjalikuks ülevaatamiseks kuluks selles juhendis liiga palju ruumi. Mida ma püüan teha, on tuua esile mõned koodi võtmebittid. Kuid see pole niikuinii väga suur rakendus. PJRC -l on suurepärane videoõpetus Teensy ja heliteekide/tööriistade kasutamise kohta (https://www.youtube.com/embed/wqt55OAabVs).

Alustasin mõnest FFT näidiskoodist PJRC -st. Kleepisin helisüsteemi kujundamise tööriistast saadud koodi koodi ülaserva. Kui vaatate koodi pärast seda, näete mõningast lähtestamist ja seejärel hakkab süsteem mikrofoni heli digitaliseerima. Tarkvara siseneb 'igavesti' ahelasse () ja ootab FFT andmete kättesaadavaks saamist, kutsudes funktsiooni fft1024_1.available (). Kui FFT andmed on saadaval, haaran andmete koopia ja töötlen neid. Pange tähele, et haaran andmeid ainult siis, kui suurim prügikasti suurus on üle määratud väärtuse. Selle väärtusega määran ma süsteemi tundlikkuse. Kui prügikastid on seadistatud väärtusest kõrgemal, siis normaliseerin laine ja edastan selle töötlemiseks ajutisse massiivi, vastasel juhul ignoreerin seda ja ootan uut FFT -d. Peaksin mainima, et kasutan ka ahela tundlikkuse reguleerimiseks mikrofoni võimenduse juhtimise funktsiooni (sgtl5000_1.micGain (50)).

Laine normaliseerimine tähendab lihtsalt seda, et reguleerin kõik prügikastid nii, et suurima väärtusega prügikast oleks võrdne ühega. Kõik ülejäänud prügikastid skaleeritakse sama proportsiooniga. See muudab andmete analüüsimise lihtsamaks.

Andmete analüüsimiseks kasutasin mitmeid algoritme, kuid otsustasin kasutada ainult kahte. Üks algoritm arvutab prügikastide moodustatud kõvera ala. See on lihtne arvutus, mis lihtsalt lisab prügikastide väärtused kogu huvipakkuvas piirkonnas. Võrdlen seda piirkonda, et teha kindlaks, kas see on üle künnise.

Teine algoritm kasutab konstantset väärtuste massiivi, mis tähistab normaliseeritud FFT -d. Need andmed on tõelise (optimaalse) koolibri allkirja tulemused. Ma nimetan seda hekiks. Ma võrdlen riskimaandamisandmeid normaliseeritud FFT andmetega, et näha, kas vastavad prügikastid asuvad üksteisest 20% piires. Valisin 20%, kuid seda väärtust saab hõlpsasti reguleerida.

Ma loen ka seda, mitu korda arvavad üksikud algoritmid, et neil on vaste, see tähendab, et nad kuulevad koolibrit. Ma kasutan seda loendust koolibri määramise osana, sest võib tekkida vale vallandamine. Näiteks kui mõni heli on vali või sisaldab lindude tiibade sagedust, näiteks käte plaksutamine, võite saada päästiku. Aga kui arv ületab teatud arvu (minu valitud number), siis ütlen, et see on koolibri. Kui see juhtub, lülitan LED -i sisse, et näidata, et meil on tabamus ja sama skeem käivitab kaamera NPN -transistori kaudu. Tarkvaras määrasin kaamera käivitusajaks 2 sekundit (aeg, mil LED ja transistor põlevad).

10. samm: paigaldamine

Paigaldamine
Paigaldamine

Pildilt näete, kuidas ma (ilma tseremooniata) elektroonika paigaldasin. Mul oli Teensy ühendatud leivaplaadiga, mis oli kandjaplaadi külge kinnitatud koos teise (kasutamata) Arduino ühilduvaga (minu arvates Arduino Zero). Kogu juhtme sidusin oma tekil oleva metallist varikatuse külge (kaamerasse jooksvale kaablile lisasin ka pingetõmbe). Pulk oli kohe koolibri söötja kõrval. Toitsin elektroonikat väikese LiPo toiteplokiga, mida võiksite kasutada surnud mobiiltelefoni laadimiseks. Toiteplokil oli USB -pistik, mida kasutasin Teensy toite ülekandmiseks. Jooksin kaugjuhtimispuldi kaabli kaamera juurde ja ühendasin selle sisse. Olin lindudeks valmis!

11. samm: tulemused

Tulemused
Tulemused

Seadistasin kaamera söötja lähedale statiivile. Panin kaamera fookusesse söötja esiservale ja seadsin selle spordirežiimi, mis teeb katiku vajutamisel mitu kiiret pilti. 2 -sekundilise väljalülitusajaga jäädvustasin päästiku kohta umbes 5 fotot.

Veetsin paar tundi selle tarkvaraga esmakordselt proovides. Pidin reguleerima tundlikkust ja järjestikuste algoritmide tabamuste arvu. Lõpuks muutsin seda ja olin valmis.

Esimene pilt, mille ta tegi, oli lind, kes lendas kaadrisse justkui võtaks kiiret pangapööret nagu reaktiivlennuk (vt ülal). Ma ei saa teile öelda, kui põnevil ma olin. Istusin mõnda aega vaikselt teisel pool tekki ja lasin süsteemil töötada. Mul õnnestus palju pilte salvestada, kuid heitsin päris mitu ära. Selgub, mõnikord saate lihtsalt linnu pea või saba. Lisaks sain valede päästikute, mis võivad tekkida. Kokku on mul vist 39 pilti. Lindudel kulus paar reisi söötja juurde, et harjuda kaamera katikuheliga, kuid lõpuks tundus, et nad eirasid seda.

12. samm: lõplikud mõtted

Lõplikud mõtted
Lõplikud mõtted

See oli lõbus projekt ja see töötab. Kuid nagu enamikul asjadel, on ka siin palju arenguruumi. Filter võib kindlasti olla erinev (nt madalpääsfilter või paigutuse ja/või parameetrite muutmine) ja võib -olla muudab see selle paremaks. Samuti olen kindel, et on paremaid algoritme, mida proovida. Suvel proovin osa sellest.

Mulle on öeldud, et seal on avatud lähtekoodiga masinõppe kood … võib-olla saaks süsteemi koolitada koolibrite tuvastamiseks! Ma pole kindel, kas ma seda proovin, aga võib -olla.

Mida võiks sellele projektile veel lisada? Kui kaameral oli kuupäeva/kellaaja tempel, saate selle teabe piltidele lisada. Teine asi, mida saate teha, on heli salvestamine ja salvestamine uSD -kaardile (PJRC heliplaadil on pesa ühe jaoks). Salvestatud heli võib olla võimalik kasutada õppimisalgoritmi koolitamiseks.

Võib -olla saaks kuskil ornitoloogiakoolis sellist seadet kasutada? Nad võivad olla võimelised koguma sellist teavet nagu söötmisajad, söötmise sagedus ja piltide abil saate tuvastada konkreetseid linde, kes sööta naasevad.

Loodan, et keegi teine laiendab seda projekti ja jagab teistega seda, mida nad teevad. Mõned inimesed on mulle öelnud, et see minu tehtud töö tuleks muuta tooteks. Ma pole selles nii kindel, aga ma näeksin seda pigem õppeplatvormina ja teaduse jaoks.

Täname lugemise eest!

Minu postitatud koodi kasutamiseks vajate Arduino IDE -d (https://www.arduino.cc/en/Main/Software). Teil on vaja ka PJRC Teensyduino koodi (https://www.pjrc.com/teensy/td_download.html).

Soovitan: