用Python做一个温控风扇-树莓派

很多小伙伴还不了解树莓派是什么东西,这里首先进行一下科普

Raspberry Pi(中文名为“树莓派”,简写为RPi,(或者RasPi / RPI)是为学习计算机编程教育而设计,只有信用卡大小的微型电脑,载有一颗BroadCom的CPU,可以运行各种Linux For ARM,Windows 10 IoT,CPU与现代智能手机相同的ARM架构,运行Android也是完全没有问题。

image

其功耗低,身材小,板载的插座可以提供3/5V直流供电,具有SPI、I2C、UART串行通信接口,新版本的3B+还提供了PoE的功能,通过操作系统提供的RPi.GPIO库或其他封装库可以使用高阶语言快速实现不同的功能,比如你可以驱动一个LED,或者是驱动一块屏幕,甚至接一个摄像头用opencv打造一个人脸识别智能门锁。

image

购买树莓派时卖家送了一个壳子和一个极为普通的风扇,接在5V和GND上由输入电源直接供电,导致风扇一直运转,甚至在poweroff之后还在转,这怎么符合我的geek精神,于是决定改装他。

首先,改装需要杜邦线两根(剪断使用),杜邦线插座两个,一个三极管,NPN、PNP都行,如果是3B+以前的版本建议用NPN,或者PNP加个电阻,因为gpio输出的电平可能压降不够控制三极管通断,如果想做PWM也可以,但是需要用一个电容,不然风扇会由于PWM信号的方波导致发出滋滋的声音。

我这里用的是一个PNP,可以成功控制通断,估计是3b+的版本电平输出是5V。

将杜邦线剪短,长度适中

杜邦线插座一根焊到三极管的C极--接风扇正极,一根焊到剪开的杜邦线上接主板GND

三极管的B/E分别焊两根剪短的杜邦线,B接gpio,E接主板5V

下面是我的接线图

image

另外附上百度百科的照片

image

用透明胶固定,插到主板上

image

做好了之后大概是这个样子

image

然后写一段简单的Python

这里附上我的脚本,小伙伴们可以自己发挥


pi@raspberrypi:~$cat /opt/smartfan.py

#!/usr/bin/env python3

import RPi.GPIO as g

from time import sleep

TEMP=50

g.setmode(g.BCM)

channel = 18

g.setwarnings(False)

g.setup(channel, g.OUT)

g.output(channel, g.HIGH)

is_closed = True

try:

    while True:

        with open('/sys/class/thermal/thermal_zone0/temp') as f:

            temp = int(f.read()) / 1000

            if temp >= TEMP and is_closed == True:

                g.output(channel, g.LOW)

                is_closed = False

                sleep(10)

            elif temp < TEMP and is_closed == False:

                g.output(channel, g.HIGH)

                is_closed = True

            sleep(1)

except:

    g.output(channel, g.HIGH)

    print("\nExit Programm Fan is Trun off")

然后用写一个服务让systemd管理


pi@raspberrypi:~$ cat /etc/systemd/system/smartfan.service

[Unit]

Description=smartfan

[Service]

Type=simple

RemainAfterExit=yes

ExecStart=/usr/bin/python3 /opt/smartfan.py

PrivateTmp=true

[Install]

WantedBy=multi-user.target

启动风扇


pi@raspberrypi:~$ systemctl start smartfan

查看状态


pi@raspberrypi:~$ systemctl status smartfan

smartfan.service - smartfan

  Loaded: loaded (/etc/systemd/system/smartfan.service; enabled; vendor preset: enabled)

  Active: active (running) since Tue 2018-05-22 22:47:19 CST; 1h 17min ago

Main PID: 322 (python3)

  CGroup: /system.slice/smartfan.service

          └─322 /usr/bin/python3 /opt/smartfan.py

May 22 22:47:19 raspberrypi systemd[1]: Started smartfan.

pi@raspberrypi:~$

让他开机自启动


pi@raspberrypi:~$  systemctl enable smartfan

到这里我们的智能风扇就可以根据温度自动开关了。

如果觉得不够智能,可以再找一颗电容,用pwm控制风扇转速,这样就更完美了。