智能鞋柜------脚气终结者系统
下面是一个基于Python的智能鞋柜控制系统,集成了温湿度传感器和紫外线杀菌功能,能够自动检测鞋子湿度并在超标时启动烘干和杀菌功能。
import time
import random
import threading
from datetime import datetime, timedelta
import RPi.GPIO as GPIO # 树莓派GPIO控制库
import Adafruit_DHT # 温湿度传感器库
硬件配置
class HardwareConfig:
传感器引脚配置
DHT_SENSOR = Adafruit_DHT.DHT22
DHT_PIN = 4 # GPIO4
紫外线灯控制引脚
UV_LED_PIN = 17 # GPIO17
烘干风扇控制引脚
FAN_PIN = 18 # GPIO18
红外人体感应引脚(检测是否有人靠近)
PIR_PIN = 27 # GPIO27
鞋柜门磁开关引脚
DOOR_SWITCH_PIN = 22 # GPIO22
状态指示灯
STATUS_LED_GREEN = 23 # GPIO23
STATUS_LED_RED = 24 # GPIO24
湿度阈值设置
HUMIDITY_THRESHOLD = 65 # 湿度超过65%启动烘干
IDEAL_HUMIDITY = 40 # 理想湿度水平
工作时间设置
UV_STERILIZATION_TIME = 30 * 60 # 紫外线杀菌30分钟
MAX_DRYING_TIME = 2 * 60 * 60 # 最大烘干时间2小时
NIGHT_MODE_START = 18 # 晚上6点开始工作
NIGHT_MODE_END = 8 # 早上8点结束工作
智能鞋柜主控系统
class SmartShoeCabinet:
def init(self):
self.humidity = 0
self.temperature = 0
self.door_open = False
self.uv_active = False
self.fan_active = False
self.last_detection_time = datetime.now()
self.drying_start_time = None
self.sterilization_start_time = None
self.running = True
初始化硬件
self.setup_hardware()
启动传感器监控线程
self.sensor_thread = threading.Thread(target=self.monitor_sensors)
self.sensor_thread.daemon = True
self.sensor_thread.start()
启动主控制循环
self.control_loop()
def setup_hardware(self):
"""初始化硬件设置"""
GPIO.setmode(GPIO.BCM)
设置输出引脚
GPIO.setup(HardwareConfig.UV_LED_PIN, GPIO.OUT)
GPIO.setup(HardwareConfig.FAN_PIN, GPIO.OUT)
GPIO.setup(HardwareConfig.STATUS_LED_GREEN, GPIO.OUT)
GPIO.setup(HardwareConfig.STATUS_LED_RED, GPIO.OUT)
设置输入引脚
GPIO.setup(HardwareConfig.PIR_PIN, GPIO.IN)
GPIO.setup(HardwareConfig.DOOR_SWITCH_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
初始状态:关闭所有设备
GPIO.output(HardwareConfig.UV_LED_PIN, GPIO.LOW)
GPIO.output(HardwareConfig.FAN_PIN, GPIO.LOW)
GPIO.output(HardwareConfig.STATUS_LED_GREEN, GPIO.LOW)
GPIO.output(HardwareConfig.STATUS_LED_RED, GPIO.HIGH) # 启动时红灯亮
print("硬件初始化完成")
def read_sensor_data(self):
"""读取温湿度传感器数据"""
humidity, temperature = Adafruit_DHT.read_retry(
HardwareConfig.DHT_SENSOR,
HardwareConfig.DHT_PIN
)
模拟传感器数据(实际使用时注释掉)
if humidity is None or temperature is None:
humidity = random.uniform(30, 80)
temperature = random.uniform(15, 30)
print("使用模拟传感器数据")
return humidity, temperature
def monitor_sensors(self):
"""传感器监控线程"""
while self.running:
try:
读取温湿度
self.humidity, self.temperature = self.read_sensor_data()
检测鞋柜门状态
self.door_open = GPIO.input(HardwareConfig.DOOR_SWITCH_PIN) == GPIO.HIGH
更新状态指示灯
self.update_status_leds()
每5秒读取一次传感器
time.sleep(5)
except Exception as e:
print(f"传感器监控错误: {e}")
time.sleep(10)
def update_status_leds(self):
"""更新状态指示灯"""
绿灯表示系统正常,红灯表示警告或故障
if self.humidity > HardwareConfig.HUMIDITY_THRESHOLD:
湿度过高,红灯闪烁
GPIO.output(HardwareConfig.STATUS_LED_GREEN, GPIO.LOW)
GPIO.output(HardwareConfig.STATUS_LED_RED, GPIO.HIGH if int(time.time()) % 2 == 0 else GPIO.LOW)
else:
湿度正常,绿灯常亮
GPIO.output(HardwareConfig.STATUS_LED_GREEN, GPIO.HIGH)
GPIO.output(HardwareConfig.STATUS_LED_RED, GPIO.LOW)
def start_drying(self):
"""启动烘干功能"""
if not self.fan_active:
GPIO.output(HardwareConfig.FAN_PIN, GPIO.HIGH)
self.fan_active = True
self.drying_start_time = datetime.now()
print("启动烘干功能")
def stop_drying(self):
"""停止烘干功能"""
if self.fan_active:
GPIO.output(HardwareConfig.FAN_PIN, GPIO.LOW)
self.fan_active = False
self.drying_start_time = None
print("停止烘干功能")
def start_uv_sterilization(self):
"""启动紫外线杀菌"""
if not self.uv_active:
GPIO.output(HardwareConfig.UV_LED_PIN, GPIO.HIGH)
self.uv_active = True
self.sterilization_start_time = datetime.now()
print("启动紫外线杀菌")
def stop_uv_sterilization(self):
"""停止紫外线杀菌"""
if self.uv_active:
GPIO.output(HardwareConfig.UV_LED_PIN, GPIO.LOW)
self.uv_active = False
self.sterilization_start_time = None
print("停止紫外线杀菌")
def check_night_mode(self):
"""检查是否在夜间工作模式"""
now = datetime.now()
current_hour = now.hour
晚上6点到早上8点为夜间模式
if (current_hour >= HardwareConfig.NIGHT_MODE_START) or (current_hour < HardwareConfig.NIGHT_MODE_END):
return True
return False
def control_loop(self):
"""主控制循环"""
print("智能鞋柜系统启动")
try:
while self.running:
检查是否在夜间模式
night_mode = self.check_night_mode()
如果鞋柜门关闭且处于夜间模式
if not self.door_open and night_mode:
检查湿度是否超标
if self.humidity > HardwareConfig.HUMIDITY_THRESHOLD:
print(f"检测到高湿度: {self.humidity:.1f}% > {HardwareConfig.HUMIDITY_THRESHOLD}%")
启动烘干
self.start_drying()
启动紫外线杀菌
self.start_uv_sterilization()
else:
湿度正常,停止烘干
self.stop_drying()
如果杀菌时间不足,继续杀菌
if self.uv_active:
elapsed = (datetime.now() - self.sterilization_start_time).total_seconds()
if elapsed >= HardwareConfig.UV_STERILIZATION_TIME:
self.stop_uv_sterilization()
白天模式或非夜间模式
else:
停止所有功能
self.stop_drying()
self.stop_uv_sterilization()
安全检查:防止过度烘干
if self.fan_active:
elapsed = (datetime.now() - self.drying_start_time).total_seconds()
if elapsed >= HardwareConfig.MAX_DRYING_TIME:
print("达到最大烘干时间,停止烘干")
self.stop_drying()
检查紫外线杀菌时间
if self.uv_active:
elapsed = (datetime.now() - self.sterilization_start_time).total_seconds()
if elapsed >= HardwareConfig.UV_STERILIZATION_TIME:
print("紫外线杀菌完成")
self.stop_uv_sterilization()
每10秒检查一次
time.sleep(10)
except KeyboardInterrupt:
print("系统关闭中...")
finally:
self.cleanup()
def cleanup(self):
"""清理资源"""
self.running = False
self.stop_drying()
self.stop_uv_sterilization()
关闭所有LED
GPIO.output(HardwareConfig.STATUS_LED_GREEN, GPIO.LOW)
GPIO.output(HardwareConfig.STATUS_LED_RED, GPIO.LOW)
GPIO.cleanup()
print("系统已关闭")
模拟演示程序
def simulate_shoe_cabinet():
"""模拟智能鞋柜运行"""
print("=== 智能鞋柜模拟演示 ===")
cabinet = SmartShoeCabinet()
模拟一天的运行
print("\n模拟白天模式 (8:00 AM)")
cabinet.door_open = False
time.sleep(2)
print("\n模拟晚上回家放鞋 (6:00 PM)")
cabinet.door_open = True
time.sleep(2)
cabinet.door_open = False
time.sleep(2)
print("\n模拟高湿度情况")
cabinet.humidity = 75
time.sleep(5)
print("\n模拟湿度恢复正常")
cabinet.humidity = 45
time.sleep(5)
print("\n模拟第二天早上取鞋 (8:00 AM)")
cabinet.door_open = True
time.sleep(2)
print("\n模拟演示结束")
cabinet.running = False
cabinet.cleanup()
主程序入口
if name == "main":
实际硬件运行
cabinet = SmartShoeCabinet()
模拟演示
simulate_shoe_cabinet()
系统功能说明
- 核心功能
-
自动湿度检测:使用DHT22传感器实时监测鞋柜内湿度
-
智能烘干系统:当湿度超过65%时自动启动烘干风扇
-
紫外线杀菌:烘干同时启动紫外线灯进行杀菌消毒
-
夜间模式:晚上6点至次日早上8点自动工作
-
安全保护:设置最大烘干时间(2小时)防止过度烘干
- 硬件组成
组件 型号/规格 功能
微控制器 树莓派4B 系统主控
温湿度传感器 DHT22 检测鞋柜内环境
紫外线灯 UVC LED 杀菌消毒
烘干风扇 5V直流风扇 加速水分蒸发
门磁开关 磁性传感器 检测鞋柜门状态
人体感应器 HC-SR501 检测人员接近
状态指示灯 RGB LED 系统状态指示
- 工作流程
graph TD
A[晚上回家放鞋] --> B[关门检测]
B --> C{湿度是否超标?}
C -->|是| D[启动烘干+紫外线杀菌]
C -->|否| E[保持待机]
D --> F{湿度是否达标?}
F -->|否| D
F -->|是| G[停止烘干]
G --> H[继续紫外线杀菌30分钟]
H --> I[杀菌完成]
I --> J[第二天早上取鞋]
J --> K[开门检测]
K --> L[停止所有功能]
- 软件架构
classDiagram
class SmartShoeCabinet {
-humidity: float
-temperature: float
-door_open: bool
-uv_active: bool
-fan_active: bool
-last_detection_time: datetime
-drying_start_time: datetime
-sterilization_start_time: datetime
-running: bool
+setup_hardware()
+read_sensor_data() tuple
+monitor_sensors()
+update_status_leds()
+start_drying()
+stop_drying()
+start_uv_sterilization()
+stop_uv_sterilization()
+check_night_mode() bool
+control_loop()
+cleanup()
}
class HardwareConfig {
+DHT_SENSOR: int
+DHT_PIN: int
+UV_LED_PIN: int
+FAN_PIN: int
+PIR_PIN: int
+DOOR_SWITCH_PIN: int
+STATUS_LED_GREEN: int
+STATUS_LED_RED: int
+HUMIDITY_THRESHOLD: int
+IDEAL_HUMIDITY: int
+UV_STERILIZATION_TIME: int
+MAX_DRYING_TIME: int
+NIGHT_MODE_START: int
+NIGHT_MODE_END: int
}
SmartShoeCabinet --> HardwareConfig : 使用配置
- 应用场景
家庭应用
-
解决家庭成员脚气交叉感染问题
-
梅雨季节防止鞋子发霉
-
运动爱好者专用鞋柜
-
儿童鞋柜卫生管理
公共场所
-
健身房鞋柜
-
游泳馆更衣柜
-
酒店客房鞋柜
-
学校宿舍鞋柜
-
技术优势
-
智能湿度控制:
-
实时监测鞋柜内湿度变化
-
自动启停烘干系统
-
防止过度烘干损伤鞋子
- 双重防护机制:
-
物理烘干去除水分
-
紫外线杀灭真菌细菌
- 节能环保设计:
-
仅在需要时启动设备
-
夜间工作避开用电高峰
-
低功耗传感器和控制器
- 安全可靠:
-
紫外线工作时门锁检测
-
人体感应自动关闭紫外线
-
最大运行时间保护
-
扩展功能
-
手机APP控制:
伪代码示例
from flask import Flask, request
app = Flask(name)
@app.route('/api/cabinet/status', methods=['GET'])
def get_status():
return jsonify({
'humidity': cabinet.humidity,
'temperature': cabinet.temperature,
'uv_active': cabinet.uv_active,
'fan_active': cabinet.fan_active
})
@app.route('/api/cabinet/control', methods=['POST'])
def control_cabinet():
action = request.json.get('action')
if action == 'start_drying':
cabinet.start_drying()
elif action == 'stop_drying':
cabinet.stop_drying()
...其他控制命令
return jsonify({'status': 'success'})
- 数据分析与预测:
-
记录历史湿度数据
-
预测鞋子干燥所需时间
-
优化烘干策略
- 多鞋柜管理系统:
-
管理多个鞋柜单元
-
分区控制不同鞋子
-
家庭成员专属设置
安装与使用指南
硬件安装步骤
-
将DHT22传感器安装在鞋柜内部上方
-
在鞋柜顶部安装紫外线灯和烘干风扇
-
在门框上安装门磁开关
-
在外部安装状态指示灯
-
连接所有组件到树莓派GPIO接口
软件安装步骤
安装必要库
sudo apt-get update
sudo apt-get install python3-pip
pip3 install Adafruit_DHT RPi.GPIO
下载程序
git clone https://github.com/smart-shoe-cabinet.git
cd smart-shoe-cabinet
运行程序
python3 main.py
日常使用
-
晚上回家后将鞋子放入鞋柜并关好门
-
系统自动检测湿度并启动相应功能
-
第二天早上取出干燥无异味的鞋子
-
可通过手机APP查看状态或手动控制
常见问题解决
问题现象 可能原因 解决方法
湿度检测不准确 传感器位置不当 调整传感器位置到鞋柜中心
烘干效果差 风扇功率不足 更换更大功率风扇
紫外线灯不亮 线路连接问题 检查GPIO连接和电源
系统频繁重启 电源不稳定 使用稳压电源适配器
APP无法连接 网络配置问题 检查树莓派网络连接
这个智能鞋柜系统通过自动化控制解决了鞋子潮湿导致的脚气问题,结合了物联网技术和智能控制算法,为家庭和公共场所提供了卫生、便捷的鞋子存储解决方案。
我是编程小白,请大家多多指教,谢谢!