基于51单片机手机无线蓝牙APP控制风扇调速设计

基于51单片机手机无线蓝牙APP控制风扇调速设计


1. 系统功能介绍

本系统是一种基于 STC89C52单片机 控制的智能风扇调速系统,通过 手机APP无线蓝牙控制 实现对风扇转速和工作模式的灵活控制。系统以单片机为核心控制器,结合蓝牙模块和继电器驱动电路,实现了多档调速、定时控制等功能。

1.1 功能概述

系统主要实现以下功能:

  1. 多档风速调节

    通过手机APP发送指令,风扇可切换为低速、中速、高速三种运行状态。

  2. 远程启停控制

    用户可以远程发送停止指令,实现风扇的启停控制。

  3. 定时控制功能

    APP可发送指令,让风扇以指定档位运行1分钟后自动停止,方便节能与安全使用。

  4. 蓝牙无线通信

    系统通过蓝牙模块实现与手机APP的数据通信,采用串口通信协议,可靠性高。

  5. 状态指示与反馈

    单片机可根据接收到的命令控制风扇运行状态,并可配合LED指示运行档位状态。

1.2 蓝牙通信协议

功能描述 蓝牙发送命令
停止运行 TZ00
高速运行 GS00
中速运行 ZS00
低速运行 DS00
高速运行1分钟后停止 GS01
中速运行1分钟后停止 ZS01
低速运行1分钟后停止 DS01

APP发送的命令以字符串形式通过蓝牙模块传输给单片机,单片机解析命令后执行相应动作。


2. 系统电路设计

整个系统主要由以下几个部分构成:

  • 主控单元:STC89C52单片机
  • 蓝牙通信模块
  • 风扇驱动电路
  • 电源模块
  • 指示电路

2.1 单片机主控电路

STC89C52单片机作为系统的核心控制器,负责接收蓝牙模块传来的命令信号,并根据指令控制风扇的运行速度与时间。

主要功能:

  • 通过串口UART接口与蓝牙模块通信;
  • 控制PWM信号输出或继电器动作,实现风速切换;
  • 计时功能,用于实现定时自动停止;
  • 逻辑判断和状态控制。

单片机使用外部12MHz晶振作为时钟源,通过稳定的时序逻辑控制整个系统的运行。P1口用于控制风扇驱动继电器,P3.0(RXD)和P3.1(TXD)用于与蓝牙模块的串口通信。

2.2 蓝牙模块电路

系统采用 HC-05 蓝牙模块 与手机APP通信。该模块支持UART串口通信方式,通信波特率默认为9600bps,能够稳定地与单片机进行数据交互。

工作原理:

当用户在手机APP中选择不同的风速模式时,APP会通过蓝牙发送特定的字符串指令(如"GS00"表示高速运行),HC-05模块接收到该指令后,通过串口将数据传输给单片机。

模块特点:

  • 支持主从模式;
  • 通信距离可达10米;
  • 波特率可配置;
  • 与STC89C52单片机TTL电平兼容。

2.3 风扇驱动电路

风扇的调速控制采用 三路继电器晶体管控制电路 实现。每个继电器对应一种风速档位,通过控制不同的继电器吸合,实现对风扇供电电压或PWM占空比的调节。

控制原理:

  • 低速:继电器1闭合;
  • 中速:继电器2闭合;
  • 高速:继电器3闭合;
  • 停止:全部继电器断开。

继电器由单片机输出端口控制,端口输出高电平时,驱动三极管导通,继电器吸合,从而控制风扇供电回路。

2.4 电源电路

系统供电部分采用 5V稳压电源模块,为单片机和蓝牙模块供电,同时为继电器驱动电路提供稳定电压。可采用AMS1117-5.0稳压芯片或7805线性稳压器,输入电压为DC 9~12V。

为防止干扰与电压波动,电源电路中应增加滤波电容(如100μF电解电容和0.1μF瓷片电容并联)以保证系统稳定。

2.5 指示电路

为便于用户观察系统工作状态,可设计3个LED指示灯,分别对应低速、中速、高速状态。

当风扇处于某档运行时,对应LED点亮,停止时全部熄灭。


3. 系统程序设计

本系统程序采用 C语言编写 ,通过 Keil uVision5 开发环境进行编译,使用 STC-ISP 下载工具将程序烧录到单片机中。

程序主要包括以下几个部分:

  • 串口通信程序设计
  • 命令解析程序设计
  • 风速控制程序设计
  • 定时控制程序设计
  • 主程序设计

3.1 串口通信程序设计

单片机与蓝牙模块采用串口UART通信。初始化串口时设置波特率为9600bps,工作模式为方式1(8位UART异步通信)。

c 复制代码
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

void UART_Init()
{
    SCON = 0x50;      // 设置为方式1,8位数据,可变波特率
    TMOD |= 0x20;     // 定时器1工作在方式2
    TH1 = 0xFD;       // 波特率9600bps(11.0592MHz)
    TL1 = 0xFD;
    TR1 = 1;          // 启动定时器1
    EA = 1;           // 开总中断
    ES = 1;           // 开串口中断
}

串口接收中断服务程序用于接收蓝牙发送的命令字符,并进行数据缓存。

c 复制代码
uchar recv_buf[10];
uchar index = 0;

void UART_ISR() interrupt 4
{
    if (RI)
    {
        RI = 0;
        recv_buf[index++] = SBUF;
        if (index >= 4)
        {
            recv_buf[index] = '\0';
            index = 0;
        }
    }
}

3.2 命令解析程序设计

接收到完整的命令字符串后,单片机根据命令内容进行判断并执行相应动作。

c 复制代码
void Command_Process()
{
    if (strcmp(recv_buf, "TZ00") == 0)
        Stop_Fan();
    else if (strcmp(recv_buf, "GS00") == 0)
        Fan_High();
    else if (strcmp(recv_buf, "ZS00") == 0)
        Fan_Mid();
    else if (strcmp(recv_buf, "DS00") == 0)
        Fan_Low();
    else if (strcmp(recv_buf, "GS01") == 0)
        Run_With_Timer(3);
    else if (strcmp(recv_buf, "ZS01") == 0)
        Run_With_Timer(2);
    else if (strcmp(recv_buf, "DS01") == 0)
        Run_With_Timer(1);
}

3.3 风扇控制程序设计

根据不同档位的命令,单片机输出对应的控制信号至继电器驱动电路。

c 复制代码
sbit FAN_LOW = P1^0;
sbit FAN_MID = P1^1;
sbit FAN_HIGH = P1^2;

void Stop_Fan()
{
    FAN_LOW = 0;
    FAN_MID = 0;
    FAN_HIGH = 0;
}

void Fan_Low()
{
    Stop_Fan();
    FAN_LOW = 1;
}

void Fan_Mid()
{
    Stop_Fan();
    FAN_MID = 1;
}

void Fan_High()
{
    Stop_Fan();
    FAN_HIGH = 1;
}

3.4 定时控制程序设计

定时功能主要用于执行"运行1分钟后停止"命令。通过定时器中断计时,累计60秒后自动停止风扇。

c 复制代码
uint timer_count = 0;

void Timer0_Init()
{
    TMOD |= 0x01;     // 定时器0工作方式1
    TH0 = (65536 - 46080) / 256;  // 50ms定时
    TL0 = (65536 - 46080) % 256;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}

void Timer0_ISR() interrupt 1
{
    TH0 = (65536 - 46080) / 256;
    TL0 = (65536 - 46080) % 256;
    timer_count++;
    if (timer_count >= 1200) // 1200 * 50ms = 60s
    {
        Stop_Fan();
        timer_count = 0;
        TR0 = 0;
    }
}

void Run_With_Timer(uchar mode)
{
    switch(mode)
    {
        case 1: Fan_Low(); break;
        case 2: Fan_Mid(); break;
        case 3: Fan_High(); break;
    }
    timer_count = 0;
    TR0 = 1;
}

3.5 主程序设计

主程序完成系统初始化与主循环任务,包括串口通信初始化、定时器配置和命令解析。

c 复制代码
void main()
{
    UART_Init();
    Timer0_Init();
    while (1)
    {
        Command_Process();  // 检测接收缓冲区命令
    }
}

4. 系统运行与调试说明

  1. 硬件连接

    将HC-05蓝牙模块的TXD、RXD分别连接到单片机的P3.0和P3.1;继电器控制端连接到P1.0~P1.2。

  2. APP控制

    打开手机蓝牙APP,搜索配对HC-05设备,连接成功后可通过APP界面选择风速档位或定时模式。

  3. 功能验证

    • 发送"GS00":风扇高速运行;
    • 发送"ZS01":风扇中速运行1分钟后停止;
    • 发送"TZ00":立即停止运行。
  4. 调试要点

    • 确保波特率一致;
    • 检查继电器吸合情况;
    • 若蓝牙通信异常,需检查串口接线与电平兼容性。

5. 总结

本系统通过STC89C52单片机与蓝牙无线通信模块实现了风扇的远程智能控制,具有结构简单、功能完善、操作方便等优点。

系统可广泛应用于家庭、实验室、办公室等场合的智能家电控制中。通过扩展设计,还可以加入温度检测模块,实现自动调速或环境联动控制,进一步提升系统智能化水平。

相关推荐
Dobby_053 小时前
【期末复习】51单片机
51单片机
IT研究室3 小时前
大数据毕业设计选题推荐-基于大数据的全球用水量数据可视化分析系统-大数据-Spark-Hadoop-Bigdata
大数据·信息可视化·课程设计
沐欣工作室_lvyiyi5 小时前
采用AIOT技术的防疫物资监控系统的设计与开发(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·防疫物资
千里马学框架5 小时前
音频焦点学习之AudioFocusRequest.Builder类剖析
android·面试·智能手机·车载系统·音视频·安卓framework开发·audio
XCOSnTh7 小时前
单片机入门的相关工具XCOSnTh
c语言·单片机·嵌入式硬件·xcosnth·单片机入门
光子物联单片机8 小时前
STM32G474单片机开发入门(四)中断详解及GPIO外部中断输入
stm32·单片机·嵌入式硬件·mcu
逼子格9 小时前
【Proteus仿真】虚拟终端出现乱码问题解决
单片机·嵌入式硬件·proteus·嵌入式·硬件工程·电路仿真·虚拟终端
MAR-Sky11 小时前
单片机学习中的一些简单总结
单片机·嵌入式硬件·学习
点灯小铭11 小时前
基于stm32的物联网OneNet火灾报警系统
stm32·单片机·嵌入式硬件·物联网·毕业设计·课程设计