Arduino-да алғашқы роботты жасау тәжірибесі («аңшы» роботы)

Сәлем

Бұл мақалада мен Arduino көмегімен бірінші роботымды құрастыру процесін сипаттағым келеді. Материал мен сияқты «өздігінен жүретін арбаны» жасағысы келетін басқа да жаңадан бастаушыларға пайдалы болады. Мақала әртүрлі нюанстар бойынша менің толықтыруларыммен жұмыс істеу кезеңдерінің сипаттамасы болып табылады. Мақаланың соңында соңғы кодқа сілтеме (ең идеалды емес) берілген.

Arduino-да алғашқы роботты жасау тәжірибесі («аңшы» роботы)

Мүмкіндігінше ұлымды (8 жаста) қатысуға тарттым. Онымен не жұмыс істеді, не істемеді - мен мақаланың бір бөлігін осыған арнадым, мүмкін бұл біреуге пайдалы болар.

Роботтың жалпы сипаттамасы

Алдымен, роботтың өзі туралы бірнеше сөз (идея). Мен басында стандартты нәрсе құрастырғым келмеді. Сонымен қатар, компоненттер жиынтығы жеткілікті стандартты болды - шасси, қозғалтқыштар, ультрадыбыстық сенсор, желілік сенсор, жарық диодтары, твиттер. Бастапқыда оның аумағын күзететін осы «сорпа жиынтығынан» робот ойлап табылды. Ол шеңбер сызығын кесіп өткен құқық бұзушыға қарай жүреді, содан кейін ортаға оралады. Дегенмен, бұл нұсқа әрқашан шеңберде қалу үшін сызылған сызықты және қосымша математиканы қажет етті.

Сондықтан біраз ойланып, мен идеяны біршама өзгертіп, «аңшы» роботын жасауды шештім. Бастапқыда ол жақын маңдағы нысананы (адамды) таңдай отырып, өз осінен айналады. Егер «жем» анықталса, «аңшы» жыпылықтайтын шамдар мен сиренаны қосып, оған қарай жүре бастайды. Адам алыстағанда/қашып кеткенде, робот жаңа нысананы таңдап, оны қуады және т.б. Мұндай роботқа шектеулі шеңбер қажет емес және ол ашық жерлерде жұмыс істей алады.

Көріп отырғаныңыздай, бұл қуып жету ойынына ұқсайды. Соңында робот жеткілікті жылдам болмаса да, айналасындағы адамдармен шынайы қарым-қатынас жасайды. Әсіресе, балаларға ұнайды (кейде, соған қарамастан, таптап тастағалы тұрған сияқты, жүрегі дір ете қалады...). Менің ойымша, бұл техникалық дизайнды танымал ету үшін жақсы шешім.

Робот құрылымы

Сонымен, біз идеяны шештік, енді жалғастырайық макет. Элементтердің тізімі роботтың не істей алуы керектігінен қалыптасады. Мұнда бәрі анық, сондықтан бірден нөмірлеуге назар аударайық:

Arduino-да алғашқы роботты жасау тәжірибесі («аңшы» роботы)

Роботтың «миы» arduino uno тақтасы (1); Қытайдан тапсырыс берілген жиынтықта болды. Біздің мақсаттарымыз үшін бұл жеткілікті (біз пайдаланылған түйреуіштердің санына назар аударамыз). Сол жиынтықтан біз дайын шассиді (2) алдық, оған екі жетек дөңгелегі (3) және бір артқы (еркін айналатын) (4) бекітілген. Жинақ сонымен қатар дайын батарея бөлімін (5) қамтиды. Роботтың алдында ультрадыбыстық сенсор (HC-SR04) (6), артқы жағында мотор драйвері (L298N) (7), ортасында жарық диодты жарқыл (8) және аздап жағында твиттер (9) бар.

Орналасу кезеңінде біз мыналарды қарастырамыз:

- бәрі сәйкес болуы үшін
- теңгерімді болу
- рационалды түрде орналастыру

Қытайлық әріптестеріміз мұны біз үшін ішінара жасады. Осылайша, ауыр батарея бөлімі орталықта, ал жетек дөңгелектері шамамен оның астында орналасқан. Барлық басқа тақталар жеңіл және шеткі жағына орналастырылуы мүмкін.

Сырлау:

  1. Жинақтағы шассиде көптеген зауыттық тесіктер бар, бірақ мен олардың логикасы неде екенін әлі түсінбедім. Қозғалтқыштар мен аккумуляторлар жинағы проблемаларсыз бекітілді, содан кейін «реттеу» осы немесе басқа тақтаны бекіту үшін жаңа тесіктерді бұрғылаумен басталды.
  2. Сақтау орындарындағы жезден жасалған сөрелер мен басқа бекіткіштер үлкен көмек болды (кейде біз оларды шығаруға тура келді).
  3. Мен әр тақтадан шиналарды қысқыштар арқылы өткіздім (қайтадан мен оларды қоймадан таптым). Өте ыңғайлы, барлық сымдар жақсы орналасқан және салбырап қалмайды.

Жеке блоктар

Енді мен өтемін блоктар және мен сізге әрқайсысы туралы жеке айтып беремін.

батарея бөлімі

Роботта жақсы қуат көзі болуы керек екені анық. Опциялар әртүрлі болуы мүмкін, мен 4 AA батареясы бар опцияны таңдадым. Барлығы шамамен 5 В береді және бұл кернеу arduino тақтасының 5 В істікшесіне тікелей қолданылуы мүмкін (тұрақтандырғышты айналып өту).

Әрине, менде сақтық болды, бірақ бұл шешім өте тиімді.

Қуат барлық жерде қажет болғандықтан, ыңғайлы болу үшін мен роботтың ортасында екі қосқыш жасадым: біреуі жерді «таратады» (оң жақта), екіншісі - 5 В (сол жақта).

Arduino-да алғашқы роботты жасау тәжірибесі («аңшы» роботы)

Моторлар мен жүргізуші

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

Arduino-да алғашқы роботты жасау тәжірибесі («аңшы» роботы)

Қозғалтқыштарды басқару үшін, мен жоғарыда жазғанымдай, L298N драйвері қолданылады. Құжаттамаға сәйкес, оның әрбір қозғалтқышы үшін үш түйреуіш бар: біреуі жылдамдықты өзгертуге арналған және айналу бағытына арналған жұп түйреуіштер. Бұл жерде бір маңызды жайт бар. Егер қоректендіру кернеуі 5 В болса, жылдамдықты реттегіш жай жұмыс істемейді! Яғни, ол мүлде бұрылмайды, немесе ол максимумға айналады. Бір-екі кешті «өлтіруге» себепкер болған қасиетім осы. Ақырында, мен форумдардың бірінде бір жерде ескерту таптым.

Жалпы айтқанда, роботты айналдырған кезде маған төмен айналу жылдамдығы қажет болды - ол кеңістікті сканерлеуге уақыт алды. Бірақ, бұл идеядан ештеңе шықпағандықтан, мен мұны басқаша істеуге тура келді: кішкене бұрылыс - тоқтау - бұрылыс - тоқтау және т.б. Тағы да, соншалықты талғампаз емес, бірақ жұмысқа жарамды.

Әр қуудан кейін робот жаңа бұрылыс үшін (сағат тілімен немесе сағат тіліне қарсы) кездейсоқ бағытты таңдайтынын да осында қосамын.

Ультрадыбыстық сенсор

Arduino-да алғашқы роботты жасау тәжірибесі («аңшы» роботы)

Біз компромисстік шешім іздеуге тура келген аппараттық құралдың тағы бір бөлігі. Ультрадыбыстық сенсор нақты кедергілерде тұрақсыз сандарды шығарады. Шын мәнінде, бұл күтілген болатын. Ең дұрысы, ол тегіс, біркелкі және перпендикуляр беттері бар жарыстарда бір жерде жұмыс істейді, бірақ егер біреудің аяғы оның алдында «жыпылықтаса», қосымша өңдеуді енгізу қажет.

Мен осындай өңдеуді орнаттым медиандық сүзгі үш санау үшін. Нақты балаларға арналған сынақтардың негізінде (тест кезінде балалар зардап шекпеді!), бұл деректерді қалыпқа келтіру үшін жеткілікті болып шықты. Мұндағы физика қарапайым: бізде шағылысқан сигналдар бар қажетті объектілер (қажетті қашықтықты бере отырып) және одан да алыстардан шағылысады, мысалы, қабырғалар. Соңғысы 45, 46 пішініндегі өлшемдердегі кездейсоқ шығарындылар, 230, 46, 46, 45, 45, 310, 46... Дәл осылар медианалық сүзгіні кесіп тастайды.

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

Жарқыл мен сирена

Мүмкін, жоғарыда аталғандардың ең қарапайым элементтері. Оларды жоғарыдағы фотосуреттерден көруге болады. Мұнда аппараттық құрал туралы жазатын ештеңе жоқ, сондықтан енді оған көшейік код.

Бақылау бағдарламасы

Мен кодты егжей-тегжейлі сипаттаудың мәнін көрмеймін, ол кімге керек - сілтеме мақаланың соңында, барлығын оқуға болады. Бірақ жалпы құрылымды түсіндірсеңіз жақсы болар еді.

Біз түсінуіміз керек бірінші нәрсе - бұл робот нақты уақыттағы құрылғы. Дәлірек айтқанда, есімде, өйткені мен бұрын да, қазір де электроникада жұмыс істеймін. Сонымен, біз қиындықты бірден ұмытамыз кешіктіру (), олар мысал эскиздерінде қолдануды ұнатады және бағдарламаны белгілі бір уақыт аралығында жай ғана «қатырып тастайды». Оның орнына, тәжірибелі адамдар кеңес бергендей, біз әр блок үшін таймерлерді енгіземіз. Қажетті аралық өтті - әрекет орындалды (жарық диодтың жарықтылығын арттыру, қозғалтқышты қосу және т.б.).

Таймерлерді өзара қосуға болады. Мысалы, твиттер жарқылмен синхронды түрде жұмыс істейді. Бұл бағдарламаны біршама жеңілдетеді.

Әрине, біз бәрін бөлек функцияларға бөлеміз (жарықтандыру шамдары, дыбыс, бұрылу, алға жылжу және т.б.). Егер сіз мұны жасамасаңыз, онда сіз қайдан және қайдан келетінін анықтай алмайсыз.

Педагогиканың нюанстары

Мен кешке бос уақытымда жоғарыда сипатталғанның бәрін жасадым. Мен роботта үш аптаға жуық уақыт өткіздім. Бұл жерде аяқталуы мүмкін еді, бірақ мен сізге баламен жұмыс істеу туралы айтып беруге уәде бердім. Бұл жаста не істеуге болады?

Нұсқауларға сәйкес жұмыс жасаңыз

Алдымен біз әрбір бөлшекті бөлек тексердік - жарықдиодты шамдар, твиттер, қозғалтқыштар, сенсорлар және т.б. Дайын мысалдардың үлкен саны бар - кейбіреулері әзірлеу ортасында, басқаларын Интернетте табуға болады. Бұл мені әрине қуантады. Біз кодты аламыз, бөлікті қосамыз, оның жұмыс істейтініне көз жеткіземіз, содан кейін оны тапсырмамызға сәйкес өзгертуге кірісеміз. Бала сызба бойынша және кейбір менің бақылауыммен байланыстарды жасайды. Бұл жақсы. Сондай-ақ нұсқауларға сәйкес қатаң түрде жұмыс істей білу керек.

Жұмыс тәртібі («ерекшеден жалпыға»)

