HAREKET ÖĞRENEBİLME VARMIDIR
  • Uzun zamandır üzerinde çalıştığım step motor pozisyon çalışmamı geliştirdim va çalışır hale getirdim tabi bir çalışma diğer başka bir çalışmaya ve işleri kolaylaştırmaya ışık tutuyor siz değerli arduino'ya gönül vermiş çalışma arkadaşlarıma Bir fikir ortaya atarak ortaya birşeyler cıkarabilirmiyiz diye sunuyorum konuya gelelim :d
    Step ,servo,dc veya hareket sağlayan her ne varsa bunlara duracağı konumu yada gideceği mesafeyi döneceği açıyı ilk olarak el ile bir sefer yapıp arduinonun bu hareketi hafızasında tutup hareketi tekrarlamasını sağlayabilirmiyiz yoksa aşırı derecede uçuşamı geçtim ben:D
  • rotary encoder ile pozisyon okunabilir yada her motordan bir pulse okunup kaydedilebilir.
  • Okoman teşekkürler cevabın için lakin yazımda tam olarak anlatabildimmi bilmiyorum ama şöyle örneklim diyelim 30 metre bir ray var ve bu ray üzerinde bir araba bu araba her 5 metrede konumları olacak biz bu konumları arabayı el ile sürdüğümüzde durduğumuz konumu otomatik kaydedecek yani biz yerlerini göstereceğiz sonra işlem bittiğinde RUN konumuna aldığında biz 10 metreye git butonuna bastığımızda bizim öğretmiş olduğumuz konumlara hareket edecek
  • aracın tekerinden kaç tur döndugunu saklasanız yeter.
  • ama genelde çizgi izleyen robotlar yapıyorlar yere çizilen rotaya göre istediğiniz hızla gidip istenilen yerlerde de durabiliyorlar.
  • encoder ile daha önce plc uygulamasında dediğiniz olayı yapmıştım lakin her seferinde her nokta için ayrı ayrı değer girmem gerekiyordu buda zaman kaybı lakin amerikan bir firmanın yapmış olduğu bir sistemde adamlar birtane memory switch koymuşlar o switch'e acık konuma getirdiğimizde ellen başlangıç noktasından bitiş noktasına yapacağı mesafe kadar götürüyorduk sonra memory switch kapatıyor RUN switch acıyorduk ve bizim yaptığımız hareketin aynısını herseferinde yapıyordu yani sisteme bağlanıp yeniden bir deger girmiyorduk bu nasıl bir mantıkla oluşturulmuş onu çözemedim
  • Merhaba şuan üzerinde çalıştığım yazılım tam anlamıyla senin anlatmak istediğin yazılım :)

    Contactless Potentiometer adı altında bir ürün var benim kullandığım ürünün kodu AS5600

    Bu ürünü incele eminim sana ışık tutacaktır.

    İyi çalışmalar
  • ekmekci teşekkürler Arduino ilemi yapıyorsun yoksa başka bir platform üzerindemi
    Contactless Potentiometer ile turmu saydırıyorsun yoksa mesafemi bir ip ucu lazım :d
  • Arduino ile değil. Başka bir işlemci ile. İş hayatında arduino çok tercih edilen bir işlemci değil ( maliyet dolayısı ile).

    Bu linkte birazcık nasıl çalıştığı anlatılmış.

    Özet olarak döndükçe sana farklı adc değeri veren bir sensör.Tıpkı potansiyometre gibi ama bunu elle döndürmüyorsun bir yere bağlıyosun örneğin tekerlek, tekerlek döndükçe sayıyor. Bu sayede sürekli olarak nerede olduğunu bilebiliyorsun.
  • Ekmekci hocam dediğiniz ürünü inceledim encoder mantığı ile çalışıyor sadece fiziksel bir bağlantısı yok motora lakin benim sorumda ne kullanıcağımızdan çok nasıl kullanacağımız yani ha encoder kullanmışsın,ha bunu kullanmışsın, yada sonsuz döngü potans kullanmışsın farketmez sizin dediğinizde yazılımı yazıp yazdığınız değere gelince durucak yada başka bişey yapcak benim öğrenmek istediğim şu yazılımı yazdık lakin değerleri bulabilmek için defalarca arabayı o noktaya gönderip verdiği mesafe sayısını yazılıma yazacağız işte benim istediğim ben el ile arabayı o noktaya götürdüğümde otomatik olarak o değeri yazacak yazılımdakı ilgili bölüme ben uğraşmıyacağım yazılımla yerlerini hızzlıca atayacağım böylelıkle buna kendimce öğrenme komutu diyorum arduinoda böyle bir olay olurmu
  • İşte benim anlatmak istediğimde o. Olur tabiki. Olur ama bu işler şunu yapsın bunu yapsın diye olmaz ki.Diyorsun ki aracı bi mesafeye götürücem araç o mesafeyi öğrenecek. Bunun için hangi bilgilere ihtiyacın olduğunu bilmelisin. Sana önerdiğim entegre veya encoder vsvs.. bu bilgiyi alman için gerekli. Sen önce bilgiyi al. Sonra istediğin gibi kullan o bilgiyi.

    Birazcık detaylı anlatmaya çalışayım.
    Birkere bu arabanın başlangıç yerini ve bitiş yerini anlaması lazım. Bunu nasıl yapacaksın ?
    Yani sen arabayı el ile bir noktaya götürmekten bahsedeceksin ya o noktanın senin istediğin nokta olduğunu araba nereden bilecek ?

    Bunu şu şekilde yapabilirsin. Bir buton kullanabilirsin.
    Arabayı başlangıç konuma koyarsın
    Butona basarsın ki araç burayı başlangıç konum olarak almalıyım diye bilsin
    Arabayı elle sürersin istediğin yere kadar istediğin yere gelince
    Butona tekrar basarsın ki araç bu sefer bu noktanın bitiş noktası olduğunu anlasın.

    Böylece 2 botun basışında kullandığın encoderden 2 değer okursun. Bunların farkı veya aradaki mesafe senin sürmek istediğin mesafe olur. Ve bunu gerekli komutlarla aracın bilmesini sağlarsın.

    Umarım anlatabilmişimdir.
  • Çok Güzel anlatmışsınız ekmekci yapmak istediğim tam olarak bu encoder kullanabilirim bundada sıkıntı yok öğrenmek istediğim bunu arduinoda hangi komutla nasıl yapabileceğim encoderın vermiş olduğu değeri yazılıma nasıl kayıt etmem gerekecek bunu hangi komut nasıl yapar
  • Orası algoritma yeteneğine kalmış :)
    örneğin;
    ilk enerji verdiğinde
    digitalWrite(kayit, HIGH);
    digitalWrite(dongu, LOW);
    komutlarını yazarsan void loop kısmında sen kayıt işlemini bitirene kadar asıl döngüne girmez ve senden kayıt etmeni bekler

    void loop ()
    {
    konum=analogRead(10)// encoderi 10cu pine bağladığını varsay böylece konumu sürekli okursun

    if(kayit) //kayıt döngüsü sadece kayıt ederken buraya girecek
    {
    //herhangi birşey vasıtası ile başlangıç ve bitiş konumlarını okutursun
    if(BUTTON1)
    {
    baslangicdeger=konum;//1.butona bastığındaki konum ne ise bunu başlangıç deger olarak kayıt ettik.
    }
    if(BUTTON2)
    {
    sondeger=konum;//2.butona bastığındaki konum ne ise bunu son deger olarak kayıt ettik.
    }
    //böylece artık araç nerede başladığını ve nerede bittiğini bilir
    //okutma işlemi bitince
    //digitalWrite(kayit, HIGH);
    //digitalWrite(dongu, LOW);
    //yazarsın böylece birdaha kayit kısmına girmez ve asıl döngüne girer
    }

    if(dongu)//ana döngü kayıt işlemi bitince artık sürekli buraya girecek
    {
    //buradada yapmak istediğini yazarsın. Artık başlangıç ve bitiş olarak değerlerin elinde.
    }

    }

    bu kabataslak bir örnek.
  • ekmekci Hocam bu sistemde birden fazla konum tanımlamam lazım aşağıdaki kodda bluetooth ve buton yardımı ile step motoru istediğim konuma gönderip istediğim konuma çağırabiliyorum bu konumlar hedef değişkenine atadığım sayılardır her mesafe içinb ayrı bir hedef değişkeni atadım tabı konum sayılarını kendim yazıyorum ve verdiğim sayı kadar gidiyor yapmak istediğim diyelim hedef=180; yazacağım değeri encoder vasıtasıyla nasıl oraya yazdırırım

    void loop(){
    if(bluetooth.available())
    buttonState0 = digitalRead(button_0);
    buttonState1 = digitalRead(button_1);
    buttonState2 = digitalRead(button_2);
    buttonState3 = digitalRead(button_3);
    buttonState4 = digitalRead(button_4);
    {
    int data = bluetooth.read();
    delay(10);
    if (buttonState4 || data=='1' == HIGH) {
    hedef=180;

    }
    if (buttonState3 || data=='2' == HIGH) {
    hedef=150;

    }
    if (buttonState2 || data=='3' == HIGH) {
    hedef=130;

    }
    if (buttonState1 || data=='4' == HIGH) {
    hedef=115;

    }
    if (buttonState0 || data=='5' == HIGH) {
    hedef=50;

    }
    mesafe=hedef-pozisyon;

    while(i
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(motor_Speed);
    i++;
    }
    i=0;
    while(mesafe digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(motor_Speed);
    i--;
    }
    i=0;
    pozisyon=hedef;
    }}
  • Hedef=180; yazacağın yeri ancak sistemini 180'lik mesafeye götürerek yazabilirsin.
    mesela enkoderden okudugun kısım şöyle olsun;

    konum=enkoderoku; //

    sen butona bastıgında

    if (buttonState4 || data=='1' == HIGH) {
    hedef=180;
    }
    bu işlemi yapmak yerine

    if (buttonState4 || data=='1' == HIGH) {
    hedef=konum;
    }

    işlemini yaparsan. hedef= sabit değer olmazda sistemin nerede ise ve enkoder ne okuyor ise hedef= o olur,

    Biraz karışık gibi duruyor ama aslında basit.
  • şu forumda gördüğüm en ilgili arkadaşsın teşekkürler öncelikle
    if (buttonState4 || data=='1' == HIGH) {
    hedef=konum;
    yukardakı vermiş olduğun kodda encoder o konuma gelince konum değişkenine o andaki değeri verdi diyelim ama ben sistemi run moduna alınca sistem başlangıç noktasından başlıyacak ve konum değişecek ben elle o noktaya götürüp konumu götürdüğüm yeri aklında tutsun ben o konuma git dediğimde o nokytaya gidecek biraz karışık anlatmış olabilirim kusuruma bakma
  • :) konu zaten karışık o yüzden problem yokta çözüme gidebilecekmiyiz bakalım.
    Bak şimdi en basite indirgeyerek anlatıyorum.
    Senin sisteminin bir başlangıç birde son noktası var.
    Sen sistemi başlangıç noktasına getirdin. 1ci butona bastın. 1 ci butonun görevi şu ;
    bastığın anda enkoderden okudugun konum ne ise onu başlangıç değeri olacak yazıcak;
    if (buttonState1 || data=='1' == HIGH)
    {
    baslangicdeger=konum;
    }

    sistemi elle sürdün götürdün son konuma.2 ci butona bastın.2ci butonun görevi şu;
    butona bastığın anda enkoderden kaç okuyorsa onu son değer olarak yazacak;
    if (buttonState2 || data=='1' == HIGH)
    {
    sondeger=konum;
    }

    şimdi bu işlemleri yaptıktan sonra elinde 2 farklı bilgi var. Birisi baslangicdeger=xx, diger, sondeger=xx. Bu değerleri bilerek motoru solamı çevirirsin sağamı çevirisiin o sana kalmış.
    Aklında tutma mevzusuna gelince.
    yazılımı bu şekilde yazarsan her sistemi yeniden başlattığında tanımladığın baslangicdeger ve sondeger degiskenleri sıfırlanır. Sıfırlanmasın istiyorsan, İşlemcilerde dahili EEPROM mevcut küçük çaplı şeyleri hafızasında tutabilir. Aklında tutsun istiyorsan. Baslangicdeger ve sondeger degiskenlerin belli olur olmaz gidicen o dataları arduinonun dahili EEPROM una yazıcan. Böylelikle sistem yeniden başlasa bile artık bilgiler hafızada olacak.
  • sanırım aklında tutması için dahili epprom yetersız kalır dimi peki ozman şöyle bişey yapsam bu benim yazdığım yazılım gene aynı kalsa ben encoderu arabamın tekerıne bağladım ve elle motoru gitmesi gereken yere kadar getirdim ve serial monitörden kaç pals verdiğini gördüm onuda hedef=xxx e yazsam nasıl olur yani otomatık yazmayacaksa madem ben kendim görür kendim yazarım benim istediğim aslında encoderın o ankı pals değerini otomatıkmen hedef=xx yerine yazmasıydı
  • Benim arduinonun dahili EEPROMu hakkında bilgim yok. Ama bu konuştuklarımızı yapamayacak kadar az olduğunu sanmıyorum. Yani EEPROM yeterlidir bence. Bir araştır. benide bilgilendirirsen sevinirim :)
  • Sonuca ulaşırsam muhakkak senıde bılgılendırırm
  • Arduno Duemilanove: 512b EEPROM bellek -. - Arduino Uno:. 1kb EEPROM bellek - Arduino Mega:. 4kb EEPROM
    bellek kapasiteleri yukarıdakı gibidir hocam
  • bu forumda gördüğüm (bana göre) en anlaşılmaz konu bu 21 comment oldu ilerleme de var hayretler içindeyyim walla. kolay gelsin...
  • Gürkan 1kb eeprom bellek senin konum değişkenlerin için gayet yeterli.
  • Arkadaş aslında anladığım kadarıyla bir rutini otomatikleştirmeyi irdeliyor. Bunu kullanıcı dostu bir yapıda planlıyor. Misal basit bir cncye manuel hareket verip kaydedip tekrarlanmasını sağlamak. Bilgisayar ortamında tasarlayıp g code homing limit swich gibi şeyler olmadan detaysız güzel bir olay olabilir. Tüm mesajları okuyamadım ama bir robot kol ile manuel kontrol edip bunu tekrarlayan otomasyonlar görmüştüm.
  • Okomon öncelikle bu platformu oluşturmanda ciddi bir alkışı hakediyorsun 2. si aslında bu sitede eksık olan tek şey işini bitiren kaçıyor dahada sıteye uğramıyor 3. aslında bu konu ileriye yönelik robotlaşma konusunda ilk adım olacaktır farkettiysen hiç kimse öğrenebilen bir hafıza konusunda teknolojiyi kullanmıyor benim olayım belki çok basitir akın birçok kişi içinde basamak olacak bir konu çunki artık bir level daha atlamamız gerektiğini düşünmekteyim saygılar.
  • ekmekci hocam 1kb eeprom belleğe yazma konusunu arastırıyorum tabi onunla ilgili bir kütüpahane var sistemime nasıl entegre edebileceğim konusunda bıraz çabalayacağım saygılar.
  • windshair doğru bir yönden bakmışsın konuma, amacım tamda bu birçok iş kolunda rutin işler yapılıyor ve sürekli aynı noktadan alınıp aynı noktaya taşınan bir yük gibi tabi bunu küçük bir çocuga 1 kere gösterip bunu böyle yapacaksın demek gibi olacak ,konuma gececek olursam aslında istediğim basit bir şey tabı pratıkte basit olan şeyler işleyişe gelince haylı bir karmaşık olduğu göze carpıyor benim olayım sürekli bilgisayar kurarak bağlantı yaparak ordaki değerleri değiştirip bakalım dediğim noktaya gidiyormu diye denemelerle uğraşmadan gideceği noktaya ılk hareketi ben göstereceğim ve sonraki aşamada artık kendi başına öğrettiğim noktalara gidebielecek
  • SONUNDA PROJEMI BITIRDIM EPPROMA BLUETOOTH ILE YAZMA ISLEMIDE TAMAMLADIM
  • belki bir videosunu hazırlayıp koyarsınız bir gün. güzel olur...

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.