Агуулгын хүснэгт:

Arduino ашиглан энгийн, ухаалаг робот гар !!!: 5 алхам (зурагтай)
Arduino ашиглан энгийн, ухаалаг робот гар !!!: 5 алхам (зурагтай)

Видео: Arduino ашиглан энгийн, ухаалаг робот гар !!!: 5 алхам (зурагтай)

Видео: Arduino ашиглан энгийн, ухаалаг робот гар !!!: 5 алхам (зурагтай)
Видео: 50 САМЫХ ИННОВАЦИОННЫХ ЛИЧНЫХ ТРАНСПОРТНЫХ СРЕДСТВ 2021–2022 гг. 2024, Оны зургадугаар сарын
Anonim
Image
Image
Танд хэрэгтэй зүйлс
Танд хэрэгтэй зүйлс

Энэхүү зааварчилгаанд би энгийн робот гар хийх болно. Үүнийг мастер гар ашиглан удирдах болно. Гар нь хөдөлгөөнийг санаж, дарааллаар тоглох болно. Энэхүү үзэл баримтлал нь шинэ зүйл биш юм. Санааг би "Stoerpeak -ийн мини робот гар" -аас олж авсан юм. Эцэст нь би нэгийг барьж байна, үүнийг энгийн, хямд байлгаж, та бүхэнтэй хуваалцах болно.

Тиймээс эхэлцгээе ….

Алхам 1: Танд хэрэгтэй зүйл:

Танд хэрэгтэй зүйлс
Танд хэрэгтэй зүйлс
Танд хэрэгтэй зүйлс
Танд хэрэгтэй зүйлс

Танд хэрэгтэй зүйлсийн жагсаалт энд байна:-

1. Servo мотор 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. Батерей. (заавал биш, би 5V адаптер ашиглаж байна)

6. Картон/Мод/Нарны хавтан/нийлэг, хэзээ ч бэлэн байгаа эсвэл олоход хялбар зүйл.

Мөн танд Arduino IDE суулгах шаардлагатай болно.

Алхам 2: Гар хийх:-

Гар хийх
Гар хийх
Гар хийх
Гар хийх

Энд би гар хийц хийхэд попсикулик мод ашигласан. Та өөрт байгаа бүх материалыг ашиглаж болно. Мөн та гараа илүү сайн болгохын тулд янз бүрийн механик загварыг туршиж үзэх боломжтой. миний дизайн тийм ч тогтвортой биш байна.

Би зүгээр л хоёр талт соронзон хальсны тусламжтайгаар servos -ийг Popsicle модонд наалдаж боолт ашиглан бэхлэв.

Мастер гарны хувьд би потенциометрийг попсикул мод руу нааж, гар хийв.

Зургуудыг үзвэл танд илүү сайн санаа өгөх болно.

Би бүх зүйлийг суурь болгон ашигладаг А4 хэмжээтэй даавуун самбар дээр суулгасан.

Алхам 3: Холболт хийх:-

Холболт хийх
Холболт хийх
Холболт хийх
Холболт хийх
Холболт хийх
Холболт хийх

Энэ алхамд бид шаардлагатай бүх холболтыг хийх болно, дээрх зургуудыг үзнэ үү.

  • Эхлээд бүх servo -ийг цахилгаан тэжээлтэй зэрэгцээ холбоно уу (Улаан утас +ба хар эсвэл хүрэн утас Gnd руу)
  • Дараа нь дохионы утас, өөрөөр хэлбэл шар эсвэл улбар шар утсыг arduino -ийн PWM зүү рүү холбоно уу.
  • Одоо потенциометрийг arduino -ийн +5v ба Gnd -тэй зэрэгцээ холбоно уу.
  • Дунд терминалыг ardunio -ийн аналог пинтэй холбоно уу.

Энд дижитал зүү 3, 5, 6, 9, 10 нь servo -ийг хянахад ашиглагддаг

Потенциометрээс оруулахад А0 -аас А4 аналог тээглүүрийг ашигладаг.

Зүү 3 -т холбогдсон servo -ийг A0 -д холбогдсон потенциометрээр хянана

5 -р зүүтэй холбогдсон servo -ийг A1 дээрх тогоор удирдана гэх мэт.

Тэмдэглэл:- Серво нь arduino-ээр тэжээгддэггүй ч гэсэн Gnd servo-г arduino-тэй холбох хэрэгтэй, эс тэгвээс гар ажиллахгүй болно.

Алхам 4: Кодлох:-

Кодлох
Кодлох

Энэ кодын логик нь маш энгийн бөгөөд потенциометрийн утгыг массивт хадгалдаг бөгөөд бүртгэлийг for давталт ашиглан дамжуулж, servos нь утгын дагуу алхамуудыг хийдэг. Та "Arduino потенциометрийн Servo Control & Memory" лавлахад ашигласан энэхүү гарын авлагыг үзэх боломжтой.

Код:- (Татаж авах боломжтой файлыг доор хавсаргасан болно.)

Эхлээд бид шаардлагатай бүх хувьсагчийг дэлхий даяар зарлах болно, ингэснээр тэдгээрийг програмын туршид ашиглах боломжтой болно. Энэ талаар тусгай тайлбар шаардлагагүй

#оруулах

// Servo объектууд Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Потенциометрийн объектууд Pot 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; // Хадгалах хэсэгт servo int хадгалалт байхгүй [600]; // Өгөгдөл хадгалах массив (массивын хэмжээг нэмэгдүүлэх нь илүү их санах ой зарцуулна) int Index = 0; // Массивын индекс 0 -р байрнаас эхэлнэ char өгөгдөл = 0; // цуваа оролтоос өгөгдөл хадгалах хувьсагч.

Одоо бид тээглүүр ба тэдгээрийн функцийг тохируулах тохиргооны функцийг бичих болно. Энэ бол хамгийн түрүүнд гүйцэтгэдэг гол үүрэг юм

хүчингүй тохиргоо ()

{Serial.begin (9600); // arduino болон IDE -ийн хоорондох цуваа холболтын хувьд. // Servo объектуудыг ХОУХ -ны зүү дээр хавсаргасан болно. Servo_0.attach (3); Servo_1. хавсаргах (5); Servo_2. хавсаргах (6); Servo_3. хавсаргах (9); Servo_4. хавсаргах (10); // Сервүүдийг эхлүүлэх үед 100 байрлалд тохируулна. Servo_0 бичих (100); Servo_1. бичих (100); Servo_2. бичих (100); Servo_3 бичих (100); Servo_4. бичих (100); Serial.println ( Бичлэг хийхийн тулд 'R', тоглуулахын тулд 'P' дарна уу)); }

Одоо бид аналог оролтын тээглүүр ашиглан потенциометрийн утгыг уншиж, сервосыг удирдахын тулд газрын зураг зурах ёстой бөгөөд үүний тулд бид функцийг тодорхойлж Map_Pot () гэж нэрлэнэ., та үүнийг хүссэн зүйлээрээ нэрлэж болно, энэ нь хэрэглэгчийн тодорхойлсон функц юм

хоосон Map_Pot ()

{ / * Серво нь 180 градус эргэдэг, гэхдээ үүнийг хязгаарлалтын дагуу ашиглах нь тийм ч сайн санаа биш юм, учир нь энэ нь servo-г тасралтгүй шуугиулдаг бөгөөд энэ нь бидний дурангийн хооронд шилжихийг хязгаарладаг: 1-179 * / Pot_0 = analogRead (A0); // Савнаас оруулсан оролтыг уншаад Variable Pot_0 -д хадгална уу. Servo_0_Pos = газрын зураг (Pot_0, 0, 1023, 1, 179); // Сервийг 0 -ээс 1023 хүртэлх утгын дагуу газрын зургийн газрын зураг дээр буулгах Servo_0.write (Servo_0_Pos); // Сервог тэр байрлал руу зөөнө үү. Pot_1 = analogRead (A1); Servo_1_Pos = газрын зураг (Pot_1, 0, 1023, 1, 179); Servo_1. бичих (Servo_1_Pos); Pot_2 = analogRead (A2); Servo_2_Pos = газрын зураг (Pot_2, 0, 1023, 1, 179); Servo_2. бичих (Servo_2_Pos); Pot_3 = analogRead (A3); Servo_3_Pos = газрын зураг (Pot_3, 0, 1023, 1, 179); Servo_3. бичих (Servo_3_Pos); Pot_4 = analogRead (A4); Servo_4_Pos = газрын зураг (Pot_4, 0, 1023, 1, 179); Servo_4. бичих (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) харьцуулж олж авна; // Хэрэв утгууд таарч байвал servo -ийн байршлыг өөрчилсөн тохиолдолд (Current_0_Pos! = Servo_0_Pos) // Хэрэв утгууд таарахгүй байвал {Storage [Index] = Servo_0_Pos + 0; // Индекс ++ массивт утга нэмсэн; // Индексийн утгыг 1} Current_0_Pos = Servo_0_Pos; } /* Үүний нэгэн адил утгын харьцуулалтыг бүх servo -д хийдэг бөгөөд оруулга бүрт +100 -ийг дифференциал утга болгон нэмдэг. */ if (abs (Prev_1_Pos == Servo_1_Pos)) {Servo_1.write (Servo_1_Pos); if (Current_1_Pos! = Servo_1_Pos) {Хадгалалт [Индекс] = Servo_1_Pos + 100; Индекс ++; } Current_1_Pos = Servo_1_Pos; } if (abs (Prev_2_Pos == Servo_2_Pos)) {Servo_2. бичих (Servo_2_Pos); if (Current_2_Pos! = Servo_2_Pos) {Хадгалалт [Индекс] = 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 = Хадгалалт /100; // Servo_Position = Storage % 100 servo -ийн тоог олдог; // servo switch (Servo_Number) байрлалыг олно {тохиолдолд 0: Servo_0.write (Servo_Position); завсарлага; тохиолдол 1: Servo_1. бичих (Servo_Position); завсарлага; тохиолдол 2: Servo_2. бичих (Servo_Position); завсарлага; тохиолдол 3: Servo_3.write (Servo_Position); завсарлага; тохиолдол 4: Servo_4.write (Servo_Position); завсарлага; } саатал (50); }}}

Код бэлэн болмогц одоо үүнийг arduino самбар дээр байршуулна уу

Ухаалаг гар ажиллахад бэлэн боллоо. Функц нь Stoerpeak -ийн хийсэн функц шиг жигд биш байна.

Хэрэв та кодыг сайжруулж эсвэл надад ямар нэгэн санал байвал надад коммент хэсэгт мэдэгдээрэй.

Үүнийг хэлээд туршилтаа үргэлжлүүлье.

Алхам 5: Туршилт:-

Кодыг самбар дээр амжилттай байршуулсны дараа 'Цуваа монитор' -г нээгээд үүнийг Tools сонголтоос олж болно. Цуваа дэлгэц эхлэхэд arduino дахин тохируулагдах болно. Одоо та мастер гар ашиглан робот гарыг удирдах боломжтой. Гэхдээ юу ч бичээгүй байна.

Бичлэг хийж эхлэхийн тулд дэлгэцэнд 'R' оруулна уу, та бичихийг хүсч буй хөдөлгөөнөө хийж болно.

Хөдөлгөөн дууссаны дараа та бүртгүүлсэн хөдөлгөөнийг тоглуулахын тулд 'P' оруулах ёстой. Самбарыг дахин тохируулаагүй тохиолдолд servos нь хөдөлгөөнөө үргэлжлүүлэн хийх болно.

Зөвлөмж болгож буй: