Program Teplota a LED

Kategorie: Projekty

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 vizuelně 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, Pythonem vyšším verze 2 a v něm knihovny OS a time.

  • Raspberry PI
  • Raspbian
  • Python verze 1 a 2
  • Knihovny OS a time v Pythonu
  • 1x červená LED (D1)
  • 1x zelená LED (D2 – volitelně)

Připojení 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.

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 vizuelně 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.