Arduino Nano Matter ve Matter platformundan bahsettiğim bu yazı dizisinin ilk bölümünde Arduino’nun yeni kartından ve yeni akıllı ev platformundan kısaca bahsetmiştim.
Bu bölümde Arduino Nano Matter‘a yakından bakıyor ve Arduino ekibinin kartı tasarlarken yaptığı bazı tercihlerden bahsediyorum. Kartın Community Preview versiyonu olduğunun tekrar altını çizeyim.
Nano Matter’a Yakın Bakış
Aşağıdaki fotoğrafta Nano Matter’ın bileşenlerini görüyoruz. Arduino ekibinin işaretlemediği bölümleri de turuncu çizgilerle ben gösterdim.
Görüldüğü gibi bildiğimiz 15pinx2 biçimindeki klasik Nano yapısında tasarlanmış. Sol tarafta yer alan ATSAMD11 çipinin tek görevi ana çip olan MGM240S’e USB-UART köprüsü sağlamak. Çünkü MGM240S çipinin bir USB arayüzü bulunmuyor.
Arduino kartlarında görmeye alışık olduğumuz RX/TX LED’leri bu kartta yer almazken, karta güç verildiğini gösteren ON LED‘i kırmızı renkte ve biraz fazlaca parlak şekilde yanıyor. LED_BUILTIN olarak bildiğimiz dahili LED ise yerini bir RGB LED‘e bırakmış. LED_BUILTIN sabiti artık bu RGB LED’in kırmızı rengini temsil ediyor.
Arduino geliştirme kartlarında görmeye alışık olmadığımız bir bileşen ise kullanıcı butonu. Fotoğrafta USER BUTTON olarak işaretlediğim buton sayesinde bir şeyler denemek için harici buton bağlamak zorunda kalmıyoruz.
Nano Form Faktörü Ama…
Nano Matter’ın tanıdık bildik Nano biçiminde tasarlandığını söylemiştim. Ancak pin yapısı tamamen aynı değil. Arduino ekibi zamanla Nano pin dizilimi üzerinde bir takım değişikliklere gitti.
Örneğin yeni nesil kartlarda orijinal Nano’nun aksine D0 ve D1 pinlerinin yerleri değişik. Klasik Nano’da dijital pinler D1(TX), D0(RX), D2, D3… şeklinde diziliydi. Görece yeni nesil olan Nano Every’de de durum böyle. Ancak 3.3 Volt lojik seviye ile çalışan güncel Nano modellerinin çoğunda (Nano ESP32’de her nedense eskisi gibi) bu durum değişti. Sıralama artık D0(TX), D1(RX), D2, D3… şeklinde ilerliyor. Görüldüğü üzere RX ve TX pinleri yine aynı yerlerinde, ancak kodlama tarafındaki pin adı değişmiş durumda. Nano Matter da bu değişikliği devam ettiren kartlardan biri.
Klasik Nano pin diziliminde kartın iki tarafında da birer RESET pini bulunuyordu. Nano Matter’da ise sadece tek tarafta bir RESET pini var ve diğer tarafta olması gereken pin ise -her nedense- boş bırakılarak NC (Not Connected) olarak işaretlenmiş. Neyse ki kart üzerinde bir RST butonu da yer alıyor.
3.3 Volt Lojik Seviye
Arduino Nano Matter’ın yeni nesil pek çok mikrokontrolcü kartı gibi 3.3 Volt lojik seviyede çalıştığını unutmamamız gerekiyor. Yani kartın dijital veya analog giriş/çıkış pinlerinin kabul edebileceği azami gerilim seviyesi 3.3 Volt.
Karta 5 Volt lojik seviyede çalışan sensör veya modüller bağlayacaksak lojik seviye dönüştürücü devreler kullanmalıyız. Kartın pinlerine yanlışlıkla 3.3 Volt’tan fazla gerilim vermek bağlanan pinin veya bazen mikrokontrolcünün tamamen bozulmasıyla sonuçlanacaktır.
Besleme Meselesi
Nano Matter’ın güç bölümü ise geleneksel Nano yapısına göre çok daha büyük değişiklikler içeriyor. Kart üzerinde 5 Volt üzeri besleme için herhangi bir gerilim regülatörü bulunmuyor. Halbuki klasik Nano’larda VIN girişi üzerinden 14 Volt’a kadar besleme yapabiliyorduk.
Arduino ekibi -artık yüksek gerilim desteklemeyen- VIN girişi üzerinden regülatöre yanlışlıkla 5 Volt’tan yüksek gerilimler verilmesin diye bu girişi hiçbir yere bağlamamış.
Öte yandan 5V olarak bildiğimiz pin ise IN5V olarak yeniden adlandırılmış. Önceki nesil Nano kartlarda karta USB üzerinden güç verdiğimizde bu pin üzerinden 5 Volt elde edebiliyorduk. Arduino ekibi ise bu pini USB gerilimi yerine doğrudan ana mikrokontrolcüyü besleyen gerilim regülatörüne bağlamış. Yani Nano Matter’ı USB’ye bağladığımızda bu pin üzerinden 5 Volt alamıyoruz.
Arduino ekibi boşta bıraktığı VIN girişinin azami 5 Volt bile olsa harici giriş olarak kullanılabileceğini düşünmüş olmalı ki, pini IN5V girişine bağlayabilmemiz için bir jumper yerleştirmiş. Lehimle kolayca birleştirilebilen bu jumper sayesinde artık -bir değil iki tane- IN5V girişimiz oluyor!
Tek paragrafta özetleyecek olursak; Nano Matter’ı USB üzerinden, 3V3 girişi üzerinden ve IN5V girişi üzerinden besleyebiliyoruz. Kartı 5 Volt’tan yüksek gerilimler ile beslemek mümkün olmadığı gibi, USB üzerinden güç verildiğinde kartın herhangi bir pininden 5 Volt çıkış elde etmek de mümkün değil.
Nano Matter Community Preview sürümünde bulunan bu besleme sorunlarını Arduino ekibine bildirdim ve zaten bu durumun farkında oldukları ve kartın nihai versiyonunda bu sorunun çözüleceği cevabını aldım.
Aslında İyi Bir Fikir
Arduino ekibinin yukarıda bahsettiğim besleme sorunlarına sahip kartı tasarlaması aslında bir hatanın sonucu değil. Ekip, kartın batarya üzerinden besleneceği senaryosu üzerinde çok çalışmış ve uzun pil ömrüne sahip olması için bu tasarım yoluna gitmiş.
USB-UART köprüsü olarak kullanılan ATSAMD11 çipinin ana mikrokontrolcü MGM240S’ten tamamen bağımsız bir güç regülatörü var ve karta 3V3 veya IN5V girişleri üzerinden güç verildiğinde bu regülatör ve ATSAMD11 güç almıyor. Böylece zaten UART’a bağlanmayacak olan kart gereksiz yere güç tüketmiyor.
Kart üzerindeki ON LED‘i ise doğrudan USB üzerinden gelen 5 Volt hattına bağlanmış. Böylece karta sadece USB’den güç verildiğinde yanıyor ve IN5V girişinden güç verildiğinde yanmayarak güç tüketimini düşürüyor.
Bu tasarıma rağmen Arduino ekibi LED’i iptal etmek için bir jumper da eklemiş. LED yazan jumper pinlerinin arasındaki hattı ince bir bıçak ile keserek LED’i söndürebiliyoruz. Yine de bu LED’in ana mikrokontrolcünün güç hattına bağlı olmasını ve yine jumper keserek devre dışı bırakabilmeyi daha mantıklı bir tasarım olarak buluyorum.
Arduino ekibi nihai tasarımda kartın besleme tasarımını değiştirecek, ancak bunun için yukarıda bahsettiğim detaylardan ne kadar feragat edecek göreceğiz.
LED ve Butonlar
Nano Matter üzerinde 2 adet LED bulunuyor. Bunlardan biri D6 pininin hemen altında bulunan ve Community Preview versiyonunda epey parlak bir kırmızı renkte yanan ve kartın güç aldığını ifade eden ON LED‘i.
Diğeri ise mikrokontrolcünün 3 pinine bağlı RGB LED. Kart üzerinde diğer Arduino geliştirme kartlarından alışık olduğumuz kullanıcı LED’i yer almıyor. Arduino ekibi LED_BUILTIN sabiti ile kullandığımız bu kullanıcı LED’ini RGB LED’in kırmızı (R) rengine ayarlamış.
Ancak burada da önceki kartlardan alıştığımıza göre bir tasarım farklılığı bulunuyor. Geleneksel Arduino kartlarda kullanıcı LED’ini yakmak için ilgili pine HIGH gönderiyoruz.
Nano Matter’da bulunan RGB LED ortak anotlu bir model seçildiği için LED’lerin birleştirilmiş anot uçları doğrudan güç hattına bağlı. LED’leri yakmak için ise katot uçlarına GND bağlamamız gerekiyor. Yani bu LED’leri yakmak için ilgili pine LOW göndermek zorundayız.
1 2 3 4 5 6 |
void setup() { pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW); } void loop() {} |
Yukarıdaki kod RGB LED’in kırmızı rengininin bağlı olduğu pine LOW gönderiyor ve LED’i yakıyor. LED’i söndürmek için ise ilgili pine HIGH göndermek zorundayız.
RGB LED’in kırmızı (R) renginin LED_BUILTIN olarak tanımlandığından bahsetmiştik. Arduino ekibi diğer iki renk için de sabitler belirlemiş. Bunlar yeşil (G) renk için LED_BUILTIN_1 ve mavi (B) renk için LED_BUILTIN_2 olarak seçilmiş.
1 2 3 |
int LED_R = LED_BUILTIN; int LED_G = LED_BUILTIN_1; int LED_B = LED_BUILTIN_2; |
Elbette bu sabitler hangi renge ait olduklarını belirtmediği için kafa karıştırabilir. Bu yüzden yukarıdaki koddaki gibi kendi değişkenlerimizi tanımlayabiliriz. Arduino ekibi de bunun bir sorun olabileceğini düşünmüş olmalı ki kendi örneklerinde de bu tür ek tanımlamalar yapmak zorunda kalmışlar.
USER BUTTON (Kullanıcı Butonu)
Arduino ekibinin Nano Matter Community Preview’i tasarlarken aldığı ilginç kararlardan biri de bir kullanıcı butonu eklemek olmuş. Bunu yaparken de kısıtlı sayıde GPIO pinine sahip olan MGM240S mikrokontrolcüsünün AREF (Analog REFerence) pinini kullanmayı tercih etmişler.
Gerektiğinde bu pini dijital G/Ç pini olarak kullanmak istersek kart üzerindeki AREF jumper’ını lehimle birleştirmek yeterli. Ancak bu durumda butonu kullanmamamız gerekiyor.
Devre şemasında AREF olarak adlandırılan mikrokontrolcü pini aslında Arduino Core üzerinde 25 numaralı pin olarak görünüyor. Arduino ekibi ise bu buton için de bir sabit belirlemiş ve buna da BTN_BUILTIN adını vermiş.
1 2 3 |
void setup() { pinMode(BTN_BUILTIN, INPUT_PULLUP); } |
Bu buton ACTIVE LOW olarak yerleştirildiğinden dolayı kullanabilmek için pinini yukarıdaki kod parçacığında görüldüğü gibi INPUT_PULLUP olarak tanımlamak gerekiyor. İlgili değişkende butona basıldığında LOW değerini okuyoruz.
Sıradaki bölümde Arduino Nano Matter’ın Arduino IDE’ye nasıl ekleneceğinden bahsedecek ve bileşenlerini kullanabilmek için temel örnek kodlara değineceğim.