Мазмұны:

Arduino көмегімен қарапайым және ақылды роботтық қол !!!: 5 қадам (суреттермен)
Arduino көмегімен қарапайым және ақылды роботтық қол !!!: 5 қадам (суреттермен)

Бейне: Arduino көмегімен қарапайым және ақылды роботтық қол !!!: 5 қадам (суреттермен)

Бейне: Arduino көмегімен қарапайым және ақылды роботтық қол !!!: 5 қадам (суреттермен)
Бейне: Вебинар №2. Andy Ruina про координацию роботов и технологии движения. Beyond Robotics 2024, Қараша
Anonim
Image
Image
Сізге қажет заттар
Сізге қажет заттар

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

Ендеше бастайық ….

1-қадам: Сізге қажет нәрселер:-

Сізге қажет заттар
Сізге қажет заттар
Сізге қажет заттар
Сізге қажет заттар

Міне, сізге қажет заттардың тізімі:-

1. Серво қозғалтқыштары x 5 АҚШ үшін сілтеме:- https://amzn.to/2OxbSH7Link for Europe:-

2. Потенциометрлер x 5 (мен 100k қолдандым.) АҚШ үшін сілтеме:- https://amzn.to/2ROjhDMLink for Europe:-

3. Arduino UNO. (Сіз Arduino Nano-ды да пайдалана аласыз) АҚШ үшін сілтеме:- https://amzn.to/2DBbENWLink for Europe:-

4. Нан тақтасы. (Мен бұл жинақты ұсынамын) АҚШ үшін сілтеме:- https://amzn.to/2Dy86w4Link for Europe:-

5. Батарея. (міндетті емес, мен 5 вольтты адаптерді қолданамын)

6. Картон/ағаш/күн тақтасы/акрил қол жетімді немесе оңай табылған.

Сонымен қатар сізге Arduino IDE орнатылуы қажет.

2-қадам: қолды жасау:-

Қол жасау
Қол жасау
Қол жасау
Қол жасау

Мұнда мен қолды жасау үшін көпіршікті таяқшаларды қолдандым. Сіз қол жетімді кез келген материалды пайдалана аласыз. Қолды жақсарту үшін сіз әртүрлі механикалық конструкцияларды қолдана аласыз. менің дизайным тұрақты емес.

Мен жай ғана екі жақты таспаны қолданып, серваларды Popsicle таяқшасына бекітіп, оларды бұрандалармен бекітемін.

Мастерлік қол үшін мен потенциометрлерді таяқшаларға жапсырып, қол жасадым.

Суреттерге жүгіну сізге жақсы идея береді.

Мен бәрін A4 өлшемді кенеп тақтасына негіз ретінде қолдандым.

3-қадам: Байланыс орнату:-

Байланыс орнату
Байланыс орнату
Байланыс орнату
Байланыс орнату
Байланыс орнату
Байланыс орнату

Бұл қадамда біз барлық қажетті қосылымдарды жасаймыз, жоғарыдағы суреттерді қараңыз.

  • Алдымен барлық сервоприводтарды қуат көзіне параллель жалғаңыз (Қызыл сым +және қара немесе қоңыр сым - Gnd)
  • Содан кейін сигнал сымдарын, яғни сары немесе қызғылт сары сымды arduino PWM түйреуішіне қосыңыз.
  • Енді потенциометрлерді +5v және Gnd arduino -ға параллель қосыңыз.
  • Ортаңғы терминалды ardunio аналогтық істігіне қосыңыз.

Мұнда цифрлық түйреуіштер 3, 5, 6, 9 және 10 сервтерді басқару үшін қолданылады

А0 - А4 аналогтық түйреуіштер потенциометрлерден кіріс үшін қолданылады.

3 -істікке қосылған серво A0 қосылған потенциометрмен басқарылатын болады

5 түйреуішке қосылған сервис A1 кастрюльмен басқарылады және т.

Ескертпе:- Серверлерге arduino қосылмаса да, сервистің Gnd-ін arduino-ға қосқаныңызға көз жеткізіңіз, әйтпесе қол жұмыс істемейді.

4-қадам: кодтау:-

Кодтау
Кодтау

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

Код:- (жүктелетін файл төменде қоса берілген.)

Алдымен біз барлық қажетті айнымалыларды бүкіл әлемде жариялаймыз, сондықтан оларды бағдарлама бойы қолдана аламыз. Бұл үшін арнайы түсініктеме қажет емес

#қосу

// Servo нысандары Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // потенциометр объектілері int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Servo Position int Servo_0_Pos сақтау үшін айнымалы; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Алдыңғы позиция мәндерін сақтау үшін айнымалы int Prev_0_Pos; int Prev_1_Pos; int Prev_2_Pos; int Prev_3_Pos; int Prev_4_Pos; // Ағымдағы позиция мәндерін сақтау үшін айнымалы int Current_0_Pos; int Current_1_Pos; int Current_2_Pos; int Current_3_Pos; int Current_4_Pos; int Servo_Position; // бұрышын сақтайды int Servo_Number; // Сақтау серверлерінің бірде -бір қоймасы сақталмайды [600]; // Деректерді сақтауға арналған массив (Массивтің көлемін ұлғайту жадты көбірек алады) int Index = 0; // Массив индексі 0 -ші позициядан басталады char data = 0; // тізбекті енгізуден деректерді сақтауға арналған айнымалы.

Енді біз орнату функциясын жазамыз, онда біз түйреуіштер мен олардың функцияларын орнатамыз. Бұл бірінші болып орындалатын негізгі функция

жарамсыз орнату ()

{Serial.begin (9600); // arduino мен IDE арасындағы сериялық байланыс үшін. // Серво объектілері PWM түйреуіштеріне бекітілген. Servo_0.attach (3); Servo_1.attach (5); Servo_2.tachach (6); Servo_3.attach (9); Servo_4.attach (10); // Серверлер инициализация кезінде 100 позициясына орнатылады. Servo_0.write (100); Servo_1.write (100); Қызмет көрсету_2.жазу (100); Servo_3.write (100); Servo_4.write (100); Serial.println («Жазу үшін 'R', ойнату үшін 'P' басыңыз); }

Енді біз аналогты енгізу түйреуіштері арқылы потенциометрлердің мәндерін оқып, оларды серверлерді басқару үшін картаға түсіруіміз керек, ол үшін біз функцияны анықтаймыз және оны Map_Pot () деп атаймыз;, сіз оны пайдаланушы анықтайтын функция деп атауға болады

жарамсыз Map_Pot ()

{ / * Серво 180 градусқа бұрылады, бірақ оны шектеуде қолдану жақсы идея емес, себебі бұл сервопроводтарды үнемі мазалайды, сондықтан біз серво арасында ауысуды шектейміз: 1-179 * / Pot_0 = analogRead (A0); // Кәстрөлдегі кірісті оқыңыз және оны Variable Pot_0 сақтаңыз. Servo_0_Pos = карта (Pot_0, 0, 1023, 1, 179); // Servo_0.write (Servo_0_Pos) 0 -ден 1023 -ке дейінгі мән бойынша серверлерді салыстырыңыз; // Сервоны сол күйге жылжытыңыз. Pot_1 = analogRead (A1); Servo_1_Pos = карта (Pot_1, 0, 1023, 1, 179); Servo_1.write (Servo_1_Pos); Pot_2 = analogRead (A2); Servo_2_Pos = карта (Pot_2, 0, 1023, 1, 179); Servo_2.write (Servo_2_Pos); Pot_3 = analogRead (A3); Servo_3_Pos = карта (Pot_3, 0, 1023, 1, 179); Servo_3.write (Servo_3_Pos); Pot_4 = analogRead (A4); Servo_4_Pos = карта (Pot_4, 0, 1023, 1, 179); Servo_4.write (Servo_4_Pos); }

Енді біз цикл функциясын жазамыз:

бос цикл ()

{Map_Pot (); // (Serial.available ()> 0) {data = Serial.read (); if (data == 'R') Serial.println («Жазуды жылжытады …»); if (data == 'P') Serial.println («Жазылған қозғалыстарды ойнату…»); } if (data == 'R') // Егер 'R' енгізілсе, жазуды бастаңыз. {// Мәндерді айнымалыда сақтаңыз Prev_0_Pos = Servo_0_Pos; Prev_1_Pos = Servo_1_Pos; Prev_2_Pos = Servo_2_Pos; Prev_3_Pos = Servo_3_Pos; Prev_4_Pos = Servo_4_Pos; Map_Pot (); // Карта функциясы салыстыру үшін еске салынды, егер (abs (Prev_0_Pos == Servo_0_Pos)) // абсолютті мән {Servo_0.write (Servo_0_Pos) салыстыру арқылы алынады; // Егер мәндер сәйкес келетін серво қайта орналасса, егер (Current_0_Pos! = Servo_0_Pos) // Егер мәндер сәйкес келмесе {Storage [Index] = Servo_0_Pos + 0; // Индекс ++ массивіне мән қосылады; // 1} Current_0_Pos = Servo_0_Pos; } /* Сол сияқты барлық серверлер үшін мәнді салыстыру жүргізіледі, дифференциалды мән ретінде әрбір енгізу үшін +100 қосылады. */ if (abs (Prev_1_Pos == Servo_1_Pos)) {Servo_1.write (Servo_1_Pos); if (Current_1_Pos! = Servo_1_Pos) {Storage [Index] = Servo_1_Pos + 100; Индекс ++; } Current_1_Pos = Servo_1_Pos; } if (abs (Prev_2_Pos == Servo_2_Pos)) {Servo_2.write (Servo_2_Pos); if (Current_2_Pos! = Servo_2_Pos) {Storage [Index] = Servo_2_Pos + 200; Индекс ++; } Current_2_Pos = Servo_2_Pos; } if (abs (Prev_3_Pos == Servo_3_Pos)) {Servo_3.write (Servo_3_Pos); if (Current_3_Pos! = Servo_3_Pos) {Сақтау [Индекс] = Servo_3_Pos + 300; Индекс ++; } Current_3_Pos = Servo_3_Pos; } if (abs (Prev_4_Pos == Servo_4_Pos)) {Servo_4.write (Servo_4_Pos); if (Current_4_Pos! = Servo_4_Pos) {Сақтау [Индекс] = Servo_4_Pos + 400; Индекс ++; } Current_4_Pos = Servo_4_Pos; } / * Мәндер сериялық мониторда басылады, '\ t' кестелік форматтағы мәндерді көрсетуге арналған * / Serial.print (Servo_0_Pos); Serial.print («\ t»); Serial.print (Servo_1_Pos); Serial.print («\ t»); Serial.print (Servo_2_Pos); Serial.print («\ t»); Serial.print (Servo_3_Pos); Serial.print («\ t»); Serial.println (Servo_4_Pos); Serial.print («Индекс =»); Serial.println (Индекс); кешіктіру (50); } if (data == 'P') // IF 'P' енгізілсе, жазылған қозғалыстарды ойнатуды бастаңыз. {for (int i = 0; i <Index; i ++) // {Servo_Number = Storage /100 циклы үшін массивті қолданыңыз; // Servo_Position = Сақтау % 100 серво санын табады; // Серво қосқышының орнын табады (Servo_Number) {0 жағдай: Servo_0.write (Servo_Position); үзіліс; 1 -жағдай: Servo_1.write (Servo_Position); үзіліс; 2 -жағдай: Servo_2.write (Servo_Position); үзіліс; 3 -жағдай: Servo_3.write (Servo_Position); үзіліс; 4 -жағдай: Servo_4.write (Servo_Position); үзіліс; } кешіктіру (50); }}}

Код дайын болғаннан кейін, оны arduino тақтасына жүктеңіз

Ақылды қол жұмыс жасауға дайын. Функция әлі Stoerpeak жасаған сияқты тегіс емес.

Егер сіз кодты жақсартсаңыз немесе маған ұсыныстарыңыз болса, түсініктеме бөлімінде маған хабарлаңыз.

Осымен, тестілеуге көшейік ….

5-қадам: Тестілеу:-

Кодты тақтаға сәтті жүктегеннен кейін «Сериялық мониторды» ашыңыз, оны Құралдар опциясынан таба аласыз. Сериялық монитор басталған кезде arduino қалпына келтіріледі. Енді сіз робот қолын басты қолмен басқара аласыз. Бірақ ештеңе жазылмайды.

Жазуды бастау үшін мониторға 'R' енгізіңіз, енді сіз жазғыңыз келетін қимылдарды орындай аласыз.

Қозғалыстар аяқталғаннан кейін сіз жазылған қозғалыстарды ойнау үшін 'P' енгізуіңіз керек. Тақта тақтасы қалпына келтірілмегенше, серво қозғалыстарды жалғастырады.

Ұсынылған: