本帖最后由 wxd123com_970479604 于 2020-10-15 17:14 编辑

  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.项目方案设计
    按照大家墨守的规矩,先给开发板来个特写。
1.jpg
接下来,学习一下ST25R3916-DISCOVERY 开发板的相关技术资料。
通过资料的学习,发现在现行的各种无线通信方式中,NFC的近场无源性的特点,非常适用于项目的开发需求和市场化运行。
2.png    3.png
上面的两张图,就可以说明了我们的设计思路。车辆上不需要提供额外的用电设备,只需安装一张无源的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进行通讯。
  1. /* Public functions -----------------------------------------------------------*/
  2. /** @brief Demo entry point. */
  3. int main( void )
  4. {
  5. /* 引导装载程序检查输入 bootloader*/
  6.   bootloaderCheck4Enter();
  7.   /* Reset of all peripherals, Initializes the Flash interface and the Systick.
  8.          * 重置所有外设,初始化Flash界面和Systick。
  9.         */
  10.   HAL_Init( );
  11.   
  12.   /* Check the board. 线路板信息校验 */
  13.   BoardCheck( );
  14.   /* Configure the system clock 配置系统时钟*/
  15.   SystemClock_Config_st25r3916( );
  16.         
  17.         HAL_Delay( 50 );
  18.   
  19.         /* 初始化和配置触摸屏功能和配置所有必要的硬件资源 */
  20.         BSP_TS_Init( 240, 320 );                        
  21.   BSP_LCD_Init( );
  22.   BSP_LCD_SetFont( &Font22 );
  23.   
  24.   /* Configure Buttons */
  25.   for( uint8_t buttonconf = 0; buttonconf <= JOYSTICK_DOWN; buttonconf++ )
  26.   {
  27.     BSP_PB_Init( (Button_TypeDef)buttonconf, BUTTON_MODE_GPIO );                                        //GPIO模式
  28.   }
  29.   BSP_LED_Init( LED2 );
  30.   BSP_LED_Init( LED3 );
  31.   
  32.         /* Configure the GPIOs */
  33.   BSP_DPOT_Init( );
  34.   BSP_DPOT_SetResistor( 0xff );
  35.   MX_GPIO_Init();
  36.   MX_SPI1_Init();
  37.   spiInit(&hspi1);
  38.   
  39.   // required for crypto 需要加密,硬件CRC校验
  40.   __CRC_CLK_ENABLE();
  41.   InitializeRFAL();                                                                        //初始化RFAL库
  42.   if(!Menu_GetUserInput())                                        //获取当前菜单中的图标大小
  43.   {
  44.     SplashScreen( );                                                                //显示启动画面
  45.     Menu_Start( );                                                                        //启动演示菜单的主循环
  46.   }
  47.         //显示窗口菜单背景和标题
  48.   Menu_MsgStatus("USB mode","Reset the board for other demos",MSG_INFO);
  49.   MX_USB_DEVICE_Init();                                                        //开始USB设备初始化预处理
  50.   StreamDispatcherInit();                                                //流调度程序初始化
  51.   ceInitalize();                                                                                //ce初始化
  52.   while(1)
  53.   {
  54.       ProcessIO();                                                                        //IO处理
  55.       dispatcherInterruptHandler();        //处理某些中断并存储检索到的结果,通过USB进行后期传输
  56.       rfalWorker();                                                                        //RFAL工作函数
  57.       ceHandler();                                                                        //ce处理函数
  58.   }
  59. }
所以,我们可以重点关注这几个函数/* Configure the system clock 配置系统时钟*/
SystemClock_Config_st25r3916( );
rfalWorker();        //RFAL工作函数
ceHandler();        //ce处理函数
MX_GPIO_Init();
MX_SPI1_Init();
spiInit(&hspi1);
InitializeRFAL();        //初始化RFAL库

rfalWorker();        //RFAL工作函数
ceHandler();        //ce处理函数
4.PCB设计
  详见文档AN5043。
4.png
5.RFID天线设计
详见https://eds.st.com/antenna/#/,可以根据实际安放尺寸来设计RFID的读取天线。
6.手机APP设计  APP要实现:

  • 车位业主和租车位车主的身份认证
  • 地图搜索空闲车位功能
  • 车位业主使用车位,提醒已使用该业主车位的租车位车主的消息推送,并提供其他替代停车位
  • 在手机信号不好的地下车库,允许租车位车主,通过手机与智能地锁通信,预授权登记使用车位功能。
  • 通知车位业主,车位被使用消息通知。
  • 对于超时使用租车位的车主要有一定的相应惩罚。
  • 对于车位业主要提供该车位能够运行租用的时间段,要有一定的奖惩措施。
7.后台管理系统设计
注:文档越往下写,越来越水。真是不好意思,在经过“3+7=8”的假期后,同一战壕的小伙伴离职了。本人只会点硬件设计和编程,对于上位机的开发编程不懂,一时半会儿对于Java语言开发,只能从0开始。所以只能掩面完成水文一篇。