Мазмұны:

Колибри детекторы/сурет түсіруші: 12 қадам (суреттермен)
Колибри детекторы/сурет түсіруші: 12 қадам (суреттермен)

Бейне: Колибри детекторы/сурет түсіруші: 12 қадам (суреттермен)

Бейне: Колибри детекторы/сурет түсіруші: 12 қадам (суреттермен)
Бейне: ОНВСВ feat ZippO Видео приглашение на Kavabanga & Depo & Kolibri 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 аппаратурасын қолдануды жоспарладым, ол қанаттардың қанаттарының пайда болу жиілігінде колибридің қанат қағуын «еститінін» анықтайды. Егер ол колибрді «естімесе», мен камераға суретке түсуге команда жіберемін.

Бұл жұмыс істеді! Сонымен, мен мұны қалай істедім, сіз оны қалай жасай аласыз және оны одан да жақсартуға болады?

3 -қадам: Қалықтап ұшатын колибри қалай естіледі?

Қалықтап ұшатын колибри қалай естіледі?
Қалықтап ұшатын колибри қалай естіледі?

Біріншіден, мен колибридің қанаттарының қаншалықты жиі естілетінін анықтауым керек болды. Мұны анықтау үшін мен iPhone қолдандым. Мен iPhone -ды штативке қостым және оны палубамыздағы колибри қорабының алдында баяу қозғалыстағы бейнені жаздырдым. Біраз уақыттан кейін мен камераны алып тастадым, мен бейнені жүктедім. Содан кейін мен фидердің алдында колибри іздеген бейнені көрдім. Мен жақсы тізбекті тапқан кезде, колибри қанаттарын бір позициядан сол күйге қайтару үшін қажет жеке кадрлардың санын санадым. IPhone -дағы баяу қозғалыс секундына 240 кадрды құрайды. Мен фидердің алдында қалықтап бара жатқан колибрді байқадым, мен оның қанаттарын алға позициядан артқа қарай жылжыту үшін 5 жақтауды санадым, содан кейін алға қарай оралу. Бұл 240 кадрдан 5 кадр. Есіңізде болсын, біз колибри қанатының әр соққысында дыбыс естиміз (біреуі алға, біреуі артқа). Цикл немесе период үшін 5 кадр үшін біз жиілікті 1 / (5/240) немесе 48 Гц периодқа бөлінгендей есептей аламыз. Бұл дегеніміз, бұл колибри қалықтаған кезде, біз еститін дыбыс екі есе немесе шамамен 96 Гц болуы керек. Олар ұшып бара жатқанда және ұшпаған кезде жиілік жоғары болуы мүмкін. Бұған олардың массасы да әсер етуі мүмкін, бірақ менің ойымша, бір түрдегі құстардың көпшілігінің массасы шамамен бірдей.

4 -қадам: Фурье сериясы мен жасөспірімдер

Фурье сериясы мен жасөспірімдер
Фурье сериясы мен жасөспірімдер

Teensy (мен Teensy 3.2 қолдандым) PJRC (www.pjrc.com) жасаған. FFT дыбыс үлгісі бойынша есептеледі. Дыбысты алу үшін PJRC Teensy үшін аудио адаптер тақтасын сатады (TEENSY3_AUDIO - $ 14.25). Олар сондай -ақ аудио адаптер тақтасына дәнекерлеуге болатын шағын микрофон сатады (МИКРОФОН - $ 1,25). Дыбыстық адаптер тақтасында Teensy сериялық автобус (I2S) арқылы сөйлесе алатын чип (SGTL5000) қолданылады. Teensy SGTL5000 көмегімен микрофоннан дыбысты іріктеп, оны цифрландырады, яғни микрофон естіп тұрған дыбысты білдіретін сандар жиынтығын жасайды.

FFT - бұл дискретті Фурье түрлендіруінің (DFT) жылдам нұсқасы. DFT үлгілердің ерікті санында орындалуы мүмкін, алайда FFT үлгілерді екілік еселік жиындарда сақтауы қажет. Teensy аппараттық құралы FFT -ті 1024 үлгіде (1024 = 2^10) жинай алады, сондықтан біз оны қолданамыз.

FFT әдетте шығыс ретінде әр түрлі толқындар арасындағы шамалар мен фазалық қатынастарды шығарады. Бұл қосымша үшін біз фазалық байланыстармен айналыспаймыз, бірақ біз олардың шамалары мен олардың жиілігіне қызығамыз.

Teensy аудио тақтасы 44, 100 Гц жиіліктегі дыбыстың үлгісін алады. Осылайша, осы жиіліктегі 1024 үлгі 1024/44100 уақыт аралығын немесе шамамен 23,2 миллисекундты білдіреді. Бұл жағдайда FFT шығыс ретінде 43 Гц таңдамалы кезеңнің бүтін сандарына тең болатын шамаларды шығарады (тағы да 1/0.0232 шамамен 43 Гц тең). Біз осы жиіліктен шамамен екі есе үлкен шамаларды іздегіміз келеді: 86 Гц. Бұл біздің есептелген колибри қанаттарының жиілігі емес, бірақ біз көретініміздей жақын.

5 -қадам: Фурье деректерін қолдану

Фурье деректерін қолдану
Фурье деректерін қолдану

PJRC кітапханалары Teensy үлгілерді өңдеп, шама мәндерінің жиынын қайтарады. Біз қайтарылған массивтегі әрбір шаманы қоқыс жәшігі деп атаймыз. Бірінші контейнер (біз қайтаратын деректер массивінде нөлдік есеппен) толқынның тұрақты ауысуы болып табылады. Біз бұл құндылықты қауіпсіз түрде елемеуге болады. Екінші контейнер (1 -ығысу кезінде) 43 Гц компонентінің шамасын көрсетеді. Бұл біздің негізгі кезең. Келесі қоқыс жәшігі (2 -ығысу кезінде) 86 Гц компонентінің шамасын көрсетеді және т.б. Әрбір келесі қалта - бұл негізгі кезеңнің бүтін сан еселігі (43 Гц).

Енді бұл жерде біршама оғаштық байқалады. Егер біз 43 Гц тамаша дыбысты талдау үшін FFT қолданған болсақ, онда FFT үлкен көлемдегі бірінші қоқыс жәшігін қайтарады, ал қалған қоқыс жәшіктері нөлге тең болады (тағы да мінсіз әлемде). Егер біз түсіретін және талдайтын дыбыс 86 Гц болса, онда бір орындық қалта нөлге тең болады, ал 2 -ығысу қалтасы (екінші гармоник) қандай да бір үлкен мәнге ие болады, ал қалталардың қалған бөлігі нөлге тең болады және т.б. Бірақ егер біз колибридің дыбысын түсіретін болсақ және ол 96 Гц болса (мен оны бір құспен өлшегенмін), онда 86 Гц жиіліктегі 2 сыйымдылығы шамалы төмен мәнге ие болады (86 Гц толқынына қарағанда) және айналасындағы қоқыс жәшіктерінің (бір төмен және бірнеше жоғары) әрқайсысының нөлге тең емес мәні төмендейді.

Егер біздің FFT үшін іріктеу өлшемі 1024 -тен үлкен болса немесе аудио іріктеу жиілігі төмен болса, біз қоқыс жәшіктерінің ажыратымдылығын жақсарта аламыз (яғни кішірек). Егер біз FFT контейнерлерін 1 Гц базалық кезеңге көбейту үшін осы заттарды өзгерткен болсақ та, біз әлі де бұл қоқыс жәшігінің «төгілуімен» күресуге тура келеді. Себебі, біз ешқашан әрқашан бір дәл қоқыс жәшігіне қонатын қанаттар жиілігін ала алмас едік. Бұл біз колибрді анықтауды 2 -ші қоқыс жәшігіндегі мәнге негіздеп, қалғандарын елемеуге болмайды дегенді білдіреді. Бізге деректерді түсіну үшін бірнеше қоқыс жәшігінде талдау әдісі қажет. Бұл туралы толығырақ кейінірек.

6 -қадам: Құрылысты бастаңыз

Құрылысты бастау
Құрылысты бастау
Құрылысты бастау
Құрылысты бастау

Колибри детекторының прототипі үшін мен жасөспірімдердегі түйреуіштерге дәнекерленген қосымша ұзын еркек-түйреуіштерді қолдандым. Мен Teensy-ді дәнекерлемейтін шағын тақтаға қосу үшін осылай жасадым. Мен мұны жасадым, себебі мен прототипке және нан тақтасына көп өзгерістер енгіземін деп ойладым, мен мұны өзгерте аламын және тек қажет жерде секіргіш сымдарды өзгерте аламын. Мен аудио тақтаның төменгі жағына әйел жолақтарын дәнекерледім, бұл оны Teensy үстіне қосуға мүмкіндік береді. Микрофон дыбыстық тақтаның жоғарғы жағына дәнекерленген (суреттерді қараңыз). Құрастыру туралы толығырақ PJRC сайтынан білуге болады:

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

7 -қадам: Суретке түсіру үшін аппараттық құрал

Суретке түсірудің аппараттық құралы
Суретке түсірудің аппараттық құралы
Суретке түсірудің аппараттық құралы
Суретке түсірудің аппараттық құралы

Менде (менің әйелімде) Canon Rebel сандық камерасы бар. Камерада қашықтан басқару пультін қолмен қосуға мүмкіндік беретін ұя бар. Мен B&H Photo -дан қашықтан басқару пультін сатып алдым. Кабельде камераның бір ұшына сәйкес келетін дұрыс ұясы бар және ұзындығы шамамен 6 фут. Мен кабельді түйменің басқару қорабының жанында кесіп тастадым, мен сымдарды шешіп, оларды панельге қосуға болатын үш түйреуішке дәнекерледім. Жалаңаш сым және басқа екі сигнал бар: ұшы триггер (қызғылт) және сақина (ақ) фокусталған (суреттерді қараңыз). Ұшты және/немесе сақинаны жерге тұйықтау ысырманы және фокусты камераға бағыттайды.

Өткізгішті қолдана отырып, мен жасөспірімнен оны тақтада қолдануға болатын жерге дейін бардым. Мен сондай-ақ жарық диодты анодты Teensy-дегі 2-ші түйреуішке және жарықдиодты катодты жерге резисторға (100-220 Ом) жалғадым. Мен сонымен қатар Teensy -дің 2 -штырын 10К резисторға, ал резистордың екінші жағын NPN транзисторының негізіне жалғадым (2N3904 барлық жерде кездеседі). Мен транзистордың эмитентін жерге, ал мен коллекторды ақ және қызғылт сымдарға камераға түсетін кабельден қостым. Жалаңаш сым қайтадан жерге қосылды. Жарық диодты Teensy қосқан кезде NPN транзисторы қосылады және ол камераны (және фокусты) іске қосады. Схеманы қараңыз.

8 -қадам: Жүйелік дизайн

Жүйелік дизайн
Жүйелік дизайн

Hummingbird қанатының соғу жиілігі бірнеше жүз Гц -ден аспайтындықтан, бізге дыбыс жиіліктерін, мысалы, бірнеше жүз Гц -ден жоғары жазудың қажеті жоқ. Бізге қажет нәрсе - біз қалаған жиіліктерді ғана сүзу әдісі. Жолақты немесе тіпті төмен өту сүзгісі жақсы болар еді. Әдетте біз OpAmps немесе ауыспалы конденсаторлық сүзгілерді қолдана отырып, аппараттық құралға сүзгіні енгіземіз. Бірақ сандық сигналды өңдеу мен Teensy бағдарламалық қамтамасыз ету кітапханаларының арқасында біз цифрлық сүзгіні қолдана аламыз (дәнекерлеу қажет емес … тек бағдарламалық қамтамасыз ету).

PJRC -те дыбыстық жүйені Teensy мен аудио тақтаға сүйреп апаруға мүмкіндік беретін тамаша GUI бар. Сіз оны мына жерден таба аласыз:

www.pjrc.com/teensy/gui/

Мен микрофоннан (фильтрден) дыбыс жиілігін шектеу үшін PJRC ұсынған биквадраттық каскадты сүзгілердің бірін қолдануды шештім. Мен осындай үш сүзгіні каскадтап, оларды 100 Гц жиілікке өткізу жолағына қойдым. Бұл сүзгі бізді қызықтыратын жиіліктен сәл жоғары және сәл төмен жүйелік жиіліктерді енгізуге мүмкіндік береді.

Блок -схемада (суретті қараңыз) i2s1 - аудио тақтаға аудио кіріс. Мен екі дыбыстық арнаны миксерге, сосын сүзгілерге қостым (микрофон тек бір арна, бірақ мен олардың екеуін де араластырдым, сондықтан оның қай арна екенін білуге тура келмеді … мені жалқау деп атаңыз). Мен фильтрдің шығысын аудио шығысқа жіберемін (егер қаласам дыбысты ести аламын). Мен сонымен қатар сүзгілердегі аудионы FFT блогына қостым. Блок -схемада sgtl5000_1 деп белгіленген блок - бұл аудио контроллердің чипі. Диаграммада ешқандай байланыстар қажет емес.

Барлық осы блок құрылысын жасағаннан кейін Экспорттау түймесін басыңыз. Бұл блок -схемадан жасалған кодты көшіріп, оны Teensy қосымшасына қоюға болатын диалогтық терезені шығарады. Егер сіз кодқа қарасаңыз, бұл әр басқару элементінің қосылуы, сонымен қатар компоненттер арасындағы «байланыстар» екенін көре аласыз.

9 -қадам: код

Код
Код

Бұл нұсқаулықта бағдарламалық жасақтаманы егжей -тегжейлі қарастыру үшін тым көп орын қажет. Мен не істеуге тырысамын - кодтың негізгі биттерін бөлектеу. Бірақ бұл өте үлкен қосымша емес. PJRC Teensy мен аудио кітапханаларды/құралдарды (https://www.youtube.com/embed/wqt55OAabVs) пайдалану бойынша тамаша бейне оқулыққа ие.

Мен PJRC -тен кейбір FFT мысал кодынан бастадым. Мен аудио жүйені жобалау құралынан алғанды кодтың жоғарғы жағына қойдым. Егер сіз осыдан кейін кодты қарасаңыз, сіз инициализацияны көресіз, содан кейін жүйе микрофоннан дыбысты цифрландыруды бастайды. Бағдарламалық қамтамасыз ету «мәңгілік» циклге () кіреді және fft1024_1.available () функциясына қоңырау шалу арқылы FFT деректерінің болуын күтеді. 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). Сізге PJRC -тен Teensyduino коды қажет болады (https://www.pjrc.com/teensy/td_download.html).

Ұсынылған: