Mühendis gözünden Arduino ( Arduino nedir? V2.0 )

Merhaba,

Arduino ile tanışmamın üzerinden yaklaşık bir 2 yıl geçti. Kullanımı ile ilgili kendimin ve birsürü başka insanın yaşamış olduğu durumlara şahit oldum, bugün biraz daha Arduino’nun kullanımın bir mühendis gözünden neler ifade ettiğini / bence neler ifade etmesi gerektiği konusunda fikirlerimi söyleyeceğim.

Öncelikle söylemek gerekirse, Arduino esasında mühendisler düşünülerek hazırlanmış bir platform değildir. Kendi sitelerindeki açıklamalarda da görebilirsiniz ki bu platform, gömülü sistemler dünyasının detayına dalmak istemeyen ,istese de öğrenmesi çok zor olacak veya çok vakit alacak, insanlara bu dünyanın kapısını bir nebze olsun açabilmek. Hedef kitlesi esasen elektronikle hobi olarak ilgilenenler ve projelerindeki elektronik sistem, projenin asıl amacını değil fakat projenin gerçekleşebilmesi için gerekli olan bir aracını oluşturan insanlar olan bu platformun, tasarım sürecinde performansdan ziyade kullanım kolaylığının amaçlandığını söylemek çok da zor olmasa gerek. Bu ayrımdan sonra ise asıl yazımızın konusuna giriş yapmış oluyoruz.

Arduino mühendisler tarafında temelde iki uçta yargılanır. Kimileri (misal avrfreaks camiası) Arduino için çocuk oyuncağı sıfatını koyup, kullanılmasına neredeyse bir günah gözüyle bakıp kullananlar için alaycı ifadeler kullanmaktan çekinmezler. Bu insanlar düşüncelerinin çoğunda haklıdırlar. Mesela, Arduino için bir pini *logic high* yapmak için kullanılan digitalWrite(pinNumber,HIGH); fonksiyonun içeriğine baktığınızda bir sürü kontrol algoritması içerdiğini görürsünüz. Halbuki, bu temel komut ne yaptığını bilen insanlar için tek *instruction cycle* harcanarak da fonksiyon vs. kullanmadan halledilebilecek bu olaydır. Bu sebeptendir ki iyi bir mühendisin projesinde bu tip bir fonksiyon kullanıyor olmasına hoş gözle bakılmayabilir. Benim bu konuyla ilgili görüşlerimi ise daha sonra söyleyeceğim. Paragrafın başında bahsettiğimiz diğer bir uç bakış açısı ise bu platformdan hiç bir şekilde haberdar olmamaktır. Çoğu gömülü sistem mühendisleri işlerini öyle veya böyle yıllardır alışagelmiş oldukları işlemciler ve arayüzlerle hallediyor oldukları için genelde çok yenilik aramazlar. Bu nedenle de ya hiç Arduino’ya rastlamamışlardır veya da detaylıca okumadan geçip gitmişlerdir. Bu durumdakiler için “insanlar ne kadar kolaylıklar kaçırıyor” denebilir ama “en kolay yol en iyi bildiğin yoldur” diye bir de söz vardır. O açıdan bağnazlık boyutuna girilmediği sürece mühendislerin bu platforma hiç bulaşmıyor olmaları bence son derece normaldir.

Yukarıdaki paragraftaki ilk olarak bahsedilen nefret eden tayfa için ise daha uzun bir kaç sözüm olacak. Arduino esasında çok büyük kolaylıktır, bunu kabul etmek gerekir. Labda çalışrken analog bir voltajı sürekli olarak okuyup bilgisayara gönderip kayıt tutmak istersek, bunu Arduino ile yaklaşık 5 dk içerisinde halledebiliriz. Bu da asıl projeye odaklanıp, aradaki detaylarla vakit kaybetmemememize sebep olur. Veya, bir cihazla I2C, SPI, UART veya başka bir platformdan haberleşeceksek, bunu ilk olarak Arduino üzerinden yaparsak çalıştığına emin olunan bir kütüphane sistemi olduğu için öncelikle yeni cihazla kurmaya çalıştığımız haberleşmeyi sağlama oturtabiliriz, optimize kısmını ise sonraya bırakabiliriz. Veya tam başka bir düşünce ile, üzerinde çalışılan proje hiç optimize olmayı gerektirmeyen bir proje olabilir, bu durumda da illa ki projenin final versiyonunda başka bir arayüz kullanılması zorlanmamalıdır. Arduino’yu aktif olarak kullanan mühendisler eleştirilmeden önce bu konular da göz önünde bulundurulmalıdır ama elbette etrafta böyleleri bulunacaktır. *haters gonna hate*

Yazı gittikçe uzuyor ama, şimdi gelip çuvaldızı kendimize batıralım biraz da. Arduino’nun mühendisleri biraz da tembelliği ittiği bir gerçektir. Çünkü ,misal I2C protokülünü durup da datasheet okuyarak *register* değerleri set ederek uygulamak kesinlikle işlemcinin performansını tam anlamıyla kullanmayı sağlayıp neyi nerde ne yaptığımız konusunda da kontrolü bizim elimize verirken, bununla uğraşmamayı tercih edip hazır yazılmış bir kütüphane de kullanabiliriz. Bu da hem performans düşüklüğüne hem de haberleşmeye tam olarak hakim olamamaya yol açabilir. Dediğim gibi, protoip sürecinde kullanılabilir ,hatta bence kullanılmalıdır da, fakat projenin son halinde bu şekilde bırakılması gerçek anlamda uygun olmayabilir.

Buna ek olarak ise bitmiş bir projede Arduino’nun standart formunda kullanılıyor olması da büyük bir tembellik ve israf örneği olarak gösterilebilir. Kutulayıp biryere kaldıracağınız, *dedicated hardware* olarak kullanılacak olan bir donanımın içerisine 35 dolarlık bir Arduino’yu koyup kapatmak ,bence, büyük bir amatörlük ve israf örneğidir. İyi bir mühendis olarak Arduino’nun standart bir mikroişlemci ve çalışabilmesi için gerekli birkaç komponentten oluşan bir geliştirme kartı olduğunun farkına varılması gerekir. Arduino standart formu itibariyle geliştirme aşamasında büyük yarar sağlarken, iş bitiminde ,en basitinden, üzerindeki mikroişlemci sökülüp ayrıca kristali ve güç regülatörü vs ile bir perfboard’a lehimlenerek orda minimal bir tasarım yapılması gerekir.

Yazıyı toparlayacak olursak, Arduino ile ilgilenen ve uğraşan mühendisler neyle uğraştıklarını iyice bilmeleri kendi yararlarına olacaktır. Çok kolaylıklar sağladığı doğrudur bu platformun, fakat bu kolaylıkların insanların mühendislik becerilerini geriye götürmesine izin vermemeleri gerekir. Diğer bir taraftan da içinde Arduino geçen cümleye nefretle / alayla yaklaşan insanlar da durumu objektif olarak değerlendirebilmeyi öğrenmelidirler.

3 Responses to “Mühendis gözünden Arduino ( Arduino nedir? V2.0 )”


  • Ihsan Merhaba,

    Cok guzel bir degerlendirme yapmissin, ellerine saglik.

    Sahsen ben Arduino platformunu kullanmadan once yazinda bahsettigin “en kolay yol en iyi bildiğin yoldur” mantigiyla her projemde PIC mikroislemcilerini kullaniyodum, hatta guzel de bir kutuphane olusturmustum. Fakat ilk Arduino projemden sonra bu gorusum tamamen degisti. Eger aklima gelen bir seyi hizlica denemek istiyorsam register ve peripheral ayarlariyla ugrasmaktansa Arduino ile gelen standart kutuphanelerden, ya da baska birisinin yayinlamis oldugu ornek kodlardan yararlanmayi tercih ediyorum. Bu tur ‘haftasonu projesi’ kivamindaki uygulamalarda amac verimlilik ya da maliyet dusuklugu olmadigi icin Arduino gayet mantikli bir arac.

    Sondan ikinci paragrafta bahsettigin gibi her Arduino projesi icin bir Arduino board harcamak gereksiz bir sey. Buna ornek olarak: Yakin zamanda universite icin gelistirdigim bir projenin prototipini Arduino kullanarak yaptim, bu secimimin en onemli nedeni fazla vaktimin olmamasiydi (Sifirdan I2C, LCD, EEPROM ve RTC icin kod yazmak istemiyordum). Prototip asamasindan sonra da proje icin tasarladigim devreye ‘minimal Arduino’ denebilecek elemanlari dahil ettim ve su anda uretim asamasindayiz. Eger bu cihazdan binlerce uretip satmayi planlasaydim oturup bu uygulamanin sigabilecegi en ucuz mikroislemciyi secerdim ancak su an icin ihtiyacimiz olan miktar ve bu proje icin ayirabildigim zaman kisitlamalari nedeniyle Arduino mantikli bir secimdi.

    Sonuc olarak Arduino’yu bir panacea, her derde deva cozum olarak gormemek, ancak cok da kullanisli bir arac oldugunu inkar etmemek lazim :)

  • Birde amatörün gözünden değerlendirelim.
    pc uygulamaları geliştiren bir yazılımcıyım.
    sitenize söyle bir geciyordum uğradım.
    basından beri gömülü sistemlere bir ilgim olmuştur. Bir işletim sistemine bağlı olmadan tamamen özgür bir platform oluşturmak cok çekici geliyor.
    arduino yu hobi olarak kullanıyorum. mikro denetleyicilerle calısmak hiç bu kadar kolay olmamıstı.
    cok kez aklıma gelen bir devreyi yapmak istemişimdir fakat konu için bir sürü elektronik detayının girdiği için yapamamısımdır.
    sonucta ben hobi olarak bir devreyi yapmam için elektronik mühendisinin bildiklerini bilmek zorunda değilim adı üstünde hobi.
    insan bişeyleri pc ile kontrol edince cok mutlu oluyor acıkcası.
    uzun uzun assembler kodları yazmak için zamanım yok.
    aslına bakarsanız olaya yazılımcı gözüyle baktığımda tıpkı ilk bilgisayarların programlanması ile daha sonra yüksek seviye dillerin gelişmesi olayının aynısı. bu chiplerin bellek ve hızları arttıkca assambler da uygulama geliştirmek istenmeyecektir.
    düşünün windowsun assemblarda yazıldıgını .imkansız ötesi bir durum . sadece çekirdek kodları ve bazı özel bölümleri assemblarda yazılmıstır .
    Bu olanaklar sizin gibi değerli mühendislerin sayesinde oluyor.
    paylaşımlarınız için teşekkür ederim .
    iyi çalışmalar.

  • Ben de yazıyı ve Arduino’yu tembel bir tekniker olarak değerlendirmeliyim. Yazar her iki görüşe ve ara ihtimallere de değinmiş gerçi. Bu yüzden benim kod seninkini döver mantığı ile hareket edip dil karşılaştırmalarına girmeyeceğim…:)

    Ancak belirtmeliyim; assembly dili ile vakit kaybetmek istemiyor ve hızdan ödün verebileceğinizi düşünüyorsanız, Arduino bir çok projede kullanılabilir. Özellikle elektronikten çok anlamayan programcılar için ideal.

    Öte yandan vaktiniz bolsa (gerçi en iyi programcı tembel olan ya!) assembly kodlar üzerinden çok hızlı bir algoritma geliştirebiliyorsunuz. Mesela, az önce şu button örneğini derledim assembler (HEX) kodu ~2,8 KB. Gerçi üretilen binary code tam olarak 1014 byte imiş. Bunun 4/1′i ile neler başarıldığını bir bilseniz bu kaynak israfından dolayı çok tedirgin olabilirdiniz.

    Tamam, belki program memory’nin kapasitesi artık deli miktarlarda. Ama hız bir çok uygulamada önemli olabilir. Hele ki C#’da derlediğiniz bir uygulama ile komut bazlı değil de veri alışverişi olduğu sırada dikkate değer bir performans düşüklüğü kaçınılmazdır.

Leave a Reply