- ЛМ393 Модул сензора брзине (Х206)
- Распоред постављања сензора Х206
- Дијаграм круга ДИИ Ардуино ЛМ393 сензора брзине
- Логика иза мерења брзине са модулом сензора брзине ЛМ393
- Логика иза мерења пута пређеног точком
- Логика иза мерења угла бота
- Ардуино Робот Цоде
- Тестирање робота Ардуино за мерење удаљености, брзине и угла
Роботи су полако почели да се увлаче у наше друштво како би нам живот учинили једноставнијим. Већ можемо пронаћи шест робота за доставу хране из Старсхип-а на путевима у Великој Британији, паметно се крећући међу цивилима до циља. Сваки мобилни робот који се креће у окружење увек треба да буде свестан свог положаја и оријентације у односу на стварни свет. Постоји много начина да се то постигне употребом различитих технологија попут ГПС-а, РФ триангулације, акцелерометара, жироскопа итд. Свака техника има своју предност и сама је по себи јединствена. У овом упутству за сензор брзине за Ардуино ЛМ393 користићемо једноставан и лако доступан модул сензора брзине ЛМ393за мерење неких виталних параметара попут брзине, пређеног пута и угла робота помоћу Ардуина. Помоћу ових параметара робот ће моћи да зна свој стварни статус и може да га користи за безбедну навигацију.
Ардуино је најпопуларнији избор међу хобистима за изградњу робота, од једноставног следбеника линије до сложенијег само-балансирајућег робота за чишћење пода. Можете погледати све врсте робота у одељку Роботика.
Направићемо мали робот који се напаја литијумском батеријом и возити га помоћу џојстика. Током извођења можемо измерити брзину, удаљеност и угао робота и приказати га у реалном времену на ЛЦД дисплеју повезаном са Ардуином. Овај пројекат вам само помаже у мерењу ових параметара, након што завршите с тим, можете користити ове параметре за самостално управљање ботом по потреби. Звучи занимљиво, зар не? Па кренимо.
ЛМ393 Модул сензора брзине (Х206)
Пре него што уђемо у схему кола и код пројекта, схватимо модул сензора брзине ЛМ393 јер он игра виталну улогу у пројекту. Тхе Х206 спеед сенсор модул се састоји од инфрацрвене светлости сензор интегрисан са ЛМ393 Волтаге компаратор ИЦ отуда и назив ЛМ393 Спеед сензора. Модул се такође састоји од решеткасте плоче која се мора поставити на ротирајућу осовину мотора. Све компоненте су означене на слици испод.
Инфрацрвени Светлосни сензор се састоји од ИР ЛЕД и фото-транзистор одвојена малим брбљање. Читав распоред сензора смештен је у црно кућиште као што је приказано горе. Мрежна плоча се састоји од прореза, плоча је постављена између зазора сензора инфрацрвене светлости на такав начин да сензор може осетити празнине у мрежној плочи. Свака празнина на мрежној плочи активира ИР сензор када пролази кроз отвор; ови окидачи се затим помоћу упоређивача претварају у напонске сигнале. Упоредник није ништа друго до ЛМ393 ИЦ из ОН полупроводника. Модул има три затича, од којих се два користе за напајање модула, а један излазни за рачунање броја окидача.
Распоред постављања сензора Х206
Монтирање ових врста сензора је помало незгодно. Може се монтирати само на моторе који имају осовину избочену са обе стране. Једна страна осовине је повезана са точком, док се друга страна користи за постављање решеткасте плоче као што је приказано горе.
Будући да су точак и плоча повезани са истим вратилом, оба се окрећу истом брзином и тако мерењем брзине плоче можемо мерити брзину точка. Обавезно проверите да ли празнине на мрежној плочи пролазе кроз ИР сензор, тек тада ће сензор моћи да изброји број празнина кроз које је прошло. Такође можете да смислите свој механички уређај за постављање сензора све док испуњава наведени услов. ИР сензор се обично користи у многим пројектима роботике за вођење робота о препрекама.
Решеткаста плоча приказана горе има 20 прореза (решетки). То значи да ће сензор пронаћи 20 празнина за једно потпуно окретање точка. Бројећи број празнина које је сензор открио, можемо израчунати пут који је прешао точак, слично мерењем брзине како сензор проналази празнине можемо да детектујемо брзину точка. У нашем роботу ћемо имати овај сензор постављен на оба точка, а тиме можемо пронаћи и угао робота. Међутим, угао ротације може се разумније израчунати помоћу акцелерометра или жироскопа, овде научите да повезујете акцелерометар и жироскоп са Ардуином и покушајте да измерите угао ротације помоћу њих.
Дијаграм круга ДИИ Ардуино ЛМ393 сензора брзине
Комплетна шема овог робота за очитавање брзине и даљине приказана је испод. Бот се састоји од Ардуино Нано-а као његовог мозга, два једносмерна мотора за точкове покреће модул Л298Н Х-Бридге Мотор Дривер. Џојстик се користи за контролу брзине и смера бота, а два сензора брзине Х206 се користе за мерење брзине, удаљености и анђела бота. Измерене вредности се затим приказују на ЛЦД модулу 16к2. Потенциометар повезан са ЛЦД-ом може се користити за подешавање контраста ЛЦД-а, а отпорник се користи за ограничавање струје која тече на позадинско осветљење ЛЦД-а.
Комплетна коло покреће 7.4В Литхиум ћелији. Овај 7,4В се напаја на 12В пин модула погонског мотора. Затим регулатор напона на модулу погонског мотора претвара 7,4 В у регулирани + 5 В који се користи за напајање Ардуина, ЛЦД-а, сензора и џојстика.
Мотором управљају дигитални пинови 8,9,10 и 11 Ардуина. Будући да и брзина мотора мора да се контролише, требало би да доводимо ПВМ сигнале на позитивни прикључак мотора. Отуда имамо пинове 9 и 10, који су обојица ПВМ пинови. Вредности Кс и И из џојстика очитавају се помоћу аналогних пинова А2 и А3.
Као што знамо, сензор Х206 генерише окидач када се открије празнина у мрежној плочи. С обзиром да ови окидачи не би увек требало да буду тачно прочитани да би се израчунала тачна брзина и растојање, оба пина окидача (излаза) повезана су на спољни пин 2 и 3 прекида Ардуино плоче. Саставите цело коло на шасију и монтирајте сензор брзине како је објашњено, мој бот је изгледао отприлике доле након што су везе завршене. Такође можете погледати видео на крају ове странице да бисте знали како је сензор постављен.
Сада када је хардверски део завршен, уђимо у логику како ћемо мерити брзину, удаљеност и појединачни бот, а затим пређимо на одељак за програмирање.
Логика иза мерења брзине са модулом сензора брзине ЛМ393
Из поставке за монтирање сензора треба да знате да модул сензора брзине ЛМ393 (Х206) мери само празнине присутне на мрежној плочи. Током монтирања треба осигурати да се точак (чију брзину треба мерити) и мрежаста плоча окрећу истом брзином. Као и овде, пошто смо и точак и плочу поставили на исто вратило, оба ће се очигледно окретати истом брзином.
У нашој поставци уградили смо два сензора за сваки точак за мерење угла бота. Али ако је ваш циљ да мерите само брзину и удаљеност, сензор можемо поставити на било који точак. Излаз сензора (сигнали окидача) најчешће ће бити повезан са спољним прекидним пином микроконтролера. Сваки пут када се открије празнина у мрежној плочи, прекидач ће се активирати и извршит ће се код у ИСР (Интеррупт сервице Рутине). Ако успемо да израчунамо временски интервал између два таква окидача, можемо израчунати брзину точка.
У Ардуину можемо лако израчунати овај временски интервал помоћу функције милис () . Ова милис функција ће се непрестано увећавати за 1 за сваке милименде од тренутка укључивања уређаја. Дакле, када се први прекид можемо спасити вредност Миллис () у лажне променљиве (као што је певтиме у овом коду), а потом, када је други прекид јавља можемо израчунати време које одузимањем певтиме вредност формирају Миллис ().
Потребно време = тренутно време - заузето претходно време = милис () - певтиме ; // тиметакен у миллисец
Једном када израчунамо потребно време, можемо једноставно израчунати вредност о / мин користећи доленаведене формуле, где (1000 / примљено време) даје РПС (број обртаја у секунди) и он се множи са 60 за претварање РПС у РПМ (обртаја у минути).
о / мин = (1000 / заузето време) * 60;
Након израчунавања броја обртаја у минути можемо израчунати брзину возила користећи доње формуле под условом да знамо радијус точка.
Брзина = 2π × РПС × полупречник точка. в = радијус_котача * о / мин * 0.104
Напомена, горња формула је за израчунавање брзине у м / с, ако желите да израчунате у км / сат, замените 0,0104 са 0,376. Ако вас занима како је добијена вредност 0.104, покушајте да поједноставите формулу В = 2π × РПС × радијус точка.
Иста техника се користи чак и ако се за мерење брзине ротирајућег објекта користи холов сензор. Али за сензор Х206 постоји квака, мрежаста плоча има 20 прореза, па ће стога мерење времена између два прореза прореза преоптеретити микроконтролер. Отуда меримо брзину само при пуној ротацији точка. Пошто ће се за сваки размак генерисати два прекида (један на почетку и други на крају празнине), добићемо укупно 40 прекида за точак да изврши једну потпуну ротацију. Дакле, чекамо 40 прекида пре него што стварно израчунамо брзину точка. Код за исти приказан је испод
иф (ротација> = 40) { тиметакен = милис () - певтиме; // време снимљено у милисек / мин = (1000 / примљено) * 60; // формуле за израчунавање о / мин певтиме = милис (); ротација = 0; }
Још један недостатак ове методе је тај што вредност брзине неће пасти на нулу, јер ће прекид увек чекати да точак изврши једну ротацију за израчунавање вредности окретаја. Овај недостатак се лако може превазићи додавањем једноставног кода који надгледа временски интервал између два прекида и ако премашује нормално него што је потребно, вредност обртаја и брзине мора бити нула. Веза у доњем коду користили смо променљиву дтиме да бисмо проверили разлику у времену и ако она прелази 500 мили секунди, вредност брзине и окретаја у минути је приморана на нулу.
/ * Да падне на нулу ако се возило зауставило * / иф (миллис () - дтиме> 500) // није пронађен ниједан прекид у раду за 500мс { рпм = в = 0; // направимо број окретаја у минути и брзину као нулту вредност дтиме = милис (); }
Логика иза мерења пута пређеног точком
Већ знамо да ће Ардуино осетити 40 прекида када точак изврши једно потпуно окретање. Дакле, за сваку ротацију точка је очигледно да је пут који је точак прешао једнак обиму точка. Пошто већ знамо радијус точка, лако можемо израчунати пређену удаљеност користећи доњу формулу
Растојање = 2πр * број ротација растојање = (2 * 3,141 * радијус_котача) * (лефт_интр / 40)
Где се обим точка израчунава помоћу формуле 2πр, а затим се помножи са бројем ротација које је точак извршио.
Логика иза мерења угла бота
Постоји много начина за одређивање анђела робота. За одређивање ових вредности обично се користе акцелерометри и жироскопи. Али још један јефтин приступ је употреба сензора Х206 на оба точка. На овај начин бисмо знали колико окрета је сваки точак направио. Доња слика илуструје како се израчунава угао.
Када се робот иницијализује, угао којим је окренут сматра се 0 °. Одатле се окреће лево, угао се увећава у негативном, а ако се окреће удесно анђео се увећава у позитивном. Да бисмо разумели, размотримо опсег од -90 до +90 као што је приказано на слици. У таквом распореду, будући да су оба точка истог пречника, ако било који од точкова изврши потпуну ротацију бота који окрећемо под углом од 90 °.
На пример, ако леви точак направи једну потпуну ротацију (80 прекида), тада ће се бот окренути за 90 ° улево, а слично ако десни точак изврши једну потпуну ротацију (80 прекида), тада ће се бот окренути за -90 ° удесно. Сада знамо да ако Ардуино открије 80 прекида на једном точку, тада се бот окренуо за 90 ° и на основу ког точка можемо да утврдимо да ли се бот окренуо позитивно (десно) или негативно (лево). Тако се леви и десни угао могу израчунати помоћу доњих формула
инт англе_лефт = (лефт_интр% 360) * (90/80); инт англе_ригхт = (ригхт_интр% 360) * (90/80);
Где је 90 покривени угао при прекиду од 80. Добијена вредност се помножи бројем прекида. Такође смо користили модул од 360 тако да резултујућа вредност никада не прелази 36. Једном када израчунамо и леви и десни угао, ефективни угао под којим је окренут бот може се једноставно добити одузимањем левог угла од правог угла.
англе = англе_ригхт - англе_лефт;
Ардуино Робот Цоде
Комплетни Ардуино код за овог робота за мерење брзине и угла можете пронаћи на крају ове странице. Циљ програма је израчунати брзину, удаљеност и угао бота користећи горњу логику и приказати га на ЛЦД екрану. Поред тога, требало би да пружи могућност управљања ботом помоћу џојстика.
Програм започињемо дефинирањем дигиталних И / О пинова за два мотора. Имајте на уму да такође морамо да контролишемо брзину мотора и стога морамо да користимо ПВМ пинове на Ардуину за контролу мотора. Овде смо користили пин 8,9,10 и 11.
#дефине ЛМ_пос 9 // лефт мотор #дефине ЛМ_нег 8 // лефт мотор #дефине РМ_пос 10 // ригхт мотор #дефине РМ_нег 11 // ригхт мотор #дефине јоиКс А2 #дефине јоиИ А3
Да бисмо измерили пређену брзину и удаљеност, морамо знати радијус точка, измерити вредност и унети је у метре као што је приказано доле. За мог бота радијус је био 0,033 метра, али за вас се може разликовати на основу вашег бота.
плутајући радијус_котача = 0,033; // Измерите радијус свог точка и унесите га овде у цм
Унутар подешавање функција, ми иницијализирати све вредности да буде нула, а затим приказати уводног текста на ЛЦД. Такође смо иницијализовали серијски монитор у сврху отклањања грешака. Затим смо споменули да су сензори брзине Х206 повезани на пин 2 и 3 као спољни прекиди. Тада се детектује прекид, ИСР функција Лефт_ИСР и Ригхт_ИСР ће се извршавати у складу с тим.
воид сетуп () { ротација = рпм = певтиме = 0; // иницијализујемо све променљиве на нулу Сериал.бегин (9600); лцд.бегин (16, 2); // Иницирај 16 * 2 ЛЦД лцд.принт ("Бот Монитор"); // Увод у линију поруке 1 лцд.сетЦурсор (0, 1); лцд.принт ("- ЦирцуитДигест"); // Увод у поруци реда за одлагање 2 (2000); лцд.цлеар (); лцд.принт ("Лт: Рт:"); лцд.сетЦурсор (0, 1); лцд.принт ("С: Д: А:"); пинМоде (ЛМ_пос, ИЗЛАЗ); пинМоде (ЛМ_нег, ИЗЛАЗ); пинМоде (РМ_пос, ИЗЛАЗ); пинМоде (РМ_нег, ОУТПУТ); дигиталВрите (ЛМ_нег, ЛОВ); дигиталВрите (РМ_нег, ЛОВ); аттацхИнтеррупт (дигиталПинТоИнтеррупт (2), Лефт_ИСР, ЦХАНГЕ); // Лефт_ИСР се позива када се активира сензор леви точак аттацхИнтеррупт (дигиталПинТоИнтеррупт (3), Ригхт_ИСР, ПРОМЕНИ); // Ригхт_ИСР се позива када се активира у праву сензор точак }
Унутар рутине Лефт_ИСР, једноставно повећавамо променљиву која се зове лефт_интр и која ће се касније користити за мерење угла бота. Унутар Ригхт_ИСР радимо исту ствар, али онда додатно израчунавамо и брзину овде. Ротација променљиве се повећава за сваки прекид, а затим се горња логика користи за израчунавање брзине.
воид Лефт_ИСР () { лефт_интр ++; кашњење (10); } воид Ригхт_ИСР () { ригхт_интр ++; кашњење (10); ротација ++; дтиме = милис (); иф (ротација> = 40) { тиметакен = милис () - певтиме; // време снимљено у милисек / мин = (1000 / примљено) * 60; // формуле за израчунавање о / мин певтиме = милис (); ротација = 0; } }
Унутар главне функције бесконачне петље надгледамо вредности Кс и И помоћу џојстика. На основу вредности ако се помера џојстик, ми у складу са тим контролишемо бота. Брзина бота зависи од тога колико је притиснут џојстик.
инт кВалуе = аналогРеад (јоиКс); инт иВалуе = аналогРеад (јоиИ); инт убрзање = мапа (кВалуе, 500, 0, 0, 200); иф (кВалуе <500) { аналогВрите (ЛМ_пос, убрзање); аналогВрите (РМ_пос, убрзање); } елсе { аналогВрите (ЛМ_пос, 0); аналогВрите (РМ_пос, 0); } иф (иВалуе> 550) аналогВрите (РМ_пос, 80); иф (иВалуе <500) аналогВрите (ЛМ_пос, 100);
Ово ће помоћи кориснику да помери бота и провери да ли су добијене вредности онакве какве се очекују. Коначно, можемо израчунати брзину, удаљеност и угао бота користећи горњу логику и приказати га на ЛЦД-у користећи доњи код.
в = радијус_котача * о / мин * 0.104; //0.033 је радијус точка у метрској удаљености = (2 * 3.141 * радијус_котача) * (лефт_интр / 40); инт англе_лефт = (лефт_интр% 360) * (90/80); инт англе_ригхт = (ригхт_интр% 360) * (90/80); англе = англе_ригхт - англе_лефт; лцд.сетЦурсор (3, 0); лцд.принт (""); лцд.сетЦурсор (3, 0); лцд.принт (лефт_интр); лцд.сетЦурсор (11, 0); лцд.принт (""); лцд.сетЦурсор (11, 0); лцд.принт (ригхт_интр); лцд.сетЦурсор (2, 1); лцд.принт (""); лцд.сетЦурсор (2, 1); лцд.принт (в); лцд.сетЦурсор (9, 1); лцд.принт (""); лцд.сетЦурсор (9, 1); лцд.принт (удаљеност); лцд.сетЦурсор (13, 1); лцд.принт (""); лцд.сетЦурсор (13, 1); лцд.принт (угао);
Тестирање робота Ардуино за мерење удаљености, брзине и угла
Када је хардвер спреман, отпремите код у свој Ардуино и помоћу џојстика преместите бота. брзина бота, удаљеност коју пређе и угао биће приказани на ЛЦД-у као што је приказано доле.
На ЛЦД-у појам Лт и Рт представља бројање прекида лијево, односно прекид десног прекида. Можете пронаћи ове вредности како се повећавају за сваку празнину коју детектује сензор. Теме С означавају брзину бота у м / сек, а израз Д означава удаљеност пређену у метрима. Угао бота је приказан на крају где је 0 ° за равно, а негативно за ротацију у смеру кретања казаљке на сату и позитивно за ротацију у смеру казаљке на сату.
Такође можете погледати видео на крају ове странице да бисте разумели како бот ради. Надам се да сте разумели пројекат и уживали сте у његовој изради. Ако имате било каквих недоумица, оставите их у одељку за коментаре и ја ћу се потрудити да вам одговорим на најбољи могући начин. Форуме такође можете користити за брзу техничку помоћ.