Arduino Donanımı
Zaman içinde Arduino, birçok şekil ve biçimde yüzlerce donanım tasarımı yayınladı.
Bir Arduino kartının anatomisi
Tüm Arduino kartları birbirinden farklı olsa da hemen hemen her Arduino'da bulunabilen birkaç temel bileşen vardır (Görsel 1.1).
Görsel 1.1: Bir Arduino kartının temel bileşenleri
1. Mikrodenetleyici: Bu Arduino'nun beynidir. Programları yüklediğimiz bileşendir. Bunu yalnızca belirli sayıda şeyi yürütmek için tasarlanmış küçük bir bilgisayar olarak düşünebilirsiniz.
2. USB port (bağlantı noktası): Arduino kartınızı bir bilgisayara bağlamak için kullanılır.
3. USB-seri dönüştürücü: USB'den seri'ye önemli bir bileşendir. Örneğin bir bilgisayardan gelen verilerin yerleşik mikrodenetleyiciye çevrilmesine yardımcı olur. Arduino kartını bilgisayarınızdan programlamayı mümkün kılar.
4. Dijital pinler : Dijital mantığı kullanan pinler (0,1 veya LOW/HIGH). Genellikle anahtarlar ve bir LED'i açmak/kapatmak için kullanılır.
5. Analog pinler: 10 bit çözünürlükte (0-1023) analog değerleri okuyabilen pinlerdir.
6. 5V / 3,3V pinleri: Bu pinler, harici bileşenlere güç sağlamak için kullanılır.
7. GND: Ground, negative ya da sadece (-), elektrik seviyesinin 0 V olduğu (toprak seviyesi) bir devreyi tamamlamak için kullanılır.
8. Vin: Harici güç kaynaklarını bağlayabileceğiniz voltaj girişi anlamına gelir.
Arduino kartına bağlı olarak daha birçok bileşen mevcuttur. Yukarıda listelenen öğeler genellikle herhangi bir Arduino kartında bulunur.
Temel operasyon
Çoğu Arduino kartı, mikrodenetleyici üzerinde çalışan tek bir programa sahip olacak şekilde tasarlanmıştır. Bu program, bir LED'in yanıp sönmesi gibi tek bir eylemi gerçekleştirmek üzere tasarlanabilir. Ayrıca bir döngüde yüzlerce eylemi yürütmek için tasarlanabilir. Kapsam bir programdan diğerine değişir (Görsel 1.2).
Mikrodenetleyiciye yüklenen program enerji verildiği anda çalışmaya başlayacaktır. Her programın döngü adı verilen bir işlevi vardır. Döngü işlevinin içinde örneğin şunları yapabilirsiniz:
- Bir sensör okuyun.
- Bir ışık açın.
- Bir koşulun karşılanıp karşılanmadığını kontrol edin.
- Yukarıdakilerin hepsi.
Bir programın hızı, biz ona yavaşlamasını söylemediğimiz sürece inanılmaz derecede hızlıdır. Programın boyutuna ve mikrodenetleyicinin onu yürütmesinin ne kadar sürdüğüne bağlıdır. Ancak genellikle (µsn) mikrosaniye cinsindendir (saniyenin milyonda biri).
Görsel 1.2: Bir Arduino'nun temel çalışması
Devre temelleri
Devreler, akımın geçebilmesi için en az bir aktif elektronik bileşen ve teller gibi iletken bir malzemeden oluşur. Bir Arduino ile çalışırken, çoğu durumda projeniz için bir devre kuracaksınız.
Basit bir devre örneği, bir LED devresidir (Görsel 1.3). Arduino'daki bir pinden bir direnç aracılığıyla bir LED'e (LED'i yüksek akımdan korumak için) ve son olarak topraklama pinine (GND) bir tel bağlanır. Pin HIGH (yüksek) durumuna ayarlandığında, Arduino kartındaki mikrodenetleyici, LED'i açan devre boyunca bir elektrik akımının akmasına izin verecektir. Pin LOW (düşük) duruma ayarlandığında, devreden elektrik akımı geçmediği için LED söner.
Görsel 1.3: Arduino ile bir LED devresi
Devreler tipik olarak şema olarak temsil edilir. Aşağıdaki resim, yukarıdaki resimde gösterilen aynı devrenin şematik gösterimidir (Görsel 1.4).
Görsel 1.4: Devre şeması
Elektronik sinyaller
Elektronik bileşenler arasındaki tüm iletişim elektronik sinyallerle sağlanır. İki ana elektronik sinyal türü vardır:
- Analog sinyal
- Dijital sinyal
Analog sinyal
Görsel 1.5: Analog sinyal
Bir analog sinyal genellikle bir aralığa bağlıdır. Bir Arduino'da bu aralık tipik olarak 0-5V veya 0-3,3V'dur.
Örneğin bir potansiyometre (bir devrenin direncini değiştirmek için kullanılan analog bir bileşen) kullanırsak, bu aralığı (0-5V) manuel olarak ayarlayabiliriz. Bu durum programda 10 bit çözünürlük olan 0-1023 aralığında temsil edilir.
Darbe Genişlik Modülasyonu (PWM) kullanarak bir analog sinyal yazarsak, 8 bitlik bir çözünürlük kullandığımız için 0-255 arasında bir aralık kullanabiliriz.
Dijital sinyal
Görsel 1.6: Dijital sinyal
Bir dijital sinyal, programda HIGH (yüksek) veya LOW (düşük) durumlar olarak okunan yalnızca iki ikili durumu (0 veya 1) temsil ederek biraz farklı çalışır. Dijital sinyal, modern teknolojideki en yaygın sinyal türüdür.
Örneğin buton durumlarını okumak veya bir şeyi açıp kapatmak için kullanışlı olan bir Arduino'da dijital sinyalleri kolayca okuyabilir ve yazabilirsiniz.
Dijital sinyaller çok basit görünebilir (yalnızca 0 veya 1). Ancak aslında çok daha gelişmiştir. Örneğin, birkaç kez hızlı bir şekilde HIGH (yüksek) veya LOW (düşük) durum göndererek bir dizi oluşturabiliriz. Bu, ikili dizi veya bit akışı olarak bilinir.
Aşağıdaki iki ikili diziye bir göz atalım:
- 101101
- 101110001110011
Aşağıda desimal (onlu) karşılıkları verilmiştir.
- 45
- 23667
Bu, HIGH (yüksek) ve LOW (düşük) sinyalleri hızla göndererek bir noktadan diğerine büyük miktarda veri göndermenin akıllı bir yoludur. Sinyallerden gelen verileri yorumlamak için seri iletişim protokolleri kullanılır.
Sensörler ve aktüatörler
Arduino ile çalışırken sensörleri ve aktüatörleri ve aralarındaki farkı anlamak önemlidir.
Sensör nedir?
Basit bir ifadeyle bir sensör, çevresini algılamak için kullanılır. Örneğin sıcaklık gibi fiziksel bir parametreyi kaydeder ve bunu elektronik bir sinyale dönüştürür.
Sensörler ayrıca basit bir buton şeklini alabilir. Bir durum değiştiğinde (bir butona basıldığında) elektronik sinyal düşükten yükseğe (0'dan 1'e) değiştirilir.
Birçok sensör türü ve bunlardan veri kaydetmenin birkaç yolu vardır. Belki de kullanımı en kolay olanı, bir Arduino analog pinine beslenen voltaj girişini değiştirerek (genellikle 0-5 volt arasında) bir dizi değer ilettiğimiz bir analog sensördür. Bir analog sensör okununca 0-1023 (10 bit çözünürlük) arasında bir aralık elde edilir.
Dijital sensörler, türüne bağlı olarak biraz daha gelişmiştir. Verileri buna göre göndermek için seri iletişim protokollerine güvenirler. Veriler bir ikili dizi kullanılarak gönderilir. Bunun bir yazılım düzeyinde ele alınması ve yapılandırılması gerekir. Pek çok sensörün okumayı çok daha kolaylaştıran kütüphaneleri (yazılım kitaplıkları) vardır.
Bir kütüphane kullanan çoğu durumda tek ihtiyacımız olan tek satırlık bir koddur. Örneğin,
sensorValue = sensor.read();
Aktüatör nedir?
Bir aktüatör, basit bir ifadeyle bir fiziksel durumu harekete geçirmek veya değiştirmek için kullanılır. Bazı örnekler:
- LED
- Motor
- Anahtar
Aktüatörler elektrik sinyallerini örneğin radyan enerjiye (ışık) veya mekanik enerjiye (hareket) dönüştürür.
Aktüatörlerin nasıl kontrol edildiği ne tür bir bileşene sahip olduğumuza bağlıdır. En basit yol, basitçe bir şeyi açıp/kapatmaktır. Daha gelişmişi bir bileşenin aldığı voltaj miktarını (yani bir motorun hızını) kontrol etmektir.
Aktüatörleri kontrol etmek için digitalWrite() ve analogWrite() fonksiyonları yaygın olarak kullanılır. Örneğin,
digitalWrite(LED, HIGH); //LED’i yak.
digitalWrite(LED, LOW); //LED’i söndür.
analogWrite(motor, 255); //motoru tam hız döndür.
analogWrite(motor, 25); //motoru %10 hızla döndür.
Giriş çıkış
Sensörler ve aktüatörler, genellikle girişler ve çıkışlar olarak adlandırılır. Bir program yazarken bir sensörün durumunu kontrol eden ve bir şeyi harekete geçirip geçirmeyeceğine karar veren koşullu ifadeler oluşturmak yaygın bir uygulamadır.
Bunun temel bir örneği, bir buton ve bir LED'dir. Bir butona basılıp basılmadığını kontrol eden, LED'i açan ve butona basılmazsa söndüren bir koşul yazabiliriz. Bir Arduino programında şöyle yazılır:
int butonDurum = digitalRead(butonPin);
//buton durumunu okuyun ve saklayın (0 veya 1).
if(butonDurum == HIGH){
//durumun yüksek olup olmadığını kontrol edin (düğmeye basılır).
digitalWrite(LED, HIGH); //LED’i yak.
} else {
digitalWrite(LED, LOW); //LED’i söndür.
}
Seri iletişim protokolleri
Veri göndermek için dijital sinyalleri kullanan birkaç seri iletişim protokolü vardır. En yaygın olanları UART, SPI ve I²C'dir. UART protokolü, yeni bir program yüklemek veya doğrudan bir Arduino'dan veri okumak gibi bir bilgisayar ile Arduino kartı arasında veri göndermek için kullanılır.
SPI ve I²C protokolleri hem dahili hem harici bileşenler arasındaki iletişim için kullanılır. İletişim, Arduino'daki belirli bir pine bağlı seri veri yolu adı verilen donanım tarafından gerçekleştirilir.
I²C protokolünü kullanarak, birkaç sensörü aynı pin üzerine bağlayabilir ve verileri doğru bir şekilde alabiliriz. Her cihazın, veri istekleri yaparken kullandığımız programda belirtmemiz gereken bir adresi vardır.
Hafıza (Bellek)
Standart Arduino'nun tipik olarak iki belleği vardır:
- SRAM
- Flash bellek
SRAM (Static Random Access Memory), örneğin bir değişkenin değerini (bir boole durumu gibi) depolamak için kullanılır. Enerji kesildiğinde bu bellek sıfırlanır, yani bellekteki veriler silinir.
Flash bellek öncelikle ana programı veya mikrodenetleyici için talimatları depolamak için kullanılır. Bu hafıza güç kapatıldığında silinmez. Böylece karta enerji verilince mikrodenetleyici için verilen komutlar yürütülür.
Bir Arduino'da ne kadar bellek olduğu karta göre değişir. Örneğin Arduino UNO'da 32kB flash / 2kB SRAM bulunurken, Nano 33 IoT'de 256kB flash / 32kB SRAM bulunur.
Gömülü Sensörler
Görsel 1.7: Nano RP2040 connect kartında bir IMU (ataletsel ölçüm birimi)
Birçok yeni Arduino kartı gömülü sensörlerle donatılmıştır. Örneğin, Nano 33 BLE Sense 7 gömülü sensöre sahiptir. Sadece 45x18 mm'dir. Bunların hepsi I²C seri iletişim protokolü aracılığıyla bağlanır ve benzersiz bir adrese sahiptir.
Nesnelerin interneti (IoT)
Çoğu modern Arduino kartı artık kablosuz olarak iletişim kurmak için tasarlanmış bir radyo modülüyle donatılmıştır. Birkaç çeşidi vardır: Wi-Fi, Bluetooth, LoRa, GSM, NB-IoT ve daha fazlası. Her biri piyasada bulunan çeşitli teknolojileri kullanarak iletişim kurmak için tasarlanmıştır.
Görsel 1.8: Nano RP2040 connect kartındaki u-blox NINA-W102 Wi-Fi/Bluetooth modülü
En popüler ve ucuz modüller Wi-Fi ve Bluetooth modülleridir. Wi-Fi modülleri, kartınızın yönlendiricilere bağlanmasına ve internet üzerinden veri talep etmesine ve göndermesine olanak tanır. Bir bakıma internet üzerinden çeşitli veri türlerini talep ederken bilgisayarınızla aynı şekilde çalışır.
Bluetooth, yakındaki cihazlarla iletişim kurmak için kullanılır. Hızlı ve güvenilir bir bağlantı sağlamak için yararlıdır. Örneğin, kablosuz kulaklık ve hoparlörler gibi gerçek hayattaki uygulamalarda kullanılan Bluetooth teknolojisi.
Seri protokollere benzer şekilde radyo modülleri iletişim kurmak için HTTP, MQTT ve UPD gibi kendi protokol setlerini kullanır.
Kaynak: arduino.cc
BİR CEVAP YAZ