Raspberry Pi 4 Geliştirme Kartı İle Servo Motor Çalıştırma.

28 Mar 2020
192
196
Ötüken!
Merhaba sayın Türk Hack Team forum üyeleri.

Bugün sizlere Teknofest projemiz için üzerinde çalışmış olduğumuz Raspberry geliştirme kartı (konunun devamında rp diye bahsedeceğim) ile nasıl servo motor çalıştırdığımızı anlatacağım.
bu konunun açılma amacı uzaktan , yakından mekatronik bilimi ile ilgilenen herkesin başına gelen bir durumdur, ne kadar istesekte bir türlü o youtube de izlediğimiz ya da forumlarda gördüğümüz kodları çalıştıramayız hele ki elinizde bir örümcek robot ve 12 motor var ise. Bugün sizleri bu meşakkatli işten kurtaracağımı umut ediyorum.

İlk önce RPi.GPIO kütüphanesini indirmeniz gerekmektedir , bunu indirmek için rp'imizin terminal ekranına girip " sudo apt-get install RPi.GPIO " demeniz yeterli olacaktır eğer ki bir problem verir ise o zaman gpiozero kütüphanesini indirmelisiniz.

bazı arkadaşlar bu kodu windows'ta vs code üzerinden açmaya çalışmakta ve
"Traceback (most recent call last):
File "c:\Users\hp\Desktop\Visual studio Code\smart spidi\1kod.py", line 1, in <module>
import RPi.GPIO as GPIO
ModuleNotFoundError: No module named 'RPi' " hatası ile karşılaşmakta , arkadaşlar hiç bir şekilde bu kodu Windows üzerinde çalıştıramazsınız , bunun nedeni ise kullandığımız rp kartının pinlerinden belli bir frekans çıkması ve bu çıkan frekansın motorları kontrol etmesidir. - bu olay daha karışık lakin konuyu uzatmak istemiyorum- korkmayın bu hata çıkarsa ve kodu rp'ye aktarın direkt olarak. isterseniz artık kodlara geçelim.


import RPi.GPIO as GPIO
import time


#pin çıkışlarını belli ettiğimiz kısım

GPIO.setmode(GPIO.BOARD)
GPIO.setup(3,GPIO.OUT) # 3. pini çıkış olarak ayarlıyoruz
GPIO.setup(5,GPIO.OUT)
GPIO.setup(7,GPIO.OUT)
GPIO.setup(8,GPIO.OUT)
GPIO.setup(10,GPIO.OUT)
GPIO.setup(11,GPIO.OUT)
GPIO.setup(12,GPIO.OUT)
GPIO.setup(13,GPIO.OUT)
GPIO.setup(21,GPIO.OUT)
GPIO.setup(16,GPIO.OUT)
GPIO.setup(18,GPIO.OUT)
GPIO.setup(19,GPIO.OUT)

servo1 = GPIO.PWM(3,50) # motorların titremesini önlemek için stabil olarak 50Hz gönderiyoruz pinlere
servo2 = GPIO.PWM(5,50)
servo3 = GPIO.PWM(7,50)
servo4 = GPIO.PWM(8,50)
servo5 = GPIO.PWM(10,50)
servo6 = GPIO.PWM(11,50)
servo7 = GPIO.PWM(12,50)
servo8 = GPIO.PWM(13,50)
servo9 = GPIO.PWM(21,50)
servo10 = GPIO.PWM(16,50)
servo11 = GPIO.PWM(18,50)
servo12 = GPIO.PWM(19,50)

#servo motorların başladığı ve istediğimiz konuma döndürebileceğimiz kısımdır, dikkatli olun , 0 dan küçük , 180'den büyük girer iseniz servo motorun içinde ki potansiyometre'nin kafasını
#karışıtırıp yakabilirsiniz ,dikkatli olmakta fayda bulunmaktadır.

try:
while True:
angle = float(input("0 ila 180 derece arasında bir sayı girin"))
servo1.start(2+(angle/18))
servo2.start(2+(angle/18))
servo3.start(2+(angle/18))
servo4.start(2+(angle/18))
servo5.start(2+(angle/18))
servo6.start(2+(angle/18))
servo7.start(2+(angle/18))
servo8.start(2+(angle/18))
servo9.start(2+(angle/18))
servo10.start(2+(angle/18))
servo11.start(2+(angle/18))
servo12.start(2+(angle/18))
time.sleep(0.5)

#kodu kapattıktan sonra her şey shutdown olur.
finally:
GPIO.cleanup()
print("bitti.")


Evet , kodumuz aynen budur , kütüphanelerimizi terminal üzerinden kurduktan sonra bu kodu rp'imizin içinde python editörü olan THONNY'nin içine atıp , kayıt edip çalıştırabilirsiniz. sonrasında ise ricamdır devrede ki tüm motorları son kez kontrol edin ve devreye artı ve eksiyi öyle bağlayın.

Şimdi gelelim işin ince ayarlarına , board üzerinde neler yapmalıyız? nasıl bir düzen izlemeliyiz? , ben size burada şahsen kullandığımız bir rp pinout fotosunu paylaşacağım.





pinler.jpg


Kullandığımız pinout şablonu budur , sizler burada GPIO yazan pinlere servo motordan gelen turuncu renkteki kabloyu bağlayacaksınız ve bağladığınız pini ise kodda yazan GPIO.setup(3,GPIO.OUT) ve servo2 = GPIO.PWM(5,50) yerlere gireceksiniz , kaç adet servo bağladıysanız o kadar tanımlama yapınız ve dikkatli tanımlayın çünkü rp üzerindeki pinlerde hata varsa bulmak zordur bu yüzden önerim sizlere 1 pin taktıktan sonra onu hemen kodda ki gibi tanımlamak olacaktır bu sayede bir sıkıntı çıkma riski düşecektir.

son olarakta rp den 1 adet GND'yi boardın en üstüne taktıktan sonra artık li-po pil'i devreye bağlayabiliriz lakin ne olur , ne olmaz ricamdır , bir arkadaşınız servo motorlardan gelen "+" ve "-" uçların ısınıp ,ısınmadığını kontrol etsin eğer ısınıyorsa hemen çekin li-po pil'i ve servodan gelen "+" , "-"'i düzelttikten sonra yanmadığına dua edin.

Rp kendi başına maks. 2 motor çalıştırabilmektedir , devamını çalıştıramaz, 1'den fazlasında ise zorlanmaktadır. o yüzden devreye dış kaynaktan bir pil veya vb. bir güç kaynağı takmak mantıklıdır lakin o güç kaynağına regülatör bağlamayı unutmayın , bütün motorları yakmanız içten bile değil.

bu kadar şey anlattık ve tüyolar vardık , ee artık geçmeyelim mi kodu çalıştırmaya? , buyrunuz.

kodu çalıştırdıktan sonra hata alabilirsiniz lakin ekranda "0 ila 180 derece arasında bir sayı girin" yazısını gördükten sonra yapıştırın bir derece , zaten çalıştığını göreceksiniz eğer ki tüm motorlar çalışmıyor sadece 3'ü 5'i çalışıyorsa güç kaynağınızda vardır -isteyen arkadaşlara pazartesi okula gittiğimde kullandığımız li-po pil'in fotoğrafını atabilirim.-

evet aslında servo motor çalıştırmak bu kadar kolay , yakında sizlere rp ile windows arasında TCP araçılığı ile fotoğraf aktarımı ve yukarı da gördüğünüz kodun windows üzerinden tuşlar araçılığı gerçek zamanlı kontrolünü anlatan birkaç konu daha açacağım , umarım konum faydalı olmuştur. foruma üye olmasa da gecesini gündüzüne katarak çalışan coder arkadaşım umuta da teşekkürlerimi iletiyorum. herkese iyi geceler ve iyi forumlar.

-sorularınız olursa aciz bilgim ile yardım etmeye çalışırım-
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.