Mündəricat:

Arduino istifadə edərək sadə və ağıllı robot qolu !!!: 5 addım (şəkillərlə)
Arduino istifadə edərək sadə və ağıllı robot qolu !!!: 5 addım (şəkillərlə)

Video: Arduino istifadə edərək sadə və ağıllı robot qolu !!!: 5 addım (şəkillərlə)

Video: Arduino istifadə edərək sadə və ağıllı robot qolu !!!: 5 addım (şəkillərlə)
Video: Arduino ilə robot qol hazırladım. 2024, Noyabr
Anonim
Image
Image
Ehtiyac duyacağınız şeylər
Ehtiyac duyacağınız şeylər

Bu təlimatda sadə bir robot qolu hazırlayacağam. Bu bir usta qolu ilə idarə olunacaq. Qol hərəkətləri xatırlayacaq və ardıcıllıqla oynayacaq. Fikir "Stoerpeak tərəfindən hazırlanmış mini robot qolundan" ideyanı aldığım üçün yeni deyil, uzun müddətdir bunu etmək istəyirdim, amma o vaxtlar heç bir şey yox idi və proqramlaşdırma haqqında heç bir məlumatım yox idi. İndi nəhayət birini qururam, sadə, ucuz saxlayıram və hamınızla paylaşıram.

Beləliklə, başlayaq ….

Addım 1: Ehtiyac duyacağınız şeylər:-

Ehtiyac duyacağınız şeylər
Ehtiyac duyacağınız şeylər
Ehtiyac duyacağınız şeylər
Ehtiyac duyacağınız şeylər

İşdə sizə lazım olacaq şeylərin siyahısı:-

1. Servo motorlar x 5 ABŞ üçün bağlantı:- https://amzn.to/2OxbSH7Link for Europe:-

2. Potensiometrlər x 5 (100k istifadə etdim.) ABŞ üçün bağlantı:- https://amzn.to/2ROjhDMLAvropa üçün:-

3. Arduino UNO. (Arduino Nano'dan da istifadə edə bilərsiniz) ABŞ üçün bağlantı:- https://amzn.to/2DBbENWLink for Europe:-

4. Çörək lövhəsi. (Bu kiti təklif edirəm) ABŞ üçün link:- https://amzn.to/2Dy86w4Link for Europe:-

5. Batareya. (isteğe bağlı olaraq 5v adapter istifadə edirəm)

6. Karton/Taxta/Günəş lövhəsi/akrilik indiyə qədər mövcud olan və ya tapılması asan olan şeylər.

Həm də Arduino IDE quraşdırmalısınız.

Addım 2: Qol hazırlamaq:-

Qol düzəltmək
Qol düzəltmək
Qol düzəltmək
Qol düzəltmək

Burada qol hazırlamaq üçün Popsicle çubuqlarından istifadə etdim. Əlinizdə olan hər hansı bir materialdan istifadə edə bilərsiniz. Və daha yaxşı bir qol etmək üçün fərqli mexaniki dizaynları sınaya bilərsiniz. dizaynım çox sabit deyil.

Servoları Popsicle çubuğuna yapışdırmaq və vintlər ilə bağlamaq üçün sadəcə iki tərəfli lentdən istifadə etdim.

Usta qolu üçün potsiometrləri çubuq çubuqlarına yapışdırdım və qol hazırladım.

Şəkillərə istinad edərək daha yaxşı bir fikir əldə edəcəksiniz.

Hər şeyi əsas kimi istifadə olunan A4 ölçülü kətan lövhəsinə quraşdırdım.

Addım 3: Bağlantıların qurulması:-

Əlaqələr qurmaq
Əlaqələr qurmaq
Əlaqələr qurmaq
Əlaqələr qurmaq
Əlaqələr qurmaq
Əlaqələr qurmaq

Bu addımda bütün lazımi əlaqələri quracağıq, yuxarıdakı şəkillərə baxın.

  • Əvvəlcə bütün servoları enerji təchizatına paralel olaraq bağlayın (Qırmızı tel +ve Qara və ya Qəhvəyi Tel Gnd)
  • Sonra siqnal tellərini, yəni sarı və ya narıncı telləri arduinonun PWM pininə bağlayın.
  • İndi potensialiometrləri paralel olaraq +5v və Gnd arduino'ya bağlayın.
  • Orta terminali ardunio analog pininə qoşun.

Burada rəqəmsal pinlər 3, 5, 6, 9 və 10 servoları idarə etmək üçün istifadə olunur

Potensialiometrlərdən giriş üçün A0 - A4 analog pinləri istifadə olunur.

Pin 3 -ə qoşulan servo A0 -a qoşulmuş potensiometr tərəfindən idarə olunacaq

5 -ci pinlə əlaqəli servo A1 üzərindəki qazanla idarə olunacaq və s.

Qeyd:- Servolar arduino ilə təchiz olunmasa da, servoların Gnd-ini arduino-ya bağladığınızdan əmin olun, yoxsa qol işləməyəcək.

Addım 4: Kodlaşdırma:-

Kodlaşdırma
Kodlaşdırma

Bu kodun məntiqi olduqca sadədir, potansiyometrlərin dəyərləri bir sıra olaraq saxlanılır, sonra qeydlər for loop istifadə olunur və servolar dəyərlərə uyğun olaraq addımlar atılır. "Arduino Potentiometer Servo İdarəetmə və Yaddaş" arayış üçün istifadə etdiyim bu təlimatı yoxlaya bilərsiniz.

Kod:- (Yüklənə bilən fayl aşağıda verilmişdir.)

Əvvəlcə bütün lazımi dəyişənləri bütün dünyada elan edəcəyik ki, bunları proqram boyunca istifadə edək. Bunun üçün xüsusi bir şərhə ehtiyac yoxdur

#daxil edin

// Servo Obyektləri Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Potentiometr obyektləri int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Servo mövqeyini saxlamaq üçün dəyişən int Servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Əvvəlki mövqe dəyərlərini saxlamaq üçün dəyişən int int Prev_0_Pos; int Prev_1_Pos; int Prev_2_Pos; int Prev_3_Pos; int Prev_4_Pos; // Cari mövqe dəyərlərini saxlamaq üçün dəyişən int Current_0_Pos; int Current_1_Pos; int Current_2_Pos; int Current_3_Pos; int Current_4_Pos; int Servo_Position; // Bucağı int Servo_Number saxlayır; // heç bir servo int Storage saxlamır [600]; // Məlumatların saxlanılması üçün massiv (Array massivinin artırılması daha çox yaddaş sərf edəcək) int Index = 0; // Array indeksi 0 -cı mövqedən başlayır char data = 0; // serial girişindən məlumatları saxlamaq üçün dəyişən.

İndi pinləri və funksiyalarını təyin etdiyimiz bir quraşdırma funksiyası yazacağıq. Bu, ilk olaraq yerinə yetirən əsas funksiyadır

boş quraşdırma ()

{Serial.begin (9600); // Arduino və IDE arasında serial ünsiyyət üçün. // Servo obyektləri PWM sancaqlarına yapışdırılır. Servo_0. əlavə (3); Servo_1. əlavə et (5); Servo_2.tach (6); Servo_3. əlavə et (9); Servo_4. əlavə et (10); // Servolar başlanğıcda 100 mövqeyə qoyulur. Servo_0.write (100); Servo_1.write (100); Servo_2. yazmaq (100); Servo_3 yazın (100); Servo_4.write (100); Serial.println ( Yazmaq üçün 'R' düyməsinə və oynamaq üçün 'P' düyməsinə basın); }

İndi Analog Giriş pinlərindən istifadə edərək potensialiometrlərin dəyərlərini oxumalı və onları servoları idarə etmək üçün xəritələməliyik. Bunun üçün bir funksiya təyin edəcəyik və Map_Pot () adlandıracağıq; İstifadəçi tərəfindən təyin edilmiş bir funksiyadır

boşluq Map_Pot ()

{ / * Servo 180 dərəcə fırlanır, lakin onu məhdudlaşdırmaq üçün istifadə etmək yaxşı bir fikir deyil, çünki servoları daim narahat edir və bu səbəbdən servo arasında hərəkət etməyi məhdudlaşdırırıq: 1-179 * / Pot_0 = analogRead (A0); // Qazandakı girişi oxuyun və Dəyişən Pot_0 -da saxlayın. Servo_0_Pos = xəritə (Pot_0, 0, 1023, 1, 179); // 0 -dan 1023 -ə qədər Servo_0.write (Servo_0_Pos) arasındakı servoları eşleyin; // Servonu həmin mövqeyə aparın. Pot_1 = analogOxu (A1); Servo_1_Pos = xəritə (Pot_1, 0, 1023, 1, 179); Servo_1.write (Servo_1_Pos); Pot_2 = analogOxu (A2); Servo_2_Pos = xəritə (Pot_2, 0, 1023, 1, 179); Servo_2.write (Servo_2_Pos); Pot_3 = analogOxu (A3); Servo_3_Pos = xəritə (Pot_3, 0, 1023, 1, 179); Servo_3.write (Servo_3_Pos); Pot_4 = analogOxu (A4); Servo_4_Pos = xəritə (Pot_4, 0, 1023, 1, 179); Servo_4.write (Servo_4_Pos); }

İndi loop funksiyasını yazacağıq:

boşluq döngəsi ()

{Map_Pot (); // (Serial.available ()> 0) {data = Serial.read (); əgər (data == 'R') Serial.println ("Hərəkətlərin qeyd edilməsi …"); if (data == 'P') Serial.println ("Qeydə alınmış Hərəkətlərin Çalınması …"); } if (data == 'R') // 'R' daxil edilirsə, yazmağa başlayın. {// Dəyərləri Prev_0_Pos = Servo_0_Pos dəyişənində saxlayın; 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 (); // Xəritə funksiyası müqayisə üçün geri çağırılırsa (abs (Prev_0_Pos == Servo_0_Pos)) // mütləq dəyər {Servo_0.write (Servo_0_Pos) müqayisə olunmaqla əldə edilir; // Əgər dəyərlər servo ilə uyğun gəlirsə (Current_0_Pos! = Servo_0_Pos) yenidən yerləşdirilirsə // Dəyərlər uyğun gəlmirsə {Storage [Index] = Servo_0_Pos + 0; // Index ++ massivinə dəyər əlavə olunur; // 1} Current_0_Pos = Servo_0_Pos; } /* Eynilə bütün servolar üçün dəyər müqayisə edilir, hər bir giriş üçün +100 fərqli bir dəyər olaraq əlavə olunur. */ if (abs (Prev_1_Pos == Servo_1_Pos)) {Servo_1.write (Servo_1_Pos); if (Current_1_Pos! = Servo_1_Pos) {Saxlama [İndeks] = Servo_1_Pos + 100; İndeks ++; } 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) {Saxlama [İndeks] = Servo_2_Pos + 200; İndeks ++; } 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) {Saxlama [İndeks] = Servo_3_Pos + 300; İndeks ++; } 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) {Saxlama [İndeks] = Servo_4_Pos + 400; İndeks ++; } Current_4_Pos = Servo_4_Pos; } / * Dəyərlər seriyalı monitorda çap olunur, '\ t' dəyərləri cədvəl formatında göstərmək üçündür * / 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 ("İndeks ="); Serial.println (İndeks); gecikmə (50); } əgər (data == 'P') // IF 'P' daxil edilsə, qeydə alınan hərəkətləri oynamağa başlayın. {for (int i = 0; i <Index; i ++) // Döngəni istifadə etməklə {Servo_Number = Storage /100; // Servo sayını tapır Servo_Position = Saxlama % 100; // Servo keçidinin mövqeyini tapır (Servo_Sayı) {hal 0: Servo_0.write (Servo_Mövqe); fasilə; hal 1: Servo_1.write (Servo_Position); fasilə; hal 2: Servo_2.write (Servo_Position); fasilə; hal 3: Servo_3.write (Servo_Position); fasilə; hal 4: Servo_4.write (Servo_Mövqe); fasilə; } gecikmə (50); }}}

Kod hazır olduqdan sonra onu arduino lövhəsinə yükləyin

Ağıllı qol işə hazırdır. Funksiya hələ Stoerpeak tərəfindən yaradılan qədər hamar deyil.

Kodu daha yaxşı edə bilirsinizsə və ya mənim üçün hər hansı bir təklifiniz varsa, şərh bölməsində mənə bildirin.

Bunu söyləyərək sınağa keçək ….

Addım 5: Test:-

Kodu lövhəyə uğurla yüklədikdən sonra 'Serial Monitoru' açın, onu Alətlər seçimində tapa bilərsiniz. Serial monitor başlayanda arduino sıfırlanır. İndi əsas qolu istifadə edərək robot qolunu idarə edə bilərsiniz. Amma heç nə qeydə alınmır.

Qeydə almağa başlamaq üçün monitora 'R' daxil edin, indi qeyd etmək istədiyiniz hərəkətləri edə bilərsiniz.

Hərəkətlər bitdikdən sonra qeydə alınan hərəkətləri oynamaq üçün 'P' daxil etməlisiniz. Lövhə sıfırlanmadığı müddətcə servolar hərəkətləri etməyə davam edəcək.

Tövsiyə: