Step Motoru limit Swicth ile kontrol etme
  • Merhaba arkadaşlar, Acemiliğimden dolayı özür dileyerek başlamak istiyorum .Step motoru limit switchlerle kontrol etmeye çalışıyorum ama çok fazla sorun var kodda mı hata bağlantıdamı çözemedim. yardımcı olursanız sevinirim.
    (L298N motor sürücü kullanıyorum)



    #include Stepper.h
    const int stepsPerRevolution = 200;
    Stepper myStepper(200, 8, 9, 10, 11);
    int ilerilimit = 4;
    int gerilimit = 2;
    int iLdeger = 0;
    int iGdeger = 0;

    void setup() {
    pinMode (ilerilimit,INPUT);
    pinMode (gerilimit,INPUT);

    }

    void loop() {
    {
    iLdeger = digitalRead(ilerilimit);
    iGdeger = digitalRead(gerilimit);
    }

    geri();
    if (digitalRead(2) == LOW) // burda pin numarası yerine ''iGdeger'' değişkeni çalışmadı
    {
    dur();
    delay(1000);
    }

    ileri(); //buradan sonra motor ileri switche ulaşmadan geri geliyor ? çözemedim
    if (digitalRead(4) == LOW)// burda pin numarası yerine ''iLdeger'' değişkeni çalışmadı
    {
    dur();
    delay(2000);
    geri();
    }
    }

    void ileri()
    {
    myStepper.setSpeed(150);
    myStepper.step(-stepsPerRevolution);
    }
    void geri()
    {
    myStepper.setSpeed(150);
    myStepper.step(stepsPerRevolution);
    }
    void dur()

    {
    myStepper.step(0);
    myStepper.setSpeed(0);
    }
  • nasıl bir sorun yaşıyorsunuz
  • geri switch den sonra ileri dönüyor ama ileri switche ulaşmadan tekrar geri dönüyor açıklamalarda belirttim. teşekkürler
  • proje kramayer dişli üzerinde doğrusal hareket üzerine kurulu swicth yada lazer sensör yardımıyla limit kontrolü yapmayı planlıyorum. altı üstü step motor geri dönecek , switche gelince 1 saniye duracak ileri dönecek switche gelince 2 saniye duracak tekrar geri gidecek. döngü bundan ibaret ama 3 gündür uğraşıyorum :(
  • Soft limit kullanmayı düşündünüz mü? İşin hassasiyet önemi ne derece?
  • Soft limit den kastın soft stop mu tam anlayamadım
  • Hocam step yani adım mantıklı bir motor kullanıyorsunuz. Bu her adımı kontrol altında motor demek.buraya kadar tamamız.

    Her adım kontrol ediliyor ve sayılıyorsa neden iki nokta arasında hareketi mekanik olarak çözesiniz ki? Home yani bir sıfır noktası belirlersiniz. Diyelimki 780 inci adım son nokta 15 inci adımda ilk nokta. Bu adıma geldimi dur 2 saniye bekle geri git 15 e geldinmi dur ileri git dersiniz.

    Peki neden fiziki bi anahtar kullanmamalısınız? Sorduğum hassasiyetle ilgili sorunun sebebi buydu. Limitswitch hiç bi zaman aynı noktada dur sinyali vermez. Gerek bounce dediğimiz elektriksel sıçrama gerek mekanik aşınma bi çok nedenle tutarlı olmaz. Limitswitchin yeri makine güvenliği için mekaniğin daha ilerde vurma ile sonuçlanacak son noktalara konulur. Buda kontrolcüye bağlanmamalıdır. Zaten soft limiti kaçıran hataya neden ne ise onunda verdiği sinyali kaçırır. Ya destekliyorsa sürücüye yada doğrudan güç kaynağına bağlanarak güvenlik sağlanır.

    Arduinoyla step kontrolü hiç yapmadım henüz ama bu iş için kütüphaneyede aslen gerek yok iki fonksiyon yazacaksınız for döngüsü ile her adımı komut gönderip attıracak..
  • Yanitindan dolayı teşekkür ederim windshair . döngü her başladığında motorun yeri aynı kalmayacaktı . adım sayısı ile bunu yapmak imkansız. Servo olsaydı motor olurdu .diyelim ki elektrik kesildi step 70. Adımda kaldı ki bunun yeri servo gibi net değil. Sonra döngüde verdiğin. 300 adım limit dışı kalıyor. Laser limit yapacağım tek çözüm bu. Kodda kimse yardımcı olmadı halen .
  • Her adımda epproma kaydedebilirsinde, neyse artık.peki bu uygulamada step motorun kullanılma nedeni nedir? Kodlama kısmını gözden geçirmedim bi bakayim kafa sakinken.
  • bu şekilde çalıştı. mekanik switch ile denedim durmalar biraz sert oldu. lazer switch ile deneyeceğim teşekkürler ilginiz için.

    #include

    const int stepsPerRevolution = 200;
    Stepper myStepper(200, 8, 9, 10, 11);
    int ilerilimit = 4;
    int gerilimit = 2;

    void setup() {
    pinMode (ilerilimit,INPUT);
    pinMode (gerilimit,INPUT);

    }

    void loop()
    {
    while (digitalRead(gerilimit) == HIGH)
    {
    myStepper.setSpeed(150);
    myStepper.step(stepsPerRevolution);
    }
    if (digitalRead(gerilimit) == LOW){
    myStepper.setSpeed(0);
    myStepper.step(0);
    delay(1000);
    }
    while (digitalRead(ilerilimit) == HIGH){
    myStepper.setSpeed(150);
    myStepper.step(-stepsPerRevolution);
    }
    if (digitalRead(ilerilimit) == LOW){
    myStepper.setSpeed(0);
    myStepper.step(0);
    delay(2000);
    }
    }

  • Durmaların sert olma durumunu lazerlede çözemezsin. Telefondan yazıyorum sürekli aynı şeyi tekrar etmeyeceğim. Micro işlemcin var step motor kullanıyorsun bi noktadan bi noktaya limit swicht ile kontrol için uğraşıyorsun. Basit bi bağlantı ile dc motor ve limit swicht ilede bu işi yapabilirsin. Ama madem kafandakinde vazgeçmeyeceksin sana kolay gelsin.
  • windshair teşekkür ederim eproma kaydederek sorunu çözeceğim böylelikle güç kesildiğinde step sayısını hatırlamış olacak.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook

Tagged

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.