Potansiyometreli Lineer Motor Kontrol Hk.
  • Arkadaşlar selamlar,

    buradaki projeyi yapmak istiyorum.

    Kart olarak Uno R3, sürücü olarak da L298N kullanmayı düşünmekteyim.
    Kafama takılan nokta ise lineer motorun içerisindeki potansiyometre ile son konumu okuyup; motoru sağ üst köşedeki düğme ile en üste çektikten sonra aşağı alırken, yukarıya çekmeden önce okunan son değer ile eşitleyip sadece o konuma kadar nasıl motoru aşağı çekeceğim. Şimdiden teşekkürler.
  • max ve min limitleri belirlenebilir olmasımı yoksa belli noktaların hafızaya alınmasımı..?
    anlayamadım. Dane Dane anlatabilirmisiniz..
  • Belirli bir noktayı hafızaya alcak sonrasında ben motoru sağ üstte yer alan buton ile maximuma çektiğimde tekrar aşağı alırken hafızadaki veriyi kullanarak en aşağı değil de hafızada kalan noktaya almak istiyorum.
  • #include
    #include







    int poz_pot=0; // Motor Potansiyometre Değeri
    int set_pot=0; // Set Potansiyometre Değeri
    int Lset=0; // hesaplanan set değeri
    int max_poz=1023,min_poz=0;




    void setup()
    {
    pinMode(19,INPUT);
    pinMode(20,INPUT);
    pinMode(21,INPUT);

    }

    void loop()
    {


    poz_pot = analogRead(0);delay(100); //Motor Pozisyon verisi alınıyor
    set_pot = analogRead(1);delay(100); //Set Potansiyometre verisi alınıyor


    if (digitalRead(19))
    {

    // Dijital Girişten (19) sinyal geldiğinde ayar değerlerini resetler..
    // En geniş ölçüde çalışmaya başlar..
    max_poz=1023;
    min_poz=0;
    }

    if (digitalRead(20))
    {

    // Dijital Girişten (20) sinyal geldiğinde maksimum sınır değerine o anki motor pozisyonu atanır
    max_poz=poz_pot;
    }

    if (digitalRead(21))
    {

    // Dijital Girişten (21) sinyal geldiğinde minimum sınır değerine o anki motor pozisyonu atanır
    min_poz=poz_pot;
    }

    //lineerizasyon (matematikde doğru orantının ofsetli olanı gibi gibi)

    //

    Lset=int(float(min_poz) + (float(set_pot) * ((float(max_poz)-float(min_poz))/1024)));



    // örneğin motor 100 pozisyonunda iken min 500 pozisyonunda iken max kaydı yaptın bu durumda iken pot %50 ise yani 1024 / 2 = 512 ise motor
    // Hareketine göndereceğimiz set değer 100 ile 500 ün arası olan 300 olmalıdır.. ( 500-100= 400 >> 400 /2 =200 >> 100 + 200=300)
    //Lset=100 + (512 * ((500-100)/1024))>>> 300
    // Lset Değeri ile motor pot değeri karşılaştırılıp motor ileri geri düzenlenir...


    //1024 Değeri 10 bit analog girişin ham değer çözünürlüğüdür..

    }


    umarım işini görür..
  • Teşekkür ederim, deneye deneye öğreneceğiz bakalım.
  • Tekrar merhaba,

    Yukarıdaki kodlar ile maalesef beceremedim daha doğrusu tam anlamı ile istediğim olmadı, aşağıda netten bulduğum bir koda benim işimi görecek şekilde tanımlamalar yaptım ve birkaç if komutu ile istediğimi elde etmeye çalıştım fakat yine beceremedim. Bulduğum koda eklediklerim;

    4 adet buton ve lineer aktüatörün hızını kontrol etmek istediğim pot.

    Gelelim yapmak istediğime.


    hiz_pot motorun hızını kontrol edecek.

    butondy düğmeye basılı tuttuğum süre kadar motoru yukarı çekecek

    butonda düğmeye basılı tuttuğum süre kadar motoru aşağı çekecek

    butoniy düğmeye bir kez bastığımda motoru tamamen yukarı çekecek

    butonia düğmeye bir kez bastığımda motoru pozisyonu kontrol eden "pot" potansiyometresindeki değer kadar aşağı alacak.

    Yardımlarınız için şimdiden teşekkür ederim.

    KOD:


    /* Sample code to control the position of an actuator with potentiometer feedback using a MegaMoto.

    The main loop of this program checks the potentiometer, and moves the actuator accordingly.


    Written by Progressive Automations

    This example code is in the public domain.
    */

    const int feedback = A0; //potentiometer from actuator
    const int pot = A1; //pot from throttle
    const int hiz_pot = A2; //hızı kontrol edecek olan pot
    const int enable = 8;
    const int PWMA = 11;
    const int PWMB = 3;

    const int butondy = 7;
    const int butonda = 6;
    const int butoniy = 5;
    const int butonia = 4;

    int butondegerda = 0;
    int butondegerdy= 0;
    int butondegeria=0;
    int butondegeriy=0;

    int actMax = 507;
    int actMin = 0;//positions of actuator

    int potMin = 0;
    int potMax = 1023;

    int hiz_potMax=1023;
    int hiz_potMin=0;

    int precision = 2;//how close to final value to get
    int checkingInterval = 50;//how often position is checked (milliseconds)

    int rawcurrentPosition = 0;
    int currentPosition = 0;
    int rawdestination = 0;
    int destination = 0;
    int difference = 0;//values for knowing location

    void setup()
    {

    pinMode(butondy, INPUT);
    pinMode(butonda, INPUT);
    pinMode(butonia, INPUT);
    pinMode(butoniy, INPUT);


    pinMode(feedback, INPUT);//feedback from actuator
    pinMode(pot, INPUT);//feedback from potentiometer
    pinMode(enable, OUTPUT);
    pinMode(PWMA, OUTPUT);
    pinMode(PWMB, OUTPUT);//three pins for MegaMoto
    digitalWrite(enable,HIGH);
    Serial.begin(9600);
    }

    void loop()
    {

    butondegerdy = digitalRead(butondy);
    butondegerda = digitalRead(butonda);
    butondegeria = digitalRead(butonia);
    butondegeriy = digitalRead(butoniy);

    destination = getDestination();
    currentPosition = analogRead(feedback);//check where you are
    Serial.print("Position ");
    Serial.println(analogRead(feedback));
    difference = destination - currentPosition;//find out how far you are from the destination








    if (currentPosition > destination) pullActuatorUntilStop(destination);// choose what action to take
    else if (currentPosition < destination) pushActuatorUntilStop(destination);
    else if (difference < precision && difference > -precision) stopActuator();
    }//end void loop

    int getDestination()
    {
    rawdestination = analogRead(pot);//read the potentiometer to get the destination
    destination = map(rawdestination, potMin,potMax,actMin,actMax);//convert the potentiometer feedback to match the actuator
    return(destination);
    }//end getDestination

    void pushActuatorUntilStop(int destination)
    {
    destination = getDestination();
    int temp = analogRead(feedback);
    difference = destination - temp;//check difference to see if continue moving, or stop

    while (difference > precision || difference < -precision)
    {
    destination = getDestination();
    temp = analogRead(feedback); //continue checking difference
    difference = destination - temp;
    pushActuator();
    }//end while

    delay(25);
    stopActuator();
    }//end pushActuatorUntilStop

    void pullActuatorUntilStop(int destination)
    {
    destination = getDestination();
    int temp = analogRead(feedback); //check difference to see if continue moving, or stop
    difference = destination - temp;

    while (difference > precision || difference < -precision)
    {
    destination = getDestination();
    temp = analogRead(feedback); //continue checking difference
    difference = destination - temp;
    pullActuator();
    }//end while

    delay(25);
    stopActuator();
    }//end pullActuatorUntilStop

    void stopActuator()
    {
    analogWrite(PWMA,0);
    analogWrite(PWMB,0);
    }//end stopActuator

    void pushActuator()
    {
    analogWrite(PWMB,255);
    analogWrite(PWMA,0);
    }//end pushActuator

    void pullActuator()
    {
    analogWrite(PWMB,0);
    analogWrite(PWMA,255);
    }//end pullActuator
  • Bu arada sadece UNO R3 ve sürücü olarak da L298N kullandım.
  • arkadaşlar bende videodaki gibi liner motoru pot ile kontrol etmek istiyorum bunun için hangi motor sürücüyü kullanmalıyım

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.