Alışverişlerinizi Robotistan’dan Yapın

Faydalı içerikler oluşturarak size yardımcı olmak istiyoruz. Aynı zamanda uygun fiyat, hızlı teslimat ve kaliteli hizmetle Robotistan.com’da hizmet veriyoruz. Siz de alışverişlerinizi robotistan.com‘dan yaparak bize yardımcı olabilirsiniz 🙂

Arduino Step Motor Kontrolü ve İnternet Üzerinden Step Motor Sürme

Merhabalar. Bu yazımızda öncelikle Arduino ile step motor kontrolünü öğreneceğiz. Ardından da ESP8266 kullanarak step motorumuzu internet üzerinden kontrol edeceğiz.

Step motorlarla alakalı detaylı bilgi almak isterseniz blog yazımızı ziyaret edebilirsiniz >>> Step Motor Nedir?

Arduino İle Step Motor Kontrolü

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 yön kontrolü ve hız kontrolü yapılabilir. Normal yazıcılar ve 3B yazıcıların vazgeçilmez parçalarındandırlar.

Step motorlar, bipolar ve unipolar olmak üzere iki çeşittir: bipolar step motorlar 4 kablolu, unipolar step motorlar ise 4,5,6 ya da 8 kablolu olabilirler.

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 step motor Arduino bağlantısı yapmamız mümkündür. Step motor nasıl bağlanır sorusunu da böylece çözmüş oluyoruz.

Gerekli malzemeler:

Step Motor Sürücü Devresi

Bu uygulamamız için hâlihazırda bulunan bir step motor kütüphanesi mevcuttur. Bu kütüphaneyi indirmek için şu linki tıklıyoruz: https://github.com/tardate/X113647Stepper/archive/master.zip

İndirme işlemi tamamlandığında, zip dosyasını açıyor ve X113647Stepper-master isimli klasörü C:\Program Files (x86)\Arduino\libraries klasörünün altına kopyalıyoruz. (Eğer bilgisayarınızda 32-bit Windows yüklü ise C:\Program Files\Arduino\libraries klasörünü kullanın.)

Arduino programımızı açıp Dosya > Örnekler > X113647Stepper-master > FullSweep adımlarını takip ediyoruz ve bu kodu kartımıza yüklüyoruz. Kodumuz, step motorumuzu önce tam tur bir yönde döndürecek, daha sonra zıt yönde tekrardan tam tur döndürecektir. Koddaki myStepper.setSpeed() fonksiyonunun değerini değiştirerek motorun dönme hızını ayarlayabiliriz.

Neden Step Motoru Doğrudan Arduino’ya Bağlamıyoruz Da Bir Sürücü Devresi Kullanıyoruz?

Step motorlar adım adım çok hassas dönme hareketi yaparak çalışan motorlardır. Girişlerine uygulanan pals sinyallerine karşı çıkış olarak analog dönme hareketi sağlarlar. Girişlerindeki bu pals sinyalleri ve ürettikleri analog çıkış sinyalleri sürücü devrelerinde kontrol edilir. Motor sürücü devreleri sayesinde hız ve yön kontrolleri sağlanmış olur.

Sitemizdeki step motor sürücü kartlarına buradan ulaşabilirsiniz.

Step Motor Sürmeyi Öğrendik. Şimdi İnternet Üzerinden Kontrol Etmeyi Öğrenelim

Gerekli Malzemeler:

ESP8266 ile kullanacağımız Step Motor devremizi kurabiliriz. Ayrıca videoda tavsiye ettiğimiz 100uF kondansatörü sitemizden bulabilirsiniz.

Uygulamamız için gerekli Arduino step motor kodunu aşağıdaki gibi yazabiliriz 🙂

String agAdi = "Robotistan";                   //Ağımızın adını buraya yazıyoruz.    

String agSifresi = "bmc34RbT124";             //Ağımızın şifresini buraya yazıyoruz.

int motorPin1 = 3, motorPin2 = 4, motorPin3 = 5, motorPin4 = 6; //Step motor pinlerini tanımlıyoruz.

 

void setup(){ 

  pinMode(motorPin1, OUTPUT);                                   //Motor pinleri OUTPUT olarak ayarlanır.

  pinMode(motorPin2, OUTPUT);

  pinMode(motorPin3, OUTPUT);

  pinMode(motorPin4, OUTPUT);

  Serial.begin(115200);                                         //Seri haberleşmeyi başlatıyoruz.

  Serial.println("AT");                                         //AT komutu ile modül kontrolünü yapıyoruz.

  while(!Serial.find("OK")){                                    //Modül hazır olana kadar bekliyoruz.

    Serial.println("AT");

  }

  delay(1000);  

  Serial.println("AT+RST");                                     //ESP8266'yı resetliyoruz.

  delay(1000);

  while(!Serial.find("ready"))                                  //Resetleme işleminin bitmesini bekliyoruz.

  delay(1000);

  Serial.println("AT+CWMODE=1");                                //Modülümüzü client olarak ayarlıyoruz.

  while(!Serial.find("OK"));                                    //Ayarlamanın tamamlanmasını bekliyoruz.

  Serial.println("AT+CWJAP=\""+agAdi+"\",\""+agSifresi+"\"");   //Wifi'a bağlanıyoruz.

  while(!Serial.find("OK"));                                    //Bağlanana kadar bekliyoruz.

  Serial.print("AT+CIFSR\r\n");                                 //IP adresini ve MAC adresini okuyoruz.

  Serial.print(espOkuma(1000));                                 //IP ve MAC adresini ekrana yazıyoruz.

  serialTemizle(2000);                                          //Seri haberleşmede kullanmadığımız verileri temizliyoruz.

  Serial.print("AT+CIPMUX=1\r\n");                              //Çoklu bağlantı ayarını yapıyoruz.

  serialTemizle(2000);

  Serial.print("AT+CIPSERVER=1,80\r\n");                        //Server oluşturuyoruz ve 80. porttan dinlemeye başlıyoruz.

  serialTemizle(2000);

}

void loop(){

  if(Serial.available()){                                       //Seri haberleşme verisi geldiğinde içindeki komutlar çalışır.

    if(Serial.find("+IPD,")){                                   //Bağlantı isteği geldiğinde içindeki komutlar çalışır.

      delay(200);

      int connectionId = Serial.read() - 48;                    //Bağlantı numarasını okuyoruz.

      String komut = espOkuma(1000);                            //Bağlantı komutlarını alıyoruz.    

      if(komut.indexOf("step=ileri") != -1){                    //İleri komutu geldiğinde içerisindeki komutlar çalışır.

        for(int adim = 0; adim < 5; adim++){                    //Step motora 5 kere ileri hareketi yaptırılır.

          stepIleri(50); 

        }

      }

      else if(komut.indexOf("step=geri") != -1){                //Geri komutu geldiğinde içerisindeki komutlar çalışır.

        for(int adim = 0; adim < 5; adim++){                    //Step motora 5 kere geri hareketi yaptırılır.

          stepGeri(50); 

        }

      }

      String sayfa = "<h1>Step Motor Kontrol</h1><br>";                           

      sayfa+="<br><a href=\"?step=ileri\"><button><h1>Ileri</h1></button></a>";

      sayfa+="<br><br><a href=\"?step=geri\"><button><h1>Geri</h1></button></a>";

      komut = "AT+CIPSEND=";                                    //Sayfa verisinin uzunluğu komut değişkenine eşitlenir.

      komut += connectionId;

      komut += ",";

      komut +=sayfa.length();

      komut +="\r\n";

      Serial.print(komut);                                      //Komut gönderilir.

      delay(1000);

      Serial.print(sayfa);                                      //Sayfa verisi gönderilir.

      delay(1000);

      komut = "AT+CIPCLOSE=";                                   //Bağlantı sonlandırma komutu ayarlanır.    

      komut+=connectionId;

      komut+="\r\n";

      Serial.print(komut);                                      //Bağlantı sonlandırma komutu gönderilir.

    }

  }

}

String espOkuma(long int zamanAsimi){                           //ESP'den gelen dönütleri okur.

  long int baslangic = millis();  

  String gelen;

  while(millis() - baslangic < zamanAsimi){                   

    if(Serial.available()>0){

        char c = Serial.read(); 

        gelen += c;

    } 

  }

  gelen.replace("AT+","");

  return gelen;

}

void serialTemizle(long int zamanAsimi){                         //Seri haberleşmede kullanmadığımız byteları temizler.

  long int baslangic = millis();

  while(millis() - baslangic < zamanAsimi){

    if(Serial.available()>0){

        Serial.read(); 

    } 

  }

}

void stepIleri(int beklemeSuresi){                               //Step motora ileri hareketi yaptırır.

  digitalWrite(motorPin1, HIGH);

  digitalWrite(motorPin2, LOW);

  digitalWrite(motorPin3, LOW);

  digitalWrite(motorPin4, LOW);

  delay(beklemeSuresi);

  digitalWrite(motorPin1, LOW);

  digitalWrite(motorPin2, HIGH);

  digitalWrite(motorPin3, LOW);

  digitalWrite(motorPin4, LOW);

  delay(beklemeSuresi);

  digitalWrite(motorPin1, LOW);

  digitalWrite(motorPin2, LOW);

  digitalWrite(motorPin3, HIGH);

  digitalWrite(motorPin4, LOW);

  delay(beklemeSuresi);

  digitalWrite(motorPin1, LOW);

  digitalWrite(motorPin2, LOW);

  digitalWrite(motorPin3, LOW);

  digitalWrite(motorPin4, HIGH);

  delay(beklemeSuresi);

}

void stepGeri(int beklemeSuresi){                                //Step motora ileri hareketi yaptırır.

  digitalWrite(motorPin1, LOW);

  digitalWrite(motorPin2, LOW);

  digitalWrite(motorPin3, LOW);

  digitalWrite(motorPin4, HIGH);

  delay(beklemeSuresi);

  digitalWrite(motorPin1, LOW);

  digitalWrite(motorPin2, LOW);

  digitalWrite(motorPin3, HIGH);

  digitalWrite(motorPin4, LOW);

  delay(beklemeSuresi);

  digitalWrite(motorPin1, LOW);

  digitalWrite(motorPin2, HIGH);

  digitalWrite(motorPin3, LOW);

  digitalWrite(motorPin4, LOW);

  delay(beklemeSuresi);

  digitalWrite(motorPin1, HIGH);

  digitalWrite(motorPin2, LOW);

  digitalWrite(motorPin3, LOW);

  digitalWrite(motorPin4, LOW);

  delay(beklemeSuresi);

}
Paylaş

Yorumları Görüntüle

  • Merhabalar bilgisayara bağlıyken kullanırsak kartı yakar mıyız ? Hem +9V pil takıp hem de pc ye takılı olsa çözüm olur mu teşekkürler ?

    • Bağlayacağınız 9V pil Arduino'ya regülatör aracılığıyla güç vereceğinden herhangi bir sorun olmayacaktır. Dikkat etmeniz gereken tek nokta, Arduino üzerinde yer alan 5V veya 3.3V pinlerine yanlış gerilim uygulamamaktır. Vin pini veya adaptör girişinden uyguladığınız gerilim regülatörden geçerek Arduino üzerindeki 5V ve 3.3V hatlarını besleyecektir.

  • Merhaba, step motoru ile 1. butonla saga 200 mm, 2. butonla sola 400 mm surmek icin hangi kod yazilmalidir?

  • Merhaba, Tinylab üzerinde Arduino motor shild ile 2 adet nema 17 2.8 volt 1,7 mA Step motor kullanmak istiyorum. Step motorların faz başına çektiği akım 2,8 volt bu sorun olurmu ?

    • Kullanacağınız step motor sürücü ve motor besleme için kullanacağınız harici güç kaynağı motorların çektiği akımı karşılayabiliyorsa sorun olmaz.

  • Astrofotoğrafi için yıldız takip motoru yapmak istitorum. 200 adımlık motoru 400 adım veya daha fazla adım sayısına çıkartarak 24 saatte 1 tur yapacak şekilde ayarlamak istiyorum. Açı 1.8 derece açı uzun pozlama için fazla. 0.9 yada daha mikro steple daha az açılı adımlar ayarlayabilir miyim. Bunu bir kütüphanede bulabilir miyim.

    • Bu işlem için derste anlatılan sürücü kartı malesef ihtiyaçlarınızı karşılayamayacaktır. Step motorunuzu mikro adım sürmek isterseniz sitemizde bulunan A4988 veya DRV8825 sürücülerini kullanabilirsiniz.

      • Ben de easy driver var onunla olur mu? Bu şekilde kod yazılımını nasıl oluştururum? Teşekkürler

        • Bahsettiğiniz sürücü ile ilgili malesef bilgim mevcut değil. Kullanacağınız sürücüye göre yazılımınız da doğal olarak değişecektir. Kartın dökümanları arasında örnek kod varsa buradan yararlanabilirsiniz.

  • merhabalar ben üniversite bitirme projesi için arduino mega ve cnc shıeld kullanarak bir tasarım geliştirmek istiyorum. 2sistemde 2 step motor bulunuyor ve aynı anda aynı hareketleri yapıyorlar. 6 oluklu bir slindir sarılacak ve her olukta step motorlar duracak. 6 oluk bir tam tur yapmakta ama sarım arttıkça oluklar ARASI MESAFE artmakta yani mesafeyi eşitlemem gerekiyoroluklar üst üste gelmeli iç çap 2cm dış çap 5 cm olarak sarım işlemi yapmalıyım ama kod düzenleyemiyorum yardımcı olabilir misiniz.

  • selam grbl controller ekranında sağ alt sarı bölmeye şekil ve şema atamıyorum.hangi yolu izlemeliyim.resime göre nasıl g code üretebilirim.hangi link den yardım alabilirim.makinem hazır ama hiç bir şey çizemedim.

  • Ben normal a4988 le step motor çalıştırmayi denEdin ama yapamadım
    Motor saga doğru 5 sn içinde 180 derece dönecek 5 sn duracak sonra saga tekrar 5sn içinde 180 derece dönecek bunu sonsuza kadar devam ettirecek
    Nolur kodda ve Semana yardımcı olun acil yapmam lazım yapamadim

  • Merhaba a4988 ile kontrol edilen bir NEMA 17 step motorunun. sağa veya sola döndüğünde iki ayrı ledi yakmak istiyorum. Nasıl yapabilirim.

  • Merhaba kodu hatadan dolayi calistirmadi.
    hata mesaji bu sekilde :Arduino:1.8.9 (Windows 10), Kart:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

    FullSweep:20:1: error: 'X113647Stepper' does not name a type

    X113647Stepper myStepper(STEPS_PER_REVOLUTION, 8, 9, 10, 11);

    ^

    C:\Users\LCA-PC-2\AppData\Local\Temp\arduino_modified_sketch_614277\FullSweep.ino: In function 'void setup()':

    FullSweep:24:3: error: 'myStepper' was not declared in this scope

    myStepper.setSpeed(6.5);

    ^

    C:\Users\LCA-PC-2\AppData\Local\Temp\arduino_modified_sketch_614277\FullSweep.ino: In function 'void loop()':

    FullSweep:29:3: error: 'myStepper' was not declared in this scope

    myStepper.step(STEPS_PER_REVOLUTION);

    exit status 1
    'X113647Stepper' does not name a type

    en kisa surede cevap verirseniz cok memnnun olurum.Iyi gunler.

En Son İçerik

  • Arduino C# Projeleri ve Uygulamaları
  • Genel

Arduino ve C# ile Mini Hava İstasyonu Yapalım – 5. Ders

Sonraki Ders > < Önceki Ders Arkadaşlar merhaba, bu yazımızda Arduino'dan seri haberleşme ile birden fazla veriyi nasıl alabileceğimizi göreceğiz.…

4 gün Önce
  • Genel

Arduino İle ESP8266 WiFi Modülü Kullanarak Sıcaklık ve Nem Ölçümü – ThingSpeak’e Yollama

22. Derse Geç > < 20. Derse Dön Merhaba arkadaşlar ! Bu yazımızda sizlerle ESP8266 nedir, bu wifi modülü nasıl…

2 hafta Önce
  • Genel
  • Raspberry Pi

Raspberry Pi 4 Model B Tanıtıldı – Özellikleri Neler Farklı?

https://youtu.be/LSHLeKOxv0Y Raspberry Pi severlere müjde: Raspberry Pi 4 Model B tanıtıldı ! Mini bilgisayar olarak kullanılan ve farklı versiyonları ile…

4 hafta Önce
  • Arduino
  • Arduino Programlama ve Dersler

Arduino ile RFID Kart Okuyucu (RC522) Modül Kullanarak Kapı Kilidi Yapımı

21. Derse Geç > < 19. Derse Dön Herkese merhabalar. Eve kim ne zaman girmiş çıkmış, bilmek istemez misiniz? Öyleyse…

4 hafta Önce
  • Arduino
  • Arduino C# Projeleri ve Uygulamaları

Arduino ve C# ile Mesafe Ölçer – 4. Ders

Sonraki Ders > < Önceki Ders Arkadaşlar merhaba, bu dersimizde HC-SR04 sensörü ile ölçtüğümüz mesafeyi seri haberleşme yardımıyla anlık olarak…

1 ay Önce
  • Arduino
  • Arduino Programlama ve Dersler
  • Arduino Projeleri
  • Genel

Arduino İle MQ Gaz Sensörlerinin Kullanımı – Yanıcı Gaz Alarmı

20. Derse Geç > < 18. Derse Dön Arkadaşlar herkese selamlar ! Daha önce hiç gaz sensörü kullandınız mı? Bu…

2 ay Önce