Arduino Oled Nasıl çalışır? | ELEKTRONİK ATÖLYEM
Anasayfa/Arduino/Arduino Oled Nasıl çalışır?
0 173 8 dakika okuma süresi
Arduino Oled Nasıl çalışır ?
Arduino olsun diğer mikrodenetleyiciler olsun teknoloji geliştikçe elektronik bileşen fiyatları hızla düşmekte ve pahalı olan ürünler daha alınabilir hale gelmekte bu sayede karakter lcd ekran gibi eski teknolojilere artık veda zamanı geldi diye düşünüyorum..
Eski lcdler hem sınırlı karakter sayısı hemde ekranın ufaklığı olsun biz kullanıcılar oldukça kısıtlamaktaydı ve şimdi artık oled ekranımızı aldık yeni bir serüvene hazırız.
SSD1306 serisi ile arduino oled kullanacağız bu oledler 2 tip iletişim formu kullanmaktadır bunlar I2C ve SPI ki ben size i2c olanı tavsiye ederim bağlantı kablo sayısının az olması spi iletişimine göre nispeten kullanımının kolay olması daha avantajlı duruma getiriyor.
Oledlerimiz 128×164 , 128*64 piksellerde 2 boyutu bulunmakta tek renk ve iki renk seçenekleri bulunmaktadır.
OLED ekran arka ışığı olmadan çalışır, çünkü oledler kendi ışığını yapar. Ekranın bu kadar yüksek kontrastlı, aşırı geniş görüş açısına sahip olmasının ve derin gerçek siyah görüntülemesinin nedeni budur . Arka ışığın olmaması, OLED’i çalıştırmak için gereken gücü önemli ölçüde azaltır. Ekranın ne kadarının yandığına bağlı olmasına rağmen, ortalama olarak ekran yaklaşık 20mA akım kullanır .
SSD1306 kontrol cihazının çalışma voltajı 1.65V ila 3.3V arasındadır. Bu, herhangi bir mantık seviyesi dönüştürücü kullanmadan bir Arduino veya herhangi bir 5V mantık mikrodenetleyicisine kolayca bağlanmasını mümkün kılar.
Arduino OLED Bellek Haritası
OLED modülünün boyutundan bağımsız olarak, SSD1306 sürücüsünde, görüntülenecek bit desenini tutan ekran için yerleşik bir 1KB Grafik Ekran belleği (GDDRAM) bulunur. Bu 1K hafıza alanı 8 sayfada düzenlenir (0’dan 7’ye kadar). Her sayfa 128 sütun içerir (0 ila 127). Ve her sütun 8 bit veri saklayabilir (0’dan 7’ye).
8 sayfa x 128 segment x 8 bit veri = 8192 bit = 1024 bayt = 1KB bellek
Sayfaları, segmentleri ve verileri içeren 1K belleğin tamamı aşağıda vurgulanmıştır.
Arduino oled satır haritası
Her bit, ekrandaki programlı olarak AÇIK veya KAPALI hale getirilebilen belirli OLED pikselini temsil eder.
128 × 64 OLED ekran RAM’in tüm içeriğini kullanırken 128 × 32 OLED ekran yalnızca 4 sayfa (yarım içerik) RAM kullanır.
İşte tüm özellikler:
Görüntü Teknolojisi OLED (Organik LED)
MCU Arayüzü I2C / SPI
Ekran boyutu Boyunca 0.96 İnç
çözüm 128 × 64 piksel
Çalışma gerilimi 3.3V – 5V
Çalışma Akımı Maks. 20mA
Satır Başına Karakter 21
Karakter Satırı Sayısı 7
SSD1306 Teknik Özellikler
SSD1306 Arduino Oled Çıkışları
Arduino Oled Bağlantı Çıkışları
GND : Arduino’nun toprağına bağlı olmalı
VCC : Arduino’ya 3.3 voltluk pini bağladığımız ekranın güç kaynağıdır.
SCL : I2C arayüzü için seri saat pinidir.
SDA : I2C arayüzü için seri veri pinidir.
OLED ekran modülünü Arduino Uno’ya kablolama
Kod yüklemeye ve ekrana veri göndermeye başlamadan önce, ekranı Arduino’ya bağlayalım.
Bağlantılar oldukça basittir. VCC pimini Arduino’daki 5V çıkışına bağlayarak başlayın ve GND’yi toprağa bağlayın.
Şimdi I2C iletişimi için kullanılan pinlerle kalıyoruz. Her Arduino Kartında buna göre bağlanması gereken farklı I2C pinleri bulunduğunu unutmayın. R3 mizanpajlı Arduino kartlarında, SDA (veri hattı) ve SCL (saat hattı) AREF pimine yakın pim başlıklarında bulunur. A5 (SCL) ve A4 (SDA) olarak da bilinirler.
Mega’nız varsa, pimler farklıdır! Dijital 21 (SCL) ve 20 (SDA) kullanmak isteyeceksiniz. Hızlı anlamak için aşağıdaki tabloya bakın.
Arduino Türü SCL SDA
Arduino I2C Çıkışları
Arduino Oled bağlantısı
OLED Ekran Modülü için Kütüphane Kurulumu
Arduino OLED ekranın SSD1306 denetleyicisi esnek ancak karmaşık sürücülere sahiptir. SSD1306 denetleyicisini kullanmak için bellek adresleme konusunda geniş bilgi gereklidir. Neyse ki, Adafruit SSD1306 kütüphanesi , ekranı kontrol etmek için basit komutlar verebilmemize SSD1306 denetleyicisinin karmaşıklıklarını gizlemek için yazılmıştır.
Arduino oled kütüphane girişi
Kitaplığı yüklemek için Sketch> Kitaplığı Dahil Et> Kitaplıkları Yönet… ‘e gidin. Kitaplık Yöneticisi’nin kitaplıklar dizinini indirmesini ve yüklü kitaplıkların listesini güncellemesini bekleyin.
Arama bölümüne ‘adafruit ssd1306’ yazarak filtreleyin. Birkaç kütüphane göreceksiniz.Ancak biz Adafruit tarafından Adafruit SSD1306 kütüphanesini kullanacağız. Kütüphaneye tıklayın ve ardından Yükle’yi seçin.
Arduino Oled kütüphane Yükleme Ekranı
Bu Adafruit SSD1306 Kütüphanesi, alt düzey işlevleri işleyen donanıma özgü bir kitaplıktır. Noktalar, çizgiler, daireler, dikdörtgenler gibi grafik ilkelleri görüntülemek için Adafruit GFX Kütüphanesi de yüklenmelidir .
Arduino Oled GFX Kütüphanesi Ekranı
SSD1306 Denetleyicide Bilinen Sorun SSD1306’da ekran için yerleşik bir GDDRAM olmasına rağmen, bunun içeriğini okuyamıyoruz (
Adafruit’a göre ).
Bu nedenle, matematiksel işlemleri gerçekleştirmek için ekran arabelleğini değiştirmek mümkün değil. Alternatif olarak, kütüphane ATmega328P’den tampon olarak 1KB (128 × 64) / 8 bit bellek ayırır.
Böylece, ekran arabelleğini değiştirebilir ve daha sonra ATmega328P’nin belleğinden SSD1306 denetleyicisinin dahili belleğine toplu bir aktarım gerçekleştirir.
Adafruit SSD1306 Kütüphanesini Değiştirme
Adafruit SSD1306 Kütüphanesi 128 × 64 OLED ekranlar için ayarlanmamıştır (şu anda kullandığımız). Eğer 128×32 ekran kullanacaksak Adafruit_SSD1306.h başlık dosyasında bizim için uygunlarştırmak için ekran boyutu değiştirilmelidir. Değiştirilmezse, #error (“Yükseklik yanlış, lütfen Adafruit_SSD1306.h!” Düzeltin) Gibi bir hata mesajı görüntülenir.
Arduino Oled Boyut Hatası
Adafruit_SSD1306.h başlık dosyasını değiştirmek için, eskiz defteri konumunuzu açın. Genellikle Belgelerim> Arduino. Şimdi kütüphanelere gidin> Adafruit_SSD1306
Bu kadar. Şimdi dosyayı kaydedin ve Arduino IDE’nizi yeniden başlatın.
Arduino Oled Kodlama
Şimdi ilginç şeyler geliyor!
Aşağıdaki Kod blogunu kullanarak örnek Ekran çizimlerimizi deneyip değiştirerek Kütüphane kullanımı konusunda Tecrübe edinebilirsiniz. Çeşitli komutlar ile Aşağıdaki işlemleri basitçe gerçekleştirebilirsiniz.
Float Numaraları Yazdırma (Onaltılı, Ara)
ASCII sembollerini Yazdırma
Metni Yatay ve Dikey Olarak Kaydırma
Ekranın bir kısmını kaydırma
Çizim oluştururken, IDE düşük bellek uyarı mesajı görüntüler. Bunun nedeni kütüphanenin ekran arabellek olarak ATmega328P’den 1 KB bellek ayırmasıdır. Bunu göz ardı edebilirsiniz.
// Oledimizi i2c Adresini girdik 0x3C
// Arduino Oledimizin Tampon belleğini temizledik
// Ekrana Yazı Yazdırdık Eğer değişkenin değerini yazdırmak isteseydik tirnaklari koymazdık
// Renkleri Ters Çevirerek yazı yazdırdık
// Yazı Boyutunu setTextSize komutu ile değiştirdik
// Ekrana Numaralar yazdırdık
// Hex değerleri yazdırdık.
// ASCII Karakter yazdırdık
// Ekranı Kaydırdık
// Ekranın Birbölümünü kaydırdık
Şimdi parça parça hangi komutu nasıl neden kullandık işletelim Öncelikle 4 adet kütüphane ekledik. SPI.h, Wire.h, Adafruit_GFX.h ve Adafruit_SSD1306.h. I2C OLED ekranlar için SPI.h kütüphanesi gerekmese de, programımızı derlemek için onu eklememiz gerekir.
Sonra, Adafruit_SSD1306.h kütüphanesini çalıştırmamız ve tampon belleği sıfırlamamız gerekiyor.
// Oledimizin I2C adresi 0x3C
// Tampon Bellek sıfırlama
Basit Metin Görüntüleme (Merhaba Dünya)
Ekranda metin görüntülemek için yazı tipi boyutunu ayarlamamız gerekir. Bu işi setTextSize()komutuyla parantezler arası 1 den başlayarak boyutlandırabiliriz.
Ardından setTextColor() komutu ile yazının siyah yada beyaz olma durumunu belirtiriz 0 siyah 1 ise beyazdır. Koyu arka plan için 1 parametresini ve beyaz arka plan için 0 parametresini kullanırız.
Şimdi mesajı yazdırmadan önce setCursor (X, Y) komutunu çağırarak imleç konumunu ayarlamamız gerekiyor. Ekrandaki pikseller yatay (X) ve dikey (Y) koordinatlarıyla adreslenir. Koordinat sistemi başlangıç ​​noktasını (0,0) sol üst köşeye yerleştirir, pozitif X sağa ve pozitif Y aşağı doğru artar.
Seri monitörde veri yazdırdığımız gibi mesajı ekrana yazdırmak için basit print(“ ”)veya println(“ ”)işlev kullanabiliriz . Unutmayın, println () imleci yeni satıra taşıyacaktır.
Yazdığımız çıktıları ekrana verebilmek için display() Komutunu Kullanmamız gerekir şuana kadar yaptığımız tüm tranferler bellekte gerçekleşti şimdi bellekteki veriyi ekrana aktardık.
Ters Renkli Yazı yazdırma
Arduino oled Ters Renk Yazı Yazdırma
display.setTextColor(BLACK, WHITE); // 'Renkleri Ters Çevrilmiş yazma komutu
Renkleri Ters çevrilmiş metin yazdırmak için kullanmanız gereken Komut setTextColor(FontRengi,ArkaplanRengi)Dikkat ettiyeniz bu işleve daha önce yalnızca bir parametre geçtiğimizi biliyorsunuz, ancak şimdi iki parametre geçiriyoruz. Bu, işlev yüklenmesi adı verilen Komutlama nedeniyle mümkündür . İşlev yüklenmesi, aynı adda ancak farklı parametre kümesiyle birden çok işlev oluşturma yeteneğidir .
Bizim durumumuzda geçen setTextColor(BLACK, WHITE)dolu arka plan üzerinde siyah metin oluşturacaktır.
Yazı Tipi Boyutunu Ölçeklendirme
setTextSize()fonksiyonu ile yazı tipi boyutunu ayarlayabiliriz. Negatif olmayan bir tam sayı ileterek yazı tipini ölçeklendirmek için bu işlevi kullanabilirsiniz.
Karakterler 7:10 oranında oluşturulur. Yani, yazı tipi boyutu 1’i seçmek metni karakter başına 7 × 10 piksel oluşturacak, 2’yi geçmek metni karakter başına 14 × 20 piksel oluşturacak vb.
Adafruit_GFX kütüphanesi yazı tipini oluşturmaktan sorumludur. Varsayılan olarak tek tip yazı seçilidir. Ancak, Adafruit GFX kütüphanesinin daha yeni sürümleri alternatif yazı tiplerini kullanma olanağı sunar. Kütüphaneyle birlikte birkaç alternatif yazı tipi gelir, ayrıca yenilerini ekleme şansımızda vardır.
Programınızda belirlediğiniz değişkenin içeriğini ekrana yazdırmanız da mümkündür bunun için print()veya println()fonksiyonu içeriği tırnaksız yazılarak yapılır. Bu fonksiyon ile 32 bit işaretsiz int’i kabul eder, bu nedenle yalnızca 0 ile 4,294,967,295 arasındaki değeri görüntüleyebilirsiniz.
Hexedecimal ve Decimal gibi değerler kullanım dönşümleri
Hex-Dec yazdırma ve dönüştürme
print()Ve println()fonksiyonları izin verilen değerler içerisinde BIN (ikili veya taban 2), OCT (sekizli veya taban 8), DEC (ondalık veya taban 10), HEX (onaltılık veya taban 16) ‘dır. float sayıları için, bu parametre kullanılır ondalık basamak sayısını belirtir.
print (78, BIN) “1001110” verir
print (78, OCT) “116” verir
print (78, DEC) “78” verir
print (78, HEX) “4E” verir
println (1.23456, 0) “1” verir
println (1.23456, 2) “1.23” verir
println (1.23456, 4) “1.2346” verir
ASCII Sembol Yazdırma
print()& println()Ederken fonksiyonları insan tarafından okunabilir ASCII metin olarak ekrana veri göndermek write()fonksiyon ekrana ikili veri gönderir. Bu nedenle, ASCII sembollerini görüntülemek için bu işlevi kullanabilirsiniz. Örneğimizde, 3 sayısı kalp simgesi Yazdırır.
Örnek Kullanabileceğiniz ASCII Karakter Tablosu;
ASCII Karakter Tablosu 2
Tam Ekran Kaydırma
Yatay ekranda kaydırma Fonksiyonu startscrollright()& startscrollleft()ile yatay kaydırma yapabilirsiniz veya startscrolldiagright()& startscrolldiagleft()çapraz kaydırma yapabilirsiniz . Ekranda 0 ile 7 arasında sekiz sayfa olduğundan, 0x00 ve 0x07 parametrelerini ileterek tüm veri sayfalarını kaydırarak tüm ekranı kaydırabilirsiniz.
Ekranın kaymasını durdurmak için stopscroll()işlevi kullanabilirsiniz .
Bazen tüm ekranı kaydırmak istemiyoruz. Sadece bir satırı kaydırmak isteyebiliriz Bunu yapmak için kaydırma fonksiyonuna uygun başlangıç ​​sayfası ve durdurma sayfası bilgilerini ileterek yapabilirsiniz. Sayfaların açıklaması için OLED Bellek Haritası bölümüne bakın. Ekranda 0 ile 7 arasında sekiz sayfa olduğundan, belirli sayfa numaralarını parametre olarak ileterek ekranın bir kısmını kaydırabilirsiniz.
Örneğimizde, her iki parametreyi de 0x00 olarak geçtik. Bu, ekranın yalnızca ilk sayfasını (ilk 8 satır) kaydırır.
Arduino Oled Ekranda Çizim yapmak
Ekranımıza bazen karakterler dışında dikdörtgen,kare,üçgen gibi özgün çizimler yapmamız gerekebilir bu gibi isteklerimizi de kolayca yapabiliriz.
drawRect()Fonksiyonu kullanarak ekranda dikdörtgen çizebilirsiniz . Fonksiyon beş parametre alır. X koordinatı, Y koordinatı, Genişlik, Yükseklik ve renk. Aslında bu işlev, 1 piksel kenarlığı olan içi boş dikdörtgen çizer. fillRect()Fonksiyonu kullanarak doldurulmuş dikdörtgen çizebilirsiniz .
Yuvarlak Dikdörtgen Çizim
drawRoundRect()Fonksiyonu kullanarak ekranda yuvarlak dikdörtgen çizebilirsiniz . Bu işlev, bir ek parametre haricinde drawRect () işleviyle aynı parametreleri alır – Köşe yuvarlama yarıçapı. Aslında bu işlev, 1 piksel kenarlığı olan içi boş yuvarlak dikdörtgen çizer. fillRoundRect()Fonksiyonu kullanarak dolu yuvarlak dikdörtgen çizebilirsiniz .
drawCircle()Fonksiyonu kullanarak ekranda daire çizebilirsiniz . Fonksiyon dört parametre alır. Merkezin X koordinatı, merkezin Y koordinatı, yarıçap ve renk. Bu işlev, 1 piksel kenarlığı olan içi boş bir daire çizer. fillCircle()Fonksiyonu kullanarak dolu daire çizebilirsiniz .
drawTriangle()Fonksiyonu kullanarak ekranda üçgen çizebilirsiniz . Fonksiyon yedi parametre alır. Üçgen ve köşelerinin 3 X ve Y koordinatı (x0, y0, x1, y1, x2 ve y2). (X0, y0) üst tepe noktasını, (x1, y1) sol tepe noktasını ve (x2, y2) sağ tepe noktasını temsil eder.
Bu işlev, 1 piksel kenarlığı olan içi boş üçgen çizer. fillTriangle()Fonksiyonu kullanarak dolu üçgen çizebilirsiniz .
Bitmap Yazdırma (Resim Yazdırma)
Arduino oled Bitmap Yazdırma Örneği
Evet arkadaşlar belkide en çok merak ettiğiniz ve istekli olduğunuz bölümün bu olduğunu düşünüyorum çünkü herşey karakterler ve düz çizimlerle olmuyor örneğin bir pil resmi yada gösterge çizebilmemiz gereken projelerimiz oluyor
Böyle projelerimizde tamda imzamıza yetişecek fonksiyonu uzatmadan anlatalım bakalım.
OLED ekranda bitmap görüntüsü göstermek için drawBitmap()işlevi çağırmamız gerekir . Altı parametre yer alır. Sol üst köşe X koordinatı, sol üst köşe Y koordinatı, tek renkli bitmapin bayt dizisi, piksel cinsinden bitmap genişliği, piksel cinsinden bitmap yüksekliği ve Renk.
Örneğimizde, bitmap görüntüsü 128 × 64 boyutundadır. Bu nedenle, genişlik ve yükseklik 128 ve 64’e ayarlanırken X ve Y koordinatları 0’a ayarlanır.
Resmi bitmap Dönüştürme
Resminizi bir diziye dönüştürebilen image2cpp – http://javl.github.io/image2cpp/ adlı çevrimiçi bir uygulama var . Image2cpp, LCD Asistan’dan daha yeni ve çok daha güçlüdür .
Aynı anda birden fazla görüntüyü dönüştürün.
Görüntü dosyanızı ölçeklendirme
Parlaklık eşiğini siyah ve beyaz arasında ayarlayın.
Görüntüyü dikey ve / veya yatay olarak yeniden ortalayın.
Ters görüntü renkleri
Bu araç o kadar güçlü ki çevrimdışı da çalışabiliyor. Sayfayı PC’nize kaydedin ve tarayıcınızda açın.
Başlamak için tarayıcınızda image2cpp dosyasını açın ve OLED ekranında görüntülemek istediğiniz herhangi bir görüntüyü seçin.
image2cpp kullanım ekranı
Görüntünüzün boyutları, Görüntü ayarları altındaki Tuval boyutu seçeneğinde bulunur. 128 × 64’ten daha büyük bir görüntü seçtiyseniz, görüntüyü 128 × 64 olarak değiştirin ve uygun Ölçeklendirme seçeneğini belirleyin. Çıktıyı Önizleme bölümünde görebilirsiniz.
Gerekirse Arka plan rengini veya Tersine görüntü renklerini seçebilirsiniz.
Son olarak, en önemli seçeneğe geldik Brightnes Treshold Eşiğin ayarlanması bu seviyenin üstündeki pikselleri beyaz altında kalanları siyah yapar. Bizim durumumuzda Marilyn Monroe’nun güzel detaylarını almak için 171’e ayarladık.
Image2ccp İnce ayarları
Bu küçük önizleme, ayarlarınızda yaptığınız değişiklikleri yansıtır. Ayarları göz önünde tutarak değiştirebilirsiniz.
Marlyn Monroe BMP görseli
Sonuçtan memnun kaldığınızda, veri dizisini oluşturmaya devam edebiliriz. Arduino Kodu olarak Kod çıkış formatını seçin ve Kod oluştur düğmesine tıklayın.
Yalnızca bilgileriniz için Çizim modu adı verilen bir seçenek vardır. Aslında ekranın tarama desenine göre görüntü oluşturur. Resminiz ekranınızda karışık görünüyorsa modu değiştirmeyi deneyin.
kod çıktısı alma
Evet arkadaşlar aldığımız çıktı kodlarını Yazılımımızda setup bölümünün üstüne ekliyoruz ve drawBitmap()işlevin içinde çağırın .
Evet arkadaşlar bu konu altında sizlere tüm detayları vermek istedim umarım faydalı olmuştur. Bizleri sosyal medyadan takip etmeyi unutmayın iyi Çalışmalar.
Arduino arduino oled oled ssd1306