Съдържание:

Детектор на колибри/фотограф: 12 стъпки (със снимки)
Детектор на колибри/фотограф: 12 стъпки (със снимки)

Видео: Детектор на колибри/фотограф: 12 стъпки (със снимки)

Видео: Детектор на колибри/фотограф: 12 стъпки (със снимки)
Видео: Вагнеровцы после обороны Бахмута #shorts 2024, Юли
Anonim
Детектор на колибри/фотограф
Детектор на колибри/фотограф

Имаме хранилка за колибри на задната ни палуба и през последните няколко години ги снимам. Колибри са невероятни малки същества, много териториални и техните битки могат да бъдат както весели, така и невероятни. Но ми омръзна да стоя като статуя на гърба на къщата си, за да ги снимам. Имах нужда от начин за заснемане на снимки, без да се налага да стоя зад къщата дълго време в чакане. Знам, че можех да използвам затвор с дистанционно управление, но исках снимките да се правят автоматично, без да се налага да съм там. Затова реших да направя устройство за откриване на колибри и автоматично снимане.

Винаги съм възнамерявал да използвам микроконтролер за това. Микроконтролерът ще може да управлява затвора на камерата под софтуерен контрол. Но сензорът за откриване на малък колибри беше друго нещо. Можех да използвам сензор за движение, но исках да опитам нещо уникално. Реших да използвам звук като спусък.

Стъпка 1: Избор на микроконтролер

Избор на микроконтролер
Избор на микроконтролер

Микроконтролерът, който избрах, беше PJRC Teensy. Teensy използва ARM микроконтролер, по -специално ARM Cortex M4. Cortex M4 съдържа хардуера за извършване на FFT (Fast Fourier Transform), който би извършил откриването. PJRC също така продава аудио платка, която ви позволява да използвате Teensy за възпроизвеждане на музика, както и за запис на звук с външен вход или малък микрофон, който можете да добавите към дъската. Планът ми беше да накарам Teensy да извърши FFT на звука от микрофона.

Стъпка 2: FFT?

FFT?
FFT?

FFT е математическа формула/алгоритъм, който трансформира сигнал от времевата област в честотната област. Това означава, че отнема изваденото от времето аудио от микрофона и го превръща в величини на честотите, които присъстват в оригиналната вълна. Виждате ли, всяка произволна, непрекъсната вълна може да бъде конструирана от поредица от синусоидални или косинусни вълни, които са цяло число, кратно на някаква базова честота. БФФ прави обратното: взема произволна вълна и я превръща в величините на вълните, които, ако се сумират заедно, създават оригиналната произволна вълна. Още по -прост начин да кажа това е, че планирах да използвам софтуер и хардуера на FFT в Teensy, за да определя дали „чува“размахването на крилата на колибри с честотата, на която се появяват клапите на крилата. Ако той „чуе“колибри, ще изпратя команда до камерата да направи снимка.

Проработи! И така, как го направих, как бихте могли да го направите и как бихте могли да го направите още по -добър?

Стъпка 3: Как звучи висящ колибри?

Как звучи висящ колибри?
Как звучи висящ колибри?

Първо, трябваше да разбера на каква честота ще чуя крилата на колибри. За да определя това, използвах моя iPhone. Прикачих iPhone към триножник и го накарах да записва забавено видео директно пред хранилката за колибри на нашата палуба. След известно време премахнах камерата и изтеглих видеоклипа. След това гледах видеото, което търси колибри пред хранилката. Когато намерих добра последователност, преброих броя отделни кадри, необходими на колибрито да размахва крилата си от една позиция чак до същата позиция. Бавното движение на iPhone е около 240 кадъра в секунда. Наблюдавах колибри, висящи пред хранилката, и преброих 5 рамки, за да премести крилата си от предната позиция към задната позиция и след това да се върне в позиция напред. Това са 5 кадъра от 240. Не забравяйте, че чуваме звук при всеки ход на крилата на колибри (един при хода напред и един при хода назад). За 5 кадъра за цикъл или период можем да изчислим честотата като една, разделена на периода, т.е. 1 / (5/240) или 48 Hz. Това означава, че когато този колибри витае, звукът, който чуваме, трябва да бъде два пъти по -голям от този или около 96 Hz. Честотата е вероятно по -висока, когато те летят и не зависват. Може да се повлияе и от тяхната маса, но мисля, че можем да предположим, че повечето от птиците от един и същи вид имат приблизително еднаква маса.

Стъпка 4: Серия Фурие и Teensy

Серия Фурие и тийнейджърите
Серия Фурие и тийнейджърите

Teensy (използвах Teensy 3.2) е направен от PJRC (www.pjrc.com). БПФ ще се изчислява на проба от звук. За да придобие звука, PJRC продава платка за аудио адаптер за Teensy (TEENSY3_AUDIO - $ 14.25). Те също така продават малък микрофон, който може да бъде запоен към аудио адаптерната платка (МИКРОФОН - 1,25 долара). Платката за аудио адаптер използва чип (SGTL5000), с който Teensy може да разговаря по серийна шина (I2S). Teensy използва SGTL5000, за да вземе проба от микрофона и да го дигитализира, т.е. да създаде набор от числа, които представляват звука, който микрофонът чува.

FFT е просто бърза версия на това, което се нарича дискретна трансформация на Фурие (DFT). DFT може да се извърши на произволен брой извадки, но FFT трябва да съхранява пробите в набори, които са двоични кратни. Хардуерът Teensy може да извърши FFT върху набор от 1024 проби (1024 = 2^10), така че това ще използваме.

БФП обикновено произвежда като изход величините И фазовите връзки между различните представени вълни. За това приложение не се занимаваме с фазовите връзки, но се интересуваме от величините и тяхната честота.

Аудио платката Teensy изважда аудио с честота 44, 100 Hz. Така че 1024 проби при тази честота представляват времеви интервал от 1024/44100 или около 23,2 милисекунди. В този случай БПФ ще произвежда като изход величини, които са цели числа, кратни на периода на извадката от 43 Hz (отново, 1/0.0232 е равно на около 43 Hz). Бихме искали да потърсим величини, които са около два пъти тази честота: 86 Hz. Не е точно честотата на изчислените ни крила на колибри, но е достатъчно близо, както ще видим.

Стъпка 5: Използване на данни на Фурие

Използване на данни на Фурие
Използване на данни на Фурие

Библиотеките, които PJRC предоставя за Teensy, ще обработват пробите и ще връщат масив от величини. Ще се отнасяме към всяка величина в върнатия масив като бин. Първият бин (при отместване нула в масива от данни, които получаваме обратно) е DC изместването на вълната. Можем спокойно да пренебрегнем тази стойност. Вторият контейнер (с отместване 1) ще представлява величината на компонента от 43 Hz. Това е нашият базов период. Следващият контейнер (с отместване 2) ще представлява величината на 86 Hz компонента и т.н. Всеки следващ контейнер е цяло число, кратно на базовия период (43 Hz).

Това е мястото, където става малко странно. Ако използвахме FFT, за да анализираме перфектен звук от 43 Hz, тогава FFT ще върне първия контейнер с голяма големина и всички останали контейнери ще бъдат равни на нула (отново в перфектен свят). Ако звукът, който заснехме и анализирахме, беше 86 Hz, тогава контейнерът при изместване едно щеше да е нула, а контейнерът при изместване 2 (втората хармоника) ще бъде с някаква голяма величина, а останалите контейнери ще бъдат нула и т.н. Но ако заснехме звука на колибри и той беше 96 Hz (както измервах на едната си птица), тогава изместването на 2 бин @ 86 Hz щеше да има малко по -ниска стойност (отколкото би била перфектната вълна от 86 Hz) и кофите около него (един по-нисък и няколко по-високи) биха имали намаляваща ненулева стойност.

