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 —

posted @ 2026-07-21 21:11  Yan_2  阅读(2)  评论(0)    收藏  举报