Bu içerik 13 Ocak 2017 Tarihinde Raspberry Pi 3 Uyumlu Olacak Şekilde Güncellenmiştir. Güncellenen kısımları daha kolay şekilde görebilmeniz için farklı renkte (lacivert) yazdık. Güncelliğini yitiren kısımların ise üzerini çizdik. Keyifle oku, bol bol üret!

Raspberry Pi Dersleri serimizde kullanacağımız malzemelerin tamamına sizler için hazırladığımız setler ile kolayca sahip olabilirsiniz. Raspberry Pi’ye Uzaktan Bağlantı Yöntemleri (VNC,SSH,TTL) #4 dersimize kadar olan malzemeler için Kombo Kit, Raspberry Pi 3 Röle Kartı İle Alarm Devresi Yapımı #11 dersimize kadar olan malzemeler için Süper Başlangıç Seti, tüm derslerdeki malzemeler için Proje Seti tercih edebilirsiniz.

Merhaba arkadaşlar. Bu yazımızda Raspberry Pi’mizi kullanarak step motor kontrolü uygulaması yapacağız.

Gerekli malzemelerimiz:

Step motorlar, hassas hareket gerektiren uygulamalarda kullanılan motorlardır. Fonksiyon olarak DC motorlar ile servo motorların her ikisinin de karakterini gösterir: istenildiğinde belirli bir konuma adım adım ilerleyebilir veya sürekli olarak istenilen yönde döndürülebilir. Normal yazıcılar ve 3B yazıcıların vazgeçilmez parçalarındandırlar.

Bizim bu uygulamamızda kullanacağımız step motor genellikle sürücü kartıyla birlikte satılmaktadır. Bu sayede breadboard’a ihtiyaç duymadan kolaylıkla bağlantı yapmamız mümkündür.

ders9_stepper_bb

Bağlantıları yaptıktan sonra Raspberry Pi’mizi çalıştırıyor ve stepper.py isimli bir dosya oluşturarak aşağıdaki kodu içine yazıyoruz:

import RPi.GPIO as GPIO
import time
 
GPIO.setmode(GPIO.BCM)
 
enable_pin = 18
coil_A_1_pin = 4
coil_A_2_pin = 17
coil_B_1_pin = 23
coil_B_2_pin = 24
 
GPIO.setup(enable_pin, GPIO.OUT)
GPIO.setup(coil_A_1_pin, GPIO.OUT)
GPIO.setup(coil_A_2_pin, GPIO.OUT)
GPIO.setup(coil_B_1_pin, GPIO.OUT)
GPIO.setup(coil_B_2_pin, GPIO.OUT)
 
GPIO.output(enable_pin, 1)
 
def forward(delay, steps):  
  for i in range(0, steps):
    setStep(1, 0, 1, 0)
    time.sleep(delay)
    setStep(0, 1, 1, 0)
    time.sleep(delay)
    setStep(0, 1, 0, 1)
    time.sleep(delay)
    setStep(1, 0, 0, 1)
    time.sleep(delay)
 
def backwards(delay, steps):  
  for i in range(0, steps):
    setStep(1, 0, 0, 1)
    time.sleep(delay)
    setStep(0, 1, 0, 1)
    time.sleep(delay)
    setStep(0, 1, 1, 0)
    time.sleep(delay)
    setStep(1, 0, 1, 0)
    time.sleep(delay)
 
  
def setStep(w1, w2, w3, w4):
  GPIO.output(coil_A_1_pin, w1)
  GPIO.output(coil_A_2_pin, w2)
  GPIO.output(coil_B_1_pin, w3)
  GPIO.output(coil_B_2_pin, w4)
 
while True:
  delay = raw_input("Adim arasi bekleme suresi (milisaniye)?")
  steps = raw_input("Ileri kac adim? ")
  forward(int(delay) / 1000.0, int(steps))
  steps = raw_input("Geri kac adim? ")
  backwards(int(delay) / 1000.0, int(steps))

Bu kodu kaydettikten sonra

sudo python stepper.py

komutunu vererek programın çalışmasını sağlıyoruz. Raspbian’ın güncel sürümünde Python komutlarından önce sudo yazmamıza gerek yoktur. Program bize ilk olarak adım arası bekleme süresini soruyor. Bunu hız olarak düşünebiliriz, ne kadar düşük bir değer seçersek step motorumuz o kadar hızlı dönecektir. Daha sonraki adımda ileri yönde kaç adım gideceğini soruyor. Değeri girdikten sonra motor dönmeye başlıyor ve motor durduktan sonra bu sefer kaç adım geri gideceğini soruyor. Motor ters yönde çalıştıktan sonra da program tekrar başa dönüyor.

https://www.youtube.com/watch?v=ROb_PXV8Sy8

16 Yorumlar

  1. “python: can’t open file ‘stepper.py’: [Errno 2] No such file or directory” hatası veriyor. Ne yapmalıyım ?

    • Kodu kaydetmiş olduğunuz dosya isminin “stepper.py” olduğundan emin misiniz? Ayrıca Linux işletim sisteminde dosya isimleri büyük/küçük harf duyarlıdır. Hatanız bundan kaynaklı olabilir.

  2. hocam step motorun sürücüsünü aynı sizin yaptığınız gibi 5 volt 1 amperlik adaptörle besliyorum, kod çalışıyor ve step motoru elime aldığımda içindeki dönüşleri hissedebiliyorum fakat motorun ucundaki mil dönmüyor. acaba verdiğim besleme mi yetersiz?

  3. meraba. python dili hakkında hiç bilgim yok ama projemizin basit bir kısmında kullanmam gerekiyor. sorum şu;
    raspberry pi 3 ile ultrasonik sensör veya pır sensörü ile hareket algılandığında step motor belli bi adım atacak, bir süre sonra aynı adımı geri gelecek. Yardımcı olursanız çok makbule geçer.

    • Merhabalar, step motorları doğrudan SPI ya da I2C ile süremezsiniz, bu haberleşme özelliklerine sahip uygun bir motor sürücü kullanmanız gerekir.

      • Peki hangi motor sürücüyü almalıyım? Bir sürücü önerirseniz çok sevinirim. Cevap verdiğiniz için teşekkürler…

  4. Merhaba,
    1 adet raspi3 e 6 step motor bağlanabilir mi ? yani 2 cnc sistemini tek raspi3 ile kontrol edebilir miyim ?
    bu iki cnc sistemi de eşzamanlı çalışabilecek şekilde nasıl kurgulayabilirim ?

    • 6 adet step motoru doğrudan bağlamanız için GPIO pinleri yeterli gelmeyebilir. Bu projeniz için step motorları sürücüler ile Arduino ya da benzeri bir mikrokontrolcü kartına bağlayabilir, daha sonra bu mikrokontrolcüyü Raspberry Pi’nize USB yada doğrudan UART üzerinden bağlayarak haberleştirme yapabilirsiniz.

  5. Ses komutu ile step motor konrolü yapacağım , bunun için matlab de gerekli kodları yazdım ve 2018 sürümünde raspberry pi dan çıkış alabileceğimi öğrendim , Şimdi step motoru 10 tur saat yönünde döndürüp sonra resetlenecek raspi kodlarını yazmam gerek. Yardımcı olabilir misiniz

CEVAP VER

Please enter your comment!
Please enter your name here