Temperatuur gestuurde koeling op je Raspberry PI

Deze temperatuur gestuurde koeling voor de Raspberry PI werkt op alle bordjes die ik in gebruik heb, dus de PI2b, de PI3b en de PI3b+.

We hebben nodig, een transistor S8050 een breadboard voor de test en een paar breadbord draadjes, en natuurlijk een 5v ventilator, maar die had je zeker al anders was je niet op deze pagina.



De S8050 NPN transistor

Absolute Maximum Ratings (TA=25 oC)

Kenmerken:

Kenmerk

Symbool

Waarde

Eenheid

Collector-Base voltage

Vcbo

30

V

Collector-Emitter voltage

Vceo

20

V

Emitter-Base voltage

Vebo

5

V

Collector stroom

Ic

700

mA

Collector Dissipatie

Pc

1000

mW

Smelt temperatuur

Tj

150

oC

Opslag Temperatuur

Tstg

-65~+150

oC

Klik HIER voor de datasheet van de S8050 NPN transistor


Hiervoor hebben we RPi-GPIO nodig, deze kunnen we op meerdere manieren installeren.

Controleer of deze al is geïnstalleerd met de volgende opdracht, voer uit:

pip freeze | grep RPi

Als je deze niet hebt, voer je uit:

sudo apt-get install python-pip

En weer controleren:

pip freeze | grep RPi

Nu installeren we RPi-GPIO, voer uit:

sudo apt-get install python-dev python-rpi.gpio

Voor Python 3 gebruik je

sudo apt-get install python3-dev python3-rpi.gpio

Of als bovenstaande niet werkt:

pip install RPi.GPIO

En nu installeren we picap, voer uit:

sudo apt-get install picap

picap-setup

Antwoorden op:
Audio: n
Voorbeelden: y
Node.js: y (deze gaat nu installeren)
Reboot: y


In je ‘home’ directory bij mij is dat ‘/home/pi/’ maak je de volgende map aan ‘fan-scripts’, voer uit:

mkdir fan-scripts

cd fan-scripts

Om de scripts te downloaden voer je uit:

wget https://colandino.nl/wp-content/uploads/2017/11/launcher.sh

wget https://colandino.nl/wp-content/uploads/2017/11/rpi-fan.py

En om de scripts uitvoerbaar te maken voer je uit:

chmod 755 launcher.sh

chmod 755 rpi-fan.py

Nu kunnen we testen of de launcher je script ook uitvoerd, voer uit:

sh launcher.sh


Als je script naar wens werkt moeten we nog zorgen dat het tijdens de boot mee opstart, en we laten in onze scripts map ook een logfile wegschrijven voor het geval je later een en ander wil nakijken.

Dit doen we met crontab, voer uit:
sudo crontab -e

En we voegen de volgende regel onderaan toe:

@reboot sh /home/pi/fan-scripts/launcher.sh >/home/pi/fan-scripts/cronlog 2>&1

En we herstarten om te kijken of dit ook werkt, voer uit:

sudo reboot

Na de herstart gaan we weer naar onze map ‘/home/pi/fan-scripts/’ voer uit:

cd~/ fan-scripts/

En we voeren uit:

cat cronlog

Dit laat nu de eventuele foutmeldingen zien.


Het launcher.sh bash script:

#!/bin/sh
#launcher.sh # navigeer naar de home directory, dan cd in deze directory, en voer het python script uit, en dan terug naar de home directory

# Author: Terry van Erp laatste update 12 november 2017

cd /
cd /home/pi/fan-scripts/
sudo python3 ./rpi-fan.py
cd /


Het rpi-fan.py python script:

#!/usr/bin/env python3
# coding: utf-8
# Author: Terry van Erp laatste update 12 november 2017
import os
import time
import signal
import sys
import RPi.GPIO as GPIO
pin = 36 # De fysieke pin, deze kun je hier aanpassen.
maxTMP = 50 # De maximale temperatuur van je PI CPU, hier boven gaat de fan draaien.
GPIO.setmode (GPIO.BOARD)


def setup():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(pin,GPIO.OUT)
GPIO.setwarnings(False)
return()
def getCPUtemperature():
res = os.popen('vcgencmd measure_temp').readline()
temp =(res.replace("temp=","").replace("'C\n",""))
print("temp is {0}".format(temp)) # Geeft elke 5 seconden een update van je CPU temperatuur in je terminal. Plaats een # voor deze regel om dit uit te schakelen.
return temp
def fanON():
setPin(True)
return()
def fanOFF():
setPin(False)
return()
def getTEMP():
CPU_temp = float(getCPUtemperature())


if CPU_temp>maxTMP:
fanON()


else:
fanOFF()


return()
def setPin(mode): # Een stukje code voor als we een logfile willen maken
GPIO.output(pin, mode)
return()
try:
setup()
while True:
getTEMP()
time. sleep(8) # Leest de temperatuur elke 5 seconden, dit kun je aanpassen indien gewenst.
except KeyboardInterrupt: # Met CTRL+C kunnen we afbreken tijdens de test. Altijd handig mocht een en ander niet naar wens werken of in een loop raken.
GPIO.cleanup()


Als alles naar je wens werkt kun je een en ander solderen en met een paar krimpkousjes verpakken en in je behuizing plaatsen.

Suc6

Laatste update: 3 juli 2019