Sadržaj:

Detektor kolibri/snimač slika: 12 koraka (sa slikama)
Detektor kolibri/snimač slika: 12 koraka (sa slikama)

Video: Detektor kolibri/snimač slika: 12 koraka (sa slikama)

Video: Detektor kolibri/snimač slika: 12 koraka (sa slikama)
Video: SIN GLEDAO KROZ PROZOR PA SE DESILO OVO 😂 2024, Srpanj
Anonim
Detektor kolibrira/snimač slika
Detektor kolibrira/snimač slika

Na stražnjoj palubi imamo hranilicu kolibrića i zadnjih par godina ih fotografiram. Kolibri su nevjerojatna mala stvorenja, vrlo teritorijalna i njihove borbe mogu biti urnebesne i nevjerojatne. Ali postajalo mi je dosadno stajati poput kipa na stražnjoj strani kuće kako bih ih fotografirao. Trebao mi je način snimanja slika bez dugog čekanja iza kuće. Znam da sam mogao koristiti zatvarač na daljinsko upravljanje, ali želio sam da se slike automatski snimaju bez da moram biti tamo. Stoga sam odlučio napraviti uređaj za otkrivanje kolibrića i automatsko snimanje.

Uvijek sam namjeravao za to koristiti mikrokontroler. Mikrokontroler bi mogao upravljati zatvaračem kamere pod softverskom kontrolom. No, senzor za otkrivanje sićušnog kolibrića bio je druga stvar. Mogao sam koristiti senzor pokreta, ali htio sam isprobati nešto jedinstveno. Odlučio sam upotrijebiti zvuk kao okidač.

Korak 1: Odabir mikrokontrolera

Odabir mikrokontrolera
Odabir mikrokontrolera

Mikrokontroler koji sam odabrao bio je PJRC Teensy. Teensy koristi ARM mikrokontroler, točnije ARM Cortex M4. Cortex M4 sadrži hardver za izvođenje FFT -a (Fast Fourier Transform) koja bi izvršila detekciju. PJRC također prodaje audio ploču koja vam omogućuje da koristite Teensy za reprodukciju glazbe, kao i za snimanje zvuka s vanjskim ulazom ili mali mikrofon koji možete dodati na ploču. Moj plan je bio da Teensy izvede FFT na zvuku iz mikrofona.

Korak 2: FFT?

FFT?
FFT?

FFT je matematička formula/algoritam koji transformira signal iz vremenske domene u frekvencijsku domenu. To znači da iz mikrofona uzima vremenski uzorkovan zvuk i pretvara ga u veličine frekvencija prisutnih u izvornom valu. Vidite, bilo koji proizvoljan, kontinuirani val može se konstruirati iz niza sinusnih ili kosinusnih valova koji su cjelobrojni višekratnici neke osnovne frekvencije. FFT čini suprotno: uzima proizvoljan val i pretvara ga u veličine valova koji bi, ako se zbroje zajedno, stvorili izvorni proizvoljni val. Još jednostavniji način da to kažem je da sam planirao upotrijebiti softver i FFT hardver u Teensyju kako bih utvrdio čuje li 'lupanje krila kolibrića na frekvenciji na kojoj se pojavljuju zakrilci krila. Ako "čuje" kolibri, poslat ću naredbu kameri da fotografira.

Upalilo je! Dakle, kako sam to učinio, kako ste to mogli učiniti i kako biste to mogli učiniti još boljom?

Korak 3: Kako zvuči lebdeći kolibri?

Kako zvuči lebdeći kolibri?
Kako zvuči lebdeći kolibri?

Prvo, morao sam shvatiti na kojoj će frekvenciji čuti zakrilce krila kolibri. Da bih to utvrdio, koristio sam svoj iPhone. Priključio sam iPhone na tronožac i dao snimiti usporeni video zapis izravno ispred hranilice kolibri na našoj palubi. Nakon nekog vremena uklonio sam kameru i preuzeo video. Zatim sam pogledao video u potrazi za kolibrom ispred hranilice. Kad sam pronašao dobar slijed, izbrojao sam broj pojedinačnih kadrova koji su bili potrebni da kolibri zamahne krilima iz jednog položaja sve do tog istog položaja. Usporeno kretanje na iPhoneu iznosi oko 240 sličica u sekundi. Promatrao sam kolibrića kako lebdi ispred hranilice i izbrojio sam 5 okvira da pomakne krila iz prednjeg u stražnji položaj, a zatim se vrati u prednji položaj. Ovo je 5 sličica od 240. Upamtite, čujemo zvuk pri svakom zamahu krila kolibrića (jedan pri hodu prema naprijed i jedan pri hodu prema natrag). Za 5 okvira za ciklus ili razdoblje možemo izračunati frekvenciju podijeljenu s razdobljem, odnosno 1 / (5/240) ili 48 Hz. To znači da kada ovaj kolibri lebdi, zvuk koji čujemo mora biti dvostruko veći ili oko 96 Hz. Učestalost je vjerojatno veća kada lete, a ne lebde. Na njih može utjecati i njihova masa, ali mislim da možemo pretpostaviti da većina ptica iste vrste ima približno istu masu.

Korak 4: Fourierova serija i Teensy

Fourierova serija i tinejdžeri
Fourierova serija i tinejdžeri

Teensy (ja sam koristio Teensy 3.2) proizvodi PJRC (www.pjrc.com). FFT će se izračunati na uzorku zvuka. Za stjecanje zvuka, PJRC prodaje ploču audio adaptera za Teensy (TEENSY3_AUDIO - 14,25 USD). Prodaju i mali mikrofon koji se može lemiti na ploču audio adaptera (MIKROFON - 1,25 USD). Ploča audio adaptera koristi čip (SGTL5000) s kojim Teensy može razgovarati putem serijske sabirnice (I2S). Teensy koristi SGTL5000 za uzorkovanje zvuka iz mikrofona i njegovu digitalizaciju, odnosno stvaranje skupa brojeva koji predstavljaju zvuk koji mikrofon čuje.

FFT je samo brza verzija onoga što se naziva Diskretna Fourierova transformacija (DFT). DFT se može izvesti na proizvoljnom broju uzoraka, međutim, FFT mora imati uzorke pohranjene u skupovima koji su binarni višekratnici. Teensy hardver može izvesti FFT na skupu od 1024 uzorka (1024 = 2^10) pa ćemo to i koristiti.

FFT obično proizvodi, kao svoj izlaz, veličine I fazne odnose između različitih zastupljenih valova. Za ovu aplikaciju ne bavimo se faznim odnosima, već nas zanimaju veličine i njihova učestalost.

Teensy audio ploča uzorkuje zvuk na frekvenciji od 44, 100 Hz. Dakle, 1024 uzorka na ovoj frekvenciji predstavlja vremenski interval od 1024/44100 ili oko 23,2 milisekunde. U ovom slučaju, FFT će kao izlaz proizvesti veličine koje su cjelobrojne višekratnike razdoblja uzorkovanja od 43 Hz (opet, 1/0.0232 jednako je oko 43 Hz). Željeli bismo tražiti veličine koje su otprilike dvostruko veće od ove frekvencije: 86 Hz. Nije baš učestalost naših izračunatih zakrilca krila kolibrića, ali je dovoljno blizu kako ćemo vidjeti.

Korak 5: Korištenje Fourierovih podataka

Korištenje Fourierovih podataka
Korištenje Fourierovih podataka

Knjižnice koje PJRC pruža Teensyju će obraditi uzorke i vratiti niz vrijednosti veličine. Svaku veličinu u vraćenom nizu nazivat ćemo spremnikom. Prvi spremnik (pri pomaku nule u nizu podataka koje dobivamo natrag) je DC pomak vala. Tu vrijednost možemo sa sigurnošću zanemariti. Drugi spremnik (s pomakom 1) predstavljat će veličinu komponente od 43 Hz. Ovo je naše bazno razdoblje. Sljedeći spremnik (s pomakom 2) predstavljat će veličinu komponente od 86 Hz itd. Svaki sljedeći spremnik je cijeli broj višekratnik baznog razdoblja (43 Hz).

Sada ovo postaje malo čudno. Ako smo upotrijebili FFT za analizu savršenog zvuka od 43 Hz, tada bi FFT vratio prvu ladicu neke velike veličine, a svi ostali spremnici bili bi jednaki nuli (opet, u savršenom svijetu). Da je zvuk koji smo uhvatili i analizirali 86 Hz tada bi spremnik na pomaku jedan bio nula, a spremnik na pomaku 2 (drugi harmonik) neke velike veličine, a ostatak spremnika nula itd. Ali ako bismo uhvatili zvuk kolibrića i on je bio 96 Hz (koliko sam izmjerio na jednoj ptici), tada bi pomak 2 kutije pri 86 Hz imao magnitudu nešto niže vrijednosti (nego što bi to bio savršeni val od 86 Hz) i kante oko nje (jedna niža i nekoliko viša) imale bi sve manju vrijednost koja nije nula.

Ako je veličina uzorka za naš FFT bila veća od 1024 ili nam je frekvencija uzorkovanja zvuka bila niža, mogli bismo poboljšati razlučivost svojih kanti (tj. Manju). No čak i da smo promijenili ove stvari kako bismo naše FFT kante učinili 1 Hz višekratnicima osnovnog razdoblja, i dalje bismo se morali nositi s tim "prosipanjem" kante. To je zato što nikada ne bismo dobili frekvenciju krila koja bi se spustila, uvijek i točno, u jednu kantu. To znači da otkrivanje kolibri ne možemo temeljiti samo na vrijednosti u ladici za pomak 2 i zanemariti ostalo. Potreban nam je način za analizu podataka u nekoliko spremnika kako bismo pokušali to shvatiti. O ovome kasnije.

Korak 6: Započnite gradnju

Započni gradnju
Započni gradnju
Započni gradnju
Započni gradnju

Za svoj prototip detektora kolibri koristio sam ekstra dugačke muško-muške igle lemljene na igle u Teensyju. Učinio sam to kako bih mogao priključiti Teensy u malu ploču bez lemljenja. Učinio sam to jer sam pretpostavio da ću napraviti puno promjena u prototipu, a s opcijom sam mogao promijeniti ovo i preskočiti žice gdje god mi je potrebno. Zalemio sam ženske trake na donju stranu audio ploče što omogućuje njihovo spajanje na vrh Teensyja. Mikrofon je lemljen na gornjoj strani audio ploče (pogledajte slike). Više detalja o montaži možete pronaći na web stranici PJRC -a:

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

Korak 7: Hardver za snimanje slike

Hardver za snimanje slike
Hardver za snimanje slike
Hardver za snimanje slike
Hardver za snimanje slike

Imam (pa moja žena ima) Canon Rebel digitalni fotoaparat. Kamera ima priključak koji vam omogućuje povezivanje ručnog daljinskog upravljanja zatvaračem. Kupio sam ručni daljinski upravljač od B&H Photo. Kabel ima odgovarajuću utičnicu za postavljanje fotoaparata na jedan kraj i dugačak je oko 6 stopa. Prerezao sam kabel na kraju u blizini upravljačke kutije s gumbima, skinuo žice i lemio ih na tri zaglavlja koja sam mogao priključiti na ploču. Postoji gola žica koja je uzemljena i dva druga signala: vrh je okidač (ružičasti), a prsten (bijeli) je u fokusu (pogledajte slike). Spuštanje vrha i/ili prstena na tlo upravlja zatvaračem i fokusom na fotoaparatu.

Koristeći kratkospojnu žicu prešao sam zajedničko tlo od Teensyja do područja gdje sam ga mogao koristiti na ploči. Također sam spojio anodu LED-a na pin 2 na Teensyju i katodu LED-a na otpornik (100-220 ohma) na masu. Također sam spojio pin 2 Teensyja na 10K otpornik, a drugu stranu otpornika spojio sam na bazu NPN tranzistora (2N3904 koji se nalazi posvuda). Odašiljač tranzistora spojio sam na masu, a kolektor sam spojio na bijele i ružičaste žice s kabela koji ide do kamere. Ogoljena žica je opet bila spojena na masu. Kad god LED uključi Teensy, uključit će se i NPN tranzistor koji će aktivirati kameru (i fokus). Pogledajte shemu.

Korak 8: Dizajn sustava

Dizajn sustava
Dizajn sustava

Budući da frekvencije zamahivanja krila Kolibri vjerojatno ne prelaze nekoliko stotina Hz, onda zapravo ne moramo snimati zvučne frekvencije iznad, recimo, nekoliko stotina Hz. Ono što nam je potrebno je način filtriranja samo frekvencija koje želimo. Bandpass ili čak lowpass filter bi bio odličan. Tradicionalno bismo implementirali filter u hardver pomoću OpAmp-a ili filtera sa komutiranim kondenzatorom. No, zahvaljujući digitalnoj obradi signala i Teensyjevim softverskim knjižnicama, možemo koristiti digitalni filter (nije potrebno lemljenje … samo softver).

PJRC ima sjajan GUI koji vam omogućuje povlačenje i ispuštanje vašeg audio sustava za Teensy i audio ploču. Možete ga pronaći ovdje:

www.pjrc.com/teensy/gui/

Odlučio sam upotrijebiti jedan od bikvadratnih kaskadnih filtera koji pruža PJRC za ograničavanje frekvencija zvuka iz mikrofona (filtra). Kaskadirao sam tri takva filtra i namjestio ih za rad na pojasu od 100 Hz. Ovaj će filtar omogućiti ulaz na frekvencije sustava malo iznad i malo ispod frekvencije koja nas zanima.

Na blok dijagramu (vidi sliku) i2s1 je audio ulaz na audio ploči. Spojio sam oba audio kanala na mikser, a zatim na filtre (mikrofon je samo jedan kanal, ali sam pomiješao oba pa nisam morao shvatiti koji je to kanal … nazovi me lijen). Izlaz filtera pokrećem na audio izlaz (tako da mogu čuti zvuk ako želim). Također sam spojio zvuk s filtera na FFT blok. U blok dijagramu, blok s oznakom sgtl5000_1 je čip audio kontrolera. Ne trebaju nikakve veze u dijagramu.

Nakon što napravite sve ove konstrukcije blokova, kliknite na Izvoz. Ovo otvara dijaloški okvir u kojem možete kopirati kôd koji je generiran iz blok dijagrama i zalijepiti ga u svoju aplikaciju Teensy. Ako pogledate kôd, možete vidjeti da je to instanca svake kontrole zajedno s 'vezama' među komponentama.

Korak 9: Kodirajte

Kodirati
Kodirati

Trebalo bi previše prostora u ovom Instructable -u da biste detaljno pregledali softver. Ono što ću pokušati učiniti je istaknuti neke ključne dijelove koda. Ali ovo ionako nije velika aplikacija. PJRC ima odličan video vodič o korištenju Teensyja i audio biblioteka/alata (https://www.youtube.com/embed/wqt55OAabVs).

Počeo sam s nekim primjerom FFT koda iz PJRC -a. Zalijepio sam ono što sam dobio od alata za dizajn audio sustava u vrh koda. Ako nakon toga pogledate kôd, vidjet ćete neku inicijalizaciju, a zatim sustav počinje digitalizirati zvuk s mikrofona. Softver ulazi u petlju 'zauvijek' () i čeka da FFT podaci budu dostupni pozivom funkcije fft1024_1.available (). Kad su FFT podaci dostupni, uzmem kopiju podataka i obradim je. Imajte na umu da podatke hvatam samo ako je najveća veličina korpe iznad zadane vrijednosti. Ova vrijednost je način na koji postavljam osjetljivost sustava. Ako su kante iznad zadane vrijednosti, tada normaliziram val i prenosim ga u privremeni niz za obradu, u protivnom ga zanemarujem i čekam novi FFT. Trebao bih napomenuti da također koristim funkciju kontrole pojačanja mikrofona za podešavanje osjetljivosti kruga (sgtl5000_1.micGain (50)).

Normalizacija vala samo znači da prilagodim sve kante tako da se kanta s najvećom vrijednošću postavi jednaka jedan. Sve ostale kante su povećane za isti omjer. Time je podatke lakše analizirati.

Koristio sam nekoliko algoritama za analizu podataka, ali sam se odlučio za samo dva. Jedan algoritam izračunava površinu ispod krivulje koju tvore kante. Ovo je jednostavan izračun koji samo dodaje vrijednosti kanti u čitavom području interesa. Uspoređujem ovo područje kako bih utvrdio je li iznad praga.

Drugi algoritam koristi konstantan niz vrijednosti koje predstavljaju normalizirani FFT. Ovi su podaci rezultat stvarnog (optimalnog) potpisa kolibri. Ovo nazivam živicom. Uspoređujem podatke zaštite od normaliziranih podataka o FFT -u da vidim jesu li odgovarajuće kante unutar 20% jedna od druge. Odabrao sam 20%, ali, ta se vrijednost može lako prilagoditi.

Također brojim koliko puta pojedini algoritmi misle da se podudaraju, što znači da misle da čuju kolibri. Ovo brojanje koristim kao dio utvrđivanja kolibrića jer se može dogoditi lažno aktiviranje. Na primjer, kada je bilo koji zvuk glasan ili sadrži frekvenciju krila ptica, poput pljeskanja rukama, mogli biste dobiti okidač. Ali ako je broj iznad određenog broja (broj koji izaberem), ja kažem da je to kolibri. Kad se to dogodi, upalim LED da pokažem da smo pogodili, a isti krug aktivira kameru preko NPN tranzistora. U softveru sam postavio vrijeme okidanja kamere na 2 sekunde (vrijeme kada su LED dioda i tranzistor uključeni).

Korak 10: Montaža

Montaža
Montaža

Na slici možete vidjeti kako sam (bez ceremonije) montirao elektroniku. Dao sam Teensy priključiti na ploču koja je bila zalijepljena na ploču nosača zajedno s drugim (nekorištenim) Arduino kompatibilnim (mislim da je Arduino Zero). Cijelu sam stvar žicom vezao za metalni stup za tendu na mojoj palubi (također sam dodao kabel za rasterećenje kabela koji vodi do kamere). Stup je bio tik do hranilice kolibri. Napajao sam elektroniku s malom LiPo ciglom za napajanje koju biste mogli upotrijebiti za punjenje mrtvog mobitela. Napajanje je imalo USB konektor na kojem sam napajao Teensy. Provukao sam kabel daljinskog okidača do kamere i priključio ga. Bio sam spreman za akciju ptica!

Korak 11: Rezultati

Rezultati
Rezultati

Postavio sam kameru na stativ u blizini ulagača. Fotoaparat sam fokusirao na sam prednji rub ulagača i postavio sam ga u način rada Sport koji snima nekoliko brzih slika kad se pritisne okidač. S vremenom isključivanja od 2 sekunde snimio sam oko 5 fotografija po događaju okidača.

Proveo sam nekoliko sati petljajući po softveru kad sam prvi put ovo probao. Morao sam prilagoditi osjetljivost i uzastopni algoritam. Konačno sam to dotjerao i bio sam spreman.

Prva slika koju je snimio bila je ptica koja je uletjela u okvir kao da se okreće velikom brzinom poput mlaznog lovca (vidi gore). Ne mogu vam reći koliko sam bio uzbuđen. Neko sam vrijeme mirno sjedio s druge strane palube i pustio sustav da radi. Uspio sam snimiti puno slika, ali sam dosta odbacio. Ispada da ponekad samo dobijete ptičju glavu ili rep. Također, dobio sam lažne okidače, što se može dogoditi. Mislim da sam ukupno zadržao 39 slika. Pticama je trebalo nekoliko izleta do hranilice da se naviknu na zvuk okidača s fotoaparata, ali na kraju se činilo da su to ignorirali.

Korak 12: Završne misli

Završne misli
Završne misli

Ovo je bio zabavan projekt i funkcionira. No, kao i većina stvari, postoji mnogo prostora za poboljšanja. Filtar bi zasigurno mogao biti drugačiji (poput niskopropusnog filtra ili promjena rasporeda i/ili parametara) i možda bi to moglo poboljšati njegov rad. Također sam siguran da postoje bolji algoritmi za isprobavanje. Pokušat ću nešto od ovoga na ljeto.

Rečeno mi je da postoji otvoreni kod za strojno učenje … možda bi sustav mogao biti 'obučen' za identifikaciju kolibrija! Nisam siguran da ću ovo probati, ali, možda.

Što bi se još moglo dodati ovom projektu? Ako je kamera imala datum/vrijeme, mogli ste te podatke dodati slikama. Još jedna stvar koju možete učiniti je snimiti zvuk i spremiti ga na uSD karticu (PJRC audio ploča ima utor za jednu). Spremljeni zvuk mogao bi se koristiti za obuku algoritma za učenje.

Možda bi negdje škola za ornitologiju mogla koristiti ovakav uređaj? Možda će moći prikupiti informacije poput vremena hranjenja, učestalosti hranjenja, a pomoću slika ćete možda moći identificirati određene ptice koje se vraćaju u hranu.

Nadam se da će netko proširiti ovaj projekt i podijeliti ono što napravi s drugima. Neki su mi ljudi rekli da bi ovaj posao koji sam obavio trebao pretvoriti u proizvod. Nisam baš siguran, ali radije bih to vidio kao platformu za učenje i za znanost.

Hvala na čitanju!

Za korištenje koda koji sam objavio trebat će vam Arduino IDE (https://www.arduino.cc/en/Main/Software). Trebat će vam i Teensyduino kôd s PJRC -a (https://www.pjrc.com/teensy/td_download.html).

Preporučeni: