İçindekiler:

Arduino ve Analog Joystick ile 28BYJ-48 Step Motorun Açısal Konumsal Kontrolü: 3 Adım
Arduino ve Analog Joystick ile 28BYJ-48 Step Motorun Açısal Konumsal Kontrolü: 3 Adım

Video: Arduino ve Analog Joystick ile 28BYJ-48 Step Motorun Açısal Konumsal Kontrolü: 3 Adım

Video: Arduino ve Analog Joystick ile 28BYJ-48 Step Motorun Açısal Konumsal Kontrolü: 3 Adım
Video: Arduino ile Step Motor Projeleri Step motor Hız Yön kontrolü Devresi 2024, Temmuz
Anonim
28BYJ-48 Step Motorun Arduino ve Analog Joystick ile Açısal Konumsal Kontrolü
28BYJ-48 Step Motorun Arduino ve Analog Joystick ile Açısal Konumsal Kontrolü

Bu, bitirme yılı tez projemin bir parçası olarak kullanmak üzere geliştirdiğim 28BYJ-48 step motor için bir kontrol şemasıdır. Bunu daha önce görmemiştim, bu yüzden keşfettiğim şeyi yükleyeceğimi düşündüm. Umarım bu orada başka birine yardımcı olacaktır!

Kod temel olarak bir step motorun analog joystick'in açısal konumunu "kopyalamasına" izin verir, yani joystick'i ileri iterseniz motor "kuzeye" bakar. joystick'i batıya doğru itin, motor aynı yönü gösterecek şekilde döner.

Uygulamam için, joystick bırakılırsa, yani açısal konumu yoksa, motorun "ev" yönüne dönmesini istedim. Ana yön doğuya bakar ve motor (veya çıkış miline bağladığınız her ne olursa olsun işaretçi / cihaz!) çalıştırıldığında da bu yöne bakmalıdır.

Gereçler

Arduino Uno veya benzeri

breadboard ve jumper kablo seçimi (erkekten erkeğe, erkekten dişiye)

5V güç kaynağı

Analog joystick modülü (ideal olarak anlık bir basma düğmesi özelliği ile bu, "ana" konumunun daha kolay dinlenmesini sağlar

28BYJ-48 step motor ve ULN2003 step sürücü

Kalem, kağıt ve blu-tac (veya motora takmak için başka herhangi bir işaret cihazı!)

Adım 1: Adım 1: Kurulum

Step motoru step sürücüye bağlayın ve pinleri aşağıdaki gibi bağlayın:

IN1 - Arduino pimi 8

IN2 - Arduino pin 9

IN3 - Arduino pin 10

IN4 - Arduino pimi 11

5v güç kaynağınızı devre tahtanızdaki besleme raylarına bağlayın ve ULN2003 5v girişlerini besleme raylarına bağlayın. toprak rayını Arduino'nuzdaki toprağa bağlayın.

joystick için aşağıdaki gibi bağlayın:

Anahtar pimi - Arduino pimi 2

X ekseni - Arduino A0 (0'da Analog)

Y ekseni - Arduino A1

+5V - Arduino 5V çıkışı

GND - Arduino GND

Son olarak, breadboard'unuzun zeminini diğer Arduino GND pinine bağlayın

Adım 2: Adım 2: Kodu Açıklamak

İndirmeniz ve kullanmanız için tam Arduino kodunu ekledim. Ancak burada ilgili kısımları açıklamak için elimden geleni yapacağım.

Bu kodun arkasındaki teori, joystick'in kapladığı alanın, merkezde 0, 0 olacak şekilde bir grafiğe bölünmesidir. ancak joystick girişleri merkezde (yaklaşık) 512'de durur, bu nedenle bu iki işlevin üstesinden gelmek için X ve Y ekseninden okunan değeri "sıfırlamak" için kullanılır. Kullandığınız güç kaynağına bağlı olarak, joystick'inizin dinlenirken güvenilir bir 0 okuması vermesi için ZeroX ve ZeroY fonksiyonlarındaki değerleri değiştirmeniz gerekebilir.

X, Y değerleri okunduğunda, ilk olarak math.h kitaplığındaki atan2() işlevi kullanılarak radyana dönüştürülür. Bu işlevi açıklamak bu talimatın kapsamı dışındadır, ancak lütfen gidip bakın - bu oldukça basit bir geometri hilesidir!

Son olarak, eskiden rad yerine derece ile çalışan bizler için hayatı kolaylaştırmak için atan2() tarafından hesaplanan rad değeri dereceye dönüştürülür.

Döngünün en üstünde, "ev" konumunu taşımak için joystick üzerindeki anlık düğmeyi tıklamanıza izin veren küçük bir kod parçacığı bulunur. Bu, kodu test ederken inanılmaz derecede faydalı oldu, ancak bazı durumlarda nasıl yararlı olabileceğini görebildiğim için onu bıraktım.

Şimdi kodun ana yığınına! 10ms'lik bir gecikmeyle iki kez ayrılmış joystick X, Y koordinatlarını okuyarak başlıyoruz ve ardından aynı olup olmadıklarını kontrol ediyoruz - joystick'in ara sıra aralıklı okumalar vereceğini buldum ve bu hafif gecikme, motorun bunlara dayalı olarak dönmesini durdurmak için yeterliydi. Ayrıca, kasıtlı girdilere müdahale etmemesi için yeterince kısa bir gecikme.

Kodun geri kalanı oldukça açıklayıcıdır ve bunu belgelemek için elimden gelenin en iyisini yaptım; Bir dizi IF ifadesi, mevcut joystick açısını motor açısıyla karşılaştırır ve motoru bu açıya hareket ettirir. 28BYJ-48, derece başına 5.689 adıma sahiptir, bu yüzden gerekli hareketi bu görünüşte tek sayı ile çarpıyoruz!

Kodun en çok açıklama gerektiren kısmı, "sarma durumu" olarak adlandırdığım kısımdır. Joystick ve motorun örn. +175 ° ve joystick daha sonra -175°'ye hareket etti (kuzeybatının hemen kuzeyinden batının hemen güneyine doğru joystick üzerinde sadece 10°'lik bir hareket), motor YANLIŞ YÖNDE 350° hareket ederdi! Bunu hesaba katmak için özel durum yazılmıştır.

Sarma durumu, motor ve joystick'in zıt işaretlere sahip olup olmadığını kontrol ederek başlar, yani motor pozitif ve joystick negatif veya tam tersi. Ayrıca joystick ve motorun mutlak değerlerinin (yani pozitif değerlerin) toplamının 180°'nin üzerinde olup olmadığını kontrol eder.

Bu ifadelerin her ikisi de doğruysa, fonksiyon motorun saat yönünde mi (motor değeri negatifse) yoksa saat yönünün tersine mi (motor değeri pozitifse) hareket etmesi gerektiğini kontrol eder.

Hareket mesafesini belirlemek için motor açısı ve joystick açısının mutlak değerleri toplanır ve 360°'den çıkarılır. Son olarak, motor açısı (şimdi joystick açısını yansıtır) bu şekilde güncellenir.

Adım 3: BİTMİŞ

Yani, geriye kalan tek şey kodu Arduino'nuza yüklemek ve çalıştırmak! Projenin nasıl işlediğine dair iyi bir fikir için yukarıdaki videoya bakın. Bu, kamera gimballeri, robotik kollar ve diğer birçok uygulama için faydalı olacaktır!

Kodu kullanırsanız lütfen bana bildirin ve kodun geliştirilebileceği herhangi bir yer görürseniz geri bildiriminizi duymak isterim.

Önerilen: