- Потребни материјали:
- Кружни дијаграм:
- Како ХЦ-СР04 модул заправо ради:
- Мерење удаљености између два ултразвучна сензора (ХЦ-СР04):
- Програм за сензор предајника:
- Програм за пријемник сензора:
- Рад:
- Импровизована идеја - калибрација сензора на познатој удаљености:
Ултразвучни сензор (ХЦ-СР04) се обично користи за одређивање удаљености објекта од одређене тачке. Било је прилично лако то учинити са Ардуином, а код је такође прилично једноставан. Али у овом чланку ћемо покушати нешто другачије са овим популарним сензорима ХЦ-СР04. Покушаћемо да израчунамо удаљеност између два ултразвучна сензора, тј. Направићемо један сензор да делује као предајник, а други сензор да делује као пријемник. На овај начин можемо пратити локацију једног предајника помоћу многих ултразвучних пријемника. Ово праћење се назива триангулација и може се користити за аутоматско пристајање робота за следбенике пртљага и друге сличне апликације. Проналажење удаљености између два америчка сензора можда звучи прилично једноставно, али суочио сам се са неколико изазова о којима се говори у овом пројекту.
Техника о којој се говори у овом чланку није прилично тачна и можда неће бити корисна у било ком стварном систему без модификација. За време док је трајала ова документација, нисам пронашао никога ко је постигао резултате ближе мојим, тако да сам управо поделио своје ставове о томе како сам успео да ради, тако да људи који ово покушавају не морају поново измишљати точак.
Потребни материјали:
- Ардуино (2Нос) - Било који модел
- ХЦСР04 модул (2 бр.)
Кружни дијаграм:
Иако ћемо направити један амерички (ултразвучни) сензор који ће радити као предајник, а други као пријемник, обавезно је повезати сва четири пина сензора са Ардуином. Зашто бисмо? О томе ће се расправљати касније, али за сада ће схема кола бити следећа
Као што видите, дијаграм кола и за предајник и за пријемник су идентични. Такође проверите: Интерфејс ултразвучног сензора Ардуино
Како ХЦ-СР04 модул заправо ради:
Пре него што наставимо даље, схватимо како ради сензор ХЦ-СР04. Доњи дијаграм времена помоћи ће нам да разумемо рад.
Сензор има два пина Триггер и Ецхо који се користе за мерење удаљености као што је приказано на временском дијаграму. Прво да започнемо мерење, требали бисмо послати ултразвучни талас са предајника, то се може учинити постављањем пина окидача високо за 10 уС. Чим се то уради, пин предајника ће послати 8 звучних рафала америчких таласа. Овај амерички талас ће ударити у одскочни предмет и примити ће га прималац.
Овде временски дијаграм показује да ће једном када пријемник прими талас учинити да се Ецхо пин повиси током времена које је једнако времену потребном да талас пређе од америчког сензора и врати се до сензора. Чини се да овај временски дијаграм није тачан.
Покрио сам Тк (предајник) део свог сензора и проверио да ли је импулс Ецхо повишен, и да, да ли иде високо. То значи да импулс Ецхо не чека да га прими амерички (ултразвучни) талас. Једном када пренесе амерички талас, он иде високо и остаје висок док се талас не врати назад. Тако би тачан временски дијаграм требао бити отприлике овако приказан доле (Извините због мојих лоших вештина писања)
Осигурање да ваш ХЦ-СР04 ради само као предајник:
Прилично је једноставно направити ХЦ-СР04 да ради само као предајник. Као што је приказано на временском дијаграму, окидачки пин морате прогласити излазним пином и учинити да остане висок 10 микросекунди. Ово ће покренути ултразвучни прасак таласа. Дакле, кад год желимо да емитујемо талас, само морамо да контролишемо окидач сензора предајника, за који је код дат у наставку.
Осигурање да ваш ХЦ-СР04 ради само као пријемник:
Као што је приказано на временском дијаграму, не можемо контролисати успон Ецхо пина јер је повезан са окидачким пином. Дакле, никако не бисмо могли да учинимо да ХЦ-СР04 ради само као пријемник. Али можемо користити хаковање тако што ћемо само прекрити део сензора предајником траком (као што је приказано на доњој слици) или поклопцем амерички талас не може изаћи изван кућишта одашиљача и овај амерички талас неће утицати на Ецхо пин.
Сада да би се ехо пин ишао високо, само морамо повући овај лажни пин окидача 10 микросекунди. Једном када овај пријемник прими амерички талас који одашиље сензор предајника, ехо пин ће се смањити.
Мерење удаљености између два ултразвучна сензора (ХЦ-СР04):
До сада смо разумели како да натерамо један сензор да ради као предајник, а други да ради као пријемник. Сада морамо пренијети ултразвучни талас са сензора предајника и примити га са сензором пријемника и провјерити вријеме потребно да талас путује од предајника до пријемника, зар не? Али нажалост !, овде имамо проблем и ово неће успети.
Модул предајника и модул пријемника су међусобно удаљени и када пријемни модул прими амерички талас од предајничког модула, неће знати када је предајник послао овај талас. Без познавања времена почетка не можемо израчунати потребно време, а тиме и удаљеност. Да би се решио овај проблем, ехо импулс пријемног модула мора да се подеси тачно када је модул предајника пренео амерички талас. Другим речима, модул предајника и модул пријемника треба да се активирају истовремено. То се може постићи следећом методом.
На горњем дијаграму, Тк представља сензор предајника, а Рк представља сензор пријемника. Као што је приказано, сензор предајника биће направљен да емитује америчке таласе са периодично познатим кашњењем, то је све што мора да уради.
У сензору пријемника морамо некако да подесимо пин окидача тачно током када се пин предајника повиси. Тако у почетку насумично покрећемо пријемнике да се активирају високо, што ће и остати високо док ехо пин не падне. Овај ехо пин пригушиће се само када од предајника прими амерички талас. Дакле, чим се спусти, можемо претпоставити да је сензор предајника управо покренут. Сада, са овом претпоставком чим одјек падне, можемо сачекати познато кашњење и затим активирати окидач пријемника. Ово би делимично синхронизовало окидач и предајника и пријемника, па стога можете да прочитате трајање непосредног ехо импулса помоћу пулсеИн () и да израчунате удаљеност.
Програм за сензор предајника:
Комплетан програм модула предајника налази се на дну странице. Не ради ништа осим што окида сензор предајника у периодичном интервалу.
дигиталВрите (тригПин, ХИГХ); делаиМицросецондс (10); дигиталВрите (тригПин, ЛОВ);
Да бисмо активирали сензор, морамо да направимо да игла окидача остане висока 10 уС. Код за исто је приказан горе
Програм за пријемник сензора:
У сензору пријемника покривамо предајничко око сензора како бисмо га учинили лажним као што је претходно речено. Сада можемо користити горе поменуту технику за мерење удаљености између два сензора. Комплетан програм је дат на дну ове странице. У наставку је објашњено неколико важних редова
Триггер_УС (); вхиле (дигиталРеад (ецхоПин) == ХИГХ); делаиМицросецондс (10); Триггер_УС (); трајање = пулсИн (ецхоПин, ХИГХ);
У почетку покрећемо амерички сензор помоћу функције Триггер_УС (), а затим сачекамо док ехо пин остане висок користећи вхиле петљу. Једном када падне, чекамо унапред одређено трајање, то трајање би требало да буде између 10 и 30 микросекунди које се могу утврдити помоћу покушаја и грешака (или можете користити импровизовану идеју која је дата у наставку). После овог кашњења поново покрените САД користећи исту функцију, а затим помоћу функције пулсеИн () израчунајте трајање таласа.
Сада користећи исте старе формуле можемо израчунати удаљеност као испод
растојање = трајање * 0,034;
Рад:
Успоставите везе како је објашњено у програму. Покријте Тк део сензора пријемника као што је приказано на слици. Затим пренесите код предајника и код пријемника који су дати у наставку на предајник и пријемник Ардуино. Отворите серијски монитор модула пријемника и приметили бисте растојање између два модула која се приказују, као што је приказано на видео снимку испод.
Напомена: Овај метод је само идеологија и можда неће бити тачан или задовољавајући. Међутим, можете испробати импровизовану идеју у наставку да бисте постигли боље резултате.
Импровизована идеја - калибрација сензора на познатој удаљености:
Чини се да је метода која је до сада необично објашњена задовољавајућа, али је била довољна за мој пројекат. Међутим, такође бих желео да поделим недостатке ове методе и начин да се они превазиђу. Један од главних недостатака ове методе је тај што претпостављамо да ехо пин пријемника пада ниско одмах након што је сензор предајника пренео амерички талас, што није тачно, јер ће таласу требати неко време да путује од предајника до пријемника. Стога окидач предајника и окидач пријемника неће бити у савршеној синхронизацији.
Да бисмо то превазишли, у почетку можемо калибрисати сензор користећи познату удаљеност. Ако је удаљеност позната, знаћемо време потребно америчком таласу да стигне до пријемника са предајника. Нека се ово време схвати као Дел (Д) као што је приказано доле.
Сада ћемо тачно знати након колико времена треба да подигнемо окидачки пин пријемника да бисмо добили синхронизацију са окидачем предајника. Ово трајање се може израчунати помоћу познатог кашњења (т) - Дел (Д). Нисам могао да тестирам ову идеју због временских ограничења, па нисам сигуран колико би тачно могла да функционише. Па ако случајно покушате, обавестите ме о резултатима кроз одељак за коментаре.