Turinys:

Kolibrio detektorius/nuotraukų darykla: 12 žingsnių (su nuotraukomis)
Kolibrio detektorius/nuotraukų darykla: 12 žingsnių (su nuotraukomis)

Video: Kolibrio detektorius/nuotraukų darykla: 12 žingsnių (su nuotraukomis)

Video: Kolibrio detektorius/nuotraukų darykla: 12 žingsnių (su nuotraukomis)
Video: KOLIBRIO EFEKTAS (Hummingbird) 2013 2024, Liepa
Anonim
Kolibrio detektorius/nuotraukų darytojas
Kolibrio detektorius/nuotraukų darytojas

Ant nugaros denio turime kolibrio lesyklėlę ir pastaruosius porą metų aš juos fotografuoju. Kolibriai yra nuostabios mažos būtybės, labai teritorinės ir jų kovos gali būti linksmos ir nuostabios. Bet aš pavargau stovėti kaip statula priešais savo namus, kad galėčiau juos nufotografuoti. Man reikėjo būdų, kaip užfiksuoti nuotraukas, ilgai nestovint už namų laukiant. Žinau, kad galėjau naudoti nuotoliniu būdu valdomą užraktą, bet norėjau, kad nuotraukos būtų padarytos automatiškai, manęs nebūnant. Taigi nusprendžiau sukurti prietaisą, kuris aptiktų kolibrius ir automatiškai nufotografuotų.

Aš visada ketinau tam naudoti mikrovaldiklį. Mikrovaldiklis galėtų valdyti fotoaparato užraktą valdydamas programinę įrangą. Tačiau jutiklis, skirtas aptikti mažą kolibrį, buvo kitas dalykas. Galėjau naudoti judesio jutiklį, bet norėjau išbandyti kažką unikalaus. Aš nusprendžiau naudoti garsą kaip trigerį.

1 žingsnis: mikrovaldiklio pasirinkimas

Mikrovaldiklio pasirinkimas
Mikrovaldiklio pasirinkimas

Mano pasirinktas mikrovaldiklis buvo „PJRC Teensy“. „Teensy“naudoja ARM mikrovaldiklį, konkrečiai - ARM Cortex M4. „Cortex M4“yra aparatūra, leidžianti atlikti FFT (greitą Furjė transformaciją), kuri aptiktų. PJRC taip pat parduoda garso plokštę, leidžiančią naudoti „Teensy“muzikai groti, taip pat įrašyti garsą naudojant išorinę įvestį arba nedidelį mikrofoną, kurį galite pridėti prie plokštės. Mano planas buvo, kad „Teensy“atliktų FFT garsui iš mikrofono.

2 žingsnis: FFT?

FFT?
FFT?

FFT yra matematinė formulė/algoritmas, kuris paverčia signalą iš laiko srities į dažnio sritį. Tai reiškia, kad iš mikrofono paimamas laiko atrinktas garsas ir jis paverčiamas pradinės bangos dažnių dydžiais. Matote, bet kokia savavališka, tęstinė banga gali būti sukonstruota iš sinusinių ar kosinusinių bangų, kurios yra tam tikro bazinio dažnio sveikieji kartotiniai. FFT elgiasi priešingai: paima savavališką bangą ir paverčia ją bangų dydžiais, kurie, apibendrinus, sukuria pradinę savavališką bangą. Dar paprastesnis būdas tai pasakyti yra tai, kad aš planavau naudoti programinę įrangą ir FFT aparatinę įrangą „Teensy“, kad nustatyčiau, ar ji „girdi“kolibrio sparnų plazdėjimą tokiu dažniu, koks pasitaiko sparnų atvartuose. Jei jis „girdi“kolibrį, aš nusiųsiu komandą fotoaparatui nufotografuoti.

Pavyko! Taigi, kaip aš tai padariau, kaip tu galėjai tai padaryti ir kaip galėtum tai padaryti dar geriau?

3 žingsnis: kaip skamba sklandantis kolibris?

Kaip skamba sklandantis kolibris?
Kaip skamba sklandantis kolibris?

Pirmiausia reikėjo išsiaiškinti, kokiu dažniu girdėsiu kolibrio sparnų atvartus. Norėdami tai nustatyti, aš naudoju savo „iPhone“. Aš prijungiau „iPhone“prie trikojo ir paprašiau, kad jis įrašytų sulėtinto vaizdo įrašą tiesiai prieš mūsų denio kolibrių tiektuvą. Po tam tikro laiko aš išėmiau fotoaparatą ir atsisiunčiau vaizdo įrašą. Tada žiūrėjau vaizdo įrašą, ieškantį kolibrio prieš tiektuvą. Kai radau gerą seką, suskaičiavau, kiek kolibriui prireikė, kad kolibris sparnus atplėštų nuo vienos padėties iki tos pačios padėties. Lėtas judėjimas „iPhone“yra apie 240 kadrų per sekundę. Pastebėjau kolibrį, sklandantį prieš tiektuvą, ir suskaičiavau 5 kadrus, kad jis galėtų perkelti sparnus iš priekinės padėties į užpakalinę, o tada grįžti į priekinę padėtį. Tai yra 5 kadrai iš 240. Atminkite, kad kiekvieną kolibrio sparno atvarto smūgį girdime garsą (vieną į priekį ir vieną atgal). 5 ciklo ar laikotarpio kadrams galime apskaičiuoti dažnį, padalytą iš periodo, ty 1 / (5/240) arba 48 Hz. Tai reiškia, kad kai šis kolibris sklando, garsas, kurį girdime, turi būti dvigubai didesnis arba apie 96 Hz. Tikriausiai dažnis yra didesnis, kai jie skrenda ir nekyla. Tai taip pat gali paveikti jų masė, bet manau, kad galime daryti prielaidą, kad dauguma tos pačios rūšies paukščių turi maždaug tą pačią masę.

4 žingsnis: Furjė serija ir „Teensy“

Furjė serija ir „Teensy“
Furjė serija ir „Teensy“

„Teensy“(aš naudoju „Teensy 3.2“) gamina PJRC (www.pjrc.com). FFT bus apskaičiuojamas pagal garso pavyzdį. Norėdami įgyti garsą, PJRC parduoda garso adapterio plokštę „Teensy“(TEENSY3_AUDIO - 14,25 USD). Jie taip pat parduoda nedidelį mikrofoną, kurį galima lituoti prie garso adapterio plokštės (MIKROFONAS - 1,25 USD). Garso adapterio plokštėje naudojama mikroschema (SGTL5000), su kuria „Teensy“gali kalbėtis per nuosekliąją magistralę (I2S). „Teensy“naudoja SGTL5000, norėdamas imti garsą iš mikrofono ir jį suskaitmeninti, tai yra, sukurti skaičių rinkinį, atspindintį mikrofono girdimą garsą.

FFT yra tik greita vadinamojo diskretiojo Furjė transformacijos (DFT) versija. DFT gali būti atliktas naudojant bet kokį skaičių mėginių, tačiau FFT mėginiai turi būti saugomi rinkiniuose, kurie yra dvejetainiai kartotiniai. „Teensy“aparatinė įranga gali atlikti FFT 1024 mėginių rinkinyje (1024 = 2^10), todėl tai ir naudosime.

FFT paprastai kaip išvestis sukuria dydžius IR fazių ryšius tarp įvairių pavaizduotų bangų. Šioje programoje mums nerūpi fazių santykiai, tačiau mus domina dydžiai ir jų dažnis.

„Teensy“garso plokštė ima garsą 44, 100 Hz dažniu. Taigi 1024 pavyzdžiai tokiu dažniu reiškia 1024/44100 laiko intervalą arba apie 23,2 milisekundės. Tokiu atveju FFT kaip išvestis gaus dydžius, kurie yra 43 Hz mėginio periodo sveikieji skaičiai (dar kartą, 1/0,0232 yra maždaug 43 Hz). Mes norėtume ieškoti dydžių, kurie yra maždaug du kartus didesni už šį dažnį: 86 Hz. Tai nėra tiksliai mūsų apskaičiuotų kolibrio sparnų atvartų dažnis, tačiau jis yra pakankamai arti, kaip matysime.

5 žingsnis: Furjė duomenų naudojimas

Furjė duomenų naudojimas
Furjė duomenų naudojimas

Bibliotekos, kurias PJRC numato „Teensy“, apdoros pavyzdžius ir grąžins dydžių masyvų masyvą. Mes nurodysime kiekvieną grąžinto masyvo dydį kaip šiukšliadėžę. Pirmasis dėklas (nulinio poslinkio duomenų masyve, kurį gauname atgal) yra bangos nuolatinis poslinkis. Šią vertę galime drąsiai ignoruoti. Antroji dėžė (1 poslinkyje) parodys 43 Hz komponento dydį. Tai yra mūsų bazinis laikotarpis. Kitas dėklas (2 poslinkyje) parodys 86 Hz komponento dydį ir pan. Kiekviena sekanti dėžė yra sveikasis bazinio laikotarpio kartotinis (43 Hz).

Dabar ši vieta tampa šiek tiek keista. Jei mes panaudotume FFT, kad analizuotume tobulą 43 Hz garsą, tada FFT grąžintų pirmąją dėžę dideliu dydžiu, o visos likusios dėžės būtų lygios nuliui (vėlgi, tobulame pasaulyje). Jei garsas, kurį mes užfiksavome ir analizavome, buvo 86 Hz, tada dėžutė pirmojo poslinkio metu būtų lygi nuliui, o 2 poslinkio dėžė (antroji harmonika) būtų kažkokio didelio dydžio, o likusios dėžės būtų lygios nuliui ir pan. Bet jei mes užfiksuotume kolibrio garsą ir jis būtų 96 Hz (kaip matavau ant savo vieno paukščio), tada 2 bin @ 86 Hz poslinkis būtų šiek tiek mažesnis (nei tobula 86 Hz banga) ir aplink jį esančios dėžės (viena žemesnė ir kelios aukštesnės) turėtų mažėjančią ne nulinę vertę.

Jei mūsų FFT imties dydis buvo didesnis nei 1024 arba jei mūsų garso atrankos dažnis buvo mažesnis, mes galime pagerinti mūsų dėžių skiriamąją gebą (t. Y. Mažesnę). Bet net jei mes pakeistume šiuos dalykus, kad mūsų FFT dėžės būtų 1 Hz bazinio laikotarpio kartotinės, vis tiek turėtume susidoroti su šiuo dėžės išsiliejimu. Taip yra todėl, kad mes niekada negautume sparnų dažnio, kuris visada ir tiksliai atsidurdavo vienoje dėžėje. Tai reiškia, kad kolibrio aptikimas negali būti grindžiamas vien tik 2 poslinkio dėžės verte ir nekreipiame dėmesio į likusią dalį. Mums reikia būdų, kaip išanalizuoti duomenis keliose dėžėse, kad galėtume juos suprasti. Daugiau apie tai vėliau.

6 žingsnis: pradėkite statybą

Pradėti statybą
Pradėti statybą
Pradėti statybą
Pradėti statybą

Savo kolibrio detektoriaus prototipui aš naudojau ypač ilgus patinus ir patinus, lituotus prie „Teensy“kaiščių. Aš tai padariau, kad galėčiau prijungti „Teensy“prie nedidelės duonos lentos be litavimo. Aš tai padariau, nes maniau, kad padarysiu daug pakeitimų prototipe ir su duonos lenta, galėčiau tai pakeisti ir tiesiog perjungti laidus visur, kur man reikia. Lituodavau moteriškas juosteles ant apatinės garso plokštės pusės, kuri leidžia ją prijungti prie „Teensy“. Mikrofonas yra prilituotas prie viršutinės garso plokštės pusės (žr. Paveikslėlius). Daugiau informacijos apie surinkimą rasite PJRC svetainėje:

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

7 veiksmas: aparatūra, skirta fotografuoti

Aparatūra, skirta fotografuoti
Aparatūra, skirta fotografuoti
Aparatūra, skirta fotografuoti
Aparatūra, skirta fotografuoti

Aš turiu (na, mano žmona) „Canon Rebel“skaitmeninį fotoaparatą. Fotoaparate yra lizdas, leidžiantis prijungti rankinį nuotolinį užrakto valdymą. Aš nusipirkau rankinį nuotolinio valdymo pultą iš „B&H Photo“. Kabelis turi tinkamą lizdą, kuris tinka vienam fotoaparatui ir yra maždaug 6 pėdų ilgio. Aš nutraukiau kabelį gale, esančiame šalia mygtukų valdymo dėžutės, atplėšiau laidus ir prilituosiu prie trijų kaiščių, kuriuos galėčiau prijungti prie duonos lentos. Yra plikas laidas, kuris yra įžemintas, ir du kiti signalai: galas yra gaidukas (rožinis), o žiedas (baltas) yra fokusuotas (žr. Paveikslėlius). Patraukus galiuką ir (arba) žiedą prie žemės, užrakintas ir fokusuojamas fotoaparatas.

Naudodama trumpiklį, nubėgau bendrą pagrindą nuo „Teensy“iki vietos, kur galėjau ją naudoti ant duonos lentos. Aš taip pat prijungiau šviesos diodo anodą prie „Teensy“2 kaiščio ir šviesos diodo katodo prie rezistoriaus (100–220 omų) prie žemės. Aš taip pat prijungiau „Teensy“kaištį prie 10K rezistoriaus, o kitą rezistoriaus pusę prijungiau prie NPN tranzistoriaus pagrindo (2N3904 yra visur). Aš prijungiau tranzistoriaus emiterį prie žemės, o kolektorių prijungiau prie baltų ir rožinių laidų iš kabelio, einančio į fotoaparatą. Plikas laidas vėl buvo prijungtas prie žemės. Kai „Teensy“įjungia šviesos diodą, taip pat įsijungia NPN tranzistorius ir suaktyvina fotoaparatą (ir fokusavimą). Žiūrėkite schemą.

8 žingsnis: sistemos projektavimas

Sistemos projektavimas
Sistemos projektavimas

Kadangi kolibrio sparnų plazdėjimo dažnis greičiausiai neviršija kelių šimtų Hz, tada mums tikrai nereikia įrašyti garso, viršijančio, tarkime, kelis šimtus Hz. Mums reikia būdo, kaip filtruoti tik norimus dažnius. Puikus būtų juostinis arba net žemo dažnio filtras. Tradiciškai mes įdiegėme filtrą aparatinėje įrangoje, naudodami „OpAmps“arba perjungiamo kondensatoriaus filtrus. Tačiau dėl skaitmeninio signalų apdorojimo ir „Teensy“programinės įrangos bibliotekų galime naudoti skaitmeninį filtrą (nereikia lituoti … tik programinė įranga).

PJRC turi puikią GUI, leidžiančią vilkti ir numesti garso sistemą „Teensy“ir garso plokštėje. Jį galite rasti čia:

www.pjrc.com/teensy/gui/

Nusprendžiau naudoti vieną iš PJRC teikiamų biokvadratinių kaskadinių filtrų, kad apribotų garso dažnius iš mikrofono (filtro). Aš kaskadavau tris tokius filtrus ir nustatiau juos 100 Hz dažnių juostos veikimui. Šis filtras leis į sistemos dažnius šiek tiek aukščiau ir šiek tiek žemiau mūsų dominančio dažnio.

Blokinėje schemoje (žr. Paveikslėlį) „i2s1“yra garso įvestis į garso plokštę. Aš prijungiau abu garso kanalus prie maišytuvo, o po to - prie filtrų (mikrofonas yra tik vienas kanalas, bet aš sumaišiau abu, todėl man nereikėjo išsiaiškinti, koks tai kanalas … vadink mane tinginiu). Aš paleidžiu filtro išvestį į garso išvestį (kad galėčiau išgirsti garsą, jei noriu). Aš taip pat prijungiau garsą iš filtrų prie FFT bloko. Blokinėje schemoje sgtl5000_1 pažymėtas blokas yra garso valdiklio lustas. Jai nereikia jokių jungčių diagramoje.

Atlikę visą šią blokų konstrukciją, spustelėkite Eksportuoti. Atidaromas dialogo langas, kuriame galite nukopijuoti kodą, sugeneruotą iš blokinės diagramos, ir įklijuoti jį į „Teensy“programą. Jei pažvelgsite į kodą, pamatysite, kad tai kiekvieno valdiklio pavyzdys kartu su „jungtimis“tarp komponentų.

9 žingsnis: kodas

Kodas
Kodas

Šioje instrukcijoje būtų per daug vietos, kad išsamiai išnagrinėtumėte programinę įrangą. Aš pabandysiu paryškinti kai kuriuos pagrindinius kodo bitus. Bet šiaip tai nėra labai didelė programa. PJRC turi puikią vaizdo pamoką apie „Teensy“ir garso bibliotekų/įrankių naudojimą (https://www.youtube.com/embed/wqt55OAabVs).

Pradėjau nuo kai kurių FFT pavyzdžių kodų iš PJRC. Įklijavau tai, ką gavau iš garso sistemos projektavimo įrankio, kodo viršuje. Jei pažvelgsite į kodą po to, pamatysite tam tikrą inicijavimą, o tada sistema pradės skaitmeninti garsą iš mikrofono. Programinė įranga įeina į „amžiną“ciklą () ir laukia, kol bus pasiekiami FFT duomenys, skambinant funkcijai fft1024_1.available (). Kai yra FFT duomenų, paimu duomenų kopiją ir juos apdoroju. Atminkite, kad duomenis paimu tik tuo atveju, jei didžiausias dėžės dydis yra didesnis už nustatytą vertę. Šia verte aš nustatiau sistemos jautrumą. Jei dėžės yra virš nustatytos vertės, tada aš normalizuoju bangą ir perkeliu ją į laikiną masyvą apdorojimui, kitaip nekreipiu į tai dėmesio ir laukiu kito FFT. Turėčiau paminėti, kad taip pat naudoju mikrofono stiprinimo valdymo funkciją grandinės jautrumui reguliuoti (sgtl5000_1.micGain (50)).

Bangos normalizavimas reiškia tik tai, kad aš sureguliuoju visas dėžes taip, kad šiukšliadėžė su didžiausia verte būtų lygi vienai. Visos kitos dėžės yra proporcingai proporcingos. Tai palengvina duomenų analizę.

Duomenims analizuoti naudojau kelis algoritmus, tačiau nusprendžiau naudoti tik du. Vienas algoritmas apskaičiuoja plotą po kreive, kurią sudaro dėžės. Tai paprastas skaičiavimas, kuris tiesiog prideda dėžių vertes visame dominančiame regione. Palyginu šią sritį, kad nustatyčiau, ar ji viršija slenkstį.

Kitas algoritmas naudoja pastovų reikšmių masyvą, kuris atspindi normalizuotą FFT. Šie duomenys yra tikro (optimalaus) kolibrio parašo rezultatai. Aš tai vadinu apsidraudimu. Aš lyginu apsidraudimo duomenis su normalizuotais FFT duomenimis, kad pamatyčiau, ar atitinkamos dėžės yra 20% viena nuo kitos. Aš pasirinkau 20%, bet šią vertę galima lengvai koreguoti.

Aš taip pat skaičiuoju, kiek kartų atskiri algoritmai mano, kad jie turi atitikimą, tai reiškia, kad jie girdi kolibrį. Aš naudoju šį skaičių kaip kolibrio nustatymo dalį, nes gali atsirasti klaidingas paleidimas. Pvz., Kai bet koks garsas yra garsus arba jame yra paukščių sparnų dažnis, pvz., Plojant rankomis, galite suveikti. Bet jei skaičius viršija tam tikrą skaičių (mano pasirinktas skaičius), sakau, kad tai kolibris. Kai taip atsitinka, įjungiu šviesos diodą, kad parodytų, jog turime smūgį, ir ta pati grandinė suaktyvina fotoaparatą per NPN tranzistorių. Programinėje įrangoje aš nustatiau fotoaparato paleidimo laiką iki 2 sekundžių (laikas, kai šviečia šviesos diodas ir tranzistorius).

10 žingsnis: montavimas

Montavimas
Montavimas

Nuotraukoje galite pamatyti, kaip aš (be ceremonijų) sumontavau elektroniką. Aš turėjau „Teensy“prijungti prie duonos lentos, kuri buvo priklijuota prie nešiklio plokštės kartu su kita (nenaudota) „Arduino“suderinama (manau, kad „Arduino Zero“). Visą laidą pririšau prie metalinio tento stulpo ant denio (taip pat pridėjau įtempimą kabeliui, einančiam prie fotoaparato). Stulpas buvo visai šalia kolibrio lesyklos. Aš maitinau elektroniką maža „LiPo“maitinimo blokeliu, kurį galite naudoti įkrauti negyvą mobilųjį telefoną. Maitinimo elementas turėjo USB jungtį, kurią naudodavau „Teensy“. Aš privedžiau nuotolinio paleidimo kabelį prie fotoaparato ir prijungiau jį. Buvau pasiruošęs paukščių veiksmui!

11 žingsnis: Rezultatai

Rezultatai
Rezultatai

Fotoaparatą pastatiau ant trikojo šalia tiektuvo. Fotoaparatas buvo sutelktas į patį priekinį tiektuvo kraštą ir nustatiau jį į sportinį režimą, kuris nuspaudžiant užraktą padaro keletą greitų nuotraukų. Kai užrakto laikas buvo 2 sekundės, aš padariau apie 5 nuotraukas per vieną įvykį.

Pirmą kartą, kai bandžiau, praleidau porą valandų sukdamasis su programine įranga. Turėjau pakoreguoti jautrumą ir nuoseklaus algoritmo įvykių skaičių. Pagaliau jį pataisiau ir buvau pasiruošęs.

Pirmoji jo padaryta nuotrauka buvo paukštis, kuris įskrido į kadrą, tarsi imdamas greitą kranto posūkį kaip reaktyvinis naikintuvas (žr. Aukščiau). Negaliu pasakyti, kaip jaudinausi. Kurį laiką ramiai sėdėjau kitoje denio pusėje ir leidau sistemai veikti. Man pavyko įrašyti daug nuotraukų, bet nemažai išmečiau. Pasirodo, kartais jūs tiesiog gaunate paukščio galvą ar uodegą. Be to, aš gavau klaidingus trigerius, kurie gali atsirasti. Iš viso manau, kad pasilikau 39 nuotraukas. Paukščiams prireikė kelių kelionių prie lesyklos, kad priprastų prie fotoaparato skleidžiamo užrakto garso, tačiau galiausiai atrodė, kad jie į tai nekreipia dėmesio.

12 žingsnis: paskutinės mintys

Galutinės mintys
Galutinės mintys

Tai buvo įdomus projektas ir jis veikia. Tačiau, kaip ir daugelyje dalykų, yra daug kur tobulėti. Filtras tikrai gali būti kitoks (pvz., Žemo dažnio filtras arba išdėstymo ir (arba) parametrų pakeitimai) ir galbūt tai gali pagerinti jo veikimą. Taip pat esu tikras, kad yra geresnių algoritmų, kuriuos reikia išbandyti. Vasarą kai ką išbandysiu.

Man buvo pasakyta, kad ten yra atvirojo kodo mašininio mokymosi kodas … galbūt sistema galėtų būti „išmokyta“atpažinti kolibrius! Nesu tikras, kad tai išbandysiu, bet galbūt.

Ką dar galima būtų pridėti prie šio projekto? Jei fotoaparatas turėjo datos/laiko žymeklį, šią informaciją galite pridėti prie nuotraukų. Kitas dalykas, kurį galite padaryti, yra įrašyti garsą ir išsaugoti jį uSD kortelėje (PJRC garso plokštėje yra lizdas vienai). Išsaugotą garso įrašą gali būti galima panaudoti mokantis algoritmo.

Gal kur nors ornitologijos mokykla galėtų naudoti tokį prietaisą? Jie gali surinkti informaciją, pvz., Šėrimo laiką, šėrimo dažnumą, o nuotraukose galite nustatyti konkrečius paukščius, kurie grįžta prie pašaro.

Tikiuosi, kad kas nors pratęs šį projektą ir pasidalys savo kūriniu su kitais. Kai kurie žmonės man sakė, kad šį mano atliktą darbą reikia paversti produktu. Nesu toks tikras, bet norėčiau, kad jis būtų naudojamas kaip mokymosi platforma ir mokslas.

Ačiū, kad skaitote!

Norėdami naudoti mano paskelbtą kodą, jums reikės „Arduino IDE“(https://www.arduino.cc/en/Main/Software). Jums taip pat reikės „Teensyduino“kodo iš PJRC (https://www.pjrc.com/teensy/td_download.html).

Rekomenduojamas: