Logo

Program - Teplota a LED

Program určený pro Raspberry, měření teploty s využitím GPIO, pomocí dvou LED diod a programovacího jazyka Python. Hlídá teplotu a vizuálně informuje o překročení 55 °C.

O programu

Program Teplota a LED je napsaný v programovacím jazyce Python, čte údaje o teplotě a vyhodnocuje jejich hodnotu, v případě teploty vyšší než 55 °C se rozbliká červená LED, v případě teploty nižší jak 55 °C bliká zelená LED(zelenou LED můžeme vynechat).

Nastavení hranice teploty provedeme editací údaje maximalniteplota = 55.

Program je vhodný pro kontrolu teploty proti přehřátí.

Požadavky

Předpokladem pro spuštění programu Teplota a LED je libovolné zařízení Raspberry PI s funkčním operačním systémem Raspbian anebo podobným, Python verze 2 a vyšší, knihovny OS a time. Pro optickou signalizaci teploty využijeme klasické LED diody.

Připojení

Připojení k Raspberry zrealizujeme pomocí rozhraní GPIO.

Červenou LED D1 pro vysokou teplotu zapojíme kladným pólem do GPIO16 (č.36).

Zelenou LED D2 pro nízkou teplotu zapojíme kladným pólem do GPIO20(č.38).

Obě LED uzemníme do GND.

GPIO jednotlivé piny
Schéma zapojení

Spuštění

Spuštění programu provedeme pomocí příkazu python, bez kterého se neobejdeme a zadáním názvu souboru teplotaled.py.

python teplotaled.py

Kód

import RPi.GPIO as GPIO import time import os Ledvysoka = 16 # Cislo LED pri vysoke teplote Lednizka = 20 # Cislo LED pri nizke teplote def measure_temp(): # funkce mereni teploty temp = os.popen("vcgencmd measure_temp").readline() return (temp.replace("temp=", "")) maximalniteplota = 55 def vyhodnoceni(teplota, hodnota): return teplota > hodnota def setup(): # Podprogramu setup, provede se na zacatku GPIO.setmode(GPIO.BCM) # Cislovani pinu - BCM nebo BOARD GPIO.setup(Ledvysoka, GPIO.OUT) # Nastaveni pinu jako vystupu GPIO.setup(Lednizka, GPIO.OUT) def blink(): # Podprogram blink, ktery se bude vykonavat while True: # Nekonecna smycka udaje = int(measure_temp()[:2]) # vysledek je dvoumistne cislo teploty if udaje > maximalniteplota: GPIO.output(Ledvysoka, GPIO.HIGH) # Zapnuti LED diody pomoci prikazu GPIO.HIGH time.sleep(1) # Pauza po dobu 1 sekundy (delay) GPIO.output(Ledvysoka, GPIO.LOW) # Vypnuti LED diody pomoci prikazu GPIO.LOW time.sleep(1) # Pauza po dobu 1 sekundy (delay) else: GPIO.output(Lednizka, GPIO.HIGH) # Zapnuti LED diody pomoci prikazu GPIO.HIGH time.sleep(1) # Pauza po dobu 1 sekundy (delay) GPIO.output(Lednizka, GPIO.LOW) # Vypnuti LED diody pomoci prikazu GPIO.LOW time.sleep(1) # Pauza po dobu 1 sekundy (delay) def ukonci(): # Podprogram, ktery bude zavolan pri ukonceni programu GPIO.output(Ledvysoka, GPIO.LOW) # Vypnuti LED diody GPIO.output(Lednizka, GPIO.LOW) # Vypnuti LED diody GPIO.cleanup() # Uvolneni vsech GPIO portu pro dalsi pouziti if __name__ == '__main__': # Program zacina ZDE setup() # Zavolani podprogramu setup try: # Zavolani podrogramu blink s osetrenim vyjimky nize blink() except KeyboardInterrupt: # Pri stisku zkratky 'Ctrl+C' se vykona podprogram ukonci ukonci()

Závěrem

Je to zajímavý nápad vizuálně informovat uživatele o překročení teploty, ale ještě zajímavější by bylo zajistit pro stav překročení nějakou adekvátní akci pro ochlazení jednotky CPU.

Relé a ventilátor – Bylo by k tomu potřeba relé 3V (celkem hojně k dostání z Číny) a nějaký slabý 5V ventilátor napájený přímo z Raspberry. Pak trochu poupravit program a bylo by to. Sestavili bychom chladící obvod ze dvou prvků. Ze vzdálenějšího pohledu je to i tak složité. Nešlo by to ještě jednodušeji?

Teoreticky pouze chladič – Jestliže bychom získali velmi úsporný chladič o maximálním odběru řádově pár mA, bylo by možné jej rovnou napojit na některý programovatelný výstup bez nutnosti relé. Víceméně se jedná o nejelegantnější řešení, ale takové chladiče jsem nesehnal.