03-51_GY39光照自动窗帘
基于51单片机的GY-39光照检测自动窗帘系统
光照阈值检测 · 步进电机驱动 · 自动/手动切换
一、项目简介
本项目基于STC89C52单片机设计了一套智能窗帘控制系统。系统通过GY-39传感器实时检测环境光照强度,当光照超过设定阈值时自动关闭窗帘(防止阳光直射),光照低于阈值时自动打开窗帘(保证采光)。用户也可通过手动按键切换自动/手动模式,在手动模式下用按键控制窗帘开关。
系统采用步进电机驱动窗帘开合,通过ULN2003驱动板控制电机正反转。LCD1602显示当前光照值、窗帘状态和运行模式。该系统适用于智能家居、温室等需要自动调光的场景。
项目属性 | 说明 |
主控平台 | STC89C52 |
开发语言 | C语言 |
开发环境 | Keil C51 / Keil MDK |
仿真工具 | Proteus(部分项目) |
图1-1 系统整体效果图
二、系统总体架构
本系统以单片机为核心,外围连接传感器、显示模块、按键模块和执行机构。系统总体架构如下:单片机通过相应接口与各外设通信,采集传感器数据后进行处理,结果输出至显示模块,同时根据逻辑控制执行机构动作。
图2-1 系统总体架构框图
模块 | 功能描述 |
主控模块 | 系统核心,负责数据采集、逻辑处理和输出控制 |
传感器模块 | 采集环境参数(温度/光照/按键输入等) |
显示模块 | LCD1602/OLED实时显示数据和状态 |
按键模块 | 用户输入,参数调整和模式切换 |
执行机构 | 蜂鸣器/LED/电机等,执行报警和驱动动作 |
三、硬件设计
3.1 核心器件选型
器件 | 型号 | 说明 |
主控芯片 | STC89C52 | 8位51内核 |
光照传感器 | GY-39 | 光照强度检测,I2C接口 |
步进电机 | 28BYJ-48 | 5V减速步进电机,驱动窗帘开合 |
电机驱动 | ULN2003 | 达林顿管阵列,驱动步进电机 |
液晶显示屏 | LCD1602 | 显示光照值、窗帘状态、模式 |
独立按键 | ×3 | 模式切换/手动开/手动关 |
图3-1 核心器件实物图
3.2 引脚分配
单片机各引脚分配如下表所示,在设计时需注意引脚复用和电平匹配问题:
引脚 | 连接 | 功能描述 |
P1.0/P1.1 | SCL/SDA | GY-39 I2C通信 |
P1.2~P1.5 | IN1~IN4 | ULN2003步进电机驱动 |
P1.6 | KEY_MODE | 自动/手动模式切换 |
P1.7 | KEY_OPEN | 手动打开窗帘 |
P3.2 | KEY_CLOSE | 手动关闭窗帘 |
P2.5~P2.7 | LCD控制 | LCD1602控制线 |
P0 | LCD数据 | LCD1602数据线 |
图3-2 引脚分配电路原理图
四、软件设计
4.1 软件流程
系统上电后默认进入自动模式。主循环中读取GY-39光照值并与阈值比较:光照>阈值且窗帘开着→驱动步进电机关闭窗帘;光照<阈值且窗帘关着→驱动电机打开窗帘。按KEY_MODE可切换到手动模式,此时用KEY_OPEN/KEY_CLOSE按键控制窗帘开关。LCD实时显示光照值、窗帘状态(开/关)和当前模式(自动/手动)。
图4-1 主程序流程图
4.2 模块划分
源文件 | 模块名称 | 功能描述 |
gy39.c | GY-39驱动 | 光照强度读取 |
stepper.c | 步进电机驱动 | 正转/反转/停止控制 |
lcd1602.c | LCD1602驱动 | 显示 |
main.c | 主程序 | 光照判断、模式切换、电机控制 |
4.3 关键代码
以下代码均从项目工程源文件中直接提取,完整展示了各模块的核心实现:
📄 lcd.c




📄 key.c




📄 gy39.c




📄 urat.c




五、项目文件结构
项目工程的目录结构如下,展示了源代码文件的组织方式:

六、功能演示
系统功能演示步骤如下:
1. 自动模式下,用手电筒照射GY-39,光照超阈值→窗帘自动关闭
2. 遮住传感器,光照降低→窗帘自动打开
3. 按模式键切换到手动模式
4. 手动模式下按开/关键控制窗帘开合
图6-1 功能演示照片/截图
图6-2 运行状态特写
七、总结
本项目将环境光照检测与步进电机控制结合,实现了智能窗帘的自动开关功能。系统支持自动/手动两种模式,兼顾了智能化和用户操控灵活性。步进电机控制精确,窗帘开合位置可重复。后续可增加定时功能、WiFi远程控制等扩展。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
— END —

浙公网安备 33010602011771号