İçindekiler:

İki Tekerlekli Kendi Kendini Dengeleyen Robot: 7 Adım
İki Tekerlekli Kendi Kendini Dengeleyen Robot: 7 Adım

Video: İki Tekerlekli Kendi Kendini Dengeleyen Robot: 7 Adım

Video: İki Tekerlekli Kendi Kendini Dengeleyen Robot: 7 Adım
Video: SCUTTLE Denge Robotu - Donanım Dönüşüm Kılavuzu 2024, Kasım
Anonim
İki Tekerlekli Kendi Kendini Dengeleyen Robot
İki Tekerlekli Kendi Kendini Dengeleyen Robot

Bu talimat, kendi kendini dengeleyen bir robot için tasarım ve yapım sürecinden geçecektir. Bir not olarak, kendi kendini dengeleyen robotların yeni bir konsept olmadığını ve başkaları tarafından yapıldığını ve belgelendiğini söylemek istiyorum. Bu fırsatı, bu robot hakkındaki yorumumu sizinle paylaşmak için kullanmak istiyorum.

Kendi kendini dengeleyen robot nedir?

Kendi kendini dengeleyen bir robot, dik durmak için konumunu sürekli olarak ayarlamak için yerleşik bir sensörden toplanan atalet ölçüm verilerini kullanan bir sistemdir.

O nasıl çalışır?

Göz önünde bulundurulması gereken basit bir benzetme, ters çevrilmiş bir sarkaçtır. Kütle merkezinin pivot noktasının üzerinde olduğu yer. Ancak bizim durumumuzda, bir dönme ekseni, bizim durumumuzda iki tekerleğin dönme ekseni ile sarkacı 1 serbestlik derecesiyle sınırlandırıyoruz. Herhangi bir rahatsızlık robotun düşmesine neden olacağından, robotu aktif olarak dengede tutacak bir yönteme ihtiyacımız var. Robotumuzun hangi yöne düştüğünü bilerek, sistemi dengede tutmak için motorlarımızın dönüş yönünü ayarlayabiliriz.

Kapalı döngü algoritması nasıl çalışır?

Robotu dengede tutmanın temel prensibi, eğer robot öne düşüyorsa, kendini yakalamak için robotun altını ileri doğru hareket ettirerek telafi edecek ve bu nedenle dikey kalacaktır. Aynı şekilde, robot geriye doğru düşüyorsa, kendini yakalamak için robotun altını geriye doğru hareket ettirerek telafi edecektir.

Yani burada yapmamız gereken iki şey var, öncelikle robotun yaşadığı eğim açısını (Yuvarlanma) hesaplamamız ve sonuç olarak motorların dönüş yönünü kontrol etmemiz gerekiyor.

Eğim açısını nasıl ölçeceğiz?

Eğim açısını ölçmek için bir Atalet Ölçüm Birimi kullanacağız. Bu modüller bir ivmeölçer ve jiroskop içerir.

  • İvmeölçer, uygun ivmeyi ölçen elektromanyetik bir cihazdır, bu, bir cismin anlık bir dinlenme çerçevesindeki ivmesidir.
  • Jiroskop, açısal hızı ölçen ve cihazın yönünü belirlemek için kullanılan elektromekanik bir cihazdır.

Ancak, bu tür sensörleri kullanmanın sorunu şudur:

  • İvmeölçer çok gürültülüdür ancak zamanla tutarlıdır, açı ani yatay hareketlerle değişir
  • Öte yandan jiroskop değeri zamanla kayacaktır, ancak başlangıçta oldukça doğrudur.

Bu talimat için, yerleşik Dijital Hareket İşleme'yi (DMP) kullanmak yerine bir filtre uygulamayacağım. Diğerleri, düzgün bir sinyal elde etmek için tamamlayıcı bir filtre kullanmıştır, istediğiniz yöntemi seçebilirsiniz. robot her iki uygulamayla da dengelendiğinden.

Gereçler

Parçalar:

  1. 8 Mhz ATMEGA328 ile Arduino Pro Mini 3.3V 8
  2. FT232RL 3.3V 5.5V FTDI USB - TTL seri adaptör modülü
  3. MPU-6050 ile GY-521 modülü
  4. Bir çift N20 mikro dişli motor 6V - 300rpm
  5. L298N motor sürücüsü
  6. LM2596S DC'den DC'ye dönüştürücü dönüştürücü
  7. Pil (Şarj edilebilir 9.7V Li-ion pil takımı)
  8. Pil kayışı
  9. İki prototipleme PCB devre kartı
  10. Erkek ve dişi başlık pimleri atlama telleri

Aletler:

  1. Havya ve lehim
  2. Naylon altıgen ara parçası
  3. Hassas tornavida seti
  4. 3 boyutlu yazıcı

Adım 1: İnşaat

Bir 3D yazıcıya erişimim olduğu için kasayı 3D yazdırmaya ve her şeyi birbirine bağlamak için zıtlıklar kullanmaya karar verdim.

Robot 4 katmandan oluşuyor

  1. Alt katman motorları birbirine bağlar ve L298N motor sürücü modülü için montaj noktalarına sahiptir.
  2. Bir sonraki katman, Arduino pro mini ile prototip panosunu ve ona lehimlenmiş başlıkları barındırır.
  3. Üçüncü katman IMU'yu bağlar
  4. “Tampon katmanı” dediğim üst katman, pili, dönüştürücüyü ve parasal anahtarı barındırıyor.

Ana tasarım prensibim her şeyi modüler tutmaktı. Bunun nedeni, bileşenlerden birinde bir sorun olursa kolayca değiştirebilirim veya başka bir proje için bir bileşene ihtiyacım olursa, sistemi tekrar kullanamama endişesi olmadan kolayca alabilirdim.

Adım 2: Kablolama

kablolama
kablolama

Arduino pro mini başlık pinleriyle eşleşmesi için bazı dişi başlık pinlerini mükemmel bir panoya lehimledim. Bunu takiben, I/O'ya erişime izin vermek için tahtaya erkek başlık pinlerini lehimledim. Bileşenlerin geri kalanı 3D baskılı çerçeveye monte edildi ve bağlantı telleri kullanılarak bağlandı.

Adım 3: Kontrol Teorisi

Şimdi projenin özüne geçiyoruz. Robotu dengeli tutmak için, robotu dengeli ve kararlı tutmak için motorları doğru yönde ve doğru hızda sürmek için uygun bir kontrol sinyali üretmemiz gerekiyor. Bunu yapmak için, PID denetleyicisi olarak bilinen popüler bir kontrol döngüsü algoritması kullanacağız. Kısaltmanın önerdiği gibi, bu denetleyici için üç terim vardır, bunlar orantılı, integral ve türev terimleridir. Bunların her birine sistem üzerindeki etkilerini belirleyen katsayılar eşlik eder. Genellikle, denetleyicinin uygulanmasının en çok zaman alan kısmı, en uygun yanıtı elde etmek için her benzersiz sistem için kazançların ayarlanmasıdır.

  • Orantılı terim, bir çıktı vermek için hatayı doğrudan çarpar, bu nedenle hata ne kadar büyük olursa yanıt da o kadar büyük olur.
  • İntegral terimi, kararlı durum hatasını azaltmak için hatanın birikimine dayalı bir yanıt üretir. Sistem ne kadar uzun süre dengesiz kalırsa motorlar o kadar hızlı tepki verir
  • Türev terimi, gelecekteki yanıtı tahmin etmek için kullanılan hatanın türevidir ve bunu yaparken kararlı durumu aşma nedeniyle salınımı azaltır.

Bu algoritmanın temel prensibi, istenen konum ile mevcut konum arasındaki fark olan eğim açısını sürekli olarak hesaplamaktır, buna hata denir. Daha sonra bu hata değerlerini kullanır ve motorlara gönderilen kontrol sinyalleri olan bir çıktı elde etmek için orantısal, integral ve türev yanıtlarının toplamını hesaplar. Sonuç olarak, hata büyükse motorlara gönderilen kontrol sinyali, dengeli bir duruma gelmek için motorları yüksek hızda döndürecektir. Aynı şekilde, hata küçükse, kontrol sinyali robotu dengede tutmak için motorları düşük hızda döndürür.

Adım 4: MPU 6050'yi Kullanma

MPU6050 Kitaplığı

github.com/jrowberg/i2cdevlib/tree/master/…

Ofsetleri kalibre etme Tüm sensörler birbirinin tam kopyası değildir. Sonuç olarak, iki MPU 6050'yi test ederseniz, aynı yüzeye yerleştirildiğinde ivmeölçer ve jiroskop için farklı değerler elde edebilirsiniz. Bu sabit açı ofsetinin üstesinden gelmek için kullandığımız her sensörü kutlamamız gerekiyor. Bu betiği çalıştırmak:

www.i2cdevlib.com/forums/topic/96-arduino-…

