| EV3

LEGO Mindstorms EV3 Build-in Rotasyon Sensörü Kullanımına Farklı Bir Örnek


Bazen yaptığımız robotun tasarımındaki bir kolun sınırlı çalışma alanı olabilir. Örneğin; motor sınırsız tur atabilmekteyken yaptığınız tasarım sebebiyle motor sadece belli bir derece aralığında çalışmak durumunda kalabilir (Bkz. LEGO Mindstorms Ev3 programında yapım klavuzu bulunan drive base ve medium motor tasarımı). 

Robotumuzun bir nesneyi algılayıp durmasını ve ardından nesneyi üzerindeki bir kol aracılığı ile alarak getirmesini isteyebiliriz. Böyle bir senaryoda robotu başlatırken kolu, hep açık vaziyette olacak şekilde elle ayarlamalıyız. Aksi takdirde robot, nesneyi almak istediğinde kol zaten kapalı olacağından başarısız olacaktır. 

Kolu elle ayarlamayı unutma ihtimalimize karşılık elbette robotumuzu, kolunu istediğimiz başlangıç noktası olan en üst seviyeye getirecek ve bizi elle bazı ayarlar yapmaktan kurtarabilecek şekilde programlayabiliriz. 

Örneğin programımızın en başına, kolu çalıştıran motoru, başlangıç noktasına (en üst seviyeye) götürecek bir program bloğu ekleyebiliriz. 

Sizce bu hareket için motoru nasıl programlamalıyız? 

  1. Seçenek rotasyonla veya derece ile motoru çalıştırmak. Ancak bu metotta bir sıkıntı bulunuyor. Robot kolun, (kısıtlı çalışma alanında olduğunu düşündüğümüzde) bulunduğu pozisyon her seferinde farklı olabileceğinden başlangıç noktasına gitmesi için motorun ne kadar dönmesi (kolun ne kadar yol kat etmesi) gerektiğini bilemeyiz. Eğer fazla tur/derece boyunca çalışmaya programlarsak motor, programdaki tur veya dereceye ulaşamayacağından robot hareket edemeyecek, motor dönmek istediği halde turunu bitiremeyecek ve sonraki program blokları çalışmayacaktır. 


  2. Seçenek ise motoru kolu en üst seviyeye çıkartacak şekilde saniye ile programlamak. Bu durum, en basit çözüm gibi görünüyor. Kısıtlı çalışma alanındaki motoru, kolu başlangıç noktasına doğru götürecek şekilde belirleyeceğimiz belli bir zaman boyunca çalıştırmak. Bu durumda zamanı olması gerekenden fazla ayarlamış olsak bile motor, belli bir zamanın sonunda çalışmayı durduracak ve robot ardı sıra diğer program bloklarına göre çalışmaya devam edebilecektir. 

  3. Seçenek, kolun çıkabildiği en üst noktaya (başlangıç noktasına) bir dokunma sensör takmak ve motoru; kol, dokunma sensörüne basana kadar sürekli çalışacak şekilde programlamaktır. En güzel çözüm gibi görünse de EV3 akıllı tuğlanızın bir portunu sırf bu iş için feda edeceksiniz. 

Burada bahsetmek istediğimiz çözüm ise yukarıdaki tüm olumsuzlukları ortadan kaldırıyor. Üstelik akıllı tuğlanızın hiçbir portundan fedakarlık etmeden... 

Bildiğiniz üzere tüm EV3 motorlarının içinde motorun kaç derece döndüğünü ölçen ve bunu kullanıcıya PORT VIEW aracılığı ile raporlayan dahili bir rotasyon sensörü/encoder bulunmaktadır. 

Motorun, (çalışma alanı kısıtı sebebiyle) artık dönemediği bir senaryoda, doğal olarak bu sensörlerin okuduğu değerler sabit kalacaktır. O halde şöyle bir sanal kod yazabiliriz; motor, sürekli dönsün ve bu dönüş sırasında motorun rotasyon sensöründen gelen derece bilgisi ölçülsün, 0.1 saniye sonra tekrar ölçülsün ve elde edilen değerler birbirlerinden çıkartılsın. Bu çıkartma işleminin sonucu "0" değerine eşit olduğunda motorun çalışması dursun. 

Burada önemli olan nokta; 0.1 saniye aralıkla ölçülen değerlerin birbirlerine eşit olduğu andır. Bu anda artık motor dönememekte ve rotasyon sensörü hep aynı değeri raporlamaktadır. Bu iki değerin birbirinden çıkartılması sonucu bulunan "0" değeri de bunu ifade etmektedir. 

Bakalım aynı programı;" rotasyon değerinden gelen veri = 0.1 saniye sonra rotasyon değerinden gelen veri" şartı gerçekleştiğinde motorun çalışmasını durdur şeklinde yazabilecek misiniz ?

Yorum yaz...

Teşekkür ederiz. Yorumunuz onaylandıktan sonra yayınlanacaktır.
Üzgünüm. Yorumunuz gönderilemedi. Lütfen tekrar deneyin.
  • (Yayınlanmayacak)