İçindekiler:

Arduino Kullanan Basit ve Akıllı Robotik Kol !!!: 5 Adım (Resimlerle)
Arduino Kullanan Basit ve Akıllı Robotik Kol !!!: 5 Adım (Resimlerle)

Video: Arduino Kullanan Basit ve Akıllı Robotik Kol !!!: 5 Adım (Resimlerle)

Video: Arduino Kullanan Basit ve Akıllı Robotik Kol !!!: 5 Adım (Resimlerle)
Video: Arduino ile Robotik Kol | Robot Kol Yapımı Detaylı Anlatım | (Kod+Şema) 2024, Haziran
Anonim
Image
Image
İhtiyacınız Olan Şeyler:
İhtiyacınız Olan Şeyler:

Bu derste basit bir robotik kol yapacağım. Bu, bir ana kol kullanılarak kontrol edilecektir. Kol, hareketleri hatırlayacak ve sırayla oynayacaktır. Konsept yeni değil Fikri "mini robotik kol -Stoerpeak'ten" aldım Bunu uzun zamandır yapmak istiyordum ama o zamanlar tamamen acemiydim ve programlama hakkında hiçbir bilgim yoktu. Şimdi nihayet bir tane inşa ediyorum, Basit, ucuz ve hepinizle paylaşıyorum.

Öyleyse başlayalım….

Adım 1: İhtiyacınız Olan Şeyler: -

İhtiyacınız Olan Şeyler:
İhtiyacınız Olan Şeyler:
İhtiyacınız Olan Şeyler:
İhtiyacınız Olan Şeyler:

İşte ihtiyacınız olacak şeylerin bir listesi: -

1. Servo motorlar x 5 ABD için Bağlantı:- https://amzn.to/2OxbSH7 Avrupa için Bağlantı:-

2. Potansiyometre x 5 (100k kullandım.) ABD için Link:- https://amzn.to/2ROjhDMLink Avrupa için:-

3. Arduino UNO. (Arduino Nano'yu da kullanabilirsiniz) ABD için Bağlantı:- https://amzn.to/2DBbENWAvrupa için Bağlantı:-

4. Ekmek tahtası. (Bu kiti öneririm) ABD için bağlantı:- https://amzn.to/2Dy86w4 Avrupa için bağlantı:-

5. Pil. (isteğe bağlı, 5v adaptör kullanıyorum)

6. Karton/Ahşap/Güneş tahtası/akrilik ne varsa veya bulunması kolay.

Ayrıca Arduino IDE'nin kurulu olmasına da ihtiyacınız olacak.

Adım 2: Kol Yapma: -

Kol Yapmak:
Kol Yapmak:
Kol Yapmak:
Kol Yapmak:

Burada kolu yapmak için buzlu şeker çubukları kullandım. Size sunulan herhangi bir malzemeyi kullanabilirsiniz. Ve daha da iyi kol yapmak için farklı mekanik tasarımları deneyebilirsiniz. tasarımım çok kararlı değil.

Servoları Popsicle çubuğuna yapıştırmak ve vidaları kullanarak sabitlemek için çift taraflı bant kullandım.

Master kol için potansiyometreleri buzlu şeker çubuklarına yapıştırdım ve kol yaptım.

Resimlere başvurmak size daha iyi bir fikir verecektir.

Her şeyi taban olarak kullanılan A4 boyutunda bir kanvas panoya monte ettim.

Adım 3: Bağlantıların Yapılması:-

Bağlantılar kurmak
Bağlantılar kurmak
Bağlantılar kurmak
Bağlantılar kurmak
Bağlantılar kurmak
Bağlantılar kurmak

Bu adımda gerekli tüm bağlantıları yapacağız, yukarıdaki resimlere bakınız.

  • Önce tüm servoları güç kaynağına paralel olarak bağlayın (Kırmızı kablo + ve'ye ve Siyah veya Kahverengi Kablo Gnd'ye)
  • Ardından sinyal kablolarını, yani Sarı veya Turuncu kabloyu arduino'nun PWM pinine bağlayın.
  • Şimdi potansiyometreleri paralel olarak +5v ve Gnd of arduino'ya bağlayın.
  • Orta terminali ardunio'nun Analog pinine bağlayın.

Burada servoları kontrol etmek için Dijital Pimler 3, 5, 6, 9 ve 10 kullanılır.

Potansiyometrelerden Giriş için A0 - A4 Analog Pinleri kullanılır.

Pin 3'e bağlı servo, A0'a bağlı potansiyometre ile kontrol edilecektir.

Pim 5'e bağlı olan servo, A1 üzerindeki pot tarafından kontrol edilecektir ve bu şekilde devam edecektir….

Not: - Servolar arduino tarafından desteklenmese de, servoların Gnd'sini arduino'ya bağladığınızdan emin olun, aksi takdirde kol çalışmayacaktır.

Adım 4: Kodlama:-

Kodlama
Kodlama

Bu kodun mantığı oldukça basittir, potansiyometrelerin değerleri bir dizide saklanır, daha sonra kayıtlar bir for döngüsü kullanılarak geçilir ve servolar değerlere göre adımları yapar. "Arduino Potansiyometre Servo Kontrol ve Bellek" referansı için kullandığım bu eğiticiye göz atabilirsiniz.

Kod:- (İndirilebilir dosya aşağıda eklenmiştir.)

Öncelikle gerekli tüm değişkenleri global olarak ilan edeceğiz, böylece onları program boyunca kullanabiliriz. Bunun için özel bir açıklamaya gerek yoktur

#Dahil etmek

//Servo Nesneleri Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; //Potansiyometre Nesneleri int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; //Servo Pozisyonunu saklayacak değişken int Servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; //Önceki konum değerlerini saklayacak değişken int Prev_0_Pos; int Önceki_1_Pos; int Önceki_2_Pos; int Önceki_3_Pos; int Önceki_4_Pos; //Mevcut pozisyon değerlerini saklayacak değişken int Current_0_Pos; int Mevcut_1_Pos; int Current_2_Pos; int Current_3_Pos; int Current_4_Pos; int Servo_Position; //Açıyı saklar int Servo_Number; //servo sayısını saklar int Storage[600]; //Veri depolamak için dizi (Array boyutunu artırmak daha fazla bellek tüketir) int Index = 0; // Dizi indeksi 0. pozisyondan başlar char data = 0; // seri girişten veri depolamak için değişken.

Şimdi pinleri ve fonksiyonlarını ayarladığımız bir setup fonksiyonu yazacağız. Bu, ilk çalıştırılan ana işlevdir

geçersiz kurulum()

{ Serial.başlangıç(9600); //Arduino ve IDE arasındaki seri iletişim için. //Servo nesneleri PWM pinlerine eklenir. Servo_0.attach(3); Servo_1.attach(5); Servo_2.attach(6); Servo_3.attach(9); Servo_4.attach(10); //Servolar, başlatma sırasında 100 pozisyona ayarlanır. Servo_0.write(100); Servo_1.write(100); Servo_2.write(100); Servo_3.write(100); Servo_4.write(100); Serial.println("Kaydetmek için 'R'ye ve oynatmak için 'P'ye basın"); }

Şimdi Analog Input pinlerini kullanarak potansiyometrelerin değerlerini okumamız ve bunları servoları kontrol etmek için eşleştirmemiz gerekiyor. Bunun için bir fonksiyon tanımlayacağız ve onu Map_Pot() olarak adlandıracağız;, istediğiniz herhangi bir ad verebilirsiniz, bu kullanıcı tanımlı bir fonksiyondur

geçersiz Map_Pot()

{ /* Servolar 180 derece dönüyor ama onu limitlerde kullanmak iyi bir fikir değil çünkü servoların sürekli vızıldamasına neden oluyor bu da can sıkıcı bir durum bu yüzden servoyu şu değerler arasında hareket edecek şekilde sınırlandırıyoruz: 1-179 */ Pot_0 = analogRead(A0); // Pottan girdiyi oku ve Değişken Pot_0'da sakla. Servo_0_Pos = harita(Pot_0, 0, 1023, 1, 179); //Servoları 0 ile 1023 arasındaki değere göre eşleştirin Servo_0.write(Servo_0_Pos); //Servoyu o konuma taşıyın. Pot_1 = analogRead(A1); Servo_1_Pos = harita(Pot_1, 0, 1023, 1, 179); Servo_1.write(Servo_1_Pos); Pot_2 = analogRead(A2); Servo_2_Pos = harita(Pot_2, 0, 1023, 1, 179); Servo_2.write(Servo_2_Pos); Pot_3 = analogRead(A3); Servo_3_Pos = harita(Pot_3, 0, 1023, 1, 179); Servo_3.write(Servo_3_Pos); Pot_4 = analogRead(A4); Servo_4_Pos = map(Pot_4, 0, 1023, 1, 179); Servo_4.write(Servo_4_Pos); }

Şimdi döngü fonksiyonunu yazacağız:

boşluk döngüsü()

{ Map_Pot(); // Pot değerlerini okumak için fonksiyon çağrısı while (Serial.available() > 0) { data = Serial.read(); if (data == 'R') Serial.println("Kayıt Hareketleri…"); if (data == 'P') Serial.println("Kayıtlı Hareketleri Oynatma…"); } if (data == 'R') //'R' girilmişse, kayda başlayın. { //Değerleri bir değişkende saklayın Prev_0_Pos = Servo_0_Pos; Önceki_1_Pos = Servo_1_Pos; Önceki_2_Pos = Servo_2_Pos; Önceki_3_Pos = Servo_3_Pos; Önceki_4_Pos = Servo_4_Pos; Map_Pot(); // Harita fonksiyonu karşılaştırma için geri çağrılır if (abs(Prev_0_Pos == Servo_0_Pos)) // mutlak değer { Servo_0.write(Servo_0_Pos); // Değerler eşleşirse servo yeniden konumlandırılır if (Current_0_Pos != Servo_0_Pos) // Değerler eşleşmezse { Storage[Index] = Servo_0_Pos + 0; // Index++ dizisine değer eklenir; // İndeks değeri 1 artırılır } Current_0_Pos = Servo_0_Pos; } /* Benzer şekilde tüm servolar için değer karşılaştırması yapılır, diferansiyel değer olarak giriş için her birine +100 eklenir. */ if (mutlak(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; dizin++; } Current_1_Pos = Servo_1_Pos; } if (mutlak(Önceki_2_Pos == Servo_2_Pos)) { Servo_2.write(Servo_2_Pos); if (Current_2_Pos != Servo_2_Pos) { Storage[Index] = Servo_2_Pos + 200; dizin++; } Current_2_Pos = Servo_2_Pos; } if (mutlak(Önceki_3_Pos == Servo_3_Pos)) { Servo_3.write(Servo_3_Pos); if (Current_3_Pos != Servo_3_Pos) { Storage[Index] = Servo_3_Pos + 300; dizin++; } Current_3_Pos = Servo_3_Pos; } if (mutlak(Önceki_4_Pos == Servo_4_Pos)) { Servo_4.write(Servo_4_Pos); if (Current_4_Pos != Servo_4_Pos) { Storage[Index] = Servo_4_Pos + 400; dizin++; } Current_4_Pos = Servo_4_Pos; } /* Değerler seri monitörde yazdırılır, '\t' değerleri tablo formatında görüntülemek içindir */ Serial.print(Servo_0_Pos); Seri.print(" \t "); Serial.print(Servo_1_Pos); Seri.print(" \t "); Serial.print(Servo_2_Pos); Seri.print(" \t "); Serial.print(Servo_3_Pos); Seri.print(" \t "); Serial.println(Servo_4_Pos); Serial.print ("İndeks = "); Serial.println(Dizin); gecikme(50); } if (data == 'P') // 'P' girilirse, Kaydedilmiş hamleleri oynamaya başlayın. { for (int i = 0; i < Index; i++) // for döngüsünü kullanarak dizide gezin { Servo_Number = Storage / 100; // Servo sayısını bulur Servo_Position = Depolama % 100; // Servo anahtarın konumunu bulur(Servo_Number) { case 0: Servo_0.write(Servo_Position); kırmak; durum 1: Servo_1.write(Servo_Position); kırmak; durum 2: Servo_2.write(Servo_Position); kırmak; durum 3: Servo_3.write(Servo_Position); kırmak; durum 4: Servo_4.write(Servo_Position); kırmak; } gecikme(50); } } }

Kod hazır olduğunda, şimdi arduino panosuna yükleyin

Akıllı kol çalışmaya hazır. İşlev henüz Stoerpeak tarafından yapılan kadar pürüzsüz değil.

Kodu daha iyi hale getirebilirseniz veya benim için herhangi bir öneriniz varsa, lütfen yorum bölümünde bana bildirin.

Bununla birlikte, teste geçelim….

Adım 5: Test Etme:-

Kodu panoya başarıyla yükledikten sonra, 'Seri Monitör'ü açın, Araçlar seçeneğinde bulabilirsiniz. Seri monitör başladığında arduino sıfırlanır. Artık ana kolu kullanarak robotik kolu kontrol edebilirsiniz. Ama hiçbir şey kaydedilmiyor.

Kayda başlamak için, monitörde 'R' girin, şimdi kaydetmek istediğiniz hareketleri gerçekleştirebilirsiniz.

Hamleler tamamlandıktan sonra kaydedilen hamleleri oynamak için 'P' girmeniz gerekir. Tahta sıfırlanmadığı sürece servolar hareketleri gerçekleştirmeye devam edecektir.

Önerilen: