Sisällysluettelo:

Hummingbird Detector/Picture-Taker: 12 vaihetta (kuvilla)
Hummingbird Detector/Picture-Taker: 12 vaihetta (kuvilla)

Video: Hummingbird Detector/Picture-Taker: 12 vaihetta (kuvilla)

Video: Hummingbird Detector/Picture-Taker: 12 vaihetta (kuvilla)
Video: HERKES ŞAŞKIN !!! l 2.El Oto Pazarı l 2.El Araba Fiyatları 2024, Heinäkuu
Anonim
Hummingbird Detector/Picture-Taker
Hummingbird Detector/Picture-Taker

Meillä on hummingbird -syöttölaite takakannellamme ja olen muutaman viime vuoden aikana kuvannut niitä. Hummingbirds ovat hämmästyttäviä pieniä olentoja, hyvin alueellisia ja niiden taistelut voivat olla sekä hauskoja että hämmästyttäviä. Mutta olin kyllästynyt seisomaan kuin patsas taloni takaosaa kohti ottaakseni heistä kuvia. Tarvitsin tavan kaapata kuvia ilman, että jouduin seisomaan talon takana pitkiä aikoja odottamassa. Tiedän, että olisin voinut käyttää kauko -ohjattavaa suljinta, mutta halusin kuvien ottamisen automaattisesti ilman, että minun tarvitsisi olla siellä. Joten päätin tehdä laitteen havaitsemaan kolibrit ja ottamaan kuvan automaattisesti.

Olen aina halunnut käyttää tätä mikrokontrollerilla. Mikro -ohjain voisi ohjata kameran suljinta ohjelmiston ohjaamana. Mutta anturi pienen kolibrin havaitsemiseksi oli toinen asia. Olisin voinut käyttää liiketunnistinta, mutta halusin kokeilla jotain ainutlaatuista. Päätin käyttää ääntä liipaisimena.

Vaihe 1: Mikro -ohjaimen valinta

Mikro -ohjaimen valinta
Mikro -ohjaimen valinta

Mikro -ohjain, jonka valitsin, oli PJRC Teensy. Teensy käyttää ARM -mikrokontrolleria, erityisesti ARM Cortex M4. Cortex M4 sisältää laitteiston FFT (Fast Fourier Transform) -toiminnon suorittamiseen, joka suorittaisi havaitsemisen. PJRC myy myös äänikortin, jonka avulla voit käyttää Teensyä musiikin toistamiseen sekä äänen tallentamiseen ulkoisella tulolla tai pienellä mikrofonilla, jonka voit lisätä taululle. Suunnitelmani oli saada Teensy suorittamaan FFT mikrofonin äänestä.

Vaihe 2: FFT?

FFT?
FFT?

FFT on matemaattinen kaava/algoritmi, joka muuntaa signaalin aika -alueesta taajuusalueeksi. Tämä tarkoittaa sitä, että se ottaa aikanäytteisen äänen mikrofonista ja muuttaa sen alkuperäisen aallon taajuuksien suuruuksiksi. Näet, mikä tahansa mielivaltainen, jatkuva aalto voidaan rakentaa sarjasta sini- tai kosini -aaltoja, jotka ovat jonkin perustaajuuden kokonaislukukertoja. FFT toimii päinvastoin: se ottaa mielivaltaisen aallon ja muuttaa sen aallon suuruudeksi, joka yhteenlaskettuina muodostaisi alkuperäisen mielivaltaisen aallon. Vielä yksinkertaisempi tapa sanoa tämä on, että aioin käyttää ohjelmistoa ja FFT -laitteistoa Teensyn avulla määrittääkseni, kuuleeko se "kolibrin siipien räpytyksen" sillä taajuudella, jolla siivet esiintyvät. Jos se "kuulee" kolibrin, lähetän kameralle komennon ottaa kuva.

Se toimi! Joten miten tein sen, miten voisit tehdä sen ja miten voisit tehdä siitä vielä paremman?

Vaihe 3: Miltä leijuva kolibri kuulostaa?

Miltä leijuva kolibri kuulostaa?
Miltä leijuva kolibri kuulostaa?

Ensinnäkin minun piti selvittää, millä taajuudella kuulisin hummingbirdin siipiläpät. Tämän määrittämiseen käytin iPhoneani. Liitin iPhonen kolmijalkaan ja pyysin sitä nauhoittamaan hidastettua videota suoraan kannellamme olevan kolibrisyöttölaitteen eteen. Jonkin ajan kuluttua poistin kameran ja latasin videon. Sitten katsoin videon etsiessäni kolibria syöttölaitteen edestä. Kun löysin hyvän sekvenssin, laskin kuinka monta yksittäistä kehystä kesti kolibrin siipien kääntämiseen yhdestä asennosta takaisin samaan asentoon. Hidastus iPhonessa on noin 240 kuvaa sekunnissa. Huomasin kolibrin leijuvan syöttölaitteen edessä ja laskin viisi kehystä, jotta se liikuttaisi siipensä etuasennosta taka -asentoon ja palaisi sitten eteenpäin. Tämä on 5 kuvaa 240: sta. Muista, että kuulemme äänen kolibrin siipien jokaisesta iskusta (yksi eteenpäin ja yksi taaksepäin). Viiden kehyksen aikana jaksolle tai jaksolle voimme laskea taajuuden jaettuna jaksolla eli 1 / (5/240) tai 48 Hz. Tämä tarkoittaa, että kun tämä kolibri leijuu, kuulemamme äänen on oltava kaksi kertaa tätä tai noin 96 Hz. Taajuus on todennäköisesti suurempi, kun he lentävät eivätkä leiju. Siihen voi vaikuttaa myös niiden massa, mutta mielestäni voimme olettaa, että useimpien saman lajin lintujen massa on suunnilleen sama.

Vaihe 4: Fourier -sarja ja Teensy

Fourier -sarja ja Teensy
Fourier -sarja ja Teensy

Teensyn (käytin Teensy 3.2: ta) valmistaa PJRC (www.pjrc.com). FFT lasketaan ääninäytteestä. Äänen hankkimiseksi PJRC myy Teensylle äänisovitinlevyn (TEENSY3_AUDIO - 14,25 dollaria). He myyvät myös pienen mikrofonin, joka voidaan juottaa äänisovitinlevylle (MIKROFONI - 1,25 dollaria). Äänisovitinlevy käyttää sirua (SGTL5000), jonka kanssa Teensy voi puhua sarjaväylän (I2S) kautta. Teensy käyttää SGTL5000 -laitetta näytteenottoon äänestä mikrofonista ja sen digitalisoimiseksi, eli luo joukon numeroita, jotka edustavat mikrofonin kuulemaa ääntä.

FFT on vain nopea versio siitä, mitä kutsutaan diskreetiksi Fourier -muunnokseksi (DFT). DFT voidaan suorittaa mielivaltaiselle määrälle näytteitä, mutta FFT: n on tallennettava näytteet sarjoiksi, jotka ovat binäärisiä kerrannaisia. Teensy -laitteisto voi suorittaa FFT: n 1024 näytteen joukolle (1024 = 2^10), joten käytämme sitä.

FFT tuottaa yleensä ulostulonaan suuruus- ja vaihesuhteet eri edustettujen aaltojen välillä. Tässä sovelluksessa emme ole kiinnostuneita vaihesuhteista, mutta olemme kiinnostuneita suuruuksista ja niiden taajuudesta.

Teensy -äänikortti ottaa näytteitä äänestä 44, 100 Hz: n taajuudella. Joten 1024 näytettä tällä taajuudella edustaa aikaväliä 1024/44100 tai noin 23,2 millisekuntia. Tässä tapauksessa FFT tuottaa ulostulona suuruusluokkia, jotka ovat 43 Hz: n näytejakson kokonaislukukertoimia (jälleen 1/0,0232 vastaa noin 43 Hz). Haluamme etsiä suuruusluokkia, jotka ovat noin kaksi kertaa tätä taajuutta: 86 Hz. Se ei ole tarkasti laskettujen kolibri -siipiläppien taajuus, mutta se on riittävän lähellä, kuten näemme.

Vaihe 5: Fourier -tietojen käyttäminen

Fourier -datan käyttäminen
Fourier -datan käyttäminen

Kirjastot, jotka PJRC tarjoaa Teensylle, käsittelevät näytteet ja palauttavat suuruusarvojen matriisin. Viitataan jokaiseen suuruuteen palautetussa taulukossa roskakorina. Ensimmäinen säiliö (siirtymän nollapisteessä palautetussa dataryhmässä) on aallon DC -siirtymä. Voimme turvallisesti jättää tämän arvon huomiotta. Toinen säiliö (siirtymä 1) edustaa 43 Hz: n komponentin suuruutta. Tämä on peruskautemme. Seuraava lokero (siirtymä 2) edustaa 86 Hz: n komponentin suuruutta ja niin edelleen. Jokainen seuraava lokero on perusjakson kokonaislukukerroin (43 Hz).

Tässä on nyt vähän outoa. Jos analysoimme täydellistä 43 Hz: n ääntä FFT: llä, FFT palauttaa ensimmäisen säiliön suurella suuruudella ja kaikki muut säiliöt ovat nollaa (jälleen täydellisessä maailmassa). Jos tallentamamme ja analysoimamme ääni oli 86 Hz, siirtymäalusta siirtymässä yksi olisi nolla ja siirtymäalue 2 (toinen harmoninen) olisi jonkin verran suuri ja loput säiliöt olisivat nolla jne. Mutta jos sieppaisimme hummingbirdin äänen ja se olisi 96 Hz (mitoin yhdellä linnullani), siirtymä 2 bin @ 86 Hz olisi suuruusluokaltaan hieman pienempi (kuin täydellinen 86 Hz: n aalto) ja sen ympärillä olevilla säiliöillä (yksi alempi ja muutama korkeampi) olisi kullekin pienempi kuin nolla-arvo.

Jos FFT: n otoskoko oli suurempi kuin 1024 tai jos ääninäytteenottotaajuutemme oli alhaisempi, voisimme parantaa laatikoidemme resoluutiota (eli pienempiä). Mutta vaikka muutisimme nämä asiat niin, että FFT -säiliöistämme tulisi 1 Hz: n kerrannaisia perusjaksosta, meidän on silti käsiteltävä tätä roskakorin vuotoa. Tämä johtuu siitä, että emme koskaan saisi siipitaajuutta, joka laskeutui aina ja täsmälleen yhdelle säiliölle. Tämä tarkoittaa sitä, ettemme voi vain perustaa kolibrin havaitsemista poikkeaman 2 lokeron arvoon ja jättää muut huomiotta. Tarvitsemme tavan analysoida tiedot muutamassa säiliössä, jotta voimme yrittää ymmärtää niitä. Tästä lisää myöhemmin.

Vaihe 6: Aloita rakentaminen

Aloita rakentaminen
Aloita rakentaminen
Aloita rakentaminen
Aloita rakentaminen

Kolibri-ilmaisimen prototyypissä käytin erittäin pitkiä uros-uros-tappeja, jotka oli juotettu Teensyn nastoihin. Tein tämän, jotta voisin kytkeä Teensyn pieneen juotoksettomaan leipälevyyn. Tein tämän, koska oletin tekeväni paljon muutoksia prototyyppiin ja leipälevyn avulla voisin muuttaa tätä ja vain hypätä johtoja missä tahansa tarvitsin. Juotin nauhaliuskoja äänikortin alapuolelle, jonka avulla se voidaan kytkeä Teensyn päälle. Mikrofoni on juotettu äänikortin yläosaan (katso kuvat). Lisätietoja kokoonpanosta löytyy PJRC -sivustolta:

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

Vaihe 7: Laitteisto kuvan ottamiseen

Laitteisto kuvan ottamiseen
Laitteisto kuvan ottamiseen
Laitteisto kuvan ottamiseen
Laitteisto kuvan ottamiseen

Minulla on (no, vaimollani) Canon Rebel -digitaalikamera. Kamerassa on liitin, jonka avulla voit kytkeä manuaalisen laukaisimen manuaalisesti. Ostin manuaalisen kaukosäätimen B&H Photo -palvelusta. Kaapelissa on oikea liitin, joka sopii kameraan toisessa päässä, ja se on noin 6 metriä pitkä. Leikkasin kaapelin napin ohjauslaatikon lähellä olevasta päästä ja riisutin johdot takaisin ja juotin ne kolmeen nastatappiin, jotka voisin liittää leipälautaan. Maadoittamaton lanka ja kaksi muuta signaalia: kärki on liipaisin (vaaleanpunainen) ja rengas (valkoinen) on tarkennettu (katso kuvat). Kärjen ja/tai renkaan oikosulkeminen maahan vaikuttaa laukaisimeen ja kameran tarkennukseen.

Hyppyjohdolla käytin Teensyn yhteistä maata alueelle, jossa voisin käyttää sitä leipälaudalla. Liitin myös LED-anodin Teensyn nastaan 2 ja LED-katodin vastukseen (100-220 ohmia) maahan. Yhdistin myös Teensyn nastan 2 10K -vastukseen ja vastuksen I toinen puoli yhdistettiin NPN -transistorin pohjaan (2N3904 löytyy kaikkialta). Yhdistin transistorin emitterin maahan ja keräimen, jonka liitin valkoisiin ja vaaleanpunaisiin johtoihin kamerasta menevästä kaapelista. Paljas johto taas oli kytketty maahan. Aina kun Teensy sytyttää LED -valon, myös NPN -transistori syttyy ja laukaisee kameran (ja tarkennuksen). Katso kaavio.

Vaihe 8: Järjestelmän suunnittelu

Järjestelmäsuunnittelu
Järjestelmäsuunnittelu

Koska Hummingbirdin siipien taajuudet eivät todennäköisesti ylitä muutaman sadan Hz: n taajuutta, meidän ei todellakaan tarvitse tallentaa äänitaajuuksia, esimerkiksi muutaman sadan Hz: n yläpuolelle. Tarvitsemme tavan suodattaa pois vain haluamamme taajuudet. Kaistanpäästösuodatin tai jopa alipäästösuodatin olisi hyvä. Perinteisesti otimme suodattimen käyttöön laitteistossa käyttämällä OpAmps- tai kondensaattorisuodattimia. Mutta digitaalisen signaalinkäsittelyn ja Teensyn ohjelmistokirjastojen ansiosta voimme käyttää digitaalista suodatinta (juottamista ei tarvita … vain ohjelmisto).

PJRC: llä on loistava graafinen käyttöliittymä, jonka avulla voit vetää ja pudottaa audiojärjestelmää Teensy- ja äänikortille. Löydät sen täältä:

www.pjrc.com/teensy/gui/

Päätin käyttää yhtä PJRC: n toimittamista biquadratic-kaskadisuodattimista mikrofonin (suodattimen) äänitaajuuksien rajoittamiseksi. Kaskadoin kolme tällaista suodatinta ja asetin ne 100 Hz: n kaistanpäästötoimintoon. Tämä suodatin sallii järjestelmän taajuudet hieman yli ja hieman alle haluamamme taajuuden.

Lohkokaaviossa (katso kuva) i2s1 on äänitulo äänikortille. Yhdistin molemmat äänikanavat mikseriin ja sitten suodattimiin (mikrofoni on vain yksi kanava, mutta sekoitin molemmat, joten minun ei tarvinnut selvittää, mikä kanava se oli … kutsu minua laiskaksi). Käytän suodattimen lähtöä äänilähtöön (jotta voin kuulla äänen, jos haluan). Yhdistin myös äänen suodattimista FFT -lohkoon. Lohkokaaviossa lohko sgtl5000_1 on ääniohjaimen siru. Se ei tarvitse kaavion yhteyksiä.

Kun olet tehnyt kaiken tämän lohkon rakentamisen, napsautat Vie. Tämä tuo esiin valintaikkunan, jossa voit kopioida lohkokaaviosta luodun koodin ja liittää sen Teensy -sovellukseesi. Jos katsot koodia, näet, että se on jokaisen ohjauksen ja komponenttien välisten "yhteyksien" välitys.

Vaihe 9: Koodi

Koodi
Koodi

Tässä opetusohjelmassa tarvittaisiin liikaa tilaa ohjelmiston yksityiskohtaiseen tarkasteluun. Yritän korostaa joitain koodin avainbittejä. Mutta tämä ei ole kovin suuri sovellus joka tapauksessa. PJRC: llä on loistava video -opetusohjelma Teensyn ja äänikirjastojen/työkalujen käytöstä (https://www.youtube.com/embed/wqt55OAabVs).

Aloitin jollakin FFT -esimerkkikoodilla PJRC: ltä. Liitin mitä sain äänijärjestelmän suunnittelutyökalusta koodin yläosaan. Jos katsot koodia tämän jälkeen, näet alustuksen ja järjestelmä alkaa digitoida ääntä mikrofonista. Ohjelmisto siirtyy ikuisesti -silmukkaan () ja odottaa, että FFT -tiedot ovat käytettävissä soittamalla toimintoon fft1024_1.available (). Kun FFT -tiedot ovat saatavilla, otan kopion tiedoista ja käsittelen niitä. Huomaa, että nappaan tietoja vain, jos suurin säiliön koko on asetetun arvon yläpuolella. Tällä arvolla asetan järjestelmän herkkyyden. Jos säiliöt ovat asetetun arvon yläpuolella, normalisoin aallon ja siirrän sen väliaikaiseen taulukkoon käsittelyä varten, muuten jätän sen huomiotta ja odotan toista FFT: tä. Minun on mainittava, että käytän myös mikrofonin vahvistuksen säätötoimintoa piirin herkkyyden säätämiseen (sgtl5000_1.micGain (50)).

Aallon normalisointi tarkoittaa vain sitä, että säädän kaikki säiliöt siten, että suurimman arvon säiliö asetetaan yhtä suureksi. Kaikki muut astiat skaalataan samalla suhteella. Tämä helpottaa tietojen analysointia.

Analysoin tietoja useilla algoritmeilla, mutta päätin käyttää vain kahta. Yksi algoritmi laskee säiliöiden muodostaman käyrän alla olevan alueen. Tämä on yksinkertainen laskelma, joka vain lisää roskakorien arvot kiinnostavalle alueelle. Vertaan tätä aluetta määrittääkseni, onko se kynnyksen yläpuolella.

Toinen algoritmi käyttää vakioarvojoukkoa arvoja, jotka edustavat normalisoitua FFT: tä. Nämä tiedot ovat todellisen (optimaalisen) kolibrin allekirjoituksen tuloksia. Kutsun tätä suojaksi. Vertaan suojaustietoja normalisoituihin FFT -tietoihin nähdäkseni, ovatko vastaavat säiliöt 20%: n sisällä toisistaan. Valitsin 20%, mutta tätä arvoa voidaan säätää helposti.

Lasken myös kuinka monta kertaa yksittäiset algoritmit uskovat, että heillä on ottelu, eli luulevat kuulevansa kolibrin. Käytän tätä laskua osana kolibrin määrittämistä, koska voi tapahtua väärää laukaisua. Jos esimerkiksi jokin ääni on kova tai sisältää lintujen siipitaajuuden, kuten käden taputukset, saatat saada laukaisimen. Mutta jos määrä on tietyn luvun (valitsemani numero) yläpuolella, sanon, että se on kolibri. Kun näin tapahtuu, sytytän LED -valon osoittaaksemme, että meillä on osuma ja sama piiri laukaisee kameran NPN -transistorin kautta. Ohjelmistossa asetin kameran laukaisuaikaksi 2 sekuntia (aika, jolloin LED ja transistori palavat).

Vaihe 10: Asennus

Asennus
Asennus

Kuvasta näet, kuinka (epäremonaattisesti) asensin elektroniikan. Minulla oli Teensy kytketty leipälautaan, joka oli kiinnitetty kantolevyyn yhdessä toisen (käyttämättömän) Arduino -yhteensopivan kanssa (mielestäni Arduino Zero). Sidoin koko jutun kannella olevaan metalliseen telttapylvääseen (lisäsin myös vedonpoistoa kameran kaapeliin). Sauva oli aivan hummingbird -syöttölaitteen vieressä. Käytin elektroniikkaa pienellä LiPo -virtatiilellä, jolla voit ladata kuolleen matkapuhelimen. Virtatiilissä oli USB -liitin, jota käytin virran siirtämiseen Teensyyn. Juoksin kauko -ohjaimen kaapelin kameran päälle ja liitin sen. Olin valmis lintujen toimintaan!

Vaihe 11: Tulokset

Tulokset
Tulokset

Asensin kameran kolmijalkaan syöttölaitteen lähelle. Kamera oli kohdistettu syöttölaitteen etureunaan ja asetin sen Sport -tilaan, joka ottaa useita nopeita kuvia suljinta painettaessa. Kun suljin oli 2 sekuntia, otin noin 5 valokuvaa laukaisutapahtumaa kohden.

Vietin pari tuntia ohjelmoimalla ohjelmistoa ensimmäisen kerran, kun kokeilin tätä. Minun piti säätää herkkyyttä ja peräkkäisten algoritmien osumien määrää. Sain sen vihdoin säädettyä ja olin valmis.

Ensimmäinen kuva, jonka se otti, oli lintu, joka lensi runkoon ikään kuin ottaisi nopean pankkikierroksen kuin suihkukone (katso edellä). En voi kertoa kuinka innoissani olin. Istuin hetken hiljaa kannen toisella puolella ja annoin järjestelmän toimia. Onnistuin tallentamaan paljon kuvia, mutta heitin heidät pois. On käynyt ilmi, että joskus saat vain linnun pään tai hännän. Lisäksi sain vääriä laukaisimia, joita voi tapahtua. Luulen säilyttäneeni yhteensä 39 kuvaa. Lintujen kesti muutaman matkan syöttölaitteeseen tottua kameran suljinääniin, mutta ne näyttivät lopulta jättävän sen huomiotta.

Vaihe 12: Viimeiset ajatukset

Lopulliset ajatukset
Lopulliset ajatukset

Tämä oli hauska projekti ja se toimii. Mutta kuten useimmissa asioissa, on paljon parantamisen varaa. Suodatin voi varmasti olla erilainen (kuten alipäästösuodatin tai järjestelyn ja/tai parametrien muutokset), ja ehkä se saattaa parantaa sen toimintaa. Olen myös varma, että on olemassa parempia algoritmeja kokeiltavaksi. Kokeilen näitä kesällä.

Minulle on kerrottu, että siellä on avoimen lähdekoodin koneoppimiskoodi … ehkä järjestelmä voitaisiin "kouluttaa" tunnistamaan kolibrit! En ole varma kokeilenko tätä, mutta ehkä.

Mitä muuta tähän projektiin voisi lisätä? Jos kamerassa oli päivämäärä/aikaleima, voit lisätä nämä tiedot kuviin. Toinen asia, jonka voit tehdä, on tallentaa ääni ja tallentaa se uSD -kortille (PJRC -äänikortissa on paikka yhdelle). Tallennettua ääntä voidaan ehkä käyttää oppimisalgoritmin kouluttamiseen.

Ehkä jossain ornitologian koulu voisi käyttää tällaista laitetta? He saattavat pystyä keräämään tietoja, kuten ruokinta -ajat, ruokintatiheyden, ja kuvien perusteella saatat pystyä tunnistamaan tietyt linnut, jotka palaavat rehuun.

Toivon, että joku muu jatkaa tätä projektia ja jakaa tekemänsä muiden kanssa. Jotkut ihmiset ovat sanoneet minulle, että tämä tekemäni työ on muutettava tuotteeksi. En ole niin varma, mutta haluaisin mieluummin käyttää sitä oppimisalustana ja tieteenalana.

Kiitos lukemisesta!

Lähettämäni koodin käyttämiseen tarvitset Arduino IDE: n (https://www.arduino.cc/en/Main/Software). Tarvitset myös PJRC: n Teensyduino -koodin (https://www.pjrc.com/teensy/td_download.html).

Suositeltava: