Hobi veya deneysel olarak yapılan devreleri görmüşsünüzdür instagram vb. yerlerde. Eğer uğraşmak istiyorsanız ve çekinceniz varsa mini bir rehber hazırladım vakit geçirmek için. Aşağıda uzun uzadıya anlatsam da aslında bir ardunio alıp çıkışına bir şey bağlayıp kontrol etmel çok basittir. Hatta üzerinde örnek kodlarla gelir.
Önce tanım ve kullanım yerlerini anlatayım. Kendinize göre düzenleyebilirsiniz siz de. Mikrokontrolcüler kendi ram, hafıza ve işlemci birimlerini kendi bünyesinde bulundurur. Ide denilen programlarla entegre üzerine program yazıp atabilirsiniz. Üzerinde giriş çıkış (led, buton, anahtar, röle) olarak kullanabileceğiniz pinler, sensörlerden (nem, sıcaklık, potans, gaz kaçağı) bilgi alabileceğiniz pinler, diğer cihazlarla ( başka bir mikrokontrolcü, bilgisayar, telefon, wifi vb. ) haberleşebileceğiniz pinler, bulunur. En popüleri bugün arduino'dur. Teorik anlatması uzun sürse de aslında ne için kullanmak istediğiniz direkt zaten hangi mikrokontrolcüyü seçeceğinizi belirler. Örneğin sadece bir motora hız ayarı yaptırmak istiyorsanız en küçük tip arduino tipi bile yeterlidir. Fakat bluetooth ya da wifi'dan cihazları kontrol etmek istiyorsanız esp32 gibi modeller gerekebilir.
Bu forumda bu konuyu yazmak isteme sebebim 3d yazıcınız varsa eğer elektronik devrelere kutu yapmanın haricinde bu tür mikrokontrolcülerle değişik cihaz tasarımları yapabilirsiniz. Atıyorum wifi'dan bir html sayfasıyla kontrol edebildiğiniz bir lamba tasarımı. Pratikte akıllı ev hissiyatı yaşatır size.
Çeşitler nelerdir? Ben çeşit çeşit yazacağım ama bazıları bilgilendirme.
1. microchip firmasının ürettiği pic mikrokontrolcüler. Bunlar sadece entegre olarak satılır genelde. Bu yüzden bunu alırken bir tane de yanında entegreye yükleme cihazı almak gereklidir. Fakat arduino yokken eskiden çok popülerdi. Şu an endüstride seri üretimde kullanılıyor desek yanlış olmaz.
2. arduinolar. Bu kartları yapan insanlar, herkes kodlama yapabilsin diye osilatör devresi (saat sinyali için), usb to ttl dönüştürücü (mikro kontrolcüyü usb ile haberleştirme ve program yükleme yapabilmek için), insanlar kolayca deneme yapabilsin diye kablo takabilmek için dişi headerlar takmışlar. Yani size usb kabloyu takıp program yazmaktan başka bir işlem kalmıyor. Gerçekten çocuk oyuncağıdır. Şu çocukların gittiği robotik kodlama dersleri falan hep arduino ile yapılır. O kadar da kolaydır. Arduino içinde aslında atmel mikrokontrolcüler vardır. Arduinoları küçümsemeyin çünkü çocuk oyuncağından çok daha fazla iş yaparlar. Bu kadar popüler olmalarının sebebi ise hazır kartlardan dolayı değildir. İçlerinde her nevi şey için kütüphane bulunur. Kütüphaneler hazır derlenmiş kod formülleridir diyebiliriz. Örneğin servo motor denilen motorları çalıştırabilmek için belli parametre hesapları yapmanız gereklidir. Fakat kütüphaneye servomotor kütüphanesi ekleyince yanlış hatırlamıyorsam açıyı girmeniz ya da belli bir pwm vermeniz yeterlidir.
3. esp serisi mikrokontrolcüler: En popülerleri esp32'dir. Esp serisi kartlar arduinolara göre yüksek hızlar, fazla hafıza, dahili wifi, dahili bluetooth bulundurur. işin ilginç yanı daha fazla özellik barındırmasına rağmen bazen ardionolardan daha ucuz olabilirler. Bunun sebebi arduino öğrenciye satılan kartlarken esp'ler endüstriye hizmet eder ve arduino daha popüler olmasına rağmen esp'ler daha çok satılırlar. Peki bu fiyat avantajına rağmen neden esp bu kadar popürlerleşemiyor. O kadar da bilinmiyor değil elbette. Fakat 3.3 volt giriş ve çıkışları. Arduinolar ise 5 volttur. Dijital elektronik ve satılan modüller genelde 5 volt olduğu için sanırım insanların kafası karışıyor. Bir de çoğu kişinin öğrenme aşamasında wifi gibi özellikler henüz fazla geliyor mıiuhtemelen. Fakat esp32 için de geliştirme kartları bulunuyor piyasada.
stm serisi mikrokontrolcüler: stm firmasının ürettiği bir mikrokontrolcüdür. Amatörler kullanmaz. Ben stm32 geliştirme kartı da duymadım. Hızlarında esp ailesiyle kapışır hatta geçebilir ama mikrokontrolcü yarıştırmak anlamsızdır. Bilgi amaçlı ekledim listeye.
yazılım dilleri: Aslında her mikrokontrocünün bir komut seti vardır. Fakat çok temel seviyede olan bu komutlar insanın anlayabilmesi için çok karmaşıktır. Assembly denilir komut seti seviyesinde kullanılan dillere. Örneğin şöyle bir örnek vereyim karmaşayı anlayın. mikrokontrolcüler yazılan programı satır satır çalıştırırlar. bşr satırdan diğerine geçmek için saat sinyali dediğimiz bir tetikleme sinyaline ihtiyacı vardır. bunun için osilatör devresi kurulur ve mikrokontrolcünün osc1 ve osc2 bacağına bağlanır. Pic kontrolcüler kendisine gelen tetikleyicinin dörtte birini kullanır. Eğer 4 megahertz takarsanız bu 1 megahertz tetikleniyor demektir. bu da pic 10 mikrosaniyede bir tetikleniyor demektir. Sadece yanıp sönen bir led yakmak istediğinizde bir ledi yak demeniz yetmez. 10 mikrosaniye yanar ve söner sadece ve ledin yandığını bile göremezsiniz. nope komutu verirsiniz ama onu da tek satır vermek yetmez. 1 saniye için 100bin adet nope komutunu alt alta yazmanız gerekir. :)Tabii ki bu manyak bir sayı. (üstelik saat hızımız bile çok düşük daha) timer denilen donanımsal bir sayıcıya bağlanır. Yani kafayı yemeliktir assembly.
Bu yüzden daha kullanıcı dostu diller çıkmıştır zamanla. Siz 100 bin nope falan uğraşmazsanız. örneğin pic basic gibi programlarda delay 1000 yazmanız yeterlidir. Kodlar derlenir ve mikrokontrolcünün anlayacağı şekle getirilir.
Fakat yine de günümüz dünyasında basic gibi diller de çok yetersizdir. Bu yüzden arduino gibi ıde'ler c++ kullanır. Fakat şu mantık da gelmesin aklınıza. Ne yani programlama yapabilmek için c++ mı öğrenmek zorundayım? Evet ama bu çok kolaydır. Aslında c, c#, c++ gibi diller temel dillerdir fakat 5-10 tane fonksiyonunu kullanmak yeterlidir çoğu kez.
Bu fonksiyonlar şöyle. pinlere 5 volt ver demek için kullanılan komutlar.
pinlere 0 volt ver demek için kullanılan komutlar.
pinlerden voltaj okunan komutlar.
değerleri değişkenlere atadığımız komutlar. bu değişkenler şu işe yarar. örneğin bir potansiyometreyi çevirdikçe bir ledin yanıp sönme hızı yavaşlasın ya da hızlansın istiyorsunuz. ayar diye bir değişken yaratıp onu pottan okunan değere bağlarsınız. böylece delay 1000 diyerek sabit bir hızdansa delay ayar dediğinizde hız değişkene bağlanmış olur.
if/else fonksiyonları: Bir butona basılıp basılmadığını kontrol eden fonksiyonlardır. Elbette buton bşr örnektir. Yoksa örneğin bir sıcaklık sensörünün 65 dereceyi aşarsa şunu yapsın demek için de kullanabilirsiniz.
for döngüleri: bazen bir işlemi artarda tekrarlamak gerekir. bu tür durumlarda artarda aynı komut 100 kez yazılmaz. for döngüsü ile 2-3 satırda bitirilir. for döngüsü bitince yazılım bir alt koda geçer.
while döngüleri: istenen olay gerçekleşene kadar ya da gerçekleşmeyene kadar şunu yap denilen komutlardır.
Yukardaki komut ve fonksiyonlar hangi dili öğrenirseniz öğreinn temeldir. Bunların mantığını anladığınızda başka bir programlama diline de geçseniz öğreneceğiniz şey syntax'dır. Syntax, dilin grameridir. Örneğin arduino'da satırlar noktalı virgül ile biter.
Kütüphaneler konusu: Yukarda bahsetmiştik biraz kütüphanelerden. Kütüphaneleri nsanların önceden hazırladığı tanımlı formüller gibi düşünebilirsiniz. Aynı işlemin yapıldığı fakat hesap yapmak gereken işlerde sizi kurtarırlar. Arduinonun avantajı binlerce kütüphanesi olmasıdır. Ekranlar, haberleşmeler, çeşitli algoritma isteyen motorlar için hep kütüphane kullanılır. Bazen de kütüphanelerin kullanılöa sebebi bütün ihtiyaçların kütüphanesi yazılıma ekli gelseydi o ıde aşırı yavaşlardı. Bu yüzden kütüphaneleri biz el ile ekliyoruz. Çoğunlukla o kütüphaneyi hiç kullanmadıysanız örnek kodlara bakıp çalışma mantığını anlayabilirsiniz. bu kopyacılık değildir. Binlerce kütüphane var.
Biraz da elektronik kısmından bahsederek bitireyim. pin dediğimiz şey entegrenin bacaklarıdır. Bu yazıyı okumaya devam ediyorsanız muhtemelen arduino gibi bir kart var elinizde. Kartların üzerinde yazıyor şu şudur bu budur diye. genellikle 5 volt pinleri, eksi anlamında gnd pinleri, usb'den değil de harici bir gğç kaynağından çalıştırmak için pinler bulunur.
dijital giriş çıkış pinleri. Eğer 5 volt verip bir şey çalıştırıyorsanız kodlamada o pin numarasını belirtip bu çıkıştır diye setup yaparsınız. Eğer bir buton bağlıyorsanız o pini bu sefer setupta giriştir diye belirtirsiniz.
pwm pinleri: pwm pulse with modulation demektir. Elektriği kesikli kesikli vererek voltajı daha düşük verebilirsiniz. Örneğin bir ledin %50 daha kısık parlaklıkta yakmak istiyorsanız 2.5 volt vermeniz gerekir. çoğunlukla 0-255 arası değer verilir. yani 2.5 volt için pwm, a3 pini, 127 gibi bir şey yazarsınız temelde. Örneğin bir for döngüsü kullanarak 100 milisaniyede bir parlaklığı 0'dan 255'e kadar çıkar derseniz bu sağlıklı bir kodlamadır ve çok basittir. İki tür pwm üretilebilir mikrokontrolcülerde. Birisi donanımsal diğeri yazılımsaldır. Donanımsal pwm kullandığınızda bacağa sen 2 volt ver deyip dönüp başka işler yaptırabilirsiniz. Olur da donanımsal pwm üreten pinleriniz doluysa yazılımsal olarak da pwm ürettirebilirsiniz dijital giriş çıkış pinlerine fakat o esnada yazılım başka bir işle uğraşamaz ve stabilite düşük olabilir.
adc pinleri: dışardan bir voltaj okumanız gerektiğinde kullanılan analog dijital çevirici pinlerdir. genellikle 0-1023 arası değerler döndürür.
Seri haberleşme pinleri: tx rx şeklinde yazar genelde kartlarda. Diğer cihazlarla haberleşebilmek için kullanılır. Siz yazdığınız kodu arduino'ya ataeken bu pinleri kullanır örneğin. Bir sensör verisini seri haberleşme ile bilgisayardan takip edebilirsiniz ardunio ıde'lerde. Bazı sensör veya modüller adc pininden voltaj ile değil seri haberleşme ile bilgi gönderir. Örneğin şimdi adını hatırlamadığım saat modülü seri haberleşir arduino ile. Saat gibi hassas olan bir verinin ardiuno ile üretilmesi biraz sakattır. Yapılamaz değil yapılır ama zamanla kaymalar meydana gelebilir. Bu yüzden dışardan modül kullanmak en mantıklısıdır. Bağladığımız ekranlar da haberleşirken seri haberleşme, ı2c, spi gibi haberleşmeler kullanılır.
Çok çeşitli haberleşme protokolleri vardır. Bazı mikrokontrolcülerde örneğin spi haberleşme için donanımsal bacak olurken diğerinde olmayabilir. Aynı şey diğer haberleşme protokollerinde de geçerlidir.
En önemli haberleşme ya da en standardı seri haberleşmedir. Seri haberleşmede iki cihazında aynı baud hızında olması gereklidir.
Temel elektronik bilgileri: Bütün yazı boyunca lede 5 volt vermek dedim fakat ledler ortalama 3-3.2 volt arası çalışır. bu yüzden arduino pini ile ledin bacağı arasına 200-250 ohm civarlarında direnç koyularak gerilim düşürülür.
ardiono giriş çıkışlar için 5 volt kullanır. Fakat esp32'ler 3.3 volt kullanır. Bu yüzden arada voltaj çevirici modül kullanmak zorunda kalabilirsiniz. Bunu unutmamakta fayda var.
Daha yüksek voltajlarda çalışan cihazlar yapmak: mikrokontrolcünüzün çıkışları 5 volt ya da 3.3 volt olabilir fakat bazen kontrol etmek istediğiniz cihaz 12 volt, 24 volt, 220 volt olabilir. Bu tür durumlarda röle, transistör, mosfet, optik izolatör gibi şeyler kullanmak durumunda kalabilirsiniz. Örneğin piyasadan 12 volt ya da 24 volt bir şerit led alıp onun parlaklığıyla oynamak isteyebilirsiniz. Bu tğr durumlarda transistör de değil, mosfet kullanırsınız. Gerekli araşturmayı yaptığınızda nasıl bağlanacaklarını kolayca öğrenebilirsiniz.
Akım çekme meselesi: mikrokontrolcülerin bacaklarından çekebileceğiniz akım çok sınırlıdır. bir tane led yakmaya ancak yeter. genelde de 10 miliamper, 20 miliamper kadardır. Bu her bacağın tek tek verebileceği akımken bşr de entegreden çekebileceğiniz toplam akım vardır. Özellikle transistör bapladığıdığınızda 3-4 taneden sonra aynı anda çalışamayabilir ledler. siz de kodda mı hata var dersiniz. arkadaşın başına geldi. Allah'tan ben mosfet kullanıyordum. :)
Sürücü kartlar: hem bu mikrokontrolcülerden fazla akom çekemeyeceğiniz için hem de motor gibi bazı şeylerin özel gereksinimi olduğu için sürücü modüller mükrokontrolcüden alınan sinyal ike bir motoru, bir lambayı veya çeşitli şeyleri sürerler. Yukardaki transistör veya mosfet bağlama işi de bir sürme tekniğidir.
Modüller: Özellikle ardiuno dünyasında her şey lego gibi. Shield diyorlar aslında ama modül diyen de çok var. Hazır devredir modüller. Sürücü modüller, bluetooth modülleri, haberleşme modülleri, voltaj çevirici modüller, hafıza modülleri, 3',lü 4'lü kartı modülleri, gerilim bölücü modüller, hatta ekranlar bile shield ya da modül ismiyle geçebiliyor. İnstagram ve youtube'da gördüğünüz çoğu devre modüllerle yapılıyor kolayca. Profesyonel bile olsanız artık herşeyi sıfırdan yapmak anlamsızdır. Bazılarını istesek de yapamayız sıfırdan. Kopyacılık ya da hazırcılık sayılmaz yani.
Bu işlere yeni başlayacaksanız bir ölçü aletiniz olsun. Harici bir güç kaynağınız olsun. Hayat kurtarır.
Bonus: bir esp32 alıp hazırladığınız html sayfayı esp32 içine gönerseniz esp32 çıkışına bağlı şeyi evin içinde wifi çeken her yerde tarayıcıdan aç kapa yaptırıp kullanabilirsiniz.