Luis Rodenas tarafından yazılmış, ofsetleri alacağız. Offset hataları, setup() rutininde ofset değerleri tanımlanarak ortadan kaldırılabilir.

Dijital Hareket İşlemcisini Kullanma

MPU6050, bir DMP (Dijital Hareket İşlemcisi) içerir.

DMP nedir? DMP'yi, kendi hareket birleştirme algoritmalarını kullanarak mpu6050'deki 3 eksenli jiroskop ve 3 eksenli ivmeölçerden gelen karmaşık hareketi işleyen yerleşik bir mikro denetleyici olarak düşünebilirsiniz. Aksi takdirde Arduino tarafından yapılacak olan işlemin boşaltılması

Bu nasıl kullanılır? DMP'nin nasıl kullanılacağını anlamak için MPU6050 kitaplığı ile birlikte gelen MPU6050_DMP6 örneğini inceleyin (Arduino IDE'de: Dosya->Örnek->MPU6050->MPU6050_DMP6). Bu aynı zamanda sensörünüzün gerçekten çalıştığını ve kablolamanın doğru olduğunu kontrol etmek için iyi bir fırsattır

Adım 5: Kodlama

Arduino pro mini'yi programlamak için Arduino IDE ve bir FTDI arayüzü kullandım.

MPU6050 kitaplığıyla birlikte gelen örnek çizimi (MPU6050_DMP6) temel kodum olarak kullanarak bir PID() ve MotorDriver() işlevleri ekledim.

Kitaplığı ekle

  • MPU6050: MPU6050 sensörünü kullanmak için Jeff Rowberg'den I2C geliştirici kitaplığını indirmemiz ve bilgisayarınızdaki program dosyalarında bulunan Arduino “kütüphaneleri” klasörüne eklememiz gerekecek.
  • Wire: I2C cihazlarıyla iletişim kurabilmemiz için Wire kitaplığına da ihtiyacımız var.

Sözde Kod

Kitaplıkları Dahil Et:

  • tel.h
  • MPU6050
  • I2Cdev.h

Değişkenleri, sabitleri ve nesneleri başlat

Kurmak ()

  • Motorları kontrol etmek için pin modunu ayarlayın
  • Durum LED'i için pin modunu ayarla
  • MPU6050'yi sıfırlayın ve ofset değerlerini ayarlayın

PID ()

PID değerini hesapla

MotorSürücü (PID yanıtı)

Motorların hızını ve yönünü kontrol etmek için PID değerini kullanın

Döngü ()

  • DMP'den veri alın
  • PID() a MotorDriver() işlevlerini çağırın

Adım 6: PID Ayarlama Prosedürü

Bu, projenin en sıkıcı kısmıdır ve çok şanslı olmadığınız sürece biraz sabır gerektirir. İşte adımlar:

  1. I ve D terimini 0 olarak ayarlayın
  2. Robotu tutarak P'yi ayarlayın, böylece robot denge konumu etrafında salınmaya başlar.
  3. P seti ile, robotun dengede olmadığında daha hızlı hızlanması için I'yi artırın. P ve I düzgün bir şekilde ayarlandığında, robot biraz salınımla en az birkaç saniye kendi kendini dengeleyebilmelidir.
  4. Son olarak, D'yi artırın salınımı azaltın

İlk deneme tatmin edici sonuçlar vermezse, adımları farklı bir P değeriyle tekrarlayın. Ayrıca, performansı daha da artırmak için PID değerlerine daha sonra ince ayar yapabileceğinizi unutmayın. Buradaki değerler donanıma bağlıdır, çok büyük veya çok küçük PID değerleri alırsanız şaşırmayın.

7. Adım: Sonuç

Kullanılan mikro dişli motorlar, büyük rahatsızlıklara tepki vermek için yavaştı ve sistem çok hafif olduğu için, istenen sarkaç etkisini elde etmek için yeterli atalet yoktu, bu nedenle robot öne doğru eğilirse, sadece bir açıyla eğilecek ve ileri doğru yarışacaktı. Son olarak, 3D baskılı tekerlekler kaymaya devam ettikleri için kötü bir seçimdi.

İyileştirme için öneri:

  • Daha yüksek torklu daha hızlı motorlar, yani DC motorlar için voltaj değeri ne kadar yüksekse o kadar yüksek tork
  • daha ağır bir pil alın veya kütleyi biraz daha yükseğe taşıyın
  • Daha fazla çekiş elde etmek için 3D baskılı tekerlekleri kauçuk olanlarla değiştirin

Önerilen: