自己动手打造属于自己的智能家居(二)

自己动手打造属于自己的智能家居(二)

在上一篇文章中,我们了解了智能家居的基本概念,并搭建了第一个简单的智能开关。今天,我们将继续深入,教你如何用树莓派和传感器,打造一个能自动感知环境并作出响应的智能家居系统。我们将重点实现:智能温度监控与自动风扇控制。通过这个项目,你会学到如何将物理世界的数据(温度、湿度)转化为数字信号,并通过编程逻辑控制外部设备。—## 项目目标:温控风扇想象一下:夏天家里热得像蒸笼,你希望风扇能自动开启;冬天冷了,风扇自动关闭。这就是我们要实现的功能。硬件清单:- 树莓派(任何型号,推荐3B+或4B)- DHT11或DHT22温湿度传感器- 5V继电器模块- 小风扇(USB风扇或直流风扇)- 杜邦线若干- 面包板(可选)软件环境:- Raspberry Pi OS (已安装Python 3)- Adafruit_DHT 库(用于读取传感器数据)- RPi.GPIO 库(控制GPIO引脚)—## 第一步:硬件连接首先,我们来搭建电路。请确保树莓派已断电,然后按以下方式连接:-DHT11传感器: - VCC(电源) → 树莓派5V(物理引脚2或4) - GND(地) → 树莓派GND(物理引脚6) - DATA(数据) → 树莓派GPIO 4(物理引脚7)-继电器模块: - VCC → 树莓派5V - GND → 树莓派GND - IN(信号) → 树莓派GPIO 17(物理引脚11) - COM(公共端) → 风扇电源正极 - NO(常开端) → 风扇电源负极(或通过外部电源)>注意:如果风扇功率较大(如超过500mA),请使用外部电源驱动继电器,不要直接从树莓派取电。—## 第二步:读取传感器数据在开始编码前,先安装必要的库。打开树莓派终端,执行:bashsudo pip3 install Adafruit_DHT现在,我们来编写一个读取温湿度的脚本。python# 文件: read_sensor.pyimport Adafruit_DHTimport time# 定义传感器类型和GPIO引脚SENSOR_TYPE = Adafruit_DHT.DHT11 # 如果你用DHT22,就改成DHT22GPIO_PIN = 4def read_temp_humidity(): """ 读取温湿度数据,返回温度(摄氏度)和湿度(百分比) 如果读取失败,返回 (None, None) """ humidity, temperature = Adafruit_DHT.read_retry(SENSOR_TYPE, GPIO_PIN) return temperature, humidity# 主循环:每隔5秒读取一次并输出if __name__ == "__main__": print("开始读取温湿度数据...") while True: temp, hum = read_temp_humidity() if temp is not None and hum is not None: print(f"温度: {temp:.1f}°C, 湿度: {hum:.1f}%") else: print("读取失败,请检查传感器连接") time.sleep(5)运行这个脚本:bashpython3 read_sensor.py你会看到类似输出:开始读取温湿度数据...温度: 25.3°C, 湿度: 60.2%温度: 25.4°C, 湿度: 60.1%>小贴士:如果一直显示读取失败,检查传感器接线或换一个GPIO引脚试试。—## 第三步:控制风扇开关现在,我们要让树莓派通过继电器控制风扇。继电器的工作原理是:给IN引脚一个高电平(3.3V),继电器吸合,风扇通电;给低电平,继电器断开,风扇断电。下面是一个简单的控制脚本:python# 文件: control_fan.pyimport RPi.GPIO as GPIOimport time# 设置GPIO模式为BCM编号GPIO.setmode(GPIO.BCM)FAN_PIN = 17 # 继电器的IN引脚连接到GPIO 17# 设置引脚为输出模式,初始状态为低电平(风扇关闭)GPIO.setup(FAN_PIN, GPIO.OUT)GPIO.output(FAN_PIN, GPIO.LOW)def fan_on(): """开启风扇""" GPIO.output(FAN_PIN, GPIO.HIGH) print("风扇已开启")def fan_off(): """关闭风扇""" GPIO.output(FAN_PIN, GPIO.LOW) print("风扇已关闭")# 测试:先开3秒,再关3秒if __name__ == "__main__": try: print("测试风扇控制...") fan_on() time.sleep(3) fan_off() time.sleep(3) print("测试完成") except KeyboardInterrupt: print("用户中断") finally: GPIO.cleanup() # 清理GPIO,防止残留状态运行后,你会听到继电器“咔嗒”一声,风扇开始转动,3秒后停止。如果风扇没反应,检查继电器是否供电,或者IN引脚接对了吗?—## 第四步:整合——智能温控系统现在,我们把传感器读取和风扇控制结合起来,实现自动化:当温度超过30°C时开启风扇,低于25°C时关闭。python# 文件: smart_thermostat.pyimport Adafruit_DHTimport RPi.GPIO as GPIOimport time# ---------- 硬件配置 ----------SENSOR_TYPE = Adafruit_DHT.DHT11SENSOR_PIN = 4FAN_PIN = 17# ---------- 温度阈值 ----------TEMP_HIGH = 30.0 # 开启风扇的温度上限TEMP_LOW = 25.0 # 关闭风扇的温度下限# ---------- 初始化 ----------GPIO.setmode(GPIO.BCM)GPIO.setup(FAN_PIN, GPIO.OUT)GPIO.output(FAN_PIN, GPIO.LOW) # 初始关闭def read_sensor(): """读取温湿度,返回 (温度, 湿度)""" humidity, temperature = Adafruit_DHT.read_retry(SENSOR_TYPE, SENSOR_PIN) return temperature, humiditydef control_fan(temperature): """ 根据温度控制风扇开关 采用滞回控制(hysteresis)避免频繁开关 """ if temperature is None: return # 读取失败,不做操作 # 获取当前风扇状态 current_state = GPIO.input(FAN_PIN) if temperature >= TEMP_HIGH and current_state == GPIO.LOW: # 温度过高且风扇关闭 -> 开启 GPIO.output(FAN_PIN, GPIO.HIGH) print(f"温度 {temperature:.1f}°C 超过上限,开启风扇") elif temperature <= TEMP_LOW and current_state == GPIO.HIGH: # 温度过低且风扇开启 -> 关闭 GPIO.output(FAN_PIN, GPIO.LOW) print(f"温度 {temperature:.1f}°C 低于下限,关闭风扇") else: # 温度在中间范围,保持当前状态 pass# ---------- 主循环 ----------if __name__ == "__main__": print("智能温控系统启动...") try: while True: temp, hum = read_sensor() if temp is not None and hum is not None: print(f"当前温度: {temp:.1f}°C, 湿度: {hum:.1f}%") control_fan(temp) else: print("传感器读取失败") time.sleep(10) # 每10秒检查一次 except KeyboardInterrupt: print("系统关闭") finally: GPIO.cleanup()运行效果:- 当温度上升到30°C以上时,风扇自动启动,你会听到继电器吸合声。- 当温度下降到25°C以下时,风扇自动关闭。- 中间区域(25-30°C)风扇保持原状态,避免频繁开关。—## 进阶扩展:加入数据记录和远程控制这个系统已经能工作了,但我们可以让它更智能:1.数据记录:将温湿度数据写入CSV文件,方便分析。python import csv with open('data.csv', 'a', newline='') as f: writer = csv.writer(f) writer.writerow([time.time(), temp, hum])2.远程通知:使用IFTTT或Telegram Bot,在温度异常时发送消息到手机。3.Web界面:用Flask搭建一个简单的Web服务器,实时显示数据并手动控制风扇。—## 总结通过这个项目,我们亲手打造了一个基于树莓派的智能温控风扇系统。你学会了:- 读取DHT11温湿度传感器的数据- 用GPIO控制继电器和风扇- 实现滞回控制算法,避免设备频繁开关- 将传感器和执行器整合成一个完整的闭环控制系统智能家居的核心思想就是“感知-决策-执行”。今天你实现了温度感知和风扇执行,明天你可以加入光照传感器控制窗帘,或者烟雾传感器报警——一切皆有可能。动手试试吧,让你的家真正“聪明”起来!下一期预告:我们将用语音控制灯光和风扇,让智能家居更懂你。敬请期待!