Arduino Uno’da toplamda 20 giriş/çıkış pini bulunmasına rağmen zaman zaman bu pinlerin yetmediği durumlarla karşılaşabiliyoruz. Bunun çözümlerinden biri de I2C protokolü üzerinden çalışan sistemler.
Bu yazıda I2C Expander (çoklayıcı) çiplerinden biri olan PCF8574 entegre devresini kullanarak Arduino’ya nasıl çıkış pini ekleyebileceğimizi anlatacağız.
PCF8574 16 pinli bir yapıya sahip bir entegre devre ve tek başına bize 8 adet giriş veya çıkış verebiliyor. Bu yazıda bu entegreyi çıkış olarak nasıl kullanacağımıza odaklanacağız.
Bu çip A0, A1 ve A2 olmak üzere 3 adres pinine sahip ve bu pinleri farklı şekilde bağlayarak çipin I2C adresini değiştirebiliyoruz. Bu 3 adres pini ile çipe 8 farklı adres atabiliyoruz. bu 8 tane çipi aynı I2C hattına bağlayabileceğimiz anlamına gelirken Arduino’ya sadece 2 pin üzerinden toplam da 64 giriş/çıkış pini ekleyebileceğimiz demek oluyor ki, bu muazzam bir şey!
Yukarıdaki resimde PCF8574’ün bacak bağlantılarını ve adres tablosunu görüyoruz. Çizimde çipin besleme girişi 5 Volt ile gösterildi, ancak çip 3,3 Volt ile de rahatlıkla çalışabiliyor. SDA ve SCL pinleri I2C giriş bağlantılarıyken, P0’dan P7’ye olan pinler ise çipin bize kazandırdığı giriş/çıkış bağlantıları.
Çipi çalışır hale getirmek için yapmamız gereken besleme gerilimini sağlamak, adresini ayarlamak ve I2C bağlantılarını yapmak. Sonrasında çıkış pinlerini istediğimiz gibi kontrol edebiliriz.
PCF8574 o kadar esnek ve becerikli bir çip ki karakter LCD ekranları I2C üzerinden bağladığımız bağlantı kartının yanında yukarıda gördüğümüz gibi peşpeşe eklenebilen hazır modüller halinde de edinmek mümkün.
Biz bu yazıda biraz daha profesyonel davranıp doğrudan DIP yapıdaki entegre devre üzerinde çalışmayı tercih ediyoruz. Yukarıdaki fotoğraftaki modülü de birazdan açıklayacağımız yöntemle kullanabiliriz.
Öncelikle devre kurulumu ile başlayalım.
Görüldüğü gibi sadece 4 kablo ile Uno’ya bağlayabildik. Adres pinlerini de ayarladığımızda çipimiz kullanıma hazır olacaktır. Uno’ya tek bir PCF8574 bağlayacaksak 3 adres girişini de GND’ye bağlayarak adresi 0x20 olarak ayarlayabilir ve kullanabiliriz.
Olur da çipin hangi I2C adresinde olduğunu bulamazsak I2C Arduino Modüllerinin Adres Numarası Nasıl Bulunur? adlı makalemizdeki kodu kullanarak bağlı olan I2C cihazların adreslerini bulabiliriz.
ÖNEMLİ: PCF8574’ü harici bir güç kaynağı ile besleyeceksek veya çok fazla I2C modülü bağlayacaksak SDA ve SCL pinlerini 2,2K-10K Ohm arası dirençlerle 5V/VCC hattına bağlamak önerilir.
Sonrasında çıkış pinlerini sanki bir Arduino piniymiş gibi istediğimiz şekilde kullanmamız mümkün.
I2C protokolüne sahip modülleri kullanmak ileri düzey kod bilgisi gerektireceği için Arduino’nun bize tanıdığı en büyük kolaylığı kullanmayı tercih ediyoruz: kütüphane kullanmak. PCF8574 çipi için hazırlanmış pek çok kütüphane yer alıyor. Biz kullanım kolaylığı nedeniyle MSZ98 tarafından hazırlanmış pcf8574 kütüphanesini tercih ediyoruz.
Kütüphaneyi Arduino IDE’nin ana menüsünden Araçlar > Kütüphaneleri Yönet… bölümüne girip pcf8574 kelimesini aratarak MSZ98 tarafından hazırlanmış versiyonu kurarak ekleyebiliriz. Kütüphanenin Github sayfasını merak edenler buraya tıklayabilir.
Aşağıdaki sketch kodu çıkışlara bağlanmış 8 adet LED’i sırayla yakıp söndürüyor. Kullandığımız LED’lere koruma dirençlerini eklemeyi unutmayalım.
Sketch kodunu kopyalamak için pencerenin sağ üst köşesindeki butona tıklayabilir veya buraya tıklayarak ZIP dosyası olarak indirebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
/* PCF8574 I2C Çoklayıcı Arduino ile Nasıl Kullanılır? PCF8574 I2C Çoklayıcının detaylı açıklaması ve örnek projelerini web sitemizde bulabilirsiniz. Mete Hoca https://www.metehoca.com/ */ #include "pcf8574.h" PCF8574 PCF1(0x20); void setup() { for (int x = 0; x < 8; x++) pinMode(PCF1, x, OUTPUT); for (int x = 0; x < 8; x++) digitalWrite(PCF1, x, LOW); } void loop() { // sola kayma for (int y = 0; y < 8; y++) { digitalWrite(PCF1, y, HIGH); delay(100); for (int x = 0; x < 8; x++) digitalWrite(PCF1, x, LOW); } // sağa kayma for (int y = 7; y >= 0; y--) { digitalWrite(PCF1, y, HIGH); delay(100); for (int x = 0; x < 8; x++) digitalWrite(PCF1, x, LOW); } } |
Arduino’da iyi olmak için öncelikle elektronikte iyi olmak gerekir. Türkiye’nin en iyi temel elektronik eğitim seti ARDUINO ÖNCESİ TEMEL ELEKTRONİK EĞİTİM VE DENEY SETİ‘ni keşfedin. Gereksiz bilgilerden arındırılmış basit ve eğlenceli anlatımla ELEKTRONİK öğrenin ve Arduino’ya METE HOCA farkıyla güçlü başlayın!
ÖZGÜN ve KULLANIŞLI projeler yapabilmek için ARDUINO’yu doğru öğrenmek gerekir. Arduino’ya güçlü başlamanın en iyi yolu ARDUINO’YA GÜÇLÜ BAŞLANGIÇ EĞİTİM VE PROJE SETİ‘dir. Arduino Uno üzerine kurulu olan set ile bu müthiş geliştirme platformunu tüm detaylarıyla anlayacak, başka hiçbir yerde bulamayacağınız inceliklerini öğrenecek ve en sık kullanılan Arduino sensör ve modüllerine aşina olacaksınız.