智能停车与智能车锁的开发与实现
2018-02-23纪鑫乐刘尧猛吴红霞白馥齐
纪鑫乐+刘尧猛+吴红霞+白馥齐
摘 要:为了更简便地使用停车位,满足车主的需求,基于 GPRS/GPS 技术开发了智能体车锁设备。硬件采用主控CPU为STM32F103C8T6,用于控制通过GPRS模块返回的GPS信息以及实现与串口数据的交互。在智能锁的设计上,通过 GPIO 接口,来控制两路继电器模块,实现智能车锁电机的正反转,从而实现车位锁的升起和落下。GPRS模块采用QUECTEL系列MC20CA-04-STD芯片,实现GPS信息的获取与传输功能。
关键词:GPRS/GPS;智能;车位锁;STM32
中图分类号:U491 文献标志码:A
0 引言
随着人们生活水平的提高,私家车已经逐渐普及到各家各户,停车位的需求也日益增加,而车主对哪个地方可以停车,哪个地方的车位已满完全不了解,造成了剩余停车位的浪费。基于这种现象,设计了智能体车锁,用于简化车主找车位的过程。智能体车锁可以通过手机APP将锁的位置和车位是否被使用告知车主,还可以通过手机APP控制车锁的开启与关闭,实现了车到锁开,车走锁关的功能。
1 主控制板的选用
该主板将GPRS模块与主控制模块结合在一起,内置串口2(UART2)实现了GPRS模块与主控CPU的数据交互,串口1(UART1)用于接到个人PC端,用于接收和发送数据。
主控CPU为STM32F103C8T6 单片机一颗。单片机实现了整个系统核心的枢纽, 实现对整个系统的把控,并完成对应的代码实现。引出来了多余的 GPIO 口,主要是方便用户进行二次开发。
MC20 模块一颗。MC20 支持 GSM/GPS/BD 功能,在设计当中充分考虑资源最大化,引出 GPS/BD 天线引脚和 GSM 天线引脚。用户可以实现利用 MC20 一颗芯片实现 GPRS 网络对 GPS/BD 数据的远程传输。MC20 支持北斗与 GPS 双模功能,模块也是默认采用 GPS 和 北斗都是支持的格式进行的设计。MC20 提供了一颗 LED 网络指示灯。主板返回GPS信息的实现。单片机在右下方引出了两个对应的 LED 灯,这两个灯主要是方便用 户进行 TCP 远程开关灯控制或者是短信控制 LED 灯功能,如图1所示。
2 主要功能的实现
完整的主控面板由一个3.7V、3000mAh的电源,一个J-LINK适配器,一个TTL转USB接口,两个用于实现电机的正反转的GPIO接口组成,如图2所示。
2.1 GPRS模块的实现
2.1.1 GPRS相关配置的实现
通过GPS/BD 天线引脚和 GSM 天线引脚,可以利用 MC20芯片实现GPRS 网络对 GPS/BD 数据的获取与传输。GPRS模块需要用AT指令对其进行配置。
1. AT+QGNSSC=1 对GPS模块上电
2. AT+QGNSSC? 检查上电情况
3. ATE0 關闭回显
4. AT+CSQ 检查CSQ(模块当前信号质量),可以利用手机APP查看
5. AT+CPIN? 检查SIM卡是否在位
6. AT+CREG? 是否注册GSM网络
7. AT+CGREG? 是否注册GPRS网络
8. AT+QISTAT 查询IP状态
9. AT+QIDEACT 关闭场景
10. AT+QIFGCNT=0 配置场景,为后面的数据连接做基础
11. AT+QICSGP=1,\042CMNET\042 接入APN
12. AT+QIREGAPP 开启移动场景
13. AT+QIACT PDP上下文激活
14. AT+QIDNSIP=1 使用IP连接还是域名连接,0是IP,1是域名
15. AT+QIOPEN=\042TCP\042,\042(要使用的域名)\042,\042(域名对应的端口号)\042 这里是需要登录的域名,输入域名及其端口号。
2.1.2 GPRS模块向CPU传输GPS数据的实现
主板内嵌串口2(UART2),可以将MC20模块获取的数据经过串口2传送到STM32 CPU控制的模块。
通过USART_SendData()函数将获取到的数据通过串口进行传输。
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_DATA(Data));
/* Transmit Data */
USARTx->DR = (Data & (uint16_t)0x01FF);
}
2.2 CPU主板部分功能的实现
主控CPU为STM32F103C8T6 单片机一颗。单片机实现了整个系统核心的枢纽, 实现对整个系统的把控,并完成对应的代码实现。
运用Rec_Server_Data()函数,对从服务器端接收端的数据进行处理:
(1)如果在接收缓冲区RxBuffer中收到“up”字符串,表示将进行开锁动作,则将指示灯开启,同时将智能锁降下。
(2)如果在接收缓冲区RxBuffer中收到“down”字符串,表示将进行关锁动作,则将指示灯熄灭,同时将智能锁抬起。
void Rec_Server_Data(void)
{
……
if(strstr(RxBuffer,”up”)!=NULL)
{
LED1_ON();
OP_DOWN_ON();
Delay_nMs(100);
OP_DOWN_OFF();
}
else if(strstr(RxBuffer,”down”)!=NULL)
{
LED1_OFF();
OP_UP_ON();
Delay_nMs(100);
OP_UP_OFF(); }
…...
}
3 智能车锁的打开与关闭
在手机APP端点击开锁(或关锁)按钮,会通过服务器端向主板发送一条“up”(“down”)字符串,主板通过GPIO端控制两路继电器的高低电平来实现电机的正反转,来实现智能锁的打开与关闭,如图3所示。
结语
测试结果表明,该系统可以完成预定的功能,可以正确地显示出车锁所在的位置,并可以通过手机端来控制在智能车锁的开启和关闭。此套系统简化了私家车车主找提车位难的问题,方便了人们的出行,还可以充分利用现有的停车位资源。
参考文献
[1]廖义奎.Cortex-M3之STM32嵌入式系统设计[M].北京:中国电力出版社,2012:4.
[2][美] 拉伯罗斯(Jean J.Labrosse)著;宫辉,曾鸣,龚光华,等.译嵌入式实时操作系统[M].北京 :北京航空航天大学出版社,2012:11.
[3]郭天祥,新概念51单片机C语言教程[M].北京:电子工业出版社,2009:9.endprint