Ако размерът на извадката за нашия FFT е по -голям от 1024 или ако нашата честота на дискретизация на аудио е по -ниска, бихме могли да подобрим разделителната способност на нашите контейнери (т.е. по -малка). Но дори и да променим тези неща, за да направим нашите FFT контейнери 1 Hz кратни на базовия период, пак ще трябва да се справим с това „разсипване“на контейнера. Това е така, защото никога не бихме получили честота на крилото, която да се приземи, винаги и точно, в един контейнер. Това означава, че не можем просто да основаваме нашето откриване на колибри на стойността в контейнера за отместване 2 и да игнорираме останалите. Нуждаем се от начин да анализираме данните в няколко контейнера, за да се опитаме да ги осмислим. Повече за това по -късно.

Стъпка 6: Започнете строителството

Започнете строителството
Започнете строителството
Започнете строителството
Започнете строителството

За моя прототип детектор на колибри използвах изключително дълги мъжки мъжки щифтове, запоени към щифтовете в Teensy. Направих това, за да мога да включа Teensy в малка платка без спойка. Направих това, защото предположих, че ще направя много промени в прототипа и с макета, бих могъл да променя това и просто да прекъсна проводниците, където ми е необходимо. Запоявах женски ленти в долната страна на аудио платката, което позволява да се включи отгоре на Teensy. Микрофонът е запоен към горната страна на аудио платката (вижте снимките). Повече подробности за сглобяването можете да намерите на сайта на PJRC:

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

Стъпка 7: Хардуер за заснемане на снимка

Хардуер за заснемане на снимка
Хардуер за заснемане на снимка
Хардуер за заснемане на снимка
Хардуер за заснемане на снимка

Имам (добре, жена ми има) цифров фотоапарат Canon Rebel. На камерата има жак, който ви позволява да свържете ръчно дистанционно управление на затвора. Купих ръчно дистанционно управление от B&H Photo. Кабелът има правилния жак за поставяне на камерата в единия край и е дълъг около 6 фута. Прерязах кабела в края близо до контролната кутия на бутоните и свалих проводниците и ги запоявах към три щифта на заглавието, които мога да включа в макета. Има гол кабел, който е заземен и два други сигнала: върхът е спусък (розов), а пръстенът (бял) е фокусиран (вижте снимките). Скъсването на върха и/или пръстена към земята задейства затвора и фокуса върху камерата.

С помощта на джъмпер тел прокарах общ път от Teensy до област, където бих могъл да го използвам на дъската. Свързах също анода на LED към щифт 2 на Teensy и катода на светодиода към резистор (100-220 ома) към земята. Свързах също пин 2 на Teensy към 10K резистор, а другата страна на резистора, който свързах към основата на NPN транзистор (2N3904, намерен навсякъде). Свързах излъчвателя на транзистора към земята, а колектора свързах към белите и розовите проводници от кабела, който отива към камерата. Оголеният проводник отново беше свързан към земята. Всеки път, когато светодиодът е включен от Teensy, транзисторът NPN също ще се включи и той ще задейства камерата (и фокуса). Вижте схемата.

Стъпка 8: Проектиране на системата

Проектиране на системата
Проектиране на системата

Тъй като честотата на трептене на крилото на Колибри вероятно не надвишава няколкостотин Hz, тогава всъщност не е нужно да записваме звукови честоти над, да речем, няколкостотин Hz. Това, от което се нуждаем, е начин да филтрираме само желаните честоти. Лентов или дори нискочестотен филтър би бил чудесен. Традиционно бихме внедрили хардуерен филтър, използвайки OpAmps или филтри с превключен кондензатор. Но благодарение на цифровата обработка на сигнала и софтуерните библиотеки на Teensy, можем да използваме цифров филтър (не е необходимо запояване … само софтуер).

PJRC има страхотен графичен интерфейс, който ви позволява да плъзгате и пускате вашата аудио система за Teensy и аудио платка. Можете да го намерите тук:

www.pjrc.com/teensy/gui/

Реших да използвам един от предоставените от PJRC биквадратни каскадни филтри, за да огранича звуковите честоти от микрофона (филтъра). Каскадирах три такива филтъра и ги настроих за работа с честотна лента на 100 Hz. Този филтър ще позволи на системните честоти малко над и малко под честотата, която ни интересува.

В блоковата диаграма (вижте снимката) i2s1 е аудио входът към аудио платката. Свързах двата аудио канала към миксер, а след това към филтрите (микрофонът е само един канал, но смесих и двата, така че не трябваше да разбера кой канал е … наречете ме мързелив). Пускам изхода на филтъра към аудио изхода (за да мога да чуя звука, ако искам). Свързах и аудиото от филтрите към FFT блока. В блоковата диаграма блокът с етикет sgtl5000_1 е чипът на аудио контролера. Не се нуждае от никакви връзки в диаграмата.

След като извършите цялата тази конструкция на блок, щракнете върху Експортиране. Това извежда диалогов прозорец, където можете да копирате кода, генериран от блоковата диаграма, и да го поставите във вашето приложение Teensy. Ако погледнете кода, можете да видите, че той представлява инстанция на всяка контрола заедно с „връзките“между компонентите.

Стъпка 9: Код

Код
Код

Ще отнеме твърде много място в тази инструкция, за да разгледаме подробно софтуера. Това, което ще се опитам да направя, е да подчертая някои от ключовите части на кода. Но това все пак не е много голямо приложение. PJRC има страхотен видеоурок за използване на Teensy и аудио библиотеките/инструментите (https://www.youtube.com/embed/wqt55OAabVs).

Започнах с някои примерен код на FFT от PJRC. Поставих това, което получих от инструмента за проектиране на аудио система в горната част на кода. Ако погледнете кода след това, ще видите някаква инициализация и след това системата започва да дигитализира звука от микрофона. Софтуерът влиза в цикъла „завинаги“() и изчаква FFT данните да бъдат достъпни, като се използва извикване на функцията fft1024_1.available (). Когато са налични данни за FFT, вземам копие от данните и ги обработвам. Обърнете внимание, че събирам данни само ако най -голямата величина на контейнера е над зададената стойност. Тази стойност е начинът, по който задавам чувствителността на системата. Ако контейнерите са над зададената стойност, тогава нормализирам вълната и я прехвърлям във временен масив за обработка, в противен случай я игнорирам и продължавам да чакам друг FFT. Трябва да спомена, че използвам и функцията за контрол на усилването на микрофона за регулиране на чувствителността на веригата (sgtl5000_1.micGain (50)).

Нормализирането на вълната означава само, че настройвам всички контейнери, така че контейнерът с най -голямата стойност е зададен равен на единица. Всички други контейнери се мащабират със същата пропорция. Това прави данните по -лесни за анализ.

Използвах няколко алгоритма за анализ на данните, но се спрях да използвам само два. Един алгоритъм изчислява площта под кривата, образувана от контейнерите. Това е просто изчисление, което просто добавя стойностите на контейнерите в региона на интерес. Сравнявам тази област, за да определя дали е над праг.

Другият алгоритъм използва постоянен масив от стойности, които представляват нормализиран FFT. Тези данни са резултат от истински (оптимален) подпис на колибри. Наричам това жив плет. Сравнявам данните за хеджиране с нормализираните FFT данни, за да видя дали съответните контейнери са в рамките на 20% един от друг. Избрах 20%, но тази стойност може лесно да се регулира.

Преброявам също колко пъти отделните алгоритми смятат, че имат съвпадение, което означава, че мислят, че чуват колибри. Използвам този брой като част от определянето на колибри, защото може да възникне фалшиво задействане. Например, когато всеки звук е силен или съдържа честотата на птичи крила, като пляскане с ръце, може да получите спусък. Но ако броят е над определен брой (номер, който аз избирам), казвам, че това е колибри. Когато това се случи, включвам светодиода, за да покажа, че имаме удар и същата схема задейства камерата чрез NPN транзистора. В софтуера зададох времето за задействане на камерата на 2 секунди (времето, когато светодиодът и транзисторът са включени).

Стъпка 10: Монтаж

Монтаж
Монтаж

Можете да видите на снимката как (безцеремонно) монтирах електрониката. Бях включил Teensy в макет, който беше залепен на носеща платка заедно с друг (неизползван) Arduino съвместим (според мен Arduino Zero). Свързах всичко с тел към метален сенник на палубата си (добавих и облекчаване на напрежението към кабела, който минава към камерата). Полюсът беше точно до хранилката за колибри. Захранвах електрониката с малка LiPo мощна тухла, която може да използвате за презареждане на мъртъв мобилен телефон. Захранващата тухла имаше USB конектор, който използвах за захранване на Teensy. Прокарах кабела за дистанционно задействане към камерата и го включих. Бях готов за някои действия с птици!

Стъпка 11: Резултати

Резултати
Резултати

Поставих камерата на статив близо до фидера. Камерата беше фокусирана върху самия преден ръб на подаващото устройство и я настроих на Спортен режим, който прави няколко бързи снимки при натискане на затвора. С времето за изключване от 2 секунди заснех около 5 снимки на събитие за задействане.

Прекарах няколко часа, докато се занимавах със софтуера за първи път, когато опитах това. Трябваше да коригирам чувствителността и последователния брой алгоритми. Най -накрая го оправих и бях готов.

Първата снимка, която беше направена, беше на птица, която влетя в рамката, сякаш поема високоскоростен завой като реактивен изтребител (виж по-горе). Не мога да ви опиша колко се вълнувах. Седнах тихо от другата страна на палубата за известно време и оставих системата да работи. Успях да запиша много снимки, но изхвърлих доста. Оказва се, че понякога просто получавате птичи глава или опашка. Също така получих фалшиви тригери, които могат да възникнат. Общо мисля, че запазих 39 снимки. На птиците бяха необходими няколко пътувания до хранилката, за да свикнат със звука на затвора от камерата, но в крайна сметка сякаш го игнорираха.

Стъпка 12: Заключителни мисли

Заключителни мисли
Заключителни мисли

Това беше забавен проект и работи. Но, както повечето неща, има много място за подобрения. Филтърът със сигурност може да бъде различен (като нискочестотен филтър или промени в подредбата и/или параметрите) и може би това може да го накара да работи по -добре. Сигурен съм също, че има по -добри алгоритми за изпробване. Ще опитам малко от това през лятото.

Казаха ми, че там има код за машинно обучение с отворен код … може би системата може да бъде „обучена“да идентифицира колибри! Не съм сигурен, че ще опитам това, но може би.

Какво друго може да се добави към този проект? Ако камерата имаше печат за дата/час, можете да добавите тази информация към снимките. Друго нещо, което можете да направите, е да запишете звука и да го запишете на uSD карта (аудио платката на PJRC има слот за такава). Запазеното аудио може да се използва за обучение на алгоритъм за обучение.

Може би някъде училище по орнитология би могло да използва такова устройство? Те могат да съберат информация като времето за хранене, честотата на хранене и със снимките може да успеете да идентифицирате конкретни птици, които се връщат към храната.

Надявам се някой друг да разшири този проект и да сподели това, което прави с другите. Някои хора ми казаха, че тази моя работа трябва да се превърне в продукт. Не съм толкова сигурен, но бих предпочел да го използвам като платформа за обучение и за наука.

Благодаря за четенето!

За да използвате кода, който съм публикувал, ще ви е необходима Arduino IDE (https://www.arduino.cc/en/Main/Software). Ще ви е необходим и кодът Teensyduino от PJRC (https://www.pjrc.com/teensy/td_download.html).

Препоръчано: