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, Novembar
Anonim
Detektor kolibri/snimač slika
Detektor kolibri/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 bio sam umoran od stajanja poput kipa na stražnjoj strani kuće kako bih ih slikao. Trebao mi je način da snimim slike bez da moram dugo stajati iza kuće i čekati. Znam da sam mogao koristiti daljinski upravljač, ali sam želio da se slike automatski snimaju, a da ne moram biti tamo. Stoga sam odlučio napraviti uređaj za otkrivanje kolibrija i automatsku sliku.

Uvijek sam namjeravao za to koristiti mikrokontroler. Mikrokontroler bi mogao upravljati zatvaračem kamere pod softverskom kontrolom. Ali 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, tačnije ARM Cortex M4. Cortex M4 sadrži hardver za izvođenje FFT (Fast Fourier Transform) koja bi izvršila detekciju. PJRC takođe prodaje audio ploču koja vam omogućava da koristite Teensy za reprodukciju muzike, kao i za snimanje zvuka sa spoljnim 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 pretvara signal iz vremenske domene u frekvencijsku domenu. To znači da iz mikrofona uzima zvučno uzorkovano vrijeme 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 radi suprotno: uzima proizvoljan val i pretvara ga u veličine valova koji bi, ako se saberu 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 da li 'čuje' krilno lupanje kolibri na frekvenciji na kojoj se krila pojavljuju. Ako čuje kolibri, poslat ću naredbu kameri da fotografira.

Uspjelo 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, trebalo je da shvatim na kojoj frekvenciji ću čuti zakrilce krila kolibri. Da bih to utvrdio, koristio sam svoj iPhone. Priključio sam iPhone na stativ i snimio usporeni video zapis direktno 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 potrebnih 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. Posmatrao sam kolibrića kako lebdi ispred hranilice i izbrojao sam 5 okvira da pomakne krila iz prednjeg u zadnji 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 sličica za ciklus ili period, možemo izračunati frekvenciju podijeljenu sa periodom 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 i ne lebde. Na to 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 Teensy
Fourierova serija i Teensy

Teensy (ja sam koristio Teensy 3.2) proizvodi PJRC (www.pjrc.com). FFT će se izračunati na uzorku zvuka. Da bi nabavio zvuk, PJRC prodaje ploču audio adaptera za Teensy (TEENSY3_AUDIO - 14,25 USD). Prodaju i mali mikrofon koji se može lemiti na audio adapter ploču (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 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 perioda uzorkovanja od 43 Hz (opet, 1/0.0232 jednako je oko 43 Hz). Htjeli bismo tražiti veličine koje su 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

Biblioteke koje PJRC pruža za Teensy će obraditi uzorke i vratiti niz vrijednosti veličine. Svaku veličinu u vraćenom nizu ćemo nazivati spremnikom. Prvi spremnik (pri pomaku nule u nizu podataka koje dobivamo) je DC pomak vala. Tu vrijednost možemo zanemariti. Drugi spremnik (s pomakom 1) predstavljat će veličinu komponente od 43 Hz. Ovo je naš bazni period. 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 perioda (43 Hz).

Sada ovo postaje malo čudno. Ako bismo koristili FFT za analizu savršenog zvuka od 43 Hz, tada bi FFT vratio prvu ladicu neke velike veličine, a sve ostale kante bile bi jednake nuli (opet, u savršenom svijetu). Da je zvuk koji smo uhvatili i analizirali 86 Hz tada bi kanta na ofsetu jedan bila nula, a kanta na pomaku 2 (drugi harmonik) neke velike veličine, a ostatak kanti nula itd. Ali ako bismo uhvatili zvuk kolibrića i on je bio 96 Hz (koliko sam mjerio na jednoj ptici), tada bi pomak 2 bina pri 86 Hz imao magnitudu nešto niže vrijednosti (nego što bi to bio savršeni val od 86 Hz) i kante oko njega (jedna niža i nekoliko viših) bi imale sve manju vrijednost koja se razlikuje od nule.

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 rezoluciju naših kanti (tj. Manju). Ali čak i ako smo promijenili ove stvari kako bismo naše FFT kante učinili 1 Hz višekratnicima osnovnog perioda, 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 ne možemo jednostavno zasnovati otkrivanje kolibrija na vrijednosti u ofsetnom spremniku 2 i zanemariti ostalo. Potreban nam je način za analizu podataka u nekoliko kanti kako bismo pokušali to shvatiti. O ovome kasnije.

Korak 6: Započnite izgradnju

Započni izgradnju
Započni izgradnju
Započni izgradnju
Započni izgradnju

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 samo prespojiti žice gdje god mi je potrebno. Zalemio sam ženske trake na donju stranu audio ploče što omogućava 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ćava povezivanje ručne daljinske komande zatvarača. 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. Odrezao sam kabel na kraju u blizini kontrolne kutije s gumbima, skinuo žice i lemio ih na tri igle zaglavlja koje sam mogao priključiti u matičnu ploču. Postoji gola žica koja je uzemljena i dva druga signala: vrh je okidač (ružičasti) i 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 matičnoj ploči. Također sam spojio anodu LED-a na pin 2 na Teensy-ju 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 sistema

Dizajn sistema
Dizajn sistema

Budući da frekvencije zamašnjavanja Kolibri verovatno ne prelaze nekoliko stotina Hz, onda ne moramo stvarno snimati frekvencije zvuka iznad, recimo, nekoliko stotina Hz. Ono što nam je potrebno je način da filtriramo samo frekvencije koje želimo. Bandpass ili čak lowpass filter bi bio odličan. Tradicionalno bismo implementirali filter u hardver koristeći OpAmps ili filtere sa preklopnim kondenzatorom. No, zahvaljujući digitalnoj obradi signala i Teensyjevim softverskim bibliotekama, možemo koristiti digitalni filter (nije potrebno lemljenje … samo softver).

PJRC ima sjajan grafički interfejs koji vam omogućava da prevučete i ispustite svoj audio sistem 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 (filtera). Kaskadirao sam tri takva filtera i postavio ih za rad na pojasu od 100 Hz. Ovaj filter će omogućiti ulazak na sistemske frekvencije 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 filtere (mikrofon je samo jedan kanal, ali sam miješao oba pa nisam morao shvatiti koji je to kanal … nazovi me lijen). Puštam izlaz filtera na audio izlaz (tako da mogu čuti zvuk ako želim). Takođe sam spojio zvuk sa filtera na FFT blok. U blok dijagramu, blok sa oznakom sgtl5000_1 je čip audio kontrolera. Ne trebaju nikakve veze u dijagramu.

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

Korak 9: Kodirajte

Kod
Kod

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 sistema u vrh koda. Ako nakon toga pogledate kôd, vidjet ćete neku inicijalizaciju, a zatim sistem počinje digitalizirati zvuk iz mikrofona. Softver ulazi u petlju 'zauvijek' () i čeka da FFT podaci postanu dostupni pozivom funkcije fft1024_1.available (). Kad su FFT podaci dostupni, uzimam kopiju podataka i obrađujem je. Imajte na umu da podatke prikupljam samo ako je najveća veličina kante iznad zadane vrijednosti. Ova vrijednost je način na koji postavljam osjetljivost sistema. Ako su kante iznad zadane vrijednosti, tada normaliziram val i prenosim ga u privremeni niz za obradu, u protivnom ga ignoriram 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 uvećane za isti omjer. To olakšava analizu podataka.

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

Drugi algoritam koristi konstantan niz vrijednosti koje predstavljaju normalizirani FFT. Ovi podaci su rezultati pravog (optimalnog) potpisa kolibri. Ovo nazivam živicom. Upoređujem podatke o zaštiti od zaštite sa normalizovanim podacima o FFT -u da vidim da li su odgovarajuće kasete unutar 20% jedna od druge. Odabrao sam 20%, ali se ta vrijednost može lako prilagoditi.

Brojim i 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 može doći do lažnog okidanja. 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 to isto kolo pokreće 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: Montiranje

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 za ploču nosača zajedno s drugim (nekorištenim) Arduino kompatibilnim (mislim da je Arduino Zero). Cijelu sam stvar vezao žicom za metalnu šipku za tendu na mojoj palubi (dodao sam i rasterećenje kabela koji vodi do kamere). Stub je bio odmah do hranilice kolibri. Napajao sam elektroniku malom LiPo ciglom za napajanje koju biste mogli koristiti za punjenje mrtvog mobitela. Napajanje je imalo USB konektor na kojem sam napajao Teensy. Provukao sam kabl 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 blizu ulagača. Fotoaparat sam fokusirao na prednju ivicu ulagača i postavio sam ga u način rada Sport koji snima nekoliko brzih slika kada se pritisne okidač. Sa 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 kadar 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 sistem da radi. Uspio sam snimiti mnogo slika, ali sam dosta odbacio. Ispostavilo se da ponekad dobijete samo 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 bilo potrebno nekoliko putovanja do hranilice da se naviknu na zvuk zatvarača sa kamere, ali na kraju se činilo da ga ignorišu.

Korak 12: Završne misli

Završne misli
Završne misli

Ovo je bio zabavan projekt i funkcionira. Ali, kao i većina stvari, postoji mnogo prostora za poboljšanja. Filter bi svakako mogao biti drugačiji (poput niskopropusnog filtera ili promjena rasporeda i/ili parametara) i možda bi to moglo poboljšati njegov rad. Takođe sam siguran da postoje bolji algoritmi za isprobavanje. Probaću nešto od ovoga na leto.

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

Šta 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 USB karticu (PJRC audio ploča ima utor za jednu). Sačuvani zvuk bi se mogao 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 neko proširiti ovaj projekat i podijeliti ono što naprave sa drugima. Neki ljudi su mi rekli da ovaj posao koji sam obavio treba pretvoriti u proizvod. Nisam siguran, ali bih radije vidio da se koristi kao platforma za učenje i za nauku.

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 iz PJRC -a (https://www.pjrc.com/teensy/td_download.html).

Preporučuje se: