基于蓝牙及GSM的智能防盗系统

一、系统概述与核心功能

1. 系统架构

传感器层 → 主控MCU → 通信层 → 用户端
   ↑           ↑          ↑
门窗磁      STM32/51   蓝牙+GSM    手机APP/短信
红外探头    (数据处理)  (双模通信)   (远程告警)

2. 核心功能特点

  • 双重通信保障:蓝牙近距离监控 + GSM远程报警
  • 智能布防/撤防:通过手机APP或短信指令控制
  • 多传感器融合:门窗磁、红外、振动等多重检测
  • 实时状态反馈:本地声光报警 + 远程短信/APP推送
  • 低功耗设计:待机电流<10mA,支持电池供电

二、硬件设计方案

1. 核心元器件选型

模块 推荐型号 关键参数 参考价格
主控MCU STM32F103C8T6 72MHz, 64KB Flash, 20KB RAM ¥12-18
GSM模块 SIM800L 四频850/900/1800/1900MHz ¥25-35
蓝牙模块 HC-05 蓝牙2.0+EDR, 10米距离 ¥15-25
人体红外 HC-SR501 探测距离7米, 可调延时 ¥8-12
门窗磁 干簧管磁控开关 常开型, 吸合距离10mm ¥2-5
声光报警 有源蜂鸣器+LED 5V供电, >85dB ¥3-8
电源管理 TP4056+AMS1117 锂电池充电+3.3V稳压 ¥6-10

2. 电路设计要点

(1) GSM模块接口电路

// SIM800L典型连接
SIM800L_VCC  →  4.0V (锂电池直接供电)
SIM800L_GND  →  电源地
SIM800L_TX   →  MCU_RX (USART2)
SIM800L_RX   →  MCU_TX (USART2)
SIM800L_PWR  →  MCU_IO (控制开关机)
SIM800L_RING →  MCU_EXTI (来电/短信中断)

(2) 蓝牙模块接口

HC-05_VCC  →  3.3V
HC-05_GND  →  电源地  
HC-05_TX   →  MCU_RX (USART1)
HC-05_RX   →  MCU_TX (USART1)
HC-05_KEY  →  MCU_IO (AT指令模式控制)

(3) 传感器接口

  • HC-SR501:OUT引脚接MCU IO,高电平触发
  • 门窗磁:干簧管串联10kΩ电阻接VCC,中间点接MCU IO
  • 紧急按钮:常开按钮接GND,另一端接MCU IO(内部上拉)

三、软件设计与核心代码

1. 系统主程序框架(基于STM32 HAL库)

#include "main.h"
#include "sim800l.h"
#include "bluetooth.h"
#include "sensors.h"

// 系统状态定义
typedef enum {
    SYSTEM_DISARMED = 0,  // 撤防状态
    SYSTEM_ARMED,         // 布防状态
    SYSTEM_ALARM,         // 报警状态
    SYSTEM_SILENT         // 静音布防
} SystemState_t;

// 全局变量
SystemState_t sys_state = SYSTEM_DISARMED;
char admin_phone[12] = "13800138000";  // 管理员号码

int main(void) {
    // 硬件初始化
    HAL_Init();
    SystemClock_Config();
    UART_Init();        // 串口初始化
    GSM_Init();         // GSM模块初始化
    Bluetooth_Init();   // 蓝牙初始化
    Sensors_Init();     // 传感器初始化
    Buzzer_LED_Init();  // 声光报警初始化
    
    // 注册默认管理员号码
    GSM_SetAdminNumber(admin_phone);
    
    while (1) {
        switch(sys_state) {
            case SYSTEM_DISARMED:
                Disarmed_Mode_Task();
                break;
            case SYSTEM_ARMED:
                Armed_Mode_Task();
                break;
            case SYSTEM_ALARM:
                Alarm_Mode_Task();
                break;
            case SYSTEM_SILENT:
                Silent_Mode_Task();
                break;
        }
        
        // 低功耗处理
        if(Check_Idle_State()) {
            Enter_LowPower_Mode();
        }
        
        HAL_Delay(100);  // 100ms任务周期
    }
}

// 布防模式任务
void Armed_Mode_Task(void) {
    static uint32_t last_check = 0;
    
    // 每500ms检查一次传感器
    if(HAL_GetTick() - last_check > 500) {
        last_check = HAL_GetTick();
        
        if(Check_Sensors_Triggered()) {
            sys_state = SYSTEM_ALARM;
            Trigger_Alarm();
        }
    }
    
    // 处理蓝牙控制指令
    Bluetooth_Command_Handler();
}

2. GSM通信核心代码

// SIM800L驱动函数
void GSM_SendSMS(char *phone, char *message) {
    char cmd[128];
    
    // 设置短信文本模式
    UART_SendString("AT+CMGF=1\r\n");
    HAL_Delay(500);
    
    // 设置目标号码
    sprintf(cmd, "AT+CMGS=\"%s\"\r\n", phone);
    UART_SendString(cmd);
    HAL_Delay(500);
    
    // 发送短信内容
    UART_SendString(message);
    HAL_Delay(100);
    
    // 发送结束符Ctrl+Z (0x1A)
    UART_SendByte(0x1A);
}

// 报警触发函数
void Trigger_Alarm(void) {
    char sms_buf[64];
    char time_buf[32];
    
    // 1. 本地声光报警
    Buzzer_On();
    LED_Blink(200);  // 200ms闪烁
    
    // 2. 发送报警短信
    Get_Current_Time(time_buf);
    sprintf(sms_buf, "[防盗报警] %s 检测到入侵!位置:客厅", time_buf);
    GSM_SendSMS(admin_phone, sms_buf);
    
    // 3. 拨打报警电话(可选)
    // GSM_MakeCall(admin_phone);
    
    // 4. 记录报警日志
    Save_Alarm_Log(time_buf, "入侵检测");
}

// 短信指令解析
void GSM_SMS_Parser(char *sms_content) {
    // 指令格式:#CMD=参数#
    if(strstr(sms_content, "#ARM=")) {
        // 布防指令
        if(strstr(sms_content, "ALL")) {
            sys_state = SYSTEM_ARMED;
            GSM_SendSMS(admin_phone, "系统已布防");
        }
    }
    else if(strstr(sms_content, "#DISARM=")) {
        // 撤防指令
        char password[10];
        if(sscanf(sms_content, "#DISARM=%s#", password) == 1) {
            if(strcmp(password, "123456") == 0) {
                sys_state = SYSTEM_DISARMED;
                GSM_SendSMS(admin_phone, "系统已撤防");
            }
        }
    }
    else if(strstr(sms_content, "#STATUS")) {
        // 状态查询
        char status_msg[50];
        sprintf(status_msg, "系统状态:%s,电量:%d%%", 
                Get_State_String(sys_state), Get_Battery_Level());
        GSM_SendSMS(admin_phone, status_msg);
    }
}

3. 蓝牙通信与APP交互

// 蓝牙AT指令配置(HC-05)
void Bluetooth_AT_Config(void) {
    // 进入AT模式
    HC05_KEY_PIN = 1;
    HAL_Delay(100);
    
    // 设置模块参数
    UART_SendString("AT+NAME=AntiTheft-System\r\n");  // 设置设备名称
    HAL_Delay(100);
    UART_SendString("AT+PSWD=1234\r\n");              // 设置配对密码
    HAL_Delay(100);
    UART_SendString("AT+ROLE=1\r\n");                 // 设置为主机模式
    HAL_Delay(100);
    
    HC05_KEY_PIN = 0;  // 退出AT模式
}

// 蓝牙数据接收处理
void Bluetooth_Data_Handler(uint8_t *data, uint16_t len) {
    // 解析JSON格式指令(示例)
    // {"cmd":"arm", "mode":"normal"}
    // {"cmd":"disarm", "pwd":"123456"}
    
    if(strstr((char*)data, "\"cmd\":\"arm\"")) {
        sys_state = SYSTEM_ARMED;
        Bluetooth_Send_Response("{\"status\":\"armed\"}");
    }
    else if(strstr((char*)data, "\"cmd\":\"disarm\"")) {
        // 验证密码
        char pwd[10];
        if(Extract_JSON_Value(data, "pwd", pwd)) {
            if(strcmp(pwd, "123456") == 0) {
                sys_state = SYSTEM_DISARMED;
                Bluetooth_Send_Response("{\"status\":\"disarmed\"}");
            }
        }
    }
    else if(strstr((char*)data, "\"cmd\":\"status\"")) {
        // 返回系统状态
        char status_json[100];
        sprintf(status_json, "{\"state\":\"%s\",\"battery\":%d,\"signal\":%d}",
                Get_State_String(sys_state), 
                Get_Battery_Level(),
                GSM_Get_Signal_Strength());
        Bluetooth_Send_Response(status_json);
    }
}

4. 传感器检测算法

// 防误报算法(多传感器融合)
uint8_t Check_Real_Intrusion(void) {
    static uint32_t pir_time = 0;
    static uint32_t door_time = 0;
    uint8_t intrusion_flag = 0;
    
    // 1. 人体红外检测
    if(HAL_GPIO_ReadPin(PIR_GPIO_Port, PIR_Pin) == GPIO_PIN_SET) {
        pir_time = HAL_GetTick();
        intrusion_flag |= 0x01;
    }
    
    // 2. 门窗磁检测
    if(HAL_GPIO_ReadPin(DOOR_GPIO_Port, DOOR_Pin) == GPIO_PIN_RESET) {
        door_time = HAL_GetTick();
        intrusion_flag |= 0x02;
    }
    
    // 3. 振动传感器检测(可选)
    if(Check_Vibration_Sensor()) {
        intrusion_flag |= 0x04;
    }
    
    // 判断是否为真实入侵(时间窗口内多传感器触发)
    if(intrusion_flag != 0) {
        // 检查时间相关性(10秒内)
        uint32_t time_diff = (pir_time > door_time) ? 
                            (pir_time - door_time) : (door_time - pir_time);
        
        if(time_diff < 10000) {  // 10秒内
            return 1;  // 确认为真实入侵
        }
        
        // 单一传感器持续触发(防拆报警)
        if((intrusion_flag & 0x01) && (HAL_GetTick() - pir_time > 30000)) {
            return 2;  // 传感器异常/被破坏
        }
    }
    
    return 0;  // 无入侵
}

参考代码 基于蓝牙及GSM的智能防盗系统 www.youwenfan.com/contentcnt/134638.html

四、手机APP设计(Android简易版)

1. APP功能模块

<!-- 主要界面布局 -->
<LinearLayout>
    <TextView android:text="智能防盗系统"/>
    
    <!-- 状态显示 -->
    <TextView android:id="@+id/tv_status" android:text="状态:撤防"/>
    <TextView android:id="@+id/tv_battery" android:text="电量:--%"/>
    
    <!-- 控制按钮 -->
    <Button android:id="@+id/btn_arm" android:text="布防"/>
    <Button android:id="@+id/btn_disarm" android:text="撤防"/>
    <Button android:id="@+id/btn_silent" android:text="静音布防"/>
    
    <!-- 历史记录 -->
    <ListView android:id="@+id/lv_alarms"/>
</LinearLayout>

2. 蓝牙连接核心代码(Android)

public class BluetoothService {
    private BluetoothAdapter bluetoothAdapter;
    private BluetoothSocket bluetoothSocket;
    
    // 连接设备
    public boolean connectToDevice(String deviceAddress) {
        try {
            BluetoothDevice device = bluetoothAdapter.getRemoteDevice(deviceAddress);
            bluetoothSocket = device.createRfcommSocketToServiceRecord(
                UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")); // SPP UUID
            
            bluetoothSocket.connect();
            return true;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
    
    // 发送控制指令
    public void sendCommand(String cmd) {
        try {
            OutputStream outputStream = bluetoothSocket.getOutputStream();
            String jsonCmd = "{\"cmd\":\"" + cmd + "\"}";
            outputStream.write(jsonCmd.getBytes());
            outputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    // 接收数据
    public void startReceiving() {
        new Thread(() -> {
            try {
                InputStream inputStream = bluetoothSocket.getInputStream();
                byte[] buffer = new byte[1024];
                int bytes;
                
                while ((bytes = inputStream.read(buffer)) > 0) {
                    String received = new String(buffer, 0, bytes);
                    // 解析并更新UI
                    parseResponse(received);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }).start();
    }
}

五、系统安装与调试

1. 安装位置建议

传感器 安装位置 安装高度 注意事项
主机 客厅隐蔽处 1.8-2.2米 靠近电源,GSM信号良好
人体红外 主要通道 1.8-2.2米 避开空调出风口、窗户
门窗磁 门窗边框 门框顶部 磁铁与干簧管对齐
紧急按钮 卧室床头 0.8-1.2米 隐蔽但易于触及

2. 调试步骤

  1. 硬件检查

    • 测量各模块供电电压(GSM:4.0V, MCU:3.3V)
    • 检查SIM卡安装和天线连接
    • 测试传感器触发状态
  2. GSM模块调试

    // 发送测试AT指令
    AT          // 测试连接
    AT+CSQ      // 检查信号强度(>15为良好)
    AT+CCID     // 读取SIM卡号
    AT+CMGF=1   // 设置短信文本模式
    
  3. 蓝牙配对测试

    • 手机搜索"AntiTheft-System"
    • 输入配对密码"1234"
    • 测试数据收发
  4. 系统联调

    • 触发传感器,检查本地报警
    • 验证短信接收功能
    • 测试APP远程控制

六、成本估算

1. 成本估算(单套)

项目 费用 备注
电子元器件 ¥80-120 含PCB打样
外壳结构 ¥30-50 3D打印或成品盒
SIM卡月租 ¥5-10 物联网卡套餐
开发时间 - 约3-5天

七、扩展功能建议

1. 功能升级

  1. 视频监控集成:添加ESP32-CAM,实现移动侦测录像
  2. 云平台接入:连接阿里云/腾讯云IoT平台
  3. 智能联动:与智能家居系统(灯光、窗帘)联动
  4. 备用通信:增加LoRa/NB-IoT通信冗余

2. 算法优化

  • 机器学习识别:使用TensorFlow Lite区别人/宠物
  • 行为模式分析:学习用户作息,减少误报
  • 电量预测:智能充放电管理

3. 产品化建议

  • 工业设计:设计美观的壁挂式外壳
  • APP优化:开发iOS版本,增加推送通知
  • 批量生产:设计四层PCB,优化生产成本

八、注意事项

1. 法律法规

  • 安装前了解当地安防设备管理规定
  • 短信报警内容需符合通信管理要求
  • 保护用户隐私,数据加密存储

2. 安全设计

  • GSM模块天线远离人体(辐射安全)
  • 强电部分做好绝缘防护
  • 系统故障时应有备用报警机制

3. 维护建议

  • 每月测试一次系统功能
  • 定期检查电池状态(如使用)
  • 保持SIM卡余额充足
  • 固件可远程OTA升级
posted @ 2026-04-12 11:14  cozicx  阅读(10)  评论(0)    收藏  举报