Step motorlar küçük adımlar halinde istenildiği kadar döndürülebilen ve güç devam ettiği sürece durduğu zamanlarda bile pozisyonunu sıkıca koruyabilen motor tipleridir. Tam bir dönüş turunu hassas bir şekilde eşit adımlar ile kat ederler ve bu yüzden yazıcılar gibi hassas pozisyonlama isteyen her alanda kullanılırlar.
Arduino ile step motor deneyimlemenin en ucuz yolu 28BYJ-48 kodlu motorlardan edinmektir. Bu motorlar 5 Volt ve 12 Volt olarak iki farklı türdedir ve çoğu ULN2003 çipini kullanan bir sürücü modülü ile birlikte gelir. Arduino ile basit projeler yapmak için 5 Volt’luk modeli seçmek mantıklıdır.
28BYJ-48 motoru tam bir turunu 32 adımda tamamlar. Motor ayrıca 1/64 devir düşürücüye bağlıdır ve çıkışın tam bir tur dönmesi için 32 x 64 = 2048 adım atması gerekir.
ULN2003 temelli modül varken motorun 5 pinlik çıkışı üzerinde kafa yormamıza gerek yok. Beyaz renkli soketi modüle bağlıyoruz ve geriye 6 pinlik Arduino bağlantısı kalıyor.
Step motorların çoğu Arduino pinlerinden güç alamayacak kadar yüksek akım çekerler. Ancak 28BYJ-48 motorun 5 Volt’luk modeli kısa bir USB kablosu kullanmamız halinde Arduino üzerinden ucu ucuna beslenebiliyor. Daha güçlü modeller için ayrı bir güç kaynağı kullanmak gerekir.
Aşağıdaki devre kurulumunda Arduino ve step motor sürücüyü harici bir 5 Volt güç kaynağı ile beslemeyi gösterdik. USB üzerinden beslemeyi denemek için Arduino’nun 5V çıkışını modül üzerindeki + girişine ve GND çıkışını modül üzerindeki – girişine bağlamalıyız.
Step motorlar içlerindeki bobin yapıları sayesinde bağlantılarına belirli bir sırayla 1 veya 0 gönderilerek döndürülürler. Bunu daha iyi anlamak için aşağıdaki sketch içindeki sol fonksiyonunu inceleyelim.
Sola dönüşte gönderilen değerleri alt alta yazalım;
1,0,0,0
1,1,0,0
0,1,0,0
0,1,1,0
0,0,1,0
0,0,1,1
0,0,0,1
1,0,0,1
Görüldüğü gibi 1’ler adım adım sürekli sağa kayıyor ve sonda da en başa dönmeye çalışıyor. Bu sıralama motorun bir yöne dönmesi için. Bu değerleri motora tersten, yani alttan üste doğru gönderirsek diğer yöne döner.
Aşağıdaki sketch step motoru önce bir yöne, sonra diğer yöne döndürüyor ve bu dönmelerin hızlarını ayarlıyor.
Arduino’da iyi olmak için öncelikle elektronikte iyi olmak gerekir. Türkiye’nin en iyi temel elektronik eğitim seti ARDUINO ÖNCESİ TEMEL ELEKTRONİK EĞİTİM VE DENEY SETİ‘ni keşfedin. Gereksiz bilgilerden arındırılmış basit ve eğlenceli anlatımla ELEKTRONİK öğrenin ve Arduino’ya METE HOCA farkıyla güçlü başlayın!
Sketch kodunu kopyalamak için pencerenin sağ üst köşesindeki butona tıklayabilir veya buraya tıklayarak ZIP dosyası olarak indirebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
/* 28BYJ-48 Step Motor ve ULN2003 Sürücü Kartı Arduino ile Nasıl Kullanılır? 28BYJ-48 Step Motor ve ULN2003 Sürücü Kartının detaylı açıklaması ve örnek projelerini web sitemizde bulabilirsiniz. Mete Hoca https://www.metehoca.com/ */ int IN1 = 11; // Motor sürücüye bağlanan pinleri tanımlıyoruz int IN2 = 10; int IN3 = 9; int IN4 = 8; int tamtur = 2048; // 28BYJ-48 motoru tam turunu 2048 adımda tamamlıyor void setup() { pinMode(IN1, OUTPUT); // Pinleri çıkış olarak ayarlıyoruz pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); } void loop() { sol(2); // Sola tam tur dönelim ve bekleme 2 olsun delay(1000); // Döndükten sonra biraz bekleyelim sag(1); // Sağa tam tur dönelim ve bekleme 1 olsun delay(1000); // Döndükten sonra biraz bekleyelim } void sol(int bekle) { // Sola dönüş fonksiyonu int i = 0; while(i < tamtur / 4){ gonder(1,0,0,0); // Pinleri belirli bir sırayla ayarlıyoruz delay(bekle); gonder(1,1,0,0); delay(bekle); gonder(0,1,0,0); delay(bekle); gonder(0,1,1,0); delay(bekle); gonder(0,0,1,0); delay(bekle); gonder(0,0,1,1); delay(bekle); gonder(0,0,0,1); delay(bekle); gonder(1,0,0,1); delay(bekle); i++; } } void sag(int bekle) { // Sağa dönüş fonksiyonu int i = 0; while(i < tamtur / 4){ gonder(1,0,0,1); // Pinleri sola dönüşün tam tersine ayarlıyoruz delay(bekle); gonder(0,0,0,1); delay(bekle); gonder(0,0,1,1); delay(bekle); gonder(0,0,1,0); delay(bekle); gonder(0,1,1,0); delay(bekle); gonder(0,1,0,0); delay(bekle); gonder(1,1,0,0); delay(bekle); gonder(1,0,0,0); delay(bekle); i++; } } void gonder(int a,int b,int c,int d){ // Ayarlanan pin değerleri tek seferde gönderiliyor digitalWrite(IN1, a); digitalWrite(IN2, b); digitalWrite(IN3, c); digitalWrite(IN4, d); } |
Arduino IDE içinde step motorları kullanmak için hazırlanmış bir kütüphane bulunuyor. Stepper adındaki bu kütüphane bizi yukarıdaki kod karmaşasından kurtaracak.
Kütüphane oldukça basit bir kullanıma sahip. Hızı ayarlıyor ve kaç adım atacağını söylüyoruz. Motorun hangi yöne döneceğini ise adım sayısını pozitif veya negatif değerler ile ayarlıyoruz. Yani bir yön için 2048 yazarken, diğer yön için ise -2048 ayarlıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
/* 28BYJ-48 Step Motor ve ULN2003 Sürücü Kartı Arduino ile Nasıl Kullanılır? 28BYJ-48 Step Motor ve ULN2003 Sürücü Kartının detaylı açıklaması ve örnek projelerini web sitemizde bulabilirsiniz. Mete Hoca https://www.metehoca.com/ */ #include <Stepper.h> // Kütüphanemizi tanımlıyoruz // Bu kütüphane Arduino IDE'nin içinde geliyor // Bu yüzden kurmamıza gerek yok int IN1 = 11; // Motor sürücüye bağlanan pinleri tanımlıyoruz int IN2 = 10; int IN3 = 9; int IN4 = 8; int tamtur = 2048; // 28BYJ-48 motoru tam turunu 2048 adımda tamamlıyor Stepper step_motorum = Stepper(tamtur, IN2, IN4, IN1, IN3); // Kütüphane hazırlanıyor void setup() { // Stepper kütüphanesi pinleri OUTPUT olarak ayarlıyor // Dolayısıyla bizim yapmamıza gerek yok } void loop() { step_motorum.setSpeed(10); // Hızı dakikada 10 devir olarak ayarlıyoruz step_motorum.step(tamtur); // Bir tam tur dönsün delay(1000); // Biraz bekleyelim step_motorum.setSpeed(5); // Hızı dakikada 5 devir olarak ayarlayalım step_motorum.step(-tamtur); // Bu sefer diğer yöne tam tur dönsün delay(1000); // Biraz bekleyelim } |