共享单车智能锁(低功耗版)

举报
DS小龙哥 发表于 2025/03/30 19:12:09 2025/03/30
【摘要】 ### 项目开发背景随着城市交通的快速发展,共享单车已经成为许多城市的便捷出行工具。然而,随着共享单车的普及,单车被盗和丢失的问题也逐渐凸显。为了解决这些问题,智能锁成为了共享单车的重要组成部分。智能锁不仅能有效地防止盗窃,还能提高单车的管理效率,帮助运营方实时监控单车位置及状态。基于此,本项目的目标是设计一款低功耗的共享单车智能锁。该智能锁通过NB-IoT技术实现实时位置和状态上报,并配备...

###

项目开发背景

随着城市交通的快速发展,共享单车已经成为许多城市的便捷出行工具。然而,随着共享单车的普及,单车被盗和丢失的问题也逐渐凸显。为了解决这些问题,智能锁成为了共享单车的重要组成部分。智能锁不仅能有效地防止盗窃,还能提高单车的管理效率,帮助运营方实时监控单车位置及状态。基于此,本项目的目标是设计一款低功耗的共享单车智能锁。该智能锁通过NB-IoT技术实现实时位置和状态上报,并配备内置GPS定位和运动检测功能。通过用户APP扫码控制电磁锁的开关,能够实现便捷的智能锁控制与防盗保护功能。

该系统的开发背景不仅源于共享单车市场的快速发展,也体现了对低功耗、高效能、便捷性的需求。本项目将会采用STM32F103RCT6主控芯片,以保证系统的高效运行,同时采用BC95 NB-IoT模块、NEO-6M GPS模块和MPU6050加速度计来满足通信、定位和运动检测的要求,从而构建一套完整的智能锁系统。

设计实现的功能

(1)通过NB-IoT联网上报位置和锁状态:利用BC95 NB-IoT模块,智能锁可以实时上传单车的位置信息以及锁的状态(开锁或锁定)。通过NB-IoT的低功耗特性,系统可以长时间运行,确保智能锁在无需频繁充电的情况下,持续工作。

(2)用户APP扫码控制电磁锁开关:用户通过扫描车锁上的二维码,APP与智能锁通过无线通信方式建立连接。用户在APP上点击开锁按钮后,电磁锁会解锁,反之则锁住,确保用户能够轻松快捷地控制单车的开关。

(3)内置GPS定位及运动检测(防偷盗):通过集成NEO-6M GPS模块,系统能够实时获取单车的位置信息。此外,内置的MPU6050三轴加速度计能够检测单车的运动状态。当系统检测到单车在不被解锁的情况下被移动时,将会触发报警机制,保护单车不被盗窃。

项目硬件模块组成

(1)STM32F103RCT6主控芯片:作为整个系统的核心处理单元,负责处理各种传感器的数据、控制电磁锁的开关,以及通过NB-IoT模块上传数据。STM32F103RCT6具备强大的处理能力和丰富的外设接口,能够满足本项目的需求。

(2)BC95 NB-IoT模块:用于通信的模块,通过NB-IoT网络上传单车位置、锁状态以及其他数据。该模块具有低功耗、远距离传输和稳定性强的特点,适合应用于智能锁系统中。

(3)NEO-6M GPS模块:提供单车的实时位置。NEO-6M模块具有较高的定位精度和稳定性,可以确保准确获取单车的位置信息,用于实时监控和数据上传。

(4)MPU6050三轴加速度计:用于检测单车的运动状态,特别是用于防盗监测。当检测到单车被移动时,会触发警报,避免单车被盗。

(5)12V电磁锁:执行开锁和锁定操作的机械组件。电磁锁通过电控方式锁住或解锁,确保用户能够通过APP控制单车的开锁与锁定。

设计思路

本系统的设计核心思想是低功耗、高效、智能、可控。在硬件方面,STM32F103RCT6主控芯片作为系统的核心,负责处理所有传感器的数据并控制执行器的操作。BC95 NB-IoT模块将通过移动通信网络进行数据上传,而NEO-6M GPS模块将提供准确的位置信息。MPU6050加速度计则负责检测单车是否在被偷盗过程中移动,并及时报警。

系统将采用定时器中断控制BC95模块的低功耗模式,确保在待机状态下尽可能减少功耗。通过合理的电源管理和工作模式切换,延长系统的工作寿命,降低运维成本。整个系统的设计将以稳定性、准确性和低功耗为目标,确保满足共享单车的实际应用需求。

系统功能总结

功能项 描述
位置上传 实时上传单车的GPS位置信息到后台平台
锁状态上传 实时上传单车的锁状态(锁定或解锁)
用户扫码控制 用户通过APP扫描二维码控制电磁锁的开关
防偷盗检测 通过加速度计检测单车是否被移动,并在异常情况下触发报警
NB-IoT低功耗通信 通过BC95模块实现低功耗的NB-IoT通信
电池管理 采用低功耗设计,延长电池的使用寿命

技术方案

本系统的技术方案基于低功耗设计理念,结合NB-IoT通信、GPS定位和运动检测技术。首先,STM32F103RCT6主控芯片负责系统的控制与数据处理。为保证系统的低功耗,在待机状态下,BC95 NB-IoT模块处于低功耗模式,通过定时唤醒上传数据。GPS模块每隔一段时间获取一次位置信息并上传,而加速度计则实时监测单车的状态。

通信方面,BC95 NB-IoT模块通过低功耗的NB-IoT网络进行数据传输,能够覆盖较大的区域且具有较强的稳定性。用户通过APP控制时,系统会通过无线通信与手机建立连接,实现电磁锁的控制。

使用的模块的技术详情介绍

(1)STM32F103RCT6主控芯片 STM32F103RCT6是STMicroelectronics公司推出的基于ARM Cortex-M3核心的微控制器,具有丰富的外设接口,包括UART、I2C、SPI等,可以方便地连接外部设备。它的工作频率为72MHz,具有足够的计算能力来处理本项目中的所有数据和操作。

(2)BC95 NB-IoT模块 BC95是由BaiCell公司推出的一款低功耗、广覆盖、低带宽的NB-IoT通信模块。其支持的网络标准为NB-IoT,具有极低的功耗,适用于长时间待机的设备。它支持简单的AT命令控制,易于与STM32进行集成,确保实时数据上传。

(3)NEO-6M GPS模块 NEO-6M是u-blox公司推出的一款高性能GPS模块,具有较高的定位精度和较快的定位速度。该模块能够提供高达2.5米的定位精度,适用于共享单车等定位应用。其通过串口与STM32连接,实时提供单车的位置信息。

(4)MPU6050三轴加速度计 MPU6050是InvenSense公司推出的六轴传感器,集成了三轴加速度计和三轴陀螺仪。该传感器能够实时监测单车的运动状态,通过与STM32连接,可以实时检测到单车是否在移动,并在盗窃行为发生时触发报警。

(5)12V电磁锁 电磁锁是一种通过电控方式锁住或解锁的机械设备。本系统选择12V电磁锁,电磁锁具有较高的可靠性和安全性,并且能够通过STM32控制电流开关,实现锁定和解锁。

预期成果

通过本项目的实现,预期能够开发出一款低功耗、高效且智能的共享单车智能锁。该系统能够实现以下目标:

  1. 实现单车位置和锁状态的实时上传,便于运营方对单车的管理。

  2. 用户可以通过APP方便地扫码开锁,提升用户体验。

  3. 内置运动检测功能,当单车被非法移动时,能够及时报警,防止偷盗。

  4. 采用低功耗设计,延长电池寿命,减少运营成本。

总结

本项目设计了一款低功耗的共享单车智能锁,采用了STM32F103RCT6主控芯片,结合了NB-IoT、GPS定位和运动检测技术,能够有效提升共享单车的安全性和管理效率。通过合理的硬件选择和低功耗设计,本项目不仅能够满足实时数据上传和防盗功能的需求,还能够实现长时间待机工作,为共享单车行业提供了一种高效、智能的解决方案。


代码设计思路

本项目的STM32程序的主要任务是控制NB-IoT模块(BC95)、获取GPS数据(NEO-6M)、通过加速度计(MPU6050)检测单车的移动状态,并通过电磁锁执行开锁与锁定操作。系统的设计思路分为以下几个关键模块:

  1. 系统初始化:首先,初始化所有硬件模块,包括串口通信、定时器、外设GPIO配置等。

  2. 低功耗管理:为了延长电池使用寿命,系统在大部分时间保持低功耗状态,只有在必要时才唤醒模块进行通信。

  3. 传感器数据采集:通过串口与GPS模块进行通信,定期获取单车位置;使用I2C或SPI接口与MPU6050加速度计进行数据交换。

  4. 通信和数据上传:通过BC95 NB-IoT模块将位置信息和锁状态上传至后台服务器。模块使用定时器进行数据上传,确保模块的低功耗运行。

  5. 运动检测和防盗功能:实时监测加速度计的数据,检测单车是否被非法移动。如果加速度超过设定阈值,则触发报警机制。

  6. 电磁锁控制:根据用户通过APP扫码的指令,控制电磁锁的开锁与锁定,确保单车的安全。

STM32 main.c 完整代码

#include "stm32f10x.h"
#include "usart.h"
#include "gpio.h"
#include "bc95.h"
#include "gps.h"
#include "mpu6050.h"
#include "electromagnetic_lock.h"
#include "delay.h"
​
// 定义全局变量
float latitude = 0.0, longitude = 0.0;  // GPS数据
int acceleration = 0;                    // 加速度数据
uint8_t lock_status = 0;                 // 锁状态,0: 锁定,1: 解锁
​
// 主函数
int main(void)
{
    // 初始化硬件
    SystemInit();
    delay_init();
    gpio_init();            // GPIO初始化(电磁锁控制)
    usart_init();           // USART初始化(串口调试)
    bc95_init();            // 初始化BC95 NB-IoT模块
    gps_init();             // 初始化GPS模块
    mpu6050_init();         // 初始化MPU6050加速度计
    electromagnetic_lock_init(); // 初始化电磁锁控制
​
    while (1)
    {
        // 获取GPS数据
        if (gps_get_data(&latitude, &longitude))
        {
            printf("Latitude: %f, Longitude: %f\n", latitude, longitude);
            bc95_send_location(latitude, longitude); // 发送GPS数据到后台
        }
​
        // 获取加速度数据,判断是否有异常运动
        acceleration = mpu6050_get_acceleration();
        if (acceleration > ACCELERATION_THRESHOLD)
        {
            printf("Warning: Unauthorized movement detected!\n");
            bc95_send_alert("Movement detected");
            electromagnetic_lock_lock(); // 启动电磁锁防盗机制
        }
​
        // 检查是否有扫码请求(此处模拟扫码控制)
        if (user_scan_lock_code()) // 假设此函数判断是否扫描了锁
        {
            if (lock_status == 0)
            {
                electromagnetic_lock_unlock();  // 解锁电磁锁
                lock_status = 1;  // 更新锁状态
                printf("Lock unlocked\n");
            }
            else
            {
                electromagnetic_lock_lock();    // 锁定电磁锁
                lock_status = 0;  // 更新锁状态
                printf("Lock locked\n");
            }
        }
​
        // 延时一定时间,减少CPU占用
        delay_ms(1000);
    }
}

代码模块解析

1. 系统初始化

SystemInit();
delay_init();
gpio_init();            // GPIO初始化(电磁锁控制)
usart_init();           // USART初始化(串口调试)
bc95_init();            // 初始化BC95 NB-IoT模块
gps_init();             // 初始化GPS模块
mpu6050_init();         // 初始化MPU6050加速度计
electromagnetic_lock_init(); // 初始化电磁锁控制

在系统启动时,首先进行硬件的初始化,包括定时器、串口、GPIO等。gpio_init()用于初始化电磁锁的控制引脚,usart_init()则是初始化串口用于调试输出。bc95_init()gps_init()mpu6050_init()分别初始化NB-IoT模块、GPS模块和MPU6050传感器。

2. GPS数据获取和上传

if (gps_get_data(&latitude, &longitude))
{
    printf("Latitude: %f, Longitude: %f\n", latitude, longitude);
    bc95_send_location(latitude, longitude); // 发送GPS数据到后台
}

系统通过gps_get_data()函数定期获取GPS模块的经纬度数据。获取到的位置数据后,程序通过bc95_send_location()函数将数据上传至后台服务器,供共享单车管理平台实时监控。

3. 运动检测和防盗

acceleration = mpu6050_get_acceleration();
if (acceleration > ACCELERATION_THRESHOLD)
{
    printf("Warning: Unauthorized movement detected!\n");
    bc95_send_alert("Movement detected");
    electromagnetic_lock_lock(); // 启动电磁锁防盗机制
}

通过读取MPU6050加速度计的数据,判断是否有非法运动。若加速度超出设定的阈值,表示单车被非法移动,触发报警并锁定电磁锁,防止盗窃。

4. 扫码控制电磁锁

if (user_scan_lock_code()) // 假设此函数判断是否扫描了锁
{
    if (lock_status == 0)
    {
        electromagnetic_lock_unlock();  // 解锁电磁锁
        lock_status = 1;  // 更新锁状态
        printf("Lock unlocked\n");
    }
    else
    {
        electromagnetic_lock_lock();    // 锁定电磁锁
        lock_status = 0;  // 更新锁状态
        printf("Lock locked\n");
    }
}

该部分代码模拟了扫码控制电磁锁的过程。假设user_scan_lock_code()为扫描二维码后返回true的函数,当用户扫描二维码后,程序会判断当前电磁锁的状态。如果锁是锁定的,则解锁;如果是解锁的,则重新锁定。

5. 低功耗管理

系统通过delay_ms()函数延迟一段时间来减少CPU占用,保持低功耗运行。在待机时,NB-IoT模块会进入低功耗模式,通过定时器唤醒进行数据传输。

6. 数据上传

bc95_send_location(latitude, longitude); // 发送GPS数据到后台
bc95_send_alert("Movement detected");   // 发送报警信息

数据上传通过BC95 NB-IoT模块实现,bc95_send_location()bc95_send_alert()函数分别用来上传GPS位置数据和报警信息。NB-IoT的低功耗特性保证了系统在待机时消耗的电量最小。

总结

在本设计中,STM32F103RCT6主控芯片协调了所有外设的工作,包括GPS模块、MPU6050加速度计、NB-IoT通信模块以及电磁锁。系统采用低功耗设计,通过定时唤醒NB-IoT模块进行数据上传,保证了长时间运行。此外,运动检测和扫码控制功能使得系统具备了较强的防盗能力,能够实时监控单车状态,并采取相应的保护措施。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。