Бұл қиын нүкте. Үлкен жоба («робот жасау») шағын тапсырмалардан («датчикті қосу», «қозғалтқыштарды қосу»...) тұратынын және олар өз кезегінде одан да кішірек қадамдардан тұратынын («роботты табу») екенін білу керек. бағдарламасы,” “тақтаны қосу.”, “микробағдарламаны жүктеп алу”...). Төменгі деңгейдегі азды-көпті түсінікті тапсырмаларды орындау арқылы біз орта деңгейдің тапсырмаларын «жабамыз» және олардан жалпы нәтиже қалыптасады. Мен түсіндірдім, бірақ іске асыру жақын арада болмайды деп ойлаймын. Бір жерде, мүмкін, жасөспірім кезінде.

Монтаждау

Бұрғылау, жіптер, бұрандалар, гайкалар, дәнекерлеу және канифольдің иісі - онсыз біз қайда болар едік? Бала «Дәнекермен жұмыс істеу» негізгі дағдысын алды - ол бірнеше қосылымдарды дәнекерлей алды (мен аздап көмектестім, мен оны жасырмаймын). Қауіпсіздік туралы түсініктемені ұмытпаңыз.

Компьютермен жұмыс

Мен роботқа арналған бағдарламаны жаздым, бірақ мен әлі де жақсы нәтижелерге қол жеткіздім.

Бірінші: ағылшын. Олар оны мектепте жаңа бастаған болатын, сондықтан біз пишалка, мигалка, яркост және басқа транслитерациялардың не екенін анықтауға тырыстық. Кем дегенде, біз мұны түсіндік. Біз бұл деңгейге әлі жетпегендіктен, мен әдейі ана ағылшын сөздерін қолданбадым.

Екіншіден: тиімді жұмыс. Біз жылдам пернелер тіркесімін және стандартты операцияларды қалай жылдам орындау керектігін үйреттік. Мерзімді түрде бағдарламаны жазып жатқанда балам екеуміз орындарымызды ауыстырдық, мен не істеу керектігін айттым (ауыстыру, іздеу, т.б.). Мен қайта-қайта қайталауға тура келді: «таңдау» түймесін екі рет басу», «Shift пернесін басып тұру», «Ctrl» және т.б. Мұнда оқу процесі жылдам емес, бірақ менің ойымша, дағдылар бірте-бірте «субкортексте» сақталады.

Жасырын мәтінЖоғарыда айтылғандар дерлік анық деп айта аласыз. Бірақ, шынымды айтсам, осы күзде бір мектепте 9-сыныпта информатикадан сабақ беруге мүмкіндік туды. Бұл сұмдық. Оқушылар Ctrl + Z, Ctrl + C және Ctrl + V, Shift пернесін басып тұрып мәтінді таңдау немесе сөзді екі рет басу және т.б. сияқты қарапайым нәрселерді білмейді. Бұл олардың информатиканы үшінші курста оқып жатқанына қарамастан... Өзіңіз қорытынды жасаңыз.

Үшінші: түртіп теру. Кодтағы түсініктемелерді теруді балаға сеніп тапсырдым (жаттығуына рұқсат етіңіз). Біз саусақтарымыз кілттердің орналасуын бірте-бірте есте сақтау үшін қолымызды дереу дұрыс орналастырдық.

Көріп отырғаныңыздай, біз әлі де жаңадан бастаймыз. Біз өз дағдыларымыз бен білімімізді шыңдай береміз, олар өмірде пайдалы болады.

Айтпақшы, болашақ туралы...

Бұдан әрі дамыту

Робот жасалды, қозғалады, жыпылықтайды және сигнал береді. Енді ше? Қол жеткізген жетістіктерімізбен шабыттана отырып, біз оны одан әрі жетілдіруді жоспарлап отырмыз. Қашықтан басқару пультін жасау идеясы бар - Айдың ровері сияқты. Қашықтан басқару пультінде отырып, мүлде басқа жерде жүріп келе жатқан роботтың қозғалысын басқару қызықты болар еді. Бірақ бұл басқа әңгіме болады...

Ал соңында, шын мәнінде, осы мақаланың кейіпкерлері (бейне басу арқылы):

Arduino-да алғашқы роботты жасау тәжірибесі («аңшы» роботы)

Назарларыңызға рахмет!

Код сілтемесі

Ақпарат көзі: www.habr.com

пікір қалдыру