İçindekiler:

Raspberry Pi CPU Sıcaklık Göstergesi: 11 Adım (Resimli)
Raspberry Pi CPU Sıcaklık Göstergesi: 11 Adım (Resimli)

Video: Raspberry Pi CPU Sıcaklık Göstergesi: 11 Adım (Resimli)

Video: Raspberry Pi CPU Sıcaklık Göstergesi: 11 Adım (Resimli)
Video: Kendi Sıcaklık Göstergemizi Yaptık! Kendin Yap #5 2024, Temmuz
Anonim
Raspberry Pi CPU Sıcaklık Göstergesi
Raspberry Pi CPU Sıcaklık Göstergesi

Daha önce basit ahududu pi (Bundan sonra RPI olarak anılacaktır) operasyonel durum gösterge devresini tanıtmıştım.

Bu sefer başsız (monitörsüz) şekilde çalışan RPI için daha kullanışlı bir gösterge devresini anlatacağım.

Yukarıdaki devre, CPU sıcaklığını aşağıdaki gibi 4 farklı seviyede gösterir:

- CPU sıcaklığı 30~39 derece arasında olduğunda yeşil LED yanar

- Sarı LED, sıcaklığın 40 ila 45 derece arasında arttığını gösterir

- 3. Kırmızı LED, CPU'nun 46 ~ 49 dereceye ulaşarak biraz ısındığını gösterir

- Sıcaklık 50 dereceden fazla olduğunda başka bir Kırmızı LED yanıp söner

Yukarıdaki CPU sıcaklık aralıkları benim kişisel tasarım konseptimdir (Diğer sıcaklık aralıkları, bu devreyi kontrol eden python programının test koşulları değiştirilerek yapılandırılabilir).

Bu devreyi kullanarak konsol terminalinde mutlaka “vcgencmd Measure_temp” komutunu sık sık çalıştırmazsınız.

Bu devre, mevcut CPU sıcaklığını sürekli ve uygun bir şekilde bildirecektir.

Adım 1: Şemaların Hazırlanması

Şemaların Hazırlanması
Şemaların Hazırlanması

Sadece python kodlarını kullanarak 4 led'i direkt olarak kontrol edebilmenize rağmen, programın kontrol mantığı RPI yükleyecektir ve bunun sonucunda sürekli biraz karmaşık python kodu çalıştırmanız gerektiğinden CPU sıcaklığı daha fazla yükselecektir.

Bu nedenle, python kod karmaşıklığını olabildiğince basit ve yüksüz LED kontrol mantığını harici donanım devresine yükleyerek en aza indiriyorum.

CPU sıcaklık göstergesi (Bundan sonra INICATOR olarak anılacaktır) devresi aşağıdaki ana parçalardan oluşur.

- 00->DÜŞÜK, 01->Orta, 10->Yüksek, 11->Soğutma ihtiyacı gibi sıcaklık seviyesi verilerini almak için RPI GPIO pinlerine iki opto-kuplör bağlanır.

- Girişlere (A, B) göre 74LS139 (veya 74HC139, 2'den 4'e kod çözücü ve çoğullayıcı) kontrol çıkışları (Y0, Y1, Y2, Y3)

- Sıcaklık 30 ~ 39 derece arasında olduğunda, python kodu 00'dan GPIO pinlerine çıkar. Bu nedenle, 74LS139, 00 (A->0, B->0) giriş verilerini alır.

- 00 girildiğinde Y0 çıkışı DÜŞÜK olur. (Lütfen 74LS139 doğruluk tablosuna bakınız)

- Y0 çıkışı DÜŞÜK olduğunda 2N3906 PNP transistörünü aktive eder ve bunun sonucunda Yeşil LED yanar.

- Aynı şekilde Y1 (01 -> CPU sıcaklık ortamı) Sarı LED'i yakacaktır vb.

- Y3 DÜŞÜK olduğunda, DB140, BD140 PNP transistör yükü olan NE555 LED yanıp sönme devresini (bu ortak 555 IC tabanlı LED yanıp söner) etkinleştirir

Bu devrenin en önemli bileşeni, aşağıdaki doğruluk tablosunda gösterildiği gibi 2 haneli girişi 4 farklı tek çıkışa deşifre eden 74LS139'dur.

Giriş | Çıktı

G (Etkinleştir) | B | bir | Y0 | Y1 | Y2 | Y3 |

H | X | X | H | H | H | H |

L | L | L | L | H | H | H |

L | L | H | H | L | H | H |

L | H | L | H | H | L | H |

L | H | H | H | H | H | L |

74LS139 çıkışı DÜŞÜK olduğunda, PNP tipi transistör, taban terminali DÜŞÜK olduğunda PNP transistörü açıldığından genel devreyi basitleştirebilir. (Bu hikayenin sonunda NPN versiyonunu göstereceğim)

NE555 LED flaşör devresine 100K potansiyometre dahil olduğundan, Kırmızı LED ON/OFF süresi ihtiyaca göre serbestçe ayarlanabilir.

Adım 2: PCB Çizimi Yapma

PCB Çizimi Yapmak
PCB Çizimi Yapmak

GÖSTERGE'nin çalışma şeması anlatıldığına göre devreyi yapmaya başlayalım.

Üniversal kart üzerinde bir şeyi lehimlemeden önce, yukarıda gösterilen PCB çizimini hazırlamak, hataları en aza indirmeye yardımcı olur.

Çizim, her bir parçayı evrensel kart üzerine yerleştirmek için power-point kullanılarak ve teller ile parçalar arasında kablolama desenleri yapılarak yapılır.

IC ve transistör pin-out görüntüleri PCB kablolama modeli ile birlikte konumlandırıldığından, bu çizim kullanılarak lehimleme yapılabilir.

Adım 3: Lehimleme

Lehimleme
Lehimleme

Orijinal PCB çizimi, bileşenleri PCB'ye bağlamak için tek teller kullanılmadan yapılsa da, biraz farklı lehimliyorum.

Tek iletkenli teller (kalay tel değil) kullanarak, GÖSTERGE devresini içeren evrensel PCB boyutunu küçültmeye çalışıyorum.

Ama PCB'nin lehimleme tarafında da görebileceğiniz gibi, PCB çiziminde gösterilen desenlere göre de kalay tel kullanıyorum.

Her bir bileşen PCB çiziminin orijinal tasarımına göre bağlandığında, GÖSTERGE devresi dahil olmak üzere lehimleme tamamlanmış PCB kartı doğru şekilde çalışacaktır.

Adım 4: Test Hazırlığı

Test Hazırlığı
Test Hazırlığı

RPI bağlantısından önce, bitmiş devrenin test edilmesi gerekir.

Herhangi bir lehimleme hatası olabileceğinden, kısa devre veya yanlış kablolama meydana geldiğinde hasarları önlemek için DC güç tedarikçisi kullanılır.

GÖSTERGE testi için devrenin 5V güç kaynağı konektörüne iki ek güç kaynağı kablosu bağlanır.

Adım 5: Test Etme (CPU Sıcaklığı Orta Düzeyde)

Test (CPU Sıcaklığı Orta Düzeyde)
Test (CPU Sıcaklığı Orta Düzeyde)

5V girişi uygulanmadığında, 74LS139 kod çözme girişi ve Y0 çıkışını DÜŞÜK olarak etkinleştirir (Yeşil LED yanar).

Ancak A girişine 5V uygulandı, 74LS139'un Y1 çıkışı etkinleştiriliyor (DÜŞÜK).

Bu nedenle Sarı LED yukarıdaki resimde görüldüğü gibi yanmaktadır.

Adım 6: Test Etme (CPU'nun Soğutma Seviyesine İhtiyacı Var)

Test (CPU'nun Soğutma Seviyesine İhtiyacı Var)
Test (CPU'nun Soğutma Seviyesine İhtiyacı Var)

74LS139'un her iki girişine (A ve B) 5V uygulandığında, 4. Kırmızı LED yanıp söner.

Yanıp sönme hızı, yukarıdaki resimde gösterildiği gibi 100K VR ayarlanarak değiştirilebilir.

Test tamamlandığında iki adet Molex 3 pin dişi kablo çıkarılabilir.

Adım 7: GÖSTERGE Devresine Güç Kaynağı

GÖSTERGE Devresine Güç Kaynağı
GÖSTERGE Devresine Güç Kaynağı

GÖSTERGE devresine güç vermek için yukarıdaki resimde gösterildiği gibi 5V çıkışlı ve USB tip B adaptörlü ortak el telefonu şarj cihazı kullanıyorum.

3.3V GPIO ve 5V beslemeli GÖSTERGE devresi bağlanarak RPI ile sorun yaşamamak için sinyal arayüzü ve güç kaynağı birbirinden tamamen izole edilmiştir.

Adım 8: RPI Kablolaması

RPI Kablolaması
RPI Kablolaması

GÖSTERGE devresini RPI ile arayüzlemek için, iki topraklama pimi ile birlikte iki GPIO pimi tahsis edilmelidir.

GPIO pinlerini seçmek için özel bir gereklilik yoktur.

INDICATOR'u bağlamak için herhangi bir GPIO pinini kullanabilirsiniz.

Ancak kablolu pinler python programında 74LS139'a (örneğin A, B) giriş olarak atanmalıdır.

Adım 9: Python Programı

Python Programı
Python Programı

Devre tamamlandığında, GÖSTERGE fonksiyonunu kullanmak için python programı yapılması gerekmektedir.

Program mantığı hakkında daha fazla ayrıntı için lütfen yukarıdaki akış şemasına bakın.

#-*- kodlama:utf-8 -*-

içe aktarma alt işlemi, sinyal, sys

ithalat zamanı, yeniden

RPi. GPIO'yu g olarak içe aktar

bir = 12

B = 16

g.setmode(g. BCM)

g.kurulum(A, g. OUT)

g.kurulum(B, g. OUT)

##

def sinyal_işleyici(sig, çerçeve):

print('Ctrl+C'ye bastınız!')

g.output(A, Yanlış)

g.output(B, Yanlış)

f.kapat()

sistem.çıkış(0)

sinyal.sinyal(sinyal. SIGINT, sinyal_işleyici)

##

Doğru iken:

f = open('/home/pi/My_project/CPU_temperature_log.txt', 'a+')

temp_str = subprocess.check_output('/opt/vc/bin/vcgencmd Measure_temp', kabuk=Doğru)

temp_str = temp_str.decode(kodlama = 'UTF-8', hatalar = 'katı')

CPU_temp = yeniden.findall("\d+\.\d+", temp_str)

# mevcut CPU sıcaklığının çıkarılması

current_temp = kayan(CPU_temp[0])

current_temp > 30 ve current_temp < 40 ise:

# sıcaklık düşük A=0, B=0

g.output(A, Yanlış)

g.output(B, Yanlış)

zaman.uyku(5)

elif current_temp >= 40 ve current_temp < 45:

# sıcaklık ortamı A=0, B=1

g.output(A, Yanlış)

g.output(B, Doğru)

zaman.uyku(5)

elif current_temp >= 45 ve current_temp < 50:

# sıcaklık yüksek A=1, B=0

g.output(A, Doğru)

g.output(B, Yanlış)

zaman.uyku(5)

elif current_temp >= 50:

# CPU soğutması gerekli yüksek A=1, B=1

g.output(A, Doğru)

g.output(B, Doğru)

zaman.uyku(5)

geçerli_zaman = zaman.zaman()

formated_time = time.strftime("%H:%M:%S", time.gmtime(current_time))

f.write(str(formated_time)+'\t'+str(current_temp)+'\n')

f.kapat()

Python programının ana işlevi aşağıdaki gibidir.

- İlk olarak GPIO 12, 16'yı çıkış portu olarak ayarlama

- Günlük dosyasını kapatmak ve GPIO 12, 16'yı kapatmak için Ctrl+C kesme işleyicisini tanımlama

- Sonsuz döngüye girildiğinde, günlük dosyasını ekleme modu olarak açın

- “/opt/vc/bin/vcgencmd Measure_temp” komutunu çalıştırarak CPU sıcaklığını okuyun

- Sıcaklık 30 ~ 39 aralığında olduğunda, Yeşil LED'i açmak için 00 çıkışı

- Sıcaklık 40 ~ 44 aralığında olduğunda, Sarı LED'i açmak için 01 çıkışı

- Sıcaklık 45 ~ 49 aralığında olduğunda, Kırmızı LED'i açmak için çıkış 10

- Sıcaklık 50'den fazla olduğunda, Kırmızı LED'in yanıp sönmesi için çıkış 11

- Günlük dosyasına zaman damgası ve sıcaklık verilerini yazın

Adım 10: GÖSTERGE Çalışması

GÖSTERGE Çalışması
GÖSTERGE Çalışması

Her şey yolunda olduğunda, her bir LED'in CPU sıcaklığına göre yandığını veya yanıp söndüğünü görebilirsiniz.

Mevcut sıcaklığı kontrol etmek için kabuk komutu girmenize gerek yoktur.

Log dosyasındaki verileri toplayıp, Excel kullanarak metin verilerini grafiğe dönüştürdükten sonra, sonuç yukarıdaki resim gösterilir.

Yüksek yükler uygularken (İki Midori Tarayıcı çalıştırırken ve Youtube videosu oynatırken), CPU sıcaklığı 57.9C'ye çıkıyor.

Adım 11: Alternatif Üretim (NPN Transistör Kullanarak) ve Daha Fazla Geliştirme

Alternatif Üretim (NPN Transistör Kullanarak) ve Daha Fazla Geliştirme
Alternatif Üretim (NPN Transistör Kullanarak) ve Daha Fazla Geliştirme

Bu, NPN transistörlerini (2N3904 ve BD139) kullanan önceki INDICATOR proje örneğidir.

Gördüğünüz gibi, NPN transistörünü sürmek için bir IC (74HC04, Dörtlü invertör) daha gereklidir, çünkü transistörü açmak için NPN tabanına YÜKSEK düzeyde voltaj uygulanmalıdır.

Özet olarak, NPN transistör kullanmak, GÖSTERGE devresini yapmak için gereksiz karmaşıklık katar.

Bu projenin daha da geliştirilmesi için, GÖSTERGE devresini daha kullanışlı hale getirmek için yukarıdaki resimde gösterildiği gibi soğutma fanı ekleyeceğim.

Önerilen: