Kod Ara

28BYJ-48 Stepper Motor'un ULN2003 Sürücü ve Arduino ile Kullanımı

28BYJ-48 Stepper Motor'un ULN2003 Sürücü ve Arduino ile Kullanımı

Bu eğitimde, bir ULN2003 sürücüsü ile Arduino kullanarak 28BYJ-48 stepper motorunu nasıl kontrol edeceğimizi öğreneceğiz. Bu kurulum, motorun konumunu ve hızını hassas bir şekilde kontrol etmeyi sağlar. Bu projenin sonunda, motoru her iki yönde döndürebilecek ve adımlarını etkili bir şekilde kontrol edebileceksiniz.

28BYJ-48 stepper motorunu kullanacağız; bu motor, düşük maliyeti ve kullanım kolaylığı nedeniyle çeşitli robotik ve otomasyon projeleri için popüler bir tercihtir. ULN2003 sürücü kartı, stepper motoru Arduino ile arayüzlendirir ve motorun hareketini kontrol eden adım sinyalleri göndermemizi sağlar. Bu eğitim, motorunuzu döndürmek için gerekli olan bağlantıları ve kodu size gösterecektir.

Daha fazla açıklama için, lütfen bu eğitimle ilgili videoya başvurun (videoda 0:45).

Donanım Açıklandı

Bu projenin ana bileşenleri 28BYJ-48 stepper motoru ve ULN2003 sürücü kartıdır. Stepper motor, döngü oluşturmak için belirli bir sırayla enerjilendirilebilen birkaç bobinden oluşur. ULN2003 sürücüsü bir anahtar görevi görerek, Arduino'nun her bobine sağlanan gücü kontrol etmesine olanak tanır.

ULN2003 sürücüsü, stepper motorun gerektirdiği daha yüksek akımı yönetmek için bir Darlington transistör dizisi kullanır. Arduino'dan bir pin YÜKSEK sinyal çıkardığında, motorun ilgili bobinine akım akmasına izin verir ve bu da motorun hareket etmesini sağlar. Bu, motorun dönüş açısı ve hızının hassas kontrolünü sağlar.

Veri Sayfası Detayları

ÜreticiULN2003
Parça numarasıULN2003
Mantık/Giriş-Çıkış voltajı5 V
Besleme voltajı5-30 V (maks)
Çıkış akımı (kanal başına)500 mA maksimum
Zirve akımı (kanal başına)2 A max
PWM frekansı rehberiN/A
Giriş mantığı eşikleri0.8 V (düşük), 2.4 V (yüksek)
Gerilim düşüşü / RDS(on)saturasyon1.5 V maksimum
Termal sınırlar70 °C maksimum
PaketDIP-16
Notlar / varyantlarGenellikle 5V stepper motorlarla birlikte kullanılır.

  • Sürücünün motorunuzun mevcut gereksinimlerini karşılayabildiğinden emin olun.
  • Gerekirse termal sınırları yönetmek için ısı emicileri kullanın.
  • Tüm bağlantıların güvenli olduğundan emin olun, böylece yüzen girişlerden kaçınılır.
  • Motoru daha büyük projelere entegre etmeden önce basit adım dizilerini çalıştırarak test edin.
  • Motoru yeterli bir besleme voltajı ile beslediğinizden emin olun.

Bağlantı Talimatları

Stepper 28BYJ-48 wiring battery
Stepper 28BYJ-48 wiring

28BYJ-48 stepper motorunu ULN2003 sürücüsüne ve Arduino'ya bağlamak için şu adımları izleyin:

Öncelikle motoru ULN2003 sürücüsüne bağlayın. Motorun dört teli vardır, genellikle turuncu, sarı, pembe ve mavi renkte kodlanmıştır. Bu telleri ULN2003 sürücüsündeki karşılık gelen çıkış pinlerine bağlayın. Bağlantılar şu şekildedir:

  • Orangetel ileOUT1
  • Yellowtel ileOUT2
  • Pinktel ileOUT3
  • Bluetel ileOUT4

Sonraki adımda, ULN2003 sürücüsünü Arduino'ya bağlayın. Sürücünün giriş pinleri, Arduino'daki dört dijital pine karşılık gelir. Örneğin:

  • IN1toPin 10
  • IN2toPin 11
  • IN3toPin 12
  • IN4toPin 13

Son olarak, ULN2003 sürücüsünün güç ve toprak pinlerini Arduino'ya bağlayın. BağlayınVCCArduino'nun 5V çıkışına pin veGNDArduino'nun toprak pinine bağlayın. Sistemi açmadan önce tüm bağlantıların güvenli olduğundan emin olun.

Kod Örnekleri ve Geçiş Rehberi

Arduino kodunun kurulum bölümünde, ULN2003 sürücüsüne bağlı pinleri tanımlıyoruz:

int Pin1 = 10; 
int Pin2 = 11; 
int Pin3 = 12; 
int Pin4 = 13; 

Burada dört tam sayı değişkeni tanımlıyoruz:Pin1,Pin2,Pin3, vePin4, Arduino'daki dijital pinlere karşılık gelir. Bu pinler, stepper motorun hareketini kontrol edecektir.

İçindesetup()fonksiyon, bu pinleri çıkış olarak yapılandırıyoruz:

void setup() { 
 pinMode(Pin1, OUTPUT);  
 pinMode(Pin2, OUTPUT);  
 pinMode(Pin3, OUTPUT);  
 pinMode(Pin4, OUTPUT);  
} 

Bu kurulum, Arduino'nun motoru kontrol etmek için ULN2003 sürücüsüne sinyaller göndermesini sağlar.pinModefonksiyon her pini ÇIKTI moduna ayarlar, böylece sinyal göndermelerini sağlar.

Son olarak, ana döngüde, değişkene dayalı olarak motorun adımlarını kontrol etmek için bir switch case oluşturuyoruz._step:

switch(_step){ 
   case 0: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, HIGH); 
   break;  
   // Additional cases follow
}

Bu alıntıda, kullanıyoruzdigitalWriteher bir pine mevcut akıma göre YÜKSEK veya DÜŞÜK sinyaller göndermek için_stepBu, hangi bobinlerin enerjilendirileceğini kontrol eder ve motorun dönmesini sağlar. Bu parçaları entegre eden tam kod, makalenin altında yüklenecektir.

Gösterim / Ne Beklemeli

Her şey doğru bir şekilde bağlandığında ve kod yüklendiğinde, stepper motor Arduino'dan gelen sinyallere yanıt olarak dönmelidir. Motoru, döngüdeki gecikmeyi değiştirerek veya adımları değiştirerek nasıl tepki verdiğini görmek için test edebilirsiniz. Motorun doğru bir şekilde beslenmediğini bilmelisiniz; bu durumda hareket etmeyebilir veya düzensiz davranabilir.

Bölümler

  • Giriş - 0:00
  • Donanım Açıklandı - 1:30
  • Bağlantı Talimatları - 3:15
  • Kod Örnekleri ve Geçiş - 5:00
  • Gösterim / Ne Beklemeli - 7:45

Görseller

Stepper 28BYJ-48 wiring battery
Stepper 28BYJ-48 wiring battery
Stepper 28BYJ-48 poles
Stepper 28BYJ-48 poles
Stepper 28BYJ-48 waveform actual
Stepper 28BYJ-48 waveform actual
Stepper 28BYJ-48 waveform inverted
Stepper 28BYJ-48 waveform inverted
Stepper 28BYJ-48 wiring
Stepper 28BYJ-48 wiring
6-The source code for stepper motor 28BYJ-48 with ULN2003 for Arduino
Dil: C++
// Original source is http://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino
// Update by Ahmad Shamshiri for RoboJax.com
// Published on March 27, 2017 in Ajax, ON, Canada.
/*
 * 
  Need wiring diagram from this code:  https://youtu.be/0glBk917HPg
  Purchase My Arduino course on Udemy.com http://robojax.com/L/?id=62
 * 

 * Get this code and other Arduino codes from RoboJax.com
Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
all in one place. Purchase My course on Udemy.com http://robojax.com/L/?id=62

If you found this tutorial helpful, please support me so I can continue creating 
content like this. 

or make a donation using PayPal http://robojax.com/L/?id=64

 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been downloaded from RoboJax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */


int Pin1 = 10; 
int Pin2 = 11; 
int Pin3 = 12; 
int Pin4 = 13; 
int _step = 0; 
boolean dir = true;// false=clockwise, true=counter clockwise
int count=0;
void setup() 
{ 
 pinMode(Pin1, OUTPUT);  
 pinMode(Pin2, OUTPUT);  
 pinMode(Pin3, OUTPUT);  
 pinMode(Pin4, OUTPUT);  
} 
 void loop() 
{ 
 switch(_step){ 
   case 0: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, HIGH); 
   break;  
   case 1: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, HIGH); 
     digitalWrite(Pin4, HIGH); 
   break;  
   case 2: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, HIGH); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 3: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, HIGH); 
     digitalWrite(Pin3, HIGH); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 4: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, HIGH); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 5: 
     digitalWrite(Pin1, HIGH);  
     digitalWrite(Pin2, HIGH); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
     case 6: 
     digitalWrite(Pin1, HIGH);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
   case 7: 
     digitalWrite(Pin1, HIGH);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, HIGH); 
   break;  
   default: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, LOW); 
   break;  
 } 
 if(dir){ 
   _step++; 
 }else{ 
   _step--; 
 } 
 if(_step>7){ 
   _step=0; 
 } 
 if(_step<0){ 
   _step=7; 
 } 
 delay(1); 

}

Dosyalar📁

Dosya mevcut değil.