Satura rādītājs:

Kolibri detektors/attēlu veidotājs: 12 soļi (ar attēliem)
Kolibri detektors/attēlu veidotājs: 12 soļi (ar attēliem)

Video: Kolibri detektors/attēlu veidotājs: 12 soļi (ar attēliem)

Video: Kolibri detektors/attēlu veidotājs: 12 soļi (ar attēliem)
Video: Часть 2. Аудиокнига Виктора Эпплтона «Том Свифт и его мотоцикл» (гл. 13–25) 2024, Jūlijs
Anonim
Kolibri detektors/attēlu veidotājs
Kolibri detektors/attēlu veidotājs

Mums uz muguras klāja ir kolibri barotava, un pēdējos pāris gadus es tos fotografēju. Kolibri ir pārsteidzoši mazi radījumi, ļoti teritoriāli, un viņu cīņas var būt gan jautras, gan pārsteidzošas. Bet man apnika stāvēt kā statujai pret mājas aizmuguri, lai tās nofotografētu. Man vajadzēja veidu, kā uzņemt attēlus, ilgi nenostājoties aiz mājas, gaidot. Es zinu, ka es būtu varējis izmantot aizvaru ar tālvadības pulti, bet es vēlējos, lai attēli tiktu uzņemti automātiski bez manas klātbūtnes. Tāpēc es nolēmu izveidot ierīci, lai noteiktu kolibri un automātiski uzņemtu attēlu.

Es vienmēr esmu nolēmis izmantot mikrokontrolleru, lai to izdarītu. Mikrokontrolleris varētu vadīt kameras aizvaru programmatūras vadībā. Bet sensors, lai atklātu mazu kolibri, bija cita lieta. Es varēju izmantot kustības sensoru, bet gribēju izmēģināt kaut ko unikālu. Es nolēmu izmantot skaņu kā sprūdu.

1. darbība: mikrokontrollera izvēle

Mikrokontrollera izvēle
Mikrokontrollera izvēle

Man izvēlētais mikrokontrolleris bija PJRC Teensy. Teensy izmanto ARM mikrokontrolleru, īpaši ARM Cortex M4. Cortex M4 satur aparatūru, lai veiktu FFT (ātru Furjē transformāciju), kas varētu atklāt. PJRC pārdod arī audio plati, kas ļauj izmantot Teensy, lai atskaņotu mūziku, kā arī ierakstītu audio ar ārēju ieeju, vai arī nelielu mikrofonu, ko varat pievienot tāfelei. Mans plāns bija likt Teensy izpildīt FFT audio no mikrofona.

2. solis: FFT?

FFT?
FFT?

FFT ir matemātiska formula/algoritms, kas pārveido signālu no laika domēna uz frekvences domēnu. Tas nozīmē, ka no mikrofona tiek ņemts laika paraugu ņemtais audio un tas tiek pārvērsts sākotnējā viļņa frekvenču lielumos. Redziet, jebkuru patvaļīgu, nepārtrauktu vilni var veidot no sinusa vai kosinusa viļņu sērijas, kas ir kādas bāzes frekvences veseli skaitļi. FFT rīkojas pretēji: tas paņem patvaļīgu vilni un pārvērš to viļņu lielumos, kas, summējot kopā, radītu sākotnējo patvaļīgo vilni. Vēl vienkāršāks veids, kā to pateikt, ir tas, ka es plānoju izmantot programmatūru un FFT aparatūru Teensy, lai noteiktu, vai tā “dzird” kolibri spārnu spārnošanu tādā frekvencē, kādā notiek spārnu atloki. Ja tas "dzird" kolibri, es nosūtīšu komandu kamerai, lai uzņemtu attēlu.

Tas izdevās! Tātad, kā es to izdarīju, kā jūs to varējāt izdarīt un kā jūs varētu padarīt to vēl labāku?

3. darbība. Kā skan lidojošs kolibri?

Kā skan lidojošs kolibri?
Kā skan lidojošs kolibri?

Vispirms man vajadzēja izdomāt, kādā frekvencē es dzirdēšu kolibri spārnu atlokus. Lai to noteiktu, es izmantoju savu iPhone. Es pievienoju iPhone pie statīva un liku tam ierakstīt lēnas kustības video tieši kolibri barotavas priekšā uz mūsu klāja. Pēc kāda laika es noņēmu kameru un lejupielādēju video. Pēc tam noskatījos video, meklējot kolibri barotavas priekšā. Kad es atradu labu secību, es saskaitīju atsevišķu kadru skaitu, kas vajadzēja, lai kolibri spārnus atlocītu no vienas pozīcijas līdz šai pašai pozīcijai. Lēna kustība iPhone ierīcē ir aptuveni 240 kadri sekundē. Es novēroju kolibri, kas lidinājās barotavas priekšā, un es saskaitīju 5 kadrus, lai tas spārnus pārvietotu no priekšējās pozīcijas uz aizmugurējo un tad atgrieztos uz priekšu. Tas ir 5 kadri no 240. Atcerieties, ka mēs dzirdam skaņu katrā kolibri spārnu spārnu gājienā (viens uz priekšu un otrs uz aizmuguri). 5 kadriem ciklam vai periodam mēs varam aprēķināt frekvenci, dalot to ar periodu, ti, 1 / (5/240) vai 48 Hz. Tas nozīmē, ka, kolibram lidojot, skaņai, ko dzirdam, jābūt divreiz lielākai vai aptuveni 96 Hz. Biežums, iespējams, ir augstāks, kad viņi lido un nepārvietojas. To var ietekmēt arī to masa, bet es domāju, ka mēs varam pieņemt, ka lielākajai daļai vienas sugas putnu ir aptuveni vienāda masa.

4. solis: Furjē sērija un Teensy

Furjē sērija un Teensy
Furjē sērija un Teensy

Teensy (es izmantoju Teensy 3.2) ir izgatavojis PJRC (www.pjrc.com). FFT tiks aprēķināts pēc skaņas parauga. Lai iegūtu skaņu, PJRC pārdod audio adaptera plati Teensy (TEENSY3_AUDIO - 14,25 ASV dolāri). Viņi arī pārdod nelielu mikrofonu, ko var pielodēt pie audio adaptera plates (MIKROFONS - 1,25 ASV dolāri). Audio adaptera plāksnē tiek izmantota mikroshēma (SGTL5000), ar kuru Teensy var sarunāties, izmantojot seriālo kopni (I2S). Teensy izmanto SGTL5000, lai izlasītu audio no mikrofona un digitalizētu to, tas ir, izveidotu ciparu kopu, kas atspoguļo skaņu, ko mikrofons dzird.

FFT ir tikai ātra tā sauktās diskrētās Furjē transformācijas (DFT) versija. DFT var veikt patvaļīgam paraugu skaitam, tomēr FFT paraugiem jābūt glabātiem komplektos, kas ir bināri daudzkārtņi. Teensy aparatūra var veikt FFT 1024 paraugu komplektā (1024 = 2^10), tāpēc mēs to izmantosim.

FFT kā izeja parasti rada lielumus UN fāžu attiecības starp dažādiem attēlotajiem viļņiem. Šajā lietojumprogrammā mēs neuztraucamies par fāžu attiecībām, bet mūs interesē lielums un to biežums.

Teensy audio dēlis parauga audio ar frekvenci 44, 100 Hz. Tātad 1024 paraugi šajā frekvencē atspoguļo laika intervālu 1024/44100 vai aptuveni 23,2 milisekundes. Šajā gadījumā FFT kā izvadi radīs lielumus, kas ir veseli skaitļi, kas reizināti ar 43 Hz parauga periodu (atkal 1/0,0232 ir aptuveni 43 Hz). Mēs gribētu meklēt lielumus, kas ir aptuveni divas reizes lielāki par šo frekvenci: 86 Hz. Tas nav tieši mūsu aprēķināto kolibri spārnu atloku biežums, bet tas ir pietiekami tuvu, kā mēs redzēsim.

5. darbība: Furjē datu izmantošana

Furjē datu izmantošana
Furjē datu izmantošana

Bibliotēkas, kuras PJRC paredz, ka Teensy apstrādās paraugus un atgriezīs lieluma vērtību masīvu. Katru atgrieztā masīva lielumu mēs uzskatīsim par atkritumu tvertni. Pirmā tvertne (pie nulles nobīdes datu masīvā, ko mēs saņemam atpakaļ) ir viļņa līdzstrāvas nobīde. Mēs varam droši ignorēt šo vērtību. Otrā tvertne (1. nobīde) atspoguļos 43 Hz komponenta lielumu. Šis ir mūsu bāzes periods. Nākamā tvertne (nobīde 2) atspoguļos 86 Hz komponenta lielumu utt. Katra nākamā tvertne ir bāzes perioda vesels skaitlis (43 Hz).

Tagad šī vieta kļūst mazliet dīvaina. Ja mēs izmantotu FFT, lai analizētu perfektu 43 Hz skaņu, tad FFT atgriezīs pirmo tvertni lielā apjomā, un visas pārējās tvertnes būs vienādas ar nulli (atkal ideālā pasaulē). Ja skaņa, ko mēs uztvērām un analizējām, bija 86 Hz, tad tvertne pie vienas nobīdes būtu nulle, un tvertne pie nobīdes 2 (otrā harmonika) būtu liela apjoma, bet pārējās tvertnes būtu nulle utt. Bet, ja mēs uztvertu kolibri skaņu un tā būtu 96 Hz (kā es izmērīju savam vienam putnam), tad nobīdes 2 bin @ 86 Hz vērtība būtu nedaudz zemāka (nekā ideāls 86 Hz vilnis) un atkritumu tvertnēm ap to (viena zemāka un dažas augstākas) katrai būtu mazāka vērtība, kas nav nulle.

Ja mūsu FFT izlases lielums būtu lielāks par 1024 vai ja mūsu audio paraugu ņemšanas biežums būtu zemāks, mēs varētu uzlabot mūsu tvertņu izšķirtspēju (ti, mazāku). Bet pat tad, ja mēs mainītu šīs lietas, lai mūsu FFT tvertnes būtu 1 Hz bāzes perioda daudzkārtīgas, mums joprojām būtu jātiek galā ar šo atkritumu tvertnes "noplūdi". Tas ir tāpēc, ka mēs nekad nesaņemtu spārnu frekvenci, kas vienmēr un precīzi nonāca vienā tvertnē. Tas nozīmē, ka kolibriņa noteikšanas pamatā nevar būt tikai vērtība nobīdes 2 tvertnē un pārējo var ignorēt. Mums ir nepieciešams veids, kā analizēt datus dažās tvertnēs, lai mēģinātu tos saprast. Vairāk par šo vēlāk.

6. darbība: sāciet būvniecību

Sāciet būvniecību
Sāciet būvniecību
Sāciet būvniecību
Sāciet būvniecību

Savam kolibri detektora prototipam es izmantoju īpaši garas vīriešu un vīriešu tapas, kas pielodētas Teensy tapās. Es to darīju, lai varētu savienot Teensy ar nelielu maizīti bez lodēšanas. Es to darīju, jo es pieņēmu, ka prototipā izdarīšu daudz izmaiņu, un, izmantojot maizes dēli, es varētu to mainīt un vienkārši savienot vadus visur, kur man nepieciešams. Es lodēju sieviešu sloksnes audio plates apakšējā pusē, kas ļauj to pieslēgt Teensy augšpusē. Mikrofons ir pielodēts audio plates augšējā pusē (skat. Attēlus). Sīkāku informāciju par montāžu var atrast PJRC vietnē:

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

7. darbība. Aparatūra attēla uzņemšanai

Aparatūra attēla uzņemšanai
Aparatūra attēla uzņemšanai
Aparatūra attēla uzņemšanai
Aparatūra attēla uzņemšanai

Man ir (labi, manai sievai) Canon Rebel digitālā kamera. Kamerai ir ligzda, kas ļauj savienot manuālu tālvadības slēdža vadību. Es iegādājos manuālu tālvadības pulti no B&H Photo. Kabelis ir aprīkots ar pareizo ligzdu, kas ir piemērots kamerai vienā galā, un tas ir aptuveni 6 pēdas garš. Es nogriezu kabeli galā, kas atrodas netālu no pogas vadības kārbas, un es atvienoju vadus un pielodēju tos pie trim galvenes tapām, kuras es varētu iespraust maizes plāksnē. Ir tukšs vads, kas ir noslīpēts, un divi citi signāli: gals ir sprūda (rozā) un gredzens (balts) ir fokusā (skat. Attēlus). Saspiežot galu un/vai gredzenu pie zemes, darbojas aizvars un fokuss uz kameru.

Izmantojot džemperu vadu, es vadīju kopīgu zemi no Teensy uz vietu, kur to varētu izmantot uz maizes dēļa. Es arī savienoju gaismas diodes anodu ar 2. tapu uz Teensy un gaismas diodes katodu ar rezistoru (100–220 omi) pie zemes. Es arī savienoju Teensy 2. tapu ar 10K rezistoru un otru rezistora pusi savienoju ar NPN tranzistora pamatni (2N3904 atrodams visur). Es savienoju tranzistora emitētāju ar zemi, un kolektoru es pievienoju baltajiem un rozā vadiem no kabeļa, kas iet uz kameru. Pliks vads atkal bija savienots ar zemi. Ikreiz, kad Teensy ieslēdz gaismas diodi, ieslēgsies arī NPN tranzistors, kas aktivizēs kameru (un fokusu). Skatiet shematisko.

8. solis: sistēmas dizains

Sistēmas dizains
Sistēmas dizains

Tā kā kolibri spārnu plivināšanas frekvences, visticamāk, nepārsniedz dažus simtus Hz, tad mums nav īsti jāreģistrē skaņas frekvences, kas pārsniedz, teiksim, dažus simtus Hz. Mums ir nepieciešams veids, kā filtrēt tikai vēlamās frekvences. Lielisks būtu joslas vai pat zemas caurlaides filtrs. Tradicionāli mēs ieviesām filtru aparatūrā, izmantojot OpAmps vai kondensatora filtrus. Bet, pateicoties ciparu signālu apstrādei un Teensy programmatūras bibliotēkām, mēs varam izmantot digitālo filtru (nav nepieciešama lodēšana … tikai programmatūra).

PJRC ir pieejams lielisks GUI, kas ļauj vilkt un nomest audio sistēmu Teensy un audio dēlim. Jūs to varat atrast šeit:

www.pjrc.com/teensy/gui/

Es nolēmu izmantot vienu no PJRC nodrošinātajiem bikvadrātiskajiem kaskādes filtriem, lai ierobežotu skaņas frekvences no mikrofona (filtra). Es kaskādēju trīs šādus filtrus un iestatīju tos frekvenču joslas darbībai pie 100 Hz. Šis filtrs ļaus iekļūt sistēmas frekvencēs nedaudz virs un nedaudz zemāk par mūs interesējošo frekvenci.

Blokshēmā (skat. Attēlu) i2s1 ir audio ieeja audio panelī. Es pievienoju abus audio kanālus maisītājam un pēc tam filtriem (mikrofons ir tikai viens kanāls, bet es sajaucu abus, tāpēc man nebija jānoskaidro, kurš kanāls tas bija … sauc mani par slinku). Es palaižu filtra izvadi līdz audio izejai (lai es varētu dzirdēt audio, ja vēlos). Es arī pievienoju audio no filtriem FFT blokam. Blokshēmā bloks ar nosaukumu sgtl5000_1 ir audio kontroliera mikroshēma. Tam nav nepieciešami nekādi savienojumi diagrammā.

Pēc visu šo bloku veidošanas jūs noklikšķiniet uz Eksportēt. Tiek atvērts dialoglodziņš, kurā varat kopēt no blokshēmas ģenerēto kodu un ielīmēt to savā Teensy lietojumprogrammā. Ja paskatās uz kodu, jūs varat redzēt, ka tas ir katras vadības paraugs kopā ar “savienojumiem” starp komponentiem.

9. solis: kods

Kods
Kods

Šajā instrukcijā būtu nepieciešams pārāk daudz vietas, lai detalizēti apskatītu programmatūru. Es centīšos izcelt dažus no galvenajiem koda bitiem. Bet jebkurā gadījumā šī nav ļoti liela lietojumprogramma. PJRC ir lieliska video apmācība par Teensy un audio bibliotēku/rīku izmantošanu (https://www.youtube.com/embed/wqt55OAabVs).

Es sāku ar kādu FFT piemēra kodu no PJRC. Koda augšpusē ielīmēju to, ko ieguvu no audio sistēmas projektēšanas rīka. Ja paskatīsities uz kodu pēc tam, jūs redzēsit kādu inicializāciju un pēc tam sistēma sāks digitalizēt audio no mikrofona. Programmatūra ieiet “mūžīgi” cilpā () un gaida, kamēr būs pieejami FFT dati, izsaucot funkciju fft1024_1.available (). Kad ir pieejami FFT dati, es paņemu datu kopiju un apstrādāju tos. Ņemiet vērā, ka es uztveru datus tikai tad, ja lielākais tvertnes lielums pārsniedz noteikto vērtību. Šī vērtība ir tā, kā es iestatīju sistēmas jutību. Ja tvertnes ir virs iestatītās vērtības, tad es normalizēju vilni un nododu to pagaidu masīvam apstrādei, pretējā gadījumā es to ignorēju un gaidu citu FFT. Jāpiemin, ka es izmantoju arī mikrofona pastiprinājuma kontroles funkciju, lai pielāgotu ķēdes jutību (sgtl5000_1.micGain (50)).

Viļņa normalizēšana nozīmē tikai to, ka es pielāgoju visas tvertnes tā, lai tvertne ar vislielāko vērtību būtu vienāda ar vienu. Visas pārējās tvertnes ir mērogotas tādā pašā proporcijā. Tas atvieglo datu analīzi.

Es izmantoju vairākus algoritmus, lai analizētu datus, bet es nolēmu izmantot tikai divus. Viens algoritms aprēķina laukumu zem līknes, ko veido tvertnes. Šis ir vienkāršs aprēķins, kas tikai pievieno tvertņu vērtības visā interesējošajā reģionā. Es salīdzinu šo apgabalu, lai noteiktu, vai tas pārsniedz slieksni.

Otrs algoritms izmanto nemainīgu vērtību masīvu, kas attēlo normalizētu FFT. Šie dati ir reāla (optimāla) kolibri paraksta rezultāti. Es to saucu par dzīvžogu. Es salīdzinu riska ierobežošanas datus ar normalizētajiem FFT datiem, lai redzētu, vai atbilstošās tvertnes atrodas 20% robežās viena no otras. Es izvēlējos 20%, bet šo vērtību var viegli pielāgot.

Es arī skaita, cik reizes atsevišķie algoritmi domā, ka viņiem ir sakritība, tas nozīmē, ka viņi dzird kolibri. Es izmantoju šo skaitli kā daļu no kolibri noteikšanas, jo var rasties nepatiesa iedarbināšana. Piemēram, ja skaņa ir skaļa vai tajā ir putnu spārnu frekvence, piemēram, plaukstas, jūs varat saņemt sprūdu. Bet, ja skaits ir lielāks par noteiktu skaitli (es izvēlos skaitli), es saku, ka tas ir kolibri. Kad tas notiek, es ieslēdzu LED, lai norādītu, ka mums ir trāpījums, un šī pati shēma iedarbina kameru, izmantojot NPN tranzistoru. Programmatūrā es iestatīju kameras iedarbināšanas laiku uz 2 sekundēm (laiks, kad iedegas gaismas diode un tranzistors).

10. solis: montāža

Montāža
Montāža

Attēlā var redzēt, kā es (bez ceremonijām) uzstādīju elektroniku. Man bija Teensy, kas pievienots maizes dēlim, kas bija piestiprināts pie nesēja dēļa kopā ar citu (neizmantotu) ar Arduino saderīgu (es domāju, ka Arduino Zero). Es visu vadu piesēju pie metāla tenta staba uz mana klāja (es pievienoju arī spriedzes atvieglojumu kabelim, kas iet uz kameru). Stabs atradās tieši pie kolibri barotavas. Es darbināju elektroniku ar nelielu LiPo barošanas bloku, ko varētu izmantot, lai uzlādētu mirušu mobilo tālruni. Barošanas blokam bija USB savienotājs, kuru es izmantoju, lai pārsūtītu strāvu uz Teensy. Es pieskrēju tālvadības sprūda kabeli pie kameras un pievienoju to. Es biju gatavs putnu darbībai!

11. darbība. Rezultāti

Rezultāti
Rezultāti

Es uzstādīju kameru uz statīva pie padevēja. Kamera bija fokusēta uz padevēja priekšējo malu, un es to iestatīju uz sporta režīmu, kas uzņem vairākus ātrus attēlus, kad tiek nospiests aizvars. Kad aizvara laiks bija 2 sekundes, es uzņēmu aptuveni 5 fotoattēlus vienā aktivizācijas notikumā.

Pirmo reizi, kad to izmēģināju, pavadīju pāris stundas, maldoties ar programmatūru. Man bija jāpielāgo jutība un secīgo algoritmu trāpījumu skaits. Beidzot es to pielaboju un biju gatavs.

Pirmais attēls, kurā tika uzņemts, bija putns, kurš ielidoja rāmī tā, it kā uzņemtu ātrgaitas krasta pagriezienu kā reaktīvais iznīcinātājs (sk. Iepriekš). Es nevaru pateikt, cik ļoti biju sajūsmā. Kādu laiku mierīgi sēdēju klāja otrā pusē un ļāvu sistēmai darboties. Man izdevās ierakstīt daudz attēlu, bet diezgan daudz izmetu. Izrādās, dažreiz jūs vienkārši iegūstat putna galvu vai asti. Turklāt es saņēmu viltus aktivizētājus, kas var notikt. Kopumā es domāju, ka saglabāju 39 attēlus. Putniem vajadzēja dažus braucienus uz barotavu, lai pierastu pie kameras aizvara skaņām, bet galu galā likās, ka viņi to ignorē.

12. solis: pēdējās domas

Pēdējās domas
Pēdējās domas

Šis bija jautrs projekts, un tas darbojas. Bet, tāpat kā lielākajā daļā lietu, ir daudz iespēju uzlabot. Filtrs noteikti varētu būt atšķirīgs (piemēram, zemas caurlaidības filtrs vai izkārtojuma un/vai parametru izmaiņas), un varbūt tas varētu uzlabot tā darbību. Esmu arī pārliecināts, ka ir labāki algoritmi, kurus izmēģināt. Vasarā es izmēģināšu dažus no tiem.

Man ir teicis, ka tur ir atvērtā pirmkoda mašīnmācīšanās kods … varbūt sistēmu varētu “apmācīt”, lai identificētu kolibri! Es neesmu pārliecināts, ka izmēģināšu šo, bet varbūt.

Ko vēl varētu pievienot šim projektam? Ja kamerai būtu datuma/laika zīmogs, jūs varētu pievienot šo informāciju attēliem. Vēl viena lieta, ko jūs varētu darīt, ir ierakstīt audio un saglabāt to uSD kartē (PJRC audio plāksnei ir slots vienai). Saglabāto audio, iespējams, varēs izmantot mācību algoritma apmācībai.

Varbūt kaut kur Ornitoloģijas skola varētu izmantot šādu ierīci? Viņi varētu iegūt informāciju, piemēram, barošanas laiku, barošanas biežumu, un, izmantojot attēlus, jūs, iespējams, varēsit noteikt konkrētus putnus, kuri atgriežas barībā.

Es ceru, ka kāds cits paplašinās šo projektu un dalīsies ar citiem ar citiem. Daži cilvēki man ir teikuši, ka šo manu paveikto darbu vajadzētu pārvērst par produktu. Es neesmu tik pārliecināts, bet es drīzāk redzētu, ka to izmanto kā mācību platformu un zinātnei.

Paldies, ka izlasījāt!

Lai izmantotu manis ievietoto kodu, jums būs nepieciešams Arduino IDE (https://www.arduino.cc/en/Main/Software). Jums būs nepieciešams arī Teensyduino kods no PJRC (https://www.pjrc.com/teensy/td_download.html).

Ieteicams: