Orange Pi PC Otomatik İşlemci Soğutma Fanı

Tek kart bilgisayar kullanırken, işlemcinin ısınması nadirende olsa gündem de olan bir konudur. Bu yazımızda işlemci ısısına göre açılıp, kapanan bir soğutucu fan devresi oluşturuyoruz. Biz kart olarak Orange Pi PC, imaj olarak ise armbian kullandık, bu yüzden kütüphaneler, kablolama işlemleri sizin kartınıza göre farklılıklar içerebilir. İstediğiniz bir kart modelinde işlem varsa yorumlarda bahsederek bizden isteyebilirsiniz.

orange pi otomatik fan

Kütüphaneler ve Gerekli Modüller

Kablolama ve devre şemasına geçmeden önce, kurmamız gereken bazı modüller mevcut, bunlar; Python ve WiringOP. Öncelikle kartımızı internete bağlayıp güncelleme işlemleri ile başlayalım. Python opsiyonel olup sizin kararınıza bağlı, eğer armbian imajı kullanıyorsanız zaten kurulu gelecektir.

sudo apt-get update
sudo apt-get upgrade
reboot
sudo apt-get upgrade

Güncellemeleri indirdikten sonra bir kez cihazı tekrar başlatmak daha verimli ve kararlı olacaktır. Tekrar başlatma işleminden sonra “apt-get upgrade” komutu ile indirilen paketleri kurabilirsiniz.

WiringOP Kurulumu

mkdir komutu ile “indirilenler” klasörü oluşturmanıza gerek yok fakat indirmeler vb. işlemler için hazırda bulunması iyi oluyor.

mkdir indirilenler
cd indirilenler
git clone https://github.com/zhaolei/WiringOP.git -b h3
cd WiringOP/
sudo ./build

WiringOP kurulumu ardından GPIO pinlerini görmek ve test etmek için şu komutları kullanabilirsiniz.

gpio readall

Bu komutun ardından şöyle bir geri dönüş almanız gerekiyor:

 +-----+-----+----------+------+---+-Orange Pi+---+---+------+---------+-----+--+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 |     |     |     3.3v |      |   |  1 || 2  |   |      | 5v       |     |     |
 |  12 |   8 |    SDA.0 | ALT5 | 0 |  3 || 4  |   |      | 5V       |     |     |
 |  11 |   9 |    SCL.0 | ALT5 | 0 |  5 || 6  |   |      | 0v       |     |     |
 |   6 |   7 |   GPIO.7 | ALT3 | 0 |  7 || 8  | 0 | ALT3 | TxD3     | 15  | 13  |
 |     |     |       0v |      |   |  9 || 10 | 0 | ALT3 | RxD3     | 16  | 14  |
 |   1 |   0 |     RxD2 | ALT3 | 0 | 11 || 12 | 0 | ALT3 | GPIO.1   | 1   | 110 |
 |   0 |   2 |     TxD2 | ALT3 | 1 | 13 || 14 |   |      | 0v       |     |     |
 |   3 |   3 |     CTS2 |   IN | 1 | 15 || 16 | 0 | ALT3 | GPIO.4   | 4   | 68  |
 |     |     |     3.3v |      |   | 17 || 18 | 0 | ALT3 | GPIO.5   | 5   | 71  |
 |  64 |  12 |     MOSI | ALT4 | 0 | 19 || 20 |   |      | 0v       |     |     |
 |  65 |  13 |     MISO | ALT4 | 0 | 21 || 22 | 0 | ALT3 | RTS2     | 6   | 2   |
 |  66 |  14 |     SCLK | ALT4 | 0 | 23 || 24 | 0 | ALT4 | CE0      | 10  | 67  |
 |     |     |       0v |      |   | 25 || 26 | 0 | ALT5 | GPIO.11  | 11  | 21  |
 |  19 |  30 |    SDA.1 | ALT5 | 0 | 27 || 28 | 0 | ALT5 | SCL.1    | 31  | 18  |
 |   7 |  21 |  GPIO.21 |   IN | 1 | 29 || 30 |   |      | 0v       |     |     |
 |   8 |  22 |  GPIO.22 |   IN | 1 | 31 || 32 | 0 | ALT3 | RTS1     | 26  | 200 |
 |   9 |  23 |  GPIO.23 |   IN | 1 | 33 || 34 |   |      | 0v       |     |     |
 |  10 |  24 |  GPIO.24 |   IN | 1 | 35 || 36 | 0 | ALT3 | CTS1     | 27  | 201 |
 |  20 |  25 |  GPIO.25 | ALT5 | 0 | 37 || 38 | 0 | ALT3 | TxD1     | 28  | 198 |
 |     |     |       0v |      |   | 39 || 40 | 0 | ALT3 | RxD1     | 29  | 199 |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+-Orange Pi+---+------+----------+-----+-----+

Bu tabloda GPIO isimlerini, hangi modda kullanıldığını ve çıkış voltajlarını görebilirsiniz. Aşağıdaki tabloda kart üzerindeki pinleride görebilirsiniz. Yukarıdaki tablo ile eş zamanlı kullanmanızda fayda olucaktır.

İpucu

DC Fanı doğrudan 5V-3.3V çıkışlarına bağlayabilirsiniz fakat kartı kapatsanız bile güç kesilmediği sürece fanlar çalışacaktır, ayrıca korumasız bir şekilde bağlandıysa karta zarar verecektir, bu yüzden GPIO pinlerini kullanmak her zaman sizin için daha avantajlı olacaktır.

orange pi otomatik fan

Devre Şeması

Öncelikle bahsetmeliyiz ki, herhangi bir motoru kontrolsüz bir şekilde karta bağlamak, kartın bozulma riskini arttıracaktır. Bu korumayı, transistör ve diyotlarla basit bir şekilde sağlayabilirsiniz. Temel olarak bu devreyi kullanacağız, “load” yani yük kısmına DC Fan modülümüzü bağlıyoruz.

orange pi otomatik fan

Buradaki “2N3904″ transistörü tamamen tercihe bağlıdır, genel kullanım herhangi bir NPN transistör işinizi görecektir. Transistörü tetikleyici olarak kullanıyoruz, bu şekilde GPIO pininden gelen sinyale göre, açma ve kapama işlemi görücek.

Detay 1

Transistörün base bacağına bağlanan direncin sebebi, akım sınırlamak içindir, eğer bipolar transistör kullanmıyorsanız bu direnci kullanmanız gerekmeyebilir. Transistörün “datasheet”ini kontrol etmeniz sizin için daha iyi olacaktır, riske atmak istemiyorsanız bu devrede 1k ohm işinizi görecektir.

Detay 2

Eğer base bacağına zener ya da silikon diyot bağlarsanız, korumayı bir seviye ileri taşımış olursunuz. Transistörün kendi koruması yoksa, DC Fan yavaşladığında ya da durduğunda ters elektromotor kuvvetten dolayı, transistöre zarar verebilir.

İstediğiniz GPIO pinlerini kullanabilirsiniz, biz fiziksel olarak “26”, GPIO olarakta “21” olarak geçen pini kullandık. Tabii bunlar Orange Pi PC için geçerli, kendi kartınıza göre bir pin seçmelisiniz.

Program Kodu

Bash İle Çalışan

İstediğiniz bir klasörde, “nano fan.sh” komutu ile boş bir .sh sayfası oluşturup bu kodu doğrudan içine yapıştırabilirsiniz, sadece GPIO pinlerini ve PATH uzantısını değiştirmeniz gerekmekte.

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/fan.sh
gpio mode 21 out
gpio write 21 0
TEMP=50000
  if [[ $(cat /sys/class/thermal/thermal_zone0/temp) -gt $TEMP ]];
then
    gpio write 21 1
sleep 1m
  else
    gpio write 21 0
  fi
gpio write 21 0

Oluşturduğunuz bash scriptini çalıştırmak için bulunduğu klasörde ./fan.sh yazarak testlerinizi yapabilirsiniz.

Kodun Detayları

#!/bin/bash

Terminalde .sh scriptlerini çalıştırırken sorun yaşamamak için ilk satıra bu kısmı eklemenizde fayda var. Bazı modellerde ve imajlarda bu kısım sorun çıkarmakta eğer böyle bir durumla karşı karşıya kalırsanız bunu kullanabilirsiniz:

 #!/usr/bin/env bash

Bu satırın ardından “PATH” kısmına geliyoruz:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/fan.sh

Son kısımdaki “/root/fan.sh” kısmını kendinize göre değiştirmeniz gerekiyor. Eğer crontab ile otomatik şekilde kullanmayı planlamıyorsanız bu satırı tamamen silebilirsiniz.

gpio mode 21 out
gpio write 21 0
TEMP=50000

gpio mode kısmında out ile “21.” pini çıkış olarak ayarladık, “write 21 0” ise “21.” pini LOW yap demek oluyor. Bazen script çalışırken sorunlar olabiliyor ya da yarıda kapanabiliyor böyle durumlarda fanın çalışmaya devam etmemesi için böyle “gpio write 21 0” yazma gereksinimi duyduk.

TEMP değişkeninde ise, kaç derecenin üstündeyken fanın aktifleşeceğine karar veriyoruz. Farkettiyseniz 50000 çok yüksek bir sayı, bunun sebebi bizim kartımızda sıcaklık verisini çektiğimizde gelen veri dönüştürülmemiş bir şekilde tam sayı olarak geliyor örnek verecek olursak, o an ki işlemci sıcaklığı 53 santigrat derece ise, “cat” ile çektiğimiz veri 53000 oluyor, isterseniz bu kısımlarda matematiksel işlemler yaparak her iki kısmıda 1000’e bölebilirsiniz, fakat fazla işlem olmaması için biz böyle kullandık.

if [[ $(cat /sys/class/thermal/thermal_zone0/temp) -gt $TEMP ]]; then
    gpio write 21 1
sleep 1m
  else
    gpio write 21 0
  fi
gpio write 21 0

If döngüsü kısmında ise, cat ile işlemcimizin sıcaklık verisini çekiyoruz “-gt” yani “greater than” operatörü ile “$TEMP” değişkenine yazdığımız sayı ile işlemci sıcaklığını kıyaslıyoruz, eğer işlemci sıcaklığı $TEMP değişkeninden büyük ise,

“gpio write 21 1” yani 21. pini HIGH yapıyoruz, devamında programı 1 dakika kadar bekletiyoruz. Bu sayede işlemci sıcaklığı yüksek bir oranda düşmüş oluyor.

eğer $TEMP değişkeninden büyük değilse “gpio write 21 0” yani 21. pini LOW yapıyoruz, devamında “fi” ile döngüden çıkıyoruz ve tekrar garanti amaçlı 21. pini LOW yapıyoruz.

İpucu

IF yerine farklı bir döngü kullanabilirsiniz fakat performans olarak işimize en çok yarayan bu oldu.

Crontab ile İşlemleri Otomatiğe Almak

Bu kısma kadar kod ve kablolama işlemi bitti, şimdi crontab kullanarak bu scripti ve olay döngüsü belli aralıklarla çalıştırma ayarını yapıyoruz, biz zaman değişkeni olarak 1 dakikayı tercih ettik. Kısacası bu program her 1 dakikada çalışacak ve, program içindeki değişkenleri kontrol edecek.

crontab -e

Bu komutun ardından karşınıza şöyle bir çıktı gelecektir, eğer böyle bir çıktı gelmiyorsa size büyük ihtimalle 1-2-3 gibi seçenekler sunacaktır, bunlardan en kolay olan “nano” seçeneği ile devam ederseniz görselde ki çıktı sizede gelecektir.

orange pi otomatik fan

Crontab listesine oluşturduğunuz .sh scriptinin konumu ve çalışma döngü süresini yazarak işlemleri otomatiğe alabilirsiniz.

*/1 * * * * /root/fan.sh

Buradaki 1, her 1 dakika anlamına gelmektedir.

Stres Testleri ve Fan Etkileri

Linux kullanan cihazları test etmek için kullanılan “stress” betiği ile, yaptığımız fan uygulamasının etkilerini test edelim.

İki test esnasında da aynı betikler ve uygulamlar çalışmakta, ortam sıcaklığı neredeyse, cihaz konumu ise sabit. İki testte de 1 dakika sürecek, pasif alüminyum soğutma bloğu takılı olucak, aradaki tek fark ise, birinde fan 50C° çalışmaya başlayacak, birinde ise fan asla çalışmayacak.

Ortak Başlangıç Sıcaklığı

orange pi otomatik fan

Bir Dakikalık Fansız Stres Test Sonucu

orange pi otomatik fan

Bir Dakikalık 50C°’de Çalışan Fanlı Stres Test Sonucu

orange pi otomatik fan

50C° Santigrata ulaşıp, çalışmaya başlaması ile 1 dakikada 6C° düşüş sağladı, isterseniz kod içindeki 1 dakika bekle süresini uzatabilirsiniz, biz sürekli ses gelmesini istemediğiniz için, ayrıca karta sürekli yüklenme yapılmadığı için böyle tuttuk.

Son Görüntüler

B7gbi

Biz tek kart bilgisayarımızı şuan bir otomasyon sistemi için kullanmaktayız, o yüzden görüntüleri maalesef masaüstünde çekemedik.

Uyarı

Kasaya bağladığınız fanın üfleme yönünün işlemciye baktığına emin olun. Ek olarak pasif alüminyum soğutucu kullanırsanız daha verimli sonuçlar alırsınız.

Tek Kart Bilgisayarın Kasası

Fan ve GPIO pinleri ile uyumlu kasaları bulmak oldukça zor, hele ki Orange Pi PC gibi yaygın olmayan model tek kart bilgisayarlar için. Bu sebeple kartımızın kasasını kendi 3D yazıcımız ile ürettik, detaylar için iletişime geçebilirsiniz.