miniBloq ile Arduino programlama

Maker dünyasının baş aktörlerinden bir tanesi olan Arduino platformuna yönelik çeşitli geliştirme araçları mevcut. Hele ki yeni başlayanlar için geliştirilen görsel programlama araçları güzel fırsatlar sunmaktadır. Sizlerle bu görsel geliştirme araçlarından bir tanesi olan miniBloq programlama aracını paylaşmak istedim. Amacım projeye odaklanmaktan ziyade bu geliştirme ortamını tanıtmak. Proje olarak potansiyometre ile SG90 servo motor süreceğiz.

Öncelikle bu yazı içinde kullandığım miniBloq v0.83 versiyonu olduğunu baştan belirtmek isterim.

miniBloq projesine http://blog.minibloq.org/ adresi üzerinden ulaşabilirsiniz. İlgili sayfada yazdığı üzere açık kaynak kodlu ve bir sürü insanın emeğinin olduğu bir projedir. Yine sayfayı incelerseniz çeşitli örnekler, forum sayfası ve geliştirmeye yönelik öneriler olduğunu göreceksiniz. Programı başka dillere çevirme imkânı olsa da denemek isteyip indirirseniz, kodlama yapacağımız ortamın görsel ağırlıklı olduğunu göreceksiniz. Tasarım olarak kullanacağımız taşların işlevi, işaretler ile anlatılmak istenmiş. Kaynak kodlar ise https://github.com/miniBloq/v0.83 adresinde bulunmaktadır.

Örnek proje: Gripper

Şimdi gelelim konumuza; miniBloq kullanımını anlamak için yapmak istediğimiz ilk proje bir gripper olsun. Gripper kelime anlamı olarak kıskaç yada tutucu demektir ve tahmin ettiğiniz üzere bir şeyleri tutmaya yarayacak mekanik bir düzenek kurmak istiyoruz. Kullanacağımız  3 boyutlu mekanik modeli https://www.thingiverse.com/thing:746128 adresi üzerinden indirebiliriz.

Bağlantı noktaları

miniBloq programını ilk açtığımız anda kart tipi ve kartımızın bağlı olduğu portu seçmeyi unutmayalım. Bizim örneğimizde Arduino Uno kartını kullandık ve aygıt yöneticisi üzerinden baktığımızda kartımız COM5 bağlantı noktası üzerindeydi.

Port ve Kart seçimi

Örnek projemizde Arduino UNO kartı üzerinden bir potansiyometre kullanarak, potansiyometre kolunu çevirdikçe gripper mekanizmamızın açılıp kapanmasını sağlayacağız. Mekanizmamızı bir adet SG90 servo motor ile süreceğiz. Potansiyometre için de 10k ohmluk bir pot kullandım.

Gripper için örnek devre

Kodlama kısmına geçmeden önce elektronik devremizi kuralım. Öncelikle bir adet 10k Ohm luk potansiyometremizin en dış bacakları 5V ve GND ye bağlı, orta bacağı da analog girişlerden A0 portuna bağlı olacak şekilde bağlantılarını yapalım. Aynı şekilde servo motorumuzun kırmızı – kahverengi ve sarı kablolarını sırasıyla 5V – GND ve digital 6 pinlerine bağlayalım.

Gripper devremiz

Mekanik montajda, parçaları ister vida somun yardımı ile isterseniz örnek resimdeki gibi ataşların boy boy kesilmesi ile oluşturulan metal çubuklar ile birleştirebilirsiniz. Eğer ataş kullanacaksanız deliklerden düşmemesi için uçlarını silikon tabancası yardımı ile sabitleyebilirsiniz.

Gripper Orjinal – Üst
Gripper Orjinal – Alt
Gripper

Örnek program

Şimdi sıra geldi kodlama bölümüne, öncelikle Arduino kartımızın sürekli yapmasını istediğimiz bir loop döngüsüne ihtiyacımız var. Bunun için “belli bir şart doğru olduğu sürece tekrarla” diye ifade edebileceğimiz “while” döngüsünü kullanabiliriz. Şart olarak da direk “Doğru” yada “True” şeklinde bir sabit girersek “while” döngüsü sürekli tekrar edecektir. Bu döngüyü oluşturmak için “Actions” kısmından soru işareti olan döngü sembolüne tıklıyoruz. Daha sonra döngünün şartlarını oluşturmak için kırmızı girdi kısmına tıklıyoruz. Karşımıza pin okuma, tik ve çarpı işareti ile belirtilmiş doğru yanlış ifadeleri ve çeşitli karşılaştırma ve mantıksal işlemleri seçebileceğimiz bir pencere açılacak. Biz döngünün sürekli olması için her zaman “True” ifadesi girmek istiyoruz, dolayısı ile tik işaretini seçiyoruz.

Ana görünüm
Sürekli tekrarla – Loop

Yaptığımız devrenin çalışıp çalışmadığını anlamak için, potansiyometre kolunun çevrilmesi ile elektriksel olarak bağlı olduğu A0 pininden gelen verilerin değişip değişmediğini inceleyebiliriz. Bunun için miniBloq üzerindeki “Terminal” özelliğini kullanabiliriz. Terminal ekranını açmak için View menüsü içinden Terminal seçeneğini işaretlememiz ya da araç çubuğu üzerinde Terminal simgesine tıklamamız gerekmektedir.

Terminal İkonu

Seri port üzerinden haberleşeceğimiz için önce “Actions” kısmından üzerinde USB işareti olan simgeye tıklıyoruz. Ekrana gelen blok üzerinde kırmızı üçgen şeklinde olan yan tarafındaki girdi bölümüne tıklıyoruz. Karşımıza “Serial Method” adında text ya da sayı seçenekleri olan bir pencere geliyor. Biz # işareti ile belirtilen sayı seçeneğini seçiyoruz. Daha sonra sayı bloğunun yan tarafında tekrar kırmızı üçgen şeklinde olan girdi seçeneğine basıyoruz. Karşımıza gelen yeni pencere üzerinde dalga şekli olan analog giriş seçeneğini seçiyoruz. Ve son olarak A0 pininden okuma yaptığımız için blok üzerinden sensor0 seçeneğini seçiyoruz. Bende sensor0 ifadesi seçili olarak geldi.

Serial Print

Seri konsol ve Programı çalıştırma

Programımızı kartımıza yüklemek için “Component” menüsünden ya da araç çubuğu üzerinden “Run” butonuna tıklıyoruz.

Run

Yükleme bittikten sonra Terminal penceresi üzerinde “Open” butonuna tıklayarak gelen verileri görebiliriz. Dikkat edersek potansiyometreyi çevirdikçe gelen sayılar 0 ile 100 arasında değişmektedir.

Buraya kadar gelmişseniz potansiyometrenin mekanik pozisyonunu Arduino ile algılayabiliyoruz demektir.

Terminal Çıktısı

Şimdi bir tane “Eğer … ise …. Değilse…..” ya da ingilizce tabiri ile “If … Then … Else” kontrolüne ihtiyacımız var. Bunun nedeni kullandığımız servo motor üzerindeki dönme hareketinin, 3 boyutlu modelimizin mekanik olarak kapandığı anda son bulmasını istememizdendir. Ben 35 değerini seçtim, yani “A0 üzerinden 35 değerinin üzerinde bir değer geliyorsa hareket et” anlamında söylüyorum. Buradaki değer deneme yanılma ile ayarlanabilir. Başlangıçta iyi ayar yapmamışsak bu eğer kontrolü işimize yarayabilir, yoksa motor zorlanacaktır.

If…Else…

Önceki kodumuzda ana ekran üzerindeki USB taşını seçiyoruz sonra “Actions” kısmından soru işareti olan simgeyi tıklıyoruz. Böylelikle döngümüzün içinde “if … then … else” şeklinde bir kontrol oluşturuyoruz. Blokların kolay yerleşimi için şunu aklımızda tutabiliriz: Hangi blok seçili ise yeni eklenen hemen onun altına yerleştirilmektedir. Ancak daha sonradan yerlerini tabii ki de değiştirebiliriz. Tik işareti olan bölüm; eğer sunduğumuz şart doğru ise işlenecek, çarpı işareti olan bölüm ise şartımız yerine getirilemez ise işlenecek demektir.

Olması gereken kodlama

“Eğer (…) ise …. değilse ….” koşulu

Daha önce de söylediğim gibi amacım A0 üzerinden gelen değer 35 üstü ise hareket vermek istiyorum. Dolayısı ile eğer bloğunun girdi seçeneklerinden, “büyüktür karşılaştırma operatörünü” seçmem gerekiyor. “Eğer sensor0 büyüktür 35” ifadesini oluşturmak istiyorsam bu sefer de büyüktür operatörü üzerindeki girdi parametrelerinden üsttekini, dalga şeklinde sembolleştirilen analog giriş seçici olarak seçmem gerekiyor.

Karşılaştırma

Karşılaştırma bloğunun alt kısmındaki girdiyi de # işareti ile belirtilen sayı olarak seçmem gerekiyor. Seçimden sonra 35 sayısını elle girmeliyim.

Değer seçimi

Şimdi sıra geldi servo motorumuza hareket vermeye, “Actions” kısmından servo motor şeklinde bulunan taşa tıklıyoruz.

Servo Motor

Servo motorumuzu dijital 6 pinine taktığımız için blok üzerinde servo0 seçeneğini seçiyoruz. Programda ana ekranda resmi incelerseniz 6. pin yanında servo0 yazdığını göreceksiniz. Hatırlamamız gereken bir nokta daha önce A0 dan gelen değerleri terminal penceresi üzerinden incelerken, gelen değerlerin 0 ile 100 arasında geldiğini gördük. Ancak servo motorum 0 ile 180 arasında değer alabiliyor. Dolayısı ile A0 yani sensor0 terimini servo motorumu sürmek için kullanacaksam, bir çarpma işlemine ihtiyacım var. Mekanik modeli de incelersek motorumu tam 180 derece çeviremeyeceğim. Deneyerek ben 1.2 değerinde karar kıldım. Maksimum gelen değer 100 olursa motorum maksimum 120 derece dönecektir. Yani potansiyometreyi bir uçtan diğerine çevirirken motorum 35 ile 120 derece arasında hareket edecektir.

Servo Kontrolü

Programın son hali

Yazdığımız programın son hali aşağıdaki gibidir. Programımızı kartımıza yükledikten sonra potansiyometre ile orantısal hareket eden bir servo projemiz olacaktır. Bu yazımızdaki amaç miniBloq programını kısaca tanıtmak idi. Program içinde çok çeşitli fonksiyonlar bulunmaktadır. Hepinize keyifli çalışmalar.

Kaynağınız açık, malzemeniz bol olsun…

Kodlamanın son hali

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

%d blogcu bunu beğendi: