Anasayfa Makale Kendin Yap #5: Harici Sıcaklık Göstergesi Yapımı

Kendin Yap #5: Harici Sıcaklık Göstergesi Yapımı

Kendin Yap serisinin yeni videosunda adım adım rehberimizi takip ederek kendi harici sıcaklık göstergenizi yapabilirsiniz. Ama bu sefer daha büyük olarak!

Önceki “Harici Sistem Performans Monitörü” isimli kendin yap rehberimizde 1.3 inçlik mini OLED ekran üzerinde işlemci ve ekran kartı sıcaklığını, kullanım bilgilerini ve çalışma frekansını göstertiyorduk. Aradan geçen zamanda projeyi biraz daha geliştirdiğimiz gibi projenin daha büyük (2.8 inç LCD) ekranlı sürümünü yapma şansımız oldu. Bu rehberimizde her ikisi için de detaylı bilgiler bularak rahatlıkla kendi harici sıcaklık göstergenizi yapmak için gerekli bilgiyi edinebileceksiniz.

Not: Bu rehberimiz asgari düzeyde hobi elektroniği, prototipleme, lehimleme ve Arduino programlama bilgisi gerektirmektedir.

Gnat-Stats: Küçük Ekranlı Sıcaklık Göstergesi

İsterseniz öncelikle küçük ekranlı sistem monitöründe yaptığımız değişikliklere değinelim. Eğer okumadıysanız o rehberimize de bakmanızı ve temel bilgileri edinmenizi öneririz.

Harici Sıcaklık Göstergesi
Gnat-Stats projesinin ilk yaptığımız versiyonu

İlk yaptığımız versiyon breadboard üzerinde biraz kaba ve büyük duruyordu + daha çok bir prototipi andırıyordu. Biraz daha hafif ve portatif hale getirmek için kullandığımız Arduino ProMicro mikro kontrolcüsünü Breadboard’dan çıkarıp bütün bacaklarını söktük ve direk ekranın altına lehimledik. Böylece portatif ve Gnat-Stats adına yaraşır şekilde küçük hale getirmiş olduk.

Harici Sıcaklık Göstergesi
Harici sıcaklık göstergesi, çevresinde sistem yükünü gösteren LED’ler ile geliyor.

Bunun için ekranın 4 bacağından sondaki ikisini (VCC ve GND) sökmemiz gerekti. Ekranın ilk iki pini yani SDA ve SCL pinleri şansımıza direk olarak zaten takılmaları gereken Pro Micro’nun 2. Ve 3. Analog pinlerinin üzerine denk geliyordu. O yüzden bu iki pinin bacaklarını bırakıp, o pinlere lehimledik. Geriye kalan güç ve toprak pinleri için de kablo çekip ilgili yerlere lehim yaptık.

Bunlara ek olarak Adafruit NeoPixel adında çok güzel RGB LED halkaları var ve projeyi tasarlayanlar (Rupert Hirst & Colin Conway) kodlarında bu halkalara da destek veriyorlar. Bu 16 LED içeren bir model ve Pro Micro’ya nasıl bağlayacağınızı proje sayfasında da bulabileceğiniz aşağıdaki diagrama bakarak görebilirsiniz:

Harici Sıcaklık Göstergesi Montaj Rehberi
Harici sıcaklık göstergesi montajı için bilmeniz gereken pin yapısı.

NeoPixel PCB üzerine dairesel olarak yerleştirilmiş RGB ledlerden oluşuyor. Bu LED’ler CPU ve GPU kullanımına göre yanıp sönüyor. Halkanın üst yarısındaki LED’ler işlemci kullanımını, alt yarısındakiler de ekran kartı kullanımını temsil ediyor.

Harici Sıcaklık Göstergesi
Harici sıcaklık göstergesi iş başında.

Bu değerlerin seviyesine göre bunlar yeşil, sarı ve kırmızı yanıyor. Bunların parlaklığını kod içindeki neoBrightness değişkenindeki değeri değiştirerek ayarlayabiliyorsunuz.

Harici Sıcaklık Göstergesi Kodları
Varsayılan olarak 60 olan neoBrightness değerini artırıp azaltarak RGB ledlerin ışık seviyesini değiştirebilirsiniz.

Şunu da hatırlatayım kodu ilk yüklediğinizde NeoPixel özelliği devre dışı oluyor, aktif kılmak için enableNeopixelGauges’ın başındaki iki yatay çizgiyi silmeniz gerekiyor.

Harici Sıcaklık Göstergesi Kodlar
NeoPixel’i aktifleştirmek için enableNeopixelGauges’in başındaki iki yatay çizgiyi silmeniz gerekiyor.

İlk rehberimizde bahsetmeyi unuttuğumuz bir diğer güzel özellik de belirli koşullarda devreye girmesini istediğiniz eylemler hazırlayabiliyorsunuz.

Harici Sıcaklık Göstergesi Programlama
İşlemci, ekran kartı kullanımı veya sıcaklığı belirli bir değeri aşında programa bir eylem yaptırabiliyorsunuz.

Arduino IDE’de “CustomThresholdTriggerEvents” sekmesine gidip burada CPU ve GPU kullanımı ya da sıcaklığı belli seviyeleri aştığında yapılmasını istediğiniz şeyler belirleyebiliyorsunuz. Örneğin bu, devreye eklediğiniz bir buzzer’ın çalması ya da ayrı bir LED’in yanması olabilir.

Phat-Stats: Büyük Ekranlı Harici Sıcaklık Göstergesi

Performans monitörünün büyük versiyonunda 2.8 inçlik 320×240 çözünürlüğünde TFT LCD ekran kullanılıyor. Bu ekranın sürücüsü mutlaka ILI9341 olmalı. Satın alırken buna dikkat etmeniz gerekiyor.

Harici Sıcaklık Göstergesi Ekran

Küçük ekranlı versiyondan farklı olarak burada bir de Rotary Encoder kullanılıyor.Harici Sıcaklık Göstergesi Ekran Parlaklık Ayarı Bu ekran parlaklığını ayarlamak ve ekranın oryantasyonunu yatay ve dikey yapmaya yarıyor. Çevirdiğinizde ekran parlaklığı artıp/azalıyor, ortasındaki düğmeye bastığınızda ekran oryantasyonu yatay veya dikey oluyor.

Opsiyonel olsa da gayet işlevsel olduğu için bu parçayı edinmenizi öneririz. Zaten çok pahalı birşey değil. Bu malzemeleri Google’da aratarak yurt içindeki & dışındaki alışveriş sitelerinden ve robotik mağazalarından bulabilirsiniz.

Hangi Mikrokontrolcü: STM32 mi Xiao mu?

Bu projede kullanacağımız STM32F103C8T6 isimli mikrokontrolcüye mavi PCB’sinden ötürü “blue pill” yani mavi hap deniliyor. Robotik mağazalarında yaklaşık 30 liraya bulabileceğiniz oldukça düşük maliyetli bir parça. Ucuz olmasına karşın tipik Arduino’lardan çok daha hızlı ve büyük hafızaya sahip.

Bunu kullanıyoruz çünkü Intel, AMD, Nvidia, Gskill gibi donanım üreticilerinin logolarını saklamak ve bu büyük ekranda çok fazla veriyi aynı anda gösterip sık sık güncellemek için bu işlem gücüne ihtiyaç duyuyoruz.

Arduino Pro Micro STM32F103C8T6
İşlemci Atmega32u4 Arm Cortex®-M3
Hız 16 Mhz 72Mhz
Mimari 8bit 32bit
Bellek 2KB 20KB
Kod hafızası 32KB 64KB

Tek sıkıntı onu programlamak Arduino’lardaki gibi kolay değil. Arduino’ları kutudan çıktığı gibi bilgisayarınıza takıp kendi IDE’siyle programlayabiliyorsunuz. Ancak STM32 mikrokontrolcüyü Arduino IDE’siyle programlamak için önce ona bir Arduino bootlaoder yüklememiz gerekiyor.

Bootloader yüklemek biraz zahmetli ve teknik bir konu. Eğer bununla uğraşmak istemiyorsanız Seeeduino’nun biraz daha pahalı olan Xiao mikrokontrolcüsünü satın alıp kolayca Arduino IDE ile programlayabilirsiniz. Hatta Xiao kullanmanın bir avantajı da ilerde projeyi genişletmek ve Adafruit NeoPixel eklemek istediğinizde yapabilirsiniz, STM32 ise Neopixel’i desteklemiyor.

STM32 ile Harici Sıcaklık Göstergesi Hazırlıkları

Biz uygun maliyeti sebebiyle bu rehberi STM32’yi baz alarak hazırladık. Mikrokontrolcünüzü satın aldınız ve elinize ulaştı. Kututan bacakları lehimlenmemiş şekilde çıktığını göreceksiniz. Bu bacakları sorunsuz şekilde lehimlemeniz gerekiyor. Bu işte yeniyseniz size tavsiyemiz işini düzgün yapan bir elektronikçiye bunu götürüp lehimletmeniz. Çünkü bazı pinlerin bacaklarla teması düzgün olmazsa ya da bazı pinler kısa devre yaparsa proje çalışmayacaktır.

STM32’ye Arduino bootloader yükleme

Bizim elimizde hali hazırda FTDI232 isimli seri programlama modülü olduğu için bootloader flash’lama işlemini onu kullanarak yapacağız. Ancak dilerseniz isterseniz STLink v2 isimli programlayıcıyı edinerek de STM32’ye kod atabilirsiniz. FTDI modülü ile devam edersek, modülün gördüğünüz pinlerini STM32 kartımızın şu pinlerine takmanız gerek:

FTDI232 pini STM32 pini
RX A9
TX A10
VCC 3.3v
GND GND

Ve burası çok önemli, FTDI modülüne güç vermeden önce STM32 üzerindeki BOOT 0 isimli jumper’ı 0 konumundan 1’e getirmeniz gerek.

Bir başka önemli jumper da FTDI modülü üzerinde var. Flaşlayacağımız sadece STM32 kartı 3.3v uyumlu olduğu için buradaki jumper’ın da 5v değil 3.3v’da olduğundan emin olmamız gerek.

Daha sonra FTDI modülünün buradan indirebileceğiniz VCP sürücüsünü yüklemeniz gerekiyor. Bu sürücüyü yükledikten sonra FTDI modülünü mini USB yuvasından bilgisayarınıza bağlayabilirsiniz.

Şimdi sırada STM32 kartları flaşlamamızı sağlayan uygulamayı ve karta flaşlayacağımız bootloader dosyasını indirmek var. Bizim elimizdeki STM32 kartın üzerindeki LED’in 13. dijital giriş/çıkış pinine bağlı. Bu sebeple “generic_boot20_pc13.bin” isimli dosyayı flashladık. Muhtemelen sizin kartınız da aynı şekilde olacaktır.

Bu dosyayı ve flaşlama uygulamasını indirip bilgisayarınıza kurduysanız bir sonraki adımda bu uygulamayı çalıştırın. Uygulama varsayılan olarak C:/Program Files/STMicroelectronics altına kuruyor kendini. İlginç bir şekilde masaüstüne ve başlat menüsüne kısayol oluşturmadığı için bu dizine gidip kendiniz açmanız gerekiyor.

Bu uygulama açıldığında ilk kısımdan değiştirmeniz gereken tek şey FTDI modülün takılı olduğu COM portunu seçmek.

Bunu seçip İleri’ye bastığınızda bir hata mesajı yerine yeşil ışık yanmış trafik lambası ikonu görüyorsanız herşey yolunda demektir.

Sonra birkaç defa ileriye tıkladıktan sonra flaşlamanız gereken .bin dosyasını seçeceğiniz kısma geliyorsunuz.

Buradan az önce indirdiğiniz .bin dosyasını seçip devam edin. Flaşlama işlemi tamamlandığında uygulamayı kapatın ancak gücü henüz kesmeyin. Şimdi STM32 üzerindeki BOOT0 jumper’ını 1’den 0’a geri almamız gerekiyor. Ve bunu karta elektrik giderken yapmamız gerekiyor yoksa yaptığımız flaşlama silinecektir. Jumper’ı geri yerine taktıysanız gücü kesebilirsiniz.

Bir sonraki adımda Arduino IDE uygulamasını çalıştırıyoruz. Dosya > Tercihler menüsünü izleyip tercihler penceresi altında “ek devre kartları yöneticisi URL’leri” kısmına aşağıdaki linki kopyalayıp yapıştırın ve sonra Tamam’a tıklayın:

“http://dan.drown.org/stm32duino/package_STM32duino_index.json”

Bunu yaptıktan sonra Araçlar, Kart ve Kart yöneticisi menülerini izleyip kart yöneticisi penceresini açın. Arama kutusuna “STM32F1” yazın. Yapımcının stm32duino olduğundan emin olup bunu kurun. Arduino IDE’yi kapatabilirsiniz.

Artık neredeyse hazırsınız. STM32’nin VCP sürücülerini bu linkten indirip kurun ve sonra STM32 kartınızı micro USB yuvasıyla bilgisayarınıza bağlayın. Arduino IDE’yi tekrar açıp Araçlar > Kart menüsüne gelip buradan STM32F1 kartlar altından Generic STM32F103C serisini seçin.

Sonra varyant menüsünden 20kb ram ve 64kb hafızalı modelin seçili olduğundan emin olun. Upload method menüsünde USB ile yükleme yapacağımız için “STM32duino bootloader” seçili olmalı.

Son olarak Port menüsü altında STM32 kartımız bir COM portunda takılı olarak gözükmeli ve parantez içinde “Maple Mini” yazmalı.

Bu yazıyorsa deneme amaçlı blink kodunu yükleyerek herşeyin düzgün çalışıp çalışmadığını test edebiliriz. Bu kod Kart üzerindeki 13. Pine bağlı dahili LED’i 1’er saniye aralıklarla yakıp söndürüyor. Buradan da kodun karta sorunsuz yüklendiğini anlıyoruz. Arduino IDE’de Dosya > Örnekler > Basics ve Blink’e tıklayarak bu koda ulaşabilirsiniz ve STM32’ye yükleyebilirsiniz. Eğer herşey yolunda gittiyse STM32 kartınız üzerindeki LED’in 1’er saniye aralıklarla yanıp söndüğünü görmeniz gerek. Yanmıyorsa geriye dönüp adımlarınızı tekrar kontrol edin.

Aslında projenin zor olan kısmı buydu. Geriye kalan kısım birkaç kablo bağlamak ve indirdiğiniz kodu ve bir kütüphaneyi STM32’ye yüklemekten ibaret.

Adafruit GFX kütüphanesini yükleme

Arduino IDE menülerinden Taslak > Library Ekle > Kütüphaneleri yönet’e tıklıyoruz ve arama kutusuna Adafruit GFX yazıyoruz. Dikkat etmeniz gereken şey yüklemeniz gereken sürümün en güncel olan değil 1.7.5 sürümü olması gerektiği. Daha yeni sürümler STM32 mikrokontrolcülerde hata veriyor.

Ekran, rotary encoder ve STM32 mikrokontrolcü arasındaki bağlantıların nasıl yapılacağı proje sayfasındaki açık ve net diagramlarla çok güzel gösterilmiş. Aynısını biz buraya da ekliyoruz:

Harici Sıcaklık Göstergesi Montaj Şeması
STM32 BluePill ile harici sıcaklık göstergesi montaj şeması

Bunları takip ederek breadboard üzerinde kablolama yapabilirsiniz. Tabiki breadboard sadece başlangıç. Buna 3D yazıcıdan ayrı bir kasa yapıp masaüstünüzde bir aksesuar gibi kullanabilirsiniz ya da sadece ekrana giden kabloları uzun tutup, ekranı kasa camının bir köşesine yapışık şekilde durmasını da sağlayabilirsiniz. Mikrokontrolcüyü ve diğer kabloları da kasanın altında görünmeyen bir yerlerde saklayabilirsiniz.

Proje kodlarını STM32 mikrokontrolcüye yüklemek

Harici Sıcaklık Göstergesi
Breadboard üzerinde harici sıcaklık göstergesi.

Hackaday’deki Phat-Stats sayfası üzerinde bulunan Files (dosyalar) sekmesine gidip hangi mikrokontrolcü ve ekran kombosunu kullandıysanız ona uygun .zip dosyasını indirin. Bizim indireceğimiz ‘Phat-Stats-TFT-STM32F1′ ile başlayan dosya. İndirdikten sonra sağ tuşla tıklayıp arşiv yöneticinizi kullanarak aynı isimde bir klasöre dosyaları çıkarın. Ana proje dosyasını açtığınızda dizindeki diğer kod dosyalarının da Arduino IDE altında farklı sekmeler şeklinde yüklendiğini doğrulayın. Kodu Yükle tuşuna basıp işlemi tamamladığınızda ekranda logo ve yazılar görmeniz gerek.

Bunu görmüyorsanız geriye gidip adımlarınızı tekrar gözden geçirin.

Hardware Serial Monitor uygulamasını bilgisayarda çalıştırmak

Son adım olarak bilgisayarımızın arkaplanında çalışıp mikrokontrolcüye sistem bilgilerini raporlayan uygulamayı indirip kurmamız gerek. Hardware Serial Monitor isimli bu uygulamayı da yine dosyalar kısmında bulabilirsiniz. Çok önemli bir nokta bu uygulamayı çalıştırırken yönetici izni ile çalıştırmak gerektiği. Yoksa bazı bilgiler eksik kalıyor.

Hardware Serial Monitor’u başlangıçta otomatik çalıştırmak

Bu uygulamayı Windows her başladığında otomatik çalışacak şekilde ayarlamak istiyorsanız öncelike Hardware Serial Monitor.exe dosyasına sağ tuşla tıklayıp özelliklerini açıp, oradan uyumluluk sekmesine tıklayıp, bu uygulamayı yönetici izniyle çalıştır kutucuğunu işaretleyip Tamam’a tıklıyoruz.

Sonra aşağıdan kopyalayıp yapıştırabileceğiniz bu VBScript’i kopyalayıp not defteri uygulamasında yapıştırın:

Set WshShell = CreateObject("WScript.Shell" )
WshShell.Run chr(34) & "C:\Program Files (x86)\HardwareSerialMonitor\HardwareSerialMonitor.exe" & Chr(34), 0
Set WshShell = Nothing

Buradaki dizin bilgisini sizin uygulama dosyanız neredeyse ona göre değiştirin. Sonra dosyayı HardwareSerialMonitor.vbs ismiyle uygulamanın olduğu dizine kaydedin. Şimdi Windows başlangıç klasörüne gitmek için Windows + R tuşlarına basıp Çalıştır kutucuğunu açın. Buraya “shell:startup” yazdığınızda Windows başlangıç klasörü açılacaktır. Buraya az önce kaydettiğiniz VBScript’in bir kısayolunu kopyaladığınızda uygulama bilgisayarınız her açıldığında otomatik başlayacaktır.

Olası hatalara çözümler

Harici sıcaklık göstergesini bir süre kullandıktan sonra şunu fark ettim: Geliştiricinin sınırlı imkanı ve vakti olduğu için ve sayısız çeşitte farklı donanımı tek tek test edemeyeceği için ekranda bazı hatalar oluşabiliyor. Örneğin işlemcinizin ismi bu iş için ayrılan kısma sığmayabiliyor ya da MHz gibi bazı ibareler kutucuklardan taşabiliyor. Projenin açık kaynak kodlu olması işte bu yüzden güzel, kodun ilgili kısmına gidip buraları düzenleyebiliyorsunuz. Geliştirici bunun için koda bol bol açıklama eklemiş.