Şimdi Ara

Arduino Servo Motor'da Sıkıntım Var

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
8
Cevap
0
Favori
1.874
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arduino kodlama bilen arkadaşlarım lütfen bi baksın bir türlü çıkamadım işin içinden.Şöyle ki ben arduino UNO'ma COM7 üzerinden bağladım.Basit bir C# programı yaptım (program ekte).Sağa döndür diyince motorum dönüyor.Sola döndür diyincede dönüyor.Daha yavaş sağ ve sola döndürmeyi de yaptım ama şöyle bir sıkıntı var.Yavaş olmadan delayı 1 olunca hızlı bir şekilde dönüyo.Bu AYNI BUTONA bir kez daha tıklayınca olduğu yerde duruyo (ki bende bunu istiyorum.)Hızlıda solda da oluyo ama YAVAŞ DÖNÜŞ teki sağ-sol a gelince yavaş biçimde (delayı 15) sağa dön dediğimde döndükten sonra bir kez daha basınca (angle 'ı 0 olarak tanıttım) önce sola hızlı bi biçimde alıyo daha sorna sağa yavaş (olması gerektiği gibi) dönüyor.Buna bir türlü çare bulamadım.

    Arduino Kodu:

     

    #include <Servo.h>
    int angle = 0;

    int servoPin = 13;

    Servo servo;


    void setup()
    {
    pinMode(13, OUTPUT);
    servo.attach(servoPin);

    Serial.begin(9600);
    }

    void loop()
    {
    if(Serial.available())
    {
    int esref = Serial.read();
    if (esref == '1')
    {
    digitalWrite(13,HIGH);
    for(angle = 0; angle < 180; angle++)
    {
    servo.write(angle);
    delay(1);
    }


    }
    else if (esref == '0')
    {
    digitalWrite(13,LOW);
    for(angle = 180; angle > 0; angle--)
    {
    servo.write(angle);
    delay(1);
    }
    }

    else if (esref == 'c')
    {
    digitalWrite(13,LOW);
    for(angle = 180; angle > 0; angle--)
    {
    servo.write(angle);
    delay(15);
    }
    }
    else if (esref == 'd')
    {
    digitalWrite(13,HIGH);
    for(angle = 0; angle < 180; angle++)
    {
    servo.write(angle);
    delay(15);
    }
    }

    }
    }




    C# Program Kodu:

     

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO.Ports;

    namespace Servo_Kontrol
    {
    public partial class Form1 : Form
    {
    bool ledState = false;

    public static System.IO.Ports.SerialPort serialport1;
    private delegate void LineReceivedEvents(string line);

    public Form1()
    {
    InitializeComponent();
    System.ComponentModel.IContainer components = new System.ComponentModel.Container();
    serialport1 = new System.IO.Ports.SerialPort(components);
    serialport1.PortName = "COM7";
    serialport1.BaudRate = 9600;
    serialport1.Open();





    }

    private void button1_Click(object sender, EventArgs e)
    {



    serialport1.Write("0");
    pictureBox2.Visible = false;
    pictureBox1.Visible = false;
    pictureBox3.Visible = true;


    }

    private void button2_Click(object sender, EventArgs e)
    {
    serialport1.Write("1");
    pictureBox2.Visible = true;
    pictureBox1.Visible = false;
    pictureBox3.Visible = false;







    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
    if (serialport1.IsOpen) serialport1.Close();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    pictureBox2.Visible = false;
    pictureBox3.Visible = false;

    }

    private void button3_Click(object sender, EventArgs e)
    {
    serialport1.Write("c");
    pictureBox2.Visible = false;
    pictureBox1.Visible = false;
    pictureBox3.Visible = true;
    }

    private void button4_Click(object sender, EventArgs e)
    {
    serialport1.Write("d");
    pictureBox2.Visible = true;
    pictureBox1.Visible = false;
    pictureBox3.Visible = false;
    }
    }
    }



     Arduino Servo Motor'da Sıkıntım Var







  • 42 Görüntülenme,0 Cevap? Hadi ama arkadaşlar C# a çok benziyor.Birazcık yorum bile yapabilirsiniz.Sorun şurada ama nasıl yapacağımı bilmiyorum.Neredeyse bütün kombinasyonları denedim ama...

    En Baştaki;
     

    int angle = 0;


    Bundan dolayı da olabilir fakat bunu değiştirirsek ilk buton çalışmaz.
    Diğer olabilecek kod ise (ki büyük ihtimalle bu);
     

    else if (esref == 'c')
    {
    digitalWrite(13,LOW);
    for(angle = 180; angle > 0; angle--)
    {
    servo.write(angle);
    delay(15);
    }
    }
    else if (esref == 'd')
    {
    digitalWrite(13,HIGH);
    for(angle = 0; angle < 180; angle++)
    {
    servo.write(angle);
    delay(15);
    }
    }




    c ve d 'ye ait olan kodlar.Yani yavaş döndüren o 2 buton.Angle'ı yukarıda 0 olarak başlangıç pozisyonunda aldık. şimdi şurayı değiştirmemiz lazım f or(angle = 0; angle < 180; angle++) fakat ne yaptıysam bir türlü yapamadım.




  • Selam,

    anlatmaya çalıştığın şeyi daha düzgün cümleler kurarak anlatırsan yardımcı olabilirim.

    Ne yapmaya çalışıyorsun da olmuyor anlamadım. Tane tane ve madde madde anlatabilir misin?
  • maxMESA M kullanıcısına yanıt
    Şöyle ki; Bilgisayarıam Arduino Kiti ile usb COM7 portum üzerinden bir kit bağladım ve o Arduino Kiti'ne servo motor ekledim.Bu fiziksel bir şey.Gerekirse resim çekip atabilirim.Şimdi ben bilgisayardan butona tıklayınca(LED AÇIP KAPAMA SİSTEMİ DE VAR) motor 90 derece sağa dönüyo,diğer butona tıklayınca 90 derece sola.Ama ben 2 buton daha ekleyip daha yavaş dönmesini istiyorum.Fakat 2.butonlarda sağ ya da sola dön komutunu verdiğimde önce motordaki pervane kendini (eğer sola dön butonuna tıklamış isem ve pervane şuan solda ise) kendini önce sağa alıyo sonra sola dönüyo.Ben ilk butonlardaki gibi ZATEN AYNI KONUMDAYSA TEPKİ VERMEMESİNİ (ya da dönmemesini) istiyorum efendim.Umarım anlaşılmıştır.Anlaşılmadı ise resim çekip atabilirim.
  • bu 0, 1, c, d,

    komutlarından hangisi sağ, hangisi sol, hangisi yavaş sağ, hangisi yavaş sol?

    ayrıca sağa dönen bir motorda sağa yavaş dön komutunu verdiğinde önce sola dönüp sonra tekrar sağa dönmeye başlıyor mu?

    sola dönüyor dediğin ne kadar dönüyor? sonuna kadar mı gidiyor?

    arduino'da seri porttan aldığın komutları programına geri göndererek debug etmeni tavsiye ederim. belki de buffer vs. dolu kalıyordur eski komutu alıyorsundur.
  • maxMESA M kullanıcısına yanıt
    0 ve 1 Programın resmindeki SO LTARAFTA BULUNAN hızlı dönen SAĞ(1) ve SOL (0) komutları. YAVAŞ SAĞ (c) YAVAŞ SOL (d) şeklinde.Sıralama tamamen böyle olmayabilir çünkü şuan hatırlamıyorum hangisine ne verdiğimi ama böyle yani.Sadece sağ-sol yönü değişik olabilir o da gereksiz bi şey zaten.2. Sorun ise de cevabım şu olcauk;AYNEN ÖYLE.Ben şunu yapmak istiyorum;Sağa dönen bir motorda motor zaten sağda ise SOLA ALIP TA SAĞA GELMESİN.Zaten sağda ise dursun.3.Sorun ise de; Servo Mtoor 90 sağa 90 sola döenbilir 360 derece dönmez(dönen çeşitleri de var da benimki ondan değil).Arduino da ise programı tanıtamam sadece serialport tarafını kullanabilirim.Yani programa geri bir dönüş yapamam.Mesele Arduino Code'undaki C ve D 'ye ait olan ANGEL komutunda diye düşünüyorum ama mantığını bir türlü kavrayamadım.Her kombinasyonu denedim de bir türlü olmadı.
  • Selam,

    Arduiuno hakkında pek bilgim yok ama şunu sorayım;

    servo.write(angle)

    dediğin angle'a 180 gönderirsen motor 180 konumuna mı gidiyor?

    eğer 180'e gidiyorsa haliyle sıfırlayacaktır zira pozisyonunu sıfıra ya da 180'e alıp öyle döngüye başlıyorsun.

    servonun bulunduğu konumu alman gerekir. onu da şöyle yapabilirsin;


    yani sen sola dönen bir motoru tekrar 180 den başlayarak sola döndürmeye çalışıyorsun. mevcut açıdan başlaman gerekir. o yüzden her adımda mevcut açıyı bir değişkende tutman gerekir.
  • Yapay Zeka’dan İlgili Konular
    Rc araba devre ve motor uyumu
    geçen yıl açıldı
    Daha Fazla Göster
  • maxMESA M kullanıcısına yanıt
    Kardeş adamsın çok ama çok teşekkür ederim dediğinde haklısınŞimdi denedim çalıştı.Daha önce sağa dön dediğimde (Hızlıdayken,sorunsuz çalışanda) Sola gitmiyordu fakat bi tık tepreniyordu.Şimdi angle'lara 180 ve 0 yazarak HİÇ HAREKET ETMEMESİNİ SENİN SAYENDE SAĞLADIM :D

    Şimdi ki arduino code'u;
     

    #include <Servo.h>
    int angle = 0;

    int servoPin = 13;

    Servo servo;


    void setup()
    {
    pinMode(13, OUTPUT);
    servo.attach(servoPin);

    Serial.begin(9600);
    }

    void loop()
    {
    if(Serial.available())
    {
    int esref = Serial.read();
    if (esref == '1')
    {
    digitalWrite(13,HIGH);
    for(angle = 0; angle < 180; angle++)
    {
    servo.write(180); //BURASI
    delay(1);
    }


    }
    else if (esref == '0')
    {
    digitalWrite(13,LOW);
    for(angle = 180; angle > 0; angle--)
    {
    servo.write(0); //BURASI
    delay(1);
    }
    }

    else if (esref == 'c')
    {
    digitalWrite(13,LOW);
    for(angle = 180; angle > 0; angle--)
    {
    servo.write(0); //BURASI
    delay(15);
    }
    }
    else if (esref == 'd')
    {
    digitalWrite(13,HIGH);
    for(angle = 0; angle < 180; angle++)
    {
    servo.write(180); //BURASI
    delay(15);
    }
    }

    }
    }





  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.