BP–10 · Başlangıç projesi

I2C LCD Ekrana Yazı Yazdırma

Projeleriniz artık konuşabilsin! Bu projede I2C modüllü 16×2 LCD ekranı yalnızca 4 kabloyla bağlayıp metin, canlı sayaç ve kendi tasarladığınız özel karakterleri ekranda göstereceğiz.

SeviyeBaşlangıç
Süre40 dk
Malzeme5 çeşit
I2C haberleşmeKütüphane kurulumuAdres taramasetCursor()Özel karakterSDA / SCL

Proje hakkında

Klasik 16×2 LCD ekranları doğrudan bağlamak 12'den fazla kablo gerektirir. Ekranın arkasına lehimlenmiş küçük I2C dönüştürücü modül (PCF8574) sayesinde bu sayı 4'e iner: iki besleme ve iki haberleşme hattı. Böylece Arduino'nun pinleri diğer sensörler için serbest kalır.

I2C, aynı iki kabloya onlarca farklı cihazın bağlanabildiği bir haberleşme protokolüdür. Her cihazın bir adresi vardır ve Arduino konuşmak istediği cihazı bu adresle çağırır. Bu projede önce ekranımızın adresini bulacak, sonra ekrana yazı ve özel karakterler yazdıracağız.

  • I2C haberleşmenin temellerini ve SDA / SCL hatlarını
  • Arduino IDE'ye harici kütüphane kurmayı
  • I2C tarayıcı ile cihaz adresini bulmayı
  • İmleç konumlandırma ve özel karakter tasarlamayı

Malzeme listesi

Projeyi tamamlamak için aşağıdaki 5 çeşit malzemeye ihtiyacınız var. Parçaların çoğu Arduino başlangıç setlerinde hazır olarak bulunur.

Arduino Uno R3 1 adet

Projenin beyni. Nano veya Mega ile de aynı kod çalışır.

16×2 LCD ekran + I2C modül 1 adet

PCF8574 tabanlı I2C adaptörü lehimli olarak satın alın.

Jumper kablo (erkek-dişi) 4 adet

LCD modülünün pinlerine doğrudan takılır.

USB A-B kablosu 1 adet

Kodu yüklemek ve kartı bilgisayardan beslemek için.

Küçük düz uçlu tornavida 1 adet

Modül üzerindeki kontrast ayarı için.

Devre bağlantıları

Bağlantıları USB kablosu takılı değilken yapın. Her satır, bileşenin hangi bacağının Arduino'nun hangi pinine gideceğini gösterir; çizgi rengi önerilen kablo rengidir.

I2C modül GNDGND
I2C modül VCC5V
I2C modül SDAA4Veri hattı
I2C modül SCLA5Saat hattı
Arduino Uno R3 ve sonrasında SDA ve SCL pinleri ayrıca AREF pininin yanında, dijital pinlerin üst ucunda da bulunur. A4 / A5 ile bu pinler içeride birbirine bağlıdır; hangisini kullanırsanız kullanın sonuç aynıdır. Mega kartlarda SDA D20, SCL D21'dir.

Adım adım kurulum

  1. Kütüphaneyi kurun

    Arduino IDE'de Araçlar › Kütüphaneleri Yönet menüsünü açın. Arama kutusuna LiquidCrystal I2C yazın ve Frank de Brabander'ın kütüphanesini kurun.

  2. Ekranı bağlayın

    Erkek-dişi kablolarla GND'yi GND'ye, VCC'yi 5V'a, SDA'yı A4'e, SCL'yi A5'e bağlayın. Breadboard'a gerek yoktur.

  3. Adresi bulun

    İlk olarak I2C tarayıcı kodunu yükleyin ve Seri Port Ekranını açın. Ekrana yazan adresi (genellikle 0x27 veya 0x3F) not edin.

  4. Ana kodu yükleyin

    Ana koddaki LiquidCrystal_I2C lcd(0x27, 16, 2) satırında adresi kendi bulduğunuz adresle değiştirip yükleyin.

  5. Kontrastı ayarlayın

    Ekran arka ışığı yanıyor ama yazı görünmüyorsa modülün arkasındaki mavi potansiyometreyi tornavidayla yavaşça çevirin; yazılar belirgin hale gelecektir.

  6. Sonucu izleyin

    Ekranda önce karşılama mesajı, ardından kalp karakteri ve saniye saniye artan bir sayaç görmelisiniz.

Arduino kodu

Kodları Arduino IDE'ye yapıştırıp yükleyebilirsiniz. Türkçe karakterler yalnızca yorum satırlarında kullanıldı; Seri Port Ekranına yazdırılan metinlerde bilerek kullanılmadı.

Önce bu kodu yükleyip ekranınızın I2C adresini bulun.

i2c_tarayici.ino
// I2C Adres Tarayıcı
// RobotikHocasi.com

#include <Wire.h>

void setup() {
  Wire.begin();
  Serial.begin(9600);
  Serial.println("I2C taramasi basliyor...");

  byte bulunan = 0;
  for (byte adres = 1; adres < 127; adres++) {
    Wire.beginTransmission(adres);
    if (Wire.endTransmission() == 0) {   // Cihaz yanıt verdi
      Serial.print("Cihaz bulundu: 0x");
      if (adres < 16) Serial.print("0");
      Serial.println(adres, HEX);
      bulunan++;
    }
  }

  if (bulunan == 0) {
    Serial.println("Hic I2C cihazi bulunamadi. Kablolari kontrol edin.");
  } else {
    Serial.println("Tarama tamamlandi.");
  }
}

void loop() {
}

Karşılama mesajı, özel kalp karakteri ve canlı sayaç.

lcd_ekran.ino
// I2C LCD Ekrana Yazı Yazdırma
// RobotikHocasi.com

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Adres, sütun sayısı, satır sayısı
LiquidCrystal_I2C lcd(0x27, 16, 2);

// 5x8 piksellik özel kalp karakteri
byte kalp[8] = {
  0b00000,
  0b01010,
  0b11111,
  0b11111,
  0b11111,
  0b01110,
  0b00100,
  0b00000
};

void setup() {
  lcd.init();              // Ekranı başlat
  lcd.backlight();         // Arka ışığı aç
  lcd.createChar(0, kalp); // Kalbi 0 numaralı yuvaya kaydet

  lcd.setCursor(0, 0);     // 1. satır, 1. sütun
  lcd.print("Robotik Hocasi");
  lcd.setCursor(0, 1);     // 2. satır, 1. sütun
  lcd.print("Merhaba Dunya ");
  lcd.write(0);            // Kalp karakterini yaz
  delay(3000);
  lcd.clear();             // Ekranı temizle
}

void loop() {
  unsigned long saniye = millis() / 1000;

  lcd.setCursor(0, 0);
  lcd.print("Gecen sure:");

  lcd.setCursor(0, 1);
  lcd.print(saniye);
  lcd.print(" saniye   ");   // Sondaki boşluklar eski rakamları siler

  delay(250);
}

Kod açıklaması

LiquidCrystal_I2C lcd(0x27, 16, 2);

lcd adında bir ekran nesnesi oluşturur. 0x27 onaltılık (hex) sistemde yazılmış I2C adresidir; 16 sütun, 2 satır ekran boyutudur.

Wire.beginTransmission / endTransmission

Tarayıcı kodu her adresi tek tek çağırır. endTransmission() 0 döndürürse o adreste yanıt veren bir cihaz vardır.

lcd.setCursor(sütun, satır)

İmleci belirtilen konuma taşır. Saymaya 0'dan başlanır; (0, 1) ikinci satırın başıdır.

byte kalp[8] = { 0b01010, ... };

Her satır 5 pikselden oluşur. 0b ile başlayan ikili sayılarda 1 yanan, 0 sönük pikseldir. Toplam 8 adede kadar özel karakter tanımlanabilir.

lcd.print(" saniye ")

Sayı 10'dan 9'a gibi kısaldığında eski rakam ekranda kalır. Sondaki boşluklar bu artık karakterleri temizler; her döngüde lcd.clear() kullanmaktan daha az titreşim yapar.

Nasıl çalışır?

I2C protokolü iki hat kullanır: SCL (saat) hattında Arduino düzenli darbeler gönderir, SDA (veri) hattında ise bitler bu darbelere senkronize şekilde iletilir. Her mesaj, alıcı cihazın 7 bitlik adresiyle başlar. Hatta bağlı tüm cihazlar adresi dinler, ama sadece adresi eşleşen cihaz yanıt verir.

LCD'nin arkasındaki PCF8574 çipi, I2C üzerinden gelen baytları 8 ayrı dijital çıkışa dönüştürür. Bu çıkışlar LCD'nin veri ve kontrol pinlerine bağlıdır. LiquidCrystal_I2C kütüphanesi, lcd.print("A") gibi basit komutları LCD'nin anladığı düşük seviyeli komut dizilerine çevirerek bu karmaşıklığı bizden gizler.

Sorun giderme

Arka ışık yanıyor ama ekran boş
En yaygın sorun budur: kontrast ayarı. Modülün arkasındaki mavi potansiyometreyi yazılar görünene kadar yavaşça çevirin.
Üst satırda dolu kareler görünüyor
Ekran besleniyor ama Arduino ile iletişim kuramıyor. Adresin doğru olduğunu ve SDA / SCL kablolarının yer değiştirmediğini kontrol edin.
Tarayıcı hiçbir cihaz bulamıyor
Kabloların sağlam takıldığını ve SDA'nın A4'e, SCL'nin A5'e gittiğini kontrol edin. Modülün lehimlerinde kopukluk olabilir.
Türkçe karakterler (ş, ğ, ı) bozuk çıkıyor
LCD'nin hazır karakter setinde Türkçe harfler yoktur. createChar() ile kendi ş, ğ, ı karakterlerinizi tasarlayabilirsiniz (en fazla 8 adet).

Geliştirme fikirleri

Projeyi tamamladıysanız, aşağıdaki fikirlerle bir adım öteye taşıyabilirsiniz.

Dijital termometre

Bir DHT11 sensörü ekleyip sıcaklık ve nemi ekranda gösterin.

Kayan yazı

lcd.scrollDisplayLeft() ile 16 karakterden uzun mesajları kaydırın.

Reaksiyon ölçer

Ekranda "BAS!" yazdığında butona basma süresini milisaniye olarak ölçün.

Menü sistemi

İki butonla gezilebilen, ayar değiştirilebilen basit bir menü tasarlayın.

Sık sorulan sorular

Kütüphane kurduğum halde derleme hatası alıyorum
Aynı isimde birden fazla LiquidCrystal_I2C kütüphanesi yüklü olabilir. Kütüphane yöneticisinden diğerlerini kaldırıp Frank de Brabander'ın sürümünü bırakın. Bazı sürümlerde lcd.init() yerine lcd.begin() kullanılır.
20×4 ekran kullanabilir miyim?
Evet. Aynı bağlantıyla nesneyi LiquidCrystal_I2C lcd(0x27, 20, 4) şeklinde oluşturmanız yeterlidir.
Aynı hatta başka I2C cihazı bağlayabilir miyim?
Evet. Farklı adreslere sahip oldukları sürece RTC saat modülü, OLED ekran veya sensörleri aynı SDA / SCL hatlarına paralel bağlayabilirsiniz.

Bir sonraki projeye hazır mısınız?

Başlangıç serisindeki 10 projeyi sırayla tamamladığınızda sensör, motor ve ekran kullanımının temellerini öğrenmiş olursunuz.

Başlangıç projelerine dön