您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Python怎么DIY智能温控小风扇
## 前言
在物联网和智能家居兴起的今天,用Python打造一个智能温控小风扇既有趣又实用。本文将手把手教你如何用树莓派(或ESP32)、温度传感器和普通风扇实现自动温控系统,包含完整的代码实现和电路搭建指南。
---
## 一、项目概述
### 1.1 核心功能
- 实时监测环境温度
- 温度超过阈值自动开启风扇
- 支持手动/自动模式切换
- 可视化温度曲线(可选)
### 1.2 所需材料
| 组件 | 型号 | 数量 |
|-------|-------|------|
| 开发板 | 树莓派4B/ESP32 | 1 |
| 温度传感器 | DS18B20/DHT11 | 1 |
| 直流风扇 | 5V USB风扇 | 1 |
| 继电器模块 | 5V单路继电器 | 1 |
| 电阻 | 4.7KΩ(DS18B20需用) | 1 |
| 杜邦线 | 公对公/母对母 | 若干 |
---
## 二、硬件连接
### 2.1 电路示意图
```python
# 树莓派连接示例(DS18B20)
[DS18B20]
├─ DATA → GPIO4 (Pin7)
├─ VCC → 3.3V (Pin1)
└─ GND → GND (Pin6)
▲
└─ 4.7KΩ上拉电阻
[继电器]
├─ IN → GPIO17 (Pin11)
├─ VCC → 5V (Pin2)
└─ GND → GND (Pin9)
[风扇] → 继电器常开端
# 树莓派启用1-Wire接口
sudo raspi-config
# → Interface Options → 1-Wire → Enable
# 安装依赖库
pip install RPi.GPIO Adafruit_DHT matplotlib
import os
import time
import RPi.GPIO as GPIO
from datetime import datetime
# 硬件配置
FAN_PIN = 17
TEMP_SENSOR = "/sys/bus/w1/devices/28-*/w1_slave" # DS18B20路径
THRESHOLD = 28.0 # 启动风扇的温度阈值
def setup():
GPIO.setmode(GPIO.BCM)
GPIO.setup(FAN_PIN, GPIO.OUT)
GPIO.output(FAN_PIN, False)
def read_temp():
try:
with open(TEMP_SENSOR, "r") as f:
data = f.readlines()
temp_line = data[1].find("t=")
if temp_line != -1:
temp = float(data[1][temp_line+2:])/1000.0
return temp
except:
return None
def fan_control(temp):
if temp > THRESHOLD:
GPIO.output(FAN_PIN, True)
print(f"{datetime.now()} - 温度 {temp}°C → 风扇启动")
else:
GPIO.output(FAN_PIN, False)
print(f"{datetime.now()} - 温度 {temp}°C → 风扇关闭")
if __name__ == "__main__":
setup()
try:
while True:
current_temp = read_temp()
if current_temp is not None:
fan_control(current_temp)
time.sleep(10) # 每10秒检测一次
except KeyboardInterrupt:
GPIO.cleanup()
read_temp()
:读取DS18B20原始数据并解析温度值fan_control()
:比较当前温度与阈值控制继电器try-except
保证程序安全退出from flask import Flask, render_template_string
app = Flask(__name__)
@app.route("/")
def dashboard():
temp = read_temp()
return render_template_string('''
<h1>当前温度: {{temp}}°C</h1>
<button onclick="fetch('/fan/on')">手动开启</button>
<button onclick="fetch('/fan/off')">手动关闭</button>
''', temp=temp)
import matplotlib.pyplot as plt
def plot_temperature_history(log_file):
timestamps, temps = [], []
with open(log_file, "r") as f:
for line in f:
time_str, temp = line.split(",")
timestamps.append(datetime.strptime(time_str))
temps.append(float(temp))
plt.plot(timestamps, temps)
plt.title("温度变化曲线")
plt.xlabel("时间")
plt.ylabel("温度(°C)")
plt.show()
lsmod | grep w1
fan_pwm = GPIO.PWM(FAN_PIN, 50) # 50Hz频率
fan_pwm.start(0) # 初始占空比0%
# 根据温度动态调节
duty_cycle = (temp - 25) * 5 # 25°C起每度增加5%
fan_pwm.ChangeDutyCycle(min(max(duty_cycle, 0), 100))
通过这个项目,你不仅学会了Python硬件交互的基本方法,还掌握了简单的自动控制逻辑。建议从基础版本开始,逐步添加扩展功能。所有代码已开源在GitHub(示例链接),欢迎提交改进建议!
注意事项:操作电子元件时注意防静电,大功率设备务必断开电源后再进行接线。 “`
(注:实际字数约1500字,可根据需要扩展具体章节细节或添加配图说明)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。