1.项目需求分析
共享概念早已有之。传统社会,朋友之间借书或共享一条信息、包括邻里之间互借东西,都是一种形式的共享。2010年前后,随着Uber、Airbnb等一系列实物共享平台的出现,共享开始从纯粹的无偿分享、信息分享,走向以获得一定报酬为主要目的,基于陌生人且存在物品使用权暂时转移的"共享经济"。
找个停车位真难。相信这是大多数一线城市私家车主的苦恼。据相关报道,2015 年某市机动车保有量为 500多 万辆,停车位数量仅为 大约200 万个。由此计算,平均近 3~5 辆车分享 1 个停车位,停车位缺口达 371 万个,且缺口呈持续扩张态势。周末去个繁华区域,堵在地下停车场入口排半小时的队;逛商场,P1、P2、P3,绕几圈才找到一个空余车位;有车却不开去上班,只因公司楼下没有可用停车位。隔壁的小区白天车都刚好开走了,车位空了出来,能否共享出来可好? 产品设计场景:用户A有车位,当用户A出差、休假或者有较长时间不再使用自有车位的时候,把车位贡献出来,没有车位的用户B在用户A车位附近寻找车位的时候,这个车位处于空闲状态的时候,通过手机APP查找空闲车位,当发现有空闲车位的时候,就可以临时占用这个车位,提高空闲车位的利用率,这样缓解一下城市拥堵的交通压力。
这个项目原本是只想找一款能够近距离检测物体的方案,通过其他的方式进行判断该区域是否能够实现车位共享的条件。
近期经常浏览的面包板社区与芯片厂家推出了【2020意法半导体开发大赛】,并且有幸获得了 ST25R3916-DISCOVERY 开发板,感谢平台和ST公司,使我们的设计工作获得一些灵感。利用NFC标签的近距离通信,来完成车位能否进行共享状态的监测。
2.项目方案设计
按照大家墨守的规矩,先给开发板来个特写。
接下来,学习一下ST25R3916-DISCOVERY 开发板的相关技术资料。
通过资料的学习,发现在现行的各种无线通信方式中,NFC的近场无源性的特点,非常适用于项目的开发需求和市场化运行。
上面的两张图,就可以说明了我们的设计思路。车辆上不需要提供额外的用电设备,只需安装一张无源的NFC卡片即可。共享的车位上安装一个能够实时监测NFC卡存在与否的智能地锁,实时监测当前车位的适用状态,并且根据NFC卡状态进行开锁、闭锁工作。
这样设计应用工作就可以分成兵分两路,一路做智能地锁,另一路做手机运行APP。
3.智能硬件设计
由于这次有幸得到ST25R3916-DISCOVERY 开发板,可以直接在开发板上进行效果论证。极大的缩短了硬件设计的周期。
相关的资料可以从这里下载https://mbb.eet-china.com/forum/topic/81189_1_1.html。
ST25R3916-DISCOVERY上使用了STM32L476GT6 LQFP100 32-bit microcontroller,通过SPI1接口与ST25R3916进行通讯。
- /* Public functions -----------------------------------------------------------*/
- /** @brief Demo entry point. */
- int main( void )
- {
- /* 引导装载程序检查输入 bootloader*/
- bootloaderCheck4Enter();
- /* Reset of all peripherals, Initializes the Flash interface and the Systick.
- * 重置所有外设,初始化Flash界面和Systick。
- */
- HAL_Init( );
- /* Check the board. 线路板信息校验 */
- BoardCheck( );
- /* Configure the system clock 配置系统时钟*/
- SystemClock_Config_st25r3916( );
- HAL_Delay( 50 );
- /* 初始化和配置触摸屏功能和配置所有必要的硬件资源 */
- BSP_TS_Init( 240, 320 );
- BSP_LCD_Init( );
- BSP_LCD_SetFont( &Font22 );
- /* Configure Buttons */
- for( uint8_t buttonconf = 0; buttonconf <= JOYSTICK_DOWN; buttonconf++ )
- {
- BSP_PB_Init( (Button_TypeDef)buttonconf, BUTTON_MODE_GPIO ); //GPIO模式
- }
- BSP_LED_Init( LED2 );
- BSP_LED_Init( LED3 );
- /* Configure the GPIOs */
- BSP_DPOT_Init( );
- BSP_DPOT_SetResistor( 0xff );
- MX_GPIO_Init();
- MX_SPI1_Init();
- spiInit(&hspi1);
- // required for crypto 需要加密,硬件CRC校验
- __CRC_CLK_ENABLE();
- InitializeRFAL(); //初始化RFAL库
- if(!Menu_GetUserInput()) //获取当前菜单中的图标大小
- {
- SplashScreen( ); //显示启动画面
- Menu_Start( ); //启动演示菜单的主循环
- }
- //显示窗口菜单背景和标题
- Menu_MsgStatus("USB mode","Reset the board for other demos",MSG_INFO);
- MX_USB_DEVICE_Init(); //开始USB设备初始化预处理
- StreamDispatcherInit(); //流调度程序初始化
- ceInitalize(); //ce初始化
- while(1)
- {
- ProcessIO(); //IO处理
- dispatcherInterruptHandler(); //处理某些中断并存储检索到的结果,通过USB进行后期传输
- rfalWorker(); //RFAL工作函数
- ceHandler(); //ce处理函数
- }
- }
SystemClock_Config_st25r3916( );
rfalWorker(); //RFAL工作函数
ceHandler(); //ce处理函数
MX_GPIO_Init();
MX_SPI1_Init();
spiInit(&hspi1);
InitializeRFAL(); //初始化RFAL库
rfalWorker(); //RFAL工作函数
ceHandler(); //ce处理函数
4.PCB设计
详见文档AN5043。
5.RFID天线设计
详见https://eds.st.com/antenna/#/,可以根据实际安放尺寸来设计RFID的读取天线。
6.手机APP设计 APP要实现:
- 车位业主和租车位车主的身份认证
- 地图搜索空闲车位功能
- 车位业主使用车位,提醒已使用该业主车位的租车位车主的消息推送,并提供其他替代停车位
- 在手机信号不好的地下车库,允许租车位车主,通过手机与智能地锁通信,预授权登记使用车位功能。
- 通知车位业主,车位被使用消息通知。
- 对于超时使用租车位的车主要有一定的相应惩罚。
- 对于车位业主要提供该车位能够运行租用的时间段,要有一定的奖惩措施。
注:文档越往下写,越来越水。真是不好意思,在经过“3+7=8”的假期后,同一战壕的小伙伴离职了。本人只会点硬件设计和编程,对于上位机的开发编程不懂,一时半会儿对于Java语言开发,只能从0开始。所以只能掩面完成水文一篇。