基于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单片机与蓝牙无线通信模块实现了风扇的远程智能控制,具有结构简单、功能完善、操作方便等优点。

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

相关推荐
周洲083044 分钟前
STM32 串口底层深度解析|USART 中断标志、硬件 FIFO,乱码根源底层定位
stm32·单片机·嵌入式硬件
ii_best2 小时前
按键精灵手机端开发安卓版实战:手写一个可最小化、可拖动的「运行日志悬浮窗」(附完整 源码 + 踩坑记录)
android·ios·智能手机·自动化·ai编程·按键精灵
终端安全笔记3 小时前
安卓做 MDM 管控,先分清三种注册入口
android·安全·智能手机
乌萨达4 小时前
手机模拟器安卓怎么用?电脑安装应用、玩手游与账号同步指南
android·智能手机·电脑·雷电模拟器
女神下凡5 小时前
芯参谋(29):UFS UMCP 软件设计规范
arm开发·单片机·嵌入式硬件
ycvv6 小时前
手机启动失败后的数据提取评估:系统状态、加密条件与文件验收
服务器·数据库·智能手机
RISCV_Explorer7 小时前
RISC-V电源管理与低功耗实战——WFI指令、电源域划分与唤醒路径设计
单片机·嵌入式硬件·risc-v
zd8451015007 小时前
支持双向输入信号的开关量电路
单片机·嵌入式硬件
齐落山大勇7 小时前
【裸机程序】IMX 6ULL的中断机制的理解
单片机·嵌入式硬件
cu1437 小时前
细谈GM8229的具体功能与其应用
c语言·c++·人工智能·单片机