Mundarija:

Arduino yordamida oddiy va aqlli robot qo'l !!!: 5 qadam (rasmlar bilan)
Arduino yordamida oddiy va aqlli robot qo'l !!!: 5 qadam (rasmlar bilan)

Video: Arduino yordamida oddiy va aqlli robot qo'l !!!: 5 qadam (rasmlar bilan)

Video: Arduino yordamida oddiy va aqlli robot qo'l !!!: 5 qadam (rasmlar bilan)
Video: Kattalar uchun o’yinchoq 2024, Iyun
Anonim
Image
Image
Sizga kerak bo'lgan narsalar
Sizga kerak bo'lgan narsalar

Bu yo'riqnomada men oddiy robot qo'lini yasayman. Bu asosiy qo'l yordamida boshqariladi. Qo'l harakatlarni eslab qoladi va ketma -ket o'ynaydi. Bu kontseptsiya yangi emas, men bu g'oyani "Stoerpeak mini -robotli qo'l" dan oldim, men buni uzoq vaqt davomida qilmoqchi edim, lekin o'sha paytda men umuman noaniq edim va dasturlash haqida hech qanday ma'lumotim yo'q edi. Va nihoyat, men bitta narsani qurmoqdaman, sodda, arzon va barchangiz bilan bo'lishaman.

Shunday qilib, boshlaylik ….

1-qadam: Sizga kerak bo'lgan narsalar:-

Sizga kerak bo'lgan narsalar
Sizga kerak bo'lgan narsalar
Sizga kerak bo'lgan narsalar
Sizga kerak bo'lgan narsalar

Sizga kerak bo'lgan narsalar ro'yxati:

1. Servo motorlar x 5 AQSh uchun havola:- https://amzn.to/2OxbSH7Link for Europe:-

2. Potentsiometrlar x 5 (men 100k ishlatganman.) AQSh uchun havola:- https://amzn.to/2ROjhDMLinka Evropa uchun:-

3. Arduino UNO. (Siz Arduino Nanodan ham foydalanishingiz mumkin) AQSh uchun havola:- https://amzn.to/2DBbENWLink for Europe:-

4. Non paneli. (Men bu to'plamni taklif qilaman) AQSh uchun havola:- https://amzn.to/2Dy86w4Link for Europe:-

5. Batareya. (ixtiyoriy, men 5v adapterdan foydalanmoqdaman)

6. Karton/Yog'och/Quyosh taxtasi/akril-mavjud bo'lgan yoki topilishi oson bo'lgan narsalar.

Va sizga Arduino IDE o'rnatilgan bo'lishi kerak.

2-qadam: qo'l yasash:

Qo'l yasash
Qo'l yasash
Qo'l yasash
Qo'l yasash

Bu erda men qo'lni yasash uchun ko'pikli tayoqlardan foydalandim. Sizda mavjud bo'lgan har qanday materialdan foydalanishingiz mumkin. Qo'lni yaxshiroq qilish uchun siz turli xil mexanik dizaynlarni sinab ko'rishingiz mumkin. Mening dizaynim unchalik barqaror emas.

Men faqat servolarni Popsicle tayog'iga yopishtirish va vintlar yordamida mahkamlash uchun ikki tomonlama lentadan foydalandim.

Usta qo'l uchun men potitsiometrlarni popsikl tayoqchalariga yopishtirdim va qo'l yasadim.

Rasmlarga murojaat qilish sizga yaxshi fikr beradi.

Men hamma narsani A4 o'lchamdagi tuval taxtasiga asos sifatida ishlatganman.

3-qadam: Ulanish:

Ulanishlar
Ulanishlar
Ulanishlar
Ulanishlar
Ulanishlar
Ulanishlar

Ushbu bosqichda biz barcha kerakli ulanishlarni o'rnatamiz, yuqoridagi rasmlarga qarang.

  • Birinchidan, barcha servolarni quvvat manbaiga parallel ravishda ulang (Qizil sim +va qora yoki jigarrang sim Gnd)
  • Keyin signal simlarini, ya'ni sariq yoki to'q sariq simni arduino PWM piniga ulang.
  • Endi potentsiometrlarni parallel ravishda arduino +5v va Gnd ga ulang.
  • O'rta terminalni ardunio analog piniga ulang.

Bu erda 3, 5, 6, 9 va 10 raqamli pinlar servolarni boshqarish uchun ishlatiladi

A0 - A4 analog pinlari potentsiometrlardan kirish uchun ishlatiladi.

3 -pin bilan bog'langan servo A0 ga ulangan potansiometr yordamida boshqariladi

5 -pinga ulangan xizmat ko'rsatish moslamasi A1 va boshqalar orqali boshqariladi.

Eslatma:- Servo arduino bilan ishlamasa ham, Gnd servo arduino-ga ulanganligiga ishonch hosil qiling, aks holda qo'l ishlamaydi.

4-qadam: Kodlash:-

Kodlash
Kodlash

Ushbu kodning mantig'i juda oddiy, potentsiometrlarning qiymatlari bir qatorda saqlanadi, so'ngra yozuvlar for loop yordamida o'tadi va servolar qiymatlarga muvofiq qadamlarni bajaradi. Siz "Arduino potentsiometrining servo nazorati va xotirasi" ma'lumotnomasi uchun foydalangan ushbu qo'llanmani ko'rib chiqishingiz mumkin.

Kod:- (Yuklab olinadigan fayl quyida biriktirilgan.)

Birinchidan, biz barcha kerakli o'zgaruvchilarni butun dunyo bo'ylab e'lon qilamiz, shuning uchun ularni dastur davomida ishlatishimiz mumkin. Buning uchun maxsus tushuntirish kerak emas

#qo'shing

// Servo moslamalari Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Potentsiometr ob'ektlari int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Servo pozitsiyasini saqlash uchun o'zgaruvchi int Servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Oldingi holat qiymatlarini saqlash uchun o'zgaruvchi int Prev_0_Pos; int Prev_1_Pos; int Prev_2_Pos; int Prev_3_Pos; int Prev_4_Pos; // Joriy holat qiymatlarini saqlash uchun o'zgaruvchi int Current_0_Pos; int Current_1_Pos; int Current_2_Pos; int Current_3_Pos; int Current_4_Pos; int Servo_Position; // burchakni saqlaydi int Servo_Number; // Servo int Storage -da saqlanmaydi [600]; // Ma'lumotlarni saqlash uchun massiv (massiv kattalashishi ko'proq xotirani sarflaydi) int Index = 0; // Massiv indeksi 0 -pozitsiyadan boshlanadi char data = 0; // ketma -ket kirishdan ma'lumotlarni saqlash uchun o'zgaruvchi.

Endi biz sozlash funktsiyasini yozamiz, bu erda biz pin va ularning funktsiyalarini o'rnatamiz. Bu birinchi bo'lib bajariladigan asosiy vazifadir

bo'sh o'rnatish ()

{Serial.begin (9600); // Arduino va IDE o'rtasidagi ketma -ket aloqa uchun. // Servo moslamalari PWM pinlariga biriktirilgan. Xizmat ko'rsatish_0. qo'shish (3); Servo_1.attach (5); Xizmat ko'rsatish_2. qo'shish (6); Servo_3. qo'shish (9); Servo_4.attach (10); // Servolar ishga tushirilganda 100 pozitsiyasiga o'rnatiladi. Servo_0.yozish (100); Servo_1.yozish (100); Servo_2.yozish (100); Servo_3.yozish (100); Servo_4.yozish (100); Serial.println ("Yozish uchun" R "tugmasini bosing va ijro etish uchun" P "tugmasini bosing); }

Endi biz potentsiometrlarning qiymatlarini analog kirish pinlari yordamida o'qishimiz va servolarni boshqarish uchun ularni xaritaga solishimiz kerak, buning uchun biz funktsiyani aniqlaymiz va unga Map_Pot () deb nom beramiz;, siz xohlagan narsani nomlashingiz mumkin, bu foydalanuvchi tomonidan aniqlangan funktsiya

void Map_Pot ()

{ / * Servo 180 gradusda aylanadi, lekin uni chegaralarda ishlatish yaxshi emas, chunki bu servolarni doimiy ravishda bezovta qiladi, shuning uchun biz servolarni quyidagilar orasida harakatlanishini cheklaymiz: 1-179 * / Pot_0 = analogRead (A0); // Potdan kirishni o'qing va uni Variable Pot_0 da saqlang. Servo_0_Pos = xarita (Pot_0, 0, 1023, 1, 179); // Servo_0.write (Servo_0_Pos) 0 dan 1023 gacha bo'lgan qiymat bo'yicha servolarni xaritada ko'rsatish; // Servoni o'sha joyga o'tkazing. Pot_1 = analogRead (A1); Servo_1_Pos = xarita (Pot_1, 0, 1023, 1, 179); Servo_1.yozish (Servo_1_Pos); Pot_2 = analogRead (A2); Servo_2_Pos = xarita (Pot_2, 0, 1023, 1, 179); Servo_2.yozish (Servo_2_Pos); Pot_3 = analogRead (A3); Servo_3_Pos = xarita (Pot_3, 0, 1023, 1, 179); Servo_3.yozish (Servo_3_Pos); Pot_4 = analogRead (A4); Servo_4_Pos = xarita (Pot_4, 0, 1023, 1, 179); Servo_4.yozish (Servo_4_Pos); }

Endi biz loop funktsiyasini yozamiz:

bo'sh halqa ()

{Map_Pot (); // Funktsiya chaqiruvi pot qiymatlarini o'qish uchun (Serial.available ()> 0) {data = Serial.read (); agar (ma'lumotlar == 'R') Serial.println ("Yozib olish harakatlari …"); if (data == 'P') Serial.println ("Yozib olingan harakatlarni ijro etish …"); } if (data == 'R') // Agar 'R' kiritilsa, yozishni boshlang. {// Qiymatlarni o'zgaruvchida saqlang 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 (); // Xarita funktsiyasi taqqoslash uchun chaqirildi, agar (abs (Prev_0_Pos == Servo_0_Pos)) // absolyut qiymatni {Servo_0.write (Servo_0_Pos) solishtirish orqali olish mumkin; // Agar qiymatlar servo bilan mos kelsa, ularning joylashuvi o'zgartiriladi, agar (Current_0_Pos! = Servo_0_Pos) // Agar qiymatlar mos bo'lmasa {Storage [Index] = Servo_0_Pos + 0; // Indeks ++ qatoriga qiymat qo'shiladi; // 1} Current_0_Pos = Servo_0_Pos; } /* Xuddi shunday, qiymatlarni taqqoslash barcha servolar uchun amalga oshiriladi, +100 har bir kirish uchun differentsial qiymat sifatida qo'shiladi. */ if (abs (Prev_1_Pos == Servo_1_Pos)) {Servo_1.write (Servo_1_Pos); if (Current_1_Pos! = Servo_1_Pos) {Saqlash [indeks] = Servo_1_Pos + 100; Indeks ++; } 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; Indeks ++; } 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) {Saqlash [indeks] = Servo_3_Pos + 300; Indeks ++; } 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) {Saqlash [indeks] = Servo_4_Pos + 400; Indeks ++; } Current_4_Pos = Servo_4_Pos; } / * Qiymatlar ketma -ket monitorda chop etiladi, '\ t' - jadval formatidagi qiymatlarni ko'rsatish uchun * / 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 ("Indeks ="); Serial.println (indeks); kechikish (50); } if (data == 'P') // IF 'P' kiritilsa, yozilgan harakatlarni ijro etishni boshlang. {for (int i = 0; i <Index; i ++) // Qator uchun loop yordamida harakatlaning {Servo_Number = Storage /100; // Servo_Position = Saqlash % 100 servo sonini topadi; // Servo tugmachasining o'rnini topadi (Servo_Number) {0 holat: Servo_0.write (Servo_Position); tanaffus; 1 -holat: Servo_1.write (Servo_Position); tanaffus; 2 -holat: Servo_2.write (Servo_Position); tanaffus; 3 -holat: Servo_3.write (Servo_Position); tanaffus; 4 -holat: Servo_4.write (Servo_Position); tanaffus; } kechiktirish (50); }}}

Kod tayyor bo'lgach, endi uni arduino kartasiga yuklang

Aqlli qo'l ishga tayyor. Funktsiya hali Stoerpeak tomonidan ishlab chiqarilganidek silliq emas.

Agar siz kodni yaxshiroq qila olsangiz yoki men uchun biron bir taklifingiz bo'lsa, iltimos, sharhlar bo'limida menga xabar bering.

Aytgancha, keling sinovga o'taylik ….

5-qadam: Sinov:-

Kodni taxtaga muvaffaqiyatli yuklaganingizdan so'ng, "Serial monitor" ni oching, uni "Asboblar" bandida topishingiz mumkin. Serial monitor ishga tushganda arduino qayta tiklanadi. Endi siz robot qo'lini master qo'l yordamida boshqarishingiz mumkin. Ammo hech narsa qayd qilinmaydi.

Yozishni boshlash uchun monitorga "R" ni kiriting, endi siz yozmoqchi bo'lgan harakatlarni bajarishingiz mumkin.

Harakatlar tugagandan so'ng, siz yozilgan harakatlarni ijro etish uchun "P" ni kiritishingiz kerak. Agar boshqaruv paneli tiklanmagan bo'lsa, servo harakatlarni bajarishda davom etadi.

Tavsiya: