Разработка на радар с помощта на HC-SR04 и Arduino
С появата на Arduino, идеята за система за ултразвуково зрение не е напуснала много.
Оказва се, че не само подводниците и физиците могат да използват ултразвукови вълни за свои егоистични (и не толкова) цели. Ако преди можехте само да фантазирате и мечтаете за това, сега е време да изкопаете своя Arduino и ултразвуков сензор за разстояние и да започнете да изграждате ултразвуков локатор със собствените си ръце! Статията описва подробно дизайна и характеристиките на ултразвуковия ехолот на Arduino. Специално внимание е отделено на визуализацията на измерванията. Този материал не е инструкция за производство на такъв сонар (изходният код не е приложен), но напълно описва алгоритъма за разработване на механичната част и софтуера.
Необходими компоненти
- Ардуино Уно
- Серво мотори SM-S4303R
- Захранване 5 V DC
- Модул HC-SR04 - ултразвуков датчик за разстояние
- Метален конструктор - за механичната част на проекта
- Развойна платка и проводници
- Компютър с USB кабел за пренос на данни
- Е, всяко малко нещо.
В проекта са използвани сервомотори SM-S4303R, които осигуряват въртенето на ротора без ограничаване на ъгъла на въртене. Не е най-популярният ход, но процесът на развитие става много по-интересен.
По-долу е видео на завършения сонар, използващ ултразвуков сензор за разстояние и Arduino:
Теоретична база
Радарът (радиооткриване и обхват) работи на принципа на излъчване и приемане на кратки импулси електромагнитно излъчване. Той изпраща радиовълна в дадена посока в пространството. Когато тази вълна достигне обекта, тя отскача от обекта и се връща обратно към радара, койтоследи времето, което е изтекло от генерирането на импулса. Ако знаете колко бързо се разпространява електромагнитен импулс в определена среда (спойлер: във въздуха скоростта е около 300 000 км или около 7,5 пъти около Земята за една секунда), можете да изчислите разстоянието до препятствието, от което е бил отразен. Това разстояние ще бъде половината от изчисления път на вълната (тъй като импулсът преминава от радара към обекта и след това обратно към радара).
Сонарът (звукова навигация и определяне на разстояние) работи на същия принцип като радара, но използва кратки звукови импулси („пингове“). По принцип сонарите се използват на подводници и подводници. Делфините и летящите мишки използват същия принцип за откриване на препятствия.
HC-SR04 е евтин ултразвуков сензор за разстояние, който работи на принципа, описан по-горе. Той излъчва кратки ултразвукови импулси и измерва времето, необходимо за връщане на импулса. В зависимост от времето и скоростта на звука (около 340 метра в секунда) можете да изчислите разстоянието до обекта, от който е отразена ултразвуковата вълна.
След получаване на отразения импулс изходът на сензора превключва от 0 V (нисък) на +5 V (висок). Изходът остава висок, докато приемникът не открие първия отразен сигнал. След това се извършва рестартиране и се задава нисък режим. По този начин времето, през което изходът е във високо състояние, е равно на времето, необходимо на звуковата вълна да премине до бариерата и обратно.
Нека да разгледаме прекрасната усмивка на готовия радар. Синята дъска отгоре е ултразвуковият сензор за разстояние. Лявата страна е ултразвуковият излъчвател (предавател на ултразвукови вълни), а дясната страна е приемникът (приемник на ултразвукови вълни).
Листът с данни на нашия ултразвуков сензор казва, че ъгълът на излъчваната вълна е около 30°, така че за да открием обекти на 360 градуса, трябва да се уверим, че той се върти. За целта се нуждаем от въртяща се платформа със серво мотор в основата.
Сервото са двигатели, които се управляват от електрически импулси. Могат да се разграничат два вида сервомотори: такива, които се въртят без ограничения и такива, при които роторът се движи с предварително зададена "стъпка". Можете да контролирате ъгъла на въртене на последния чрез прилагане на електрически импулс с определена дължина. Ако сервото получи входен импулс, който се интерпретира като завъртане, да речем, на 90°, роторът ще се премести на позиция 90° и ще спре. Серво мотори, които се въртят без ограничение, могат да се управляват в скорост и посока на въртене със същата дължина на импулса.
По принцип сервомотор с контрол на ъгъла на ротора е по-практичен вариант за сканиращ радар. Можете да завъртите изходящия вал с, да речем, 5°, да вземете показания, да прехвърлите информация за разстоянието на обекта към вашия контролер или компютър, да направите друго завъртане и т.н. Този проект използва сервомотор с постоянно въртене на ротора, който не може да предава данни за достигане на конкретна позиция без допълнителни тръбопроводи. Единият вариант е да свържеш потенциометър към вала на сервомотора и да следиш показанията от него. Съпротивлението на изхода на потенциометъра може да се преобразува в ъгъл на вала. Но в този случай се прилага друга опция: в този случай се контролира скоростта на въртене на вала на двигателя и ъгълът се изчислява в зависимост от скоростта. Показана е конструкцията на самия радарен механизъмна снимката по-долу:
Червеният диск е прикрепен към оста, която върти ултразвуковия сензор за разстояние. Към диска е прикрепена пружина от химикал. Пружината се върти заедно с диска. Пружината е свързана към обща земя. В крайните точки на въртене са монтирани две тънки метални пластини. Всяка плоча е един от двата щифта на Arduino, които поддържат прекъсвания. Броят и броят на прекъсващите щифтове зависят от използвания модел Arduino. На Arduino Uno това са два пина: щифтове 2 и 3). Щифтовете на Arduino са свързани към щифта +5V чрез издърпващи резистори. В резултат на това фолиото и пружината действат като бутон за превключване. Когато щифтът не е затворен - пружината не е притисната към фолиото - на щифта на Arduino е 5 V. Когато щифтът се появи, съответният щифт е заземен и напрежението върху него пада до 0 V. Използвайки attachInterrupt, можете да укажете функция, която да се изпълнява всеки път, когато захранването на щифта се промени от 5 V на 0 V. В рамките на тази конкретна функция за прекъсване се определя определена ширина на управляващия импулс и броячът на въртене се нулира. Броячът отчита микросекундите от последната промяна на посоката. Тоест, знаейки скоростта на въртене, можем да изчислим текущата позиция.
За да се осигури стабилно въртене в двете посоки, е внедрен алгоритъм за калибриране на скоростта, който се изпълнява всеки път, когато Arduino се рестартира. На програмно ниво се задава скоростта на въртене на ротора по посока на часовниковата стрелка, регулира се скоростта на въртене в обратна посока (под скорост се разбира дължината на импулсите, които осигуряват въртене по посока на часовниковата стрелка и обратно). Основната задача на калибрирането е да се определи дължината на импулса, коятогарантира еднаква скорост на въртене в двете посоки. При калибриране Arduino му заповядва да се върти напред и в обратна посока за 20 секунди. През това време се записва продължителността на ротацията и се изчислява средният период. След 20 секунди калибриране се сравняват въртенията по посока и обратно на часовниковата стрелка и се избира необходимата скорост на въртене обратно на часовниковата стрелка. След това се извършва втората итерация на калибрирането - още 20 секунди отработване на зададения алгоритъм. Новите итерации ще се повтарят, докато разликата между периодите стане по-малка от 1/10 от секундата. Това обикновено отнема 3-4 повторения.
Комуникация с компютър
Има много прост метод за обмен на данни между Arduono и персонален компютър чрез USB кабел. Връзката се осъществява чрез сериен порт, което дава възможност за предаване и получаване на данни. В нашия случай Arduino предава данни на персонален компютър, работещ с програма за визуализиране на радарни показания.
Екранна снимка на разработената програма за ехолокация е показана по-долу. Червената линия показва текущата посока. Старите данни постепенно избледняват.
Показване на сонарни данни и функция за разпределение на точки
Ултразвуковите сензори налагат определени ограничения поради самия принцип на тяхната работа. Вместо да се засичат всички отразени сигнали, се измерва времето до връщането на звуковата вълна, когато се отрази от първото препятствие. Тоест, ние не знаем разстоянието до обект, който се намира на по-голямо разстояние от сензора от първия в рамките на неговия зрителен ъгъл. Например във втория случай на фигурата по-долу ще получим разстоянието до червения триъгълник, а звездичката и квадратът ще избягатот нашия домашен радар.
Черната точка е нашият ултразвуков сензор за разстояние, зелената зона е ъгълът на видимост при различни ъгли на движение. Синята звезда е обект, който никога няма да можем да видим, тъй като във всички случаи е по-далеч от червения триъгълник или розовия квадрат.
Имайте предвид, че очертанията на точката отляво са много ясни. Ако снимката е направена с лош фотоапарат, точката ще изглежда като тази, показана вдясно. Първо, размерите му изглеждат по-големи и границите са замъглени. Може да се направи аналогия, че PSF е изображение на много малка (по-малко от един пиксел) точка. Използвайки най-готината камера, никога няма да получите изображение, което е идентично с оригинала. Тоест винаги ще има шум. Ако знаем функцията за разпространение на нашата камера, можем да коригираме изображението, използвайки метода на деконволюция. Това ви позволява да получите по-ясно изображение след обработка. Между другото, тази техника беше използвана през първите три години в космическия телескоп Хъбъл. Чрез измерване на PSF на телескопа астрономите можеха да коригират изображенията на Земята (три години по-късно бяха направени някои корекции в работата на телескопа и необходимостта от такава обработка изчезна).
За съжаление, такава техника е напълно неприложима в случай на използване на ултразвуков сензор за разстояние, тъй като съществува концепция, наречена суперпозиция. Представете си, че сте направили снимка на две точки вместо на една.
На снимката ще има две точки. И двете ще бъдат малко размазани, но са напълно независими една от друга. Това означава, че снимката е по същество снимка на една точка плюс снимка на втора точка. С други думи, комбинираното изображение на снимки на две точки се нарича линейна суперпозиция на две отделни снимки.
Ако сега разгледаме ултразвуков сензор за разстояние, разбираме, че процесът на изобразяване не може да бъде описан чрез принципа на суперпозиция. Примерът по-горе показа, че „снимките“ на синя звезда, розов триъгълник и розов квадрат не са предмет на принципите на фото суперпозиция на три отделни обекта. Вместо това сензорът за разстояние открива най-близкия обект и игнорира всички останали. Такава система не може да бъде описана с помощта на PSF и няма да е възможно да се възстановят липсващи обекти с помощта на последваща обработка. Тоест няма да можем да използваме нашия ултразвуков сензор, Arduino и предложения софтуер като пълноценен 3D скенер в медицината.
И как се реализират такива скенери, тъй като работят на същия принцип и могат да осигурят формирането на пълен 2D и 3D модел на човешкото тяло с точна индикация за местоположението на вътрешните органи? Разликата е в начина на работа на сензора. Медицинският ултразвуков сензор за разстояние изпраща кратки ултразвукови импулси и ги изчаква да се върнат. Но за разлика от нашия сензор, той не контролира интервала от време, след който се е върнал първият отразен сигнал, а улавя всички отразени сигнали след определен период от време. Всеки получен импулс е ултразвукова вълна, отразена от определен орган. По този начин скенерът може да изгради 3D повърхност на цялото човешко тяло. Втората характеристика на индустриалните 3D скенери е, че ултразвуковата вълна има най-тясна насоченост. Тоест, вместо 30° покритие, тези сензори генерират фокусирана вълна.
Така че има място за подобряване на предложения сонар на Arduino. Първо, не използвайте серво с контролирана скорост. Дизайнът ще бъде много по-опростен и следователно по-точен, акоизползвайте сервомотор с контрол на изходния ъгъл. Второ, има смисъл да се мисли за нещо като фокусираща леща върху ултразвуков сензор за разстояние. Ако вълната е по-тясна, ще можете да проследявате обекти, чийто сигнал е бил потиснат от други в широкото зрително поле на нашия сензор. В допълнение, листът с данни на нашия сензор казва, че минималното разстояние до обекта, който се контролира, е 2 сантиметра. Можете също да помислите за това.
И разбира се, можете просто да използвате различен модел ултразвуков сензор за разстояние. Но това е съвсем различен проект и различна история.