基于NORDICNRF51822芯片开发的智能牙刷的实现
2016-05-30况昊
况昊
摘要:近几年来随着物联网的发展以及低功耗蓝牙的广泛应用,可穿戴的智能设备和微型控制器设备受到广泛的关注。基于Nordic NRF51822开发的蓝牙智能牙刷是一款可以与手机APP通过低功耗蓝牙进行连接并且可以相互操作的电动牙刷。主要实现了低功耗、手机与牙刷互动、大数据存储、pH检测、压力检测并反馈、故障报警等功能。该牙刷是充分利用了NRF51822的优越性能的同时考虑到现在人们对手机的依赖以及对功能多样性的要求,并且结合口腔医学设计而成。在考虑到物联网这一热门理念时,将手机通过APP和蓝牙通信与牙刷结合起来形成一个完整的循环给用户更好、更新奇的体验。
关键词:物联网;低功耗;蓝牙手机;多功能
中图分类号:F27
文献标识码:A
doi:10.19311/j.cnki.16723198.2016.13.022
1 引言
1.1 项目背景
物联网即“Internet of things”一般简称为IoT,是新一代信息技术的一部分也是现代科技提倡的信息化发展的重要环节。顾名思义,物联网就是物与物相连接,包含两个重要组成部分:相互连接通讯的网络和途径;具体连接的智能设备或者传感器。因此创新就是物联网的关键,而用户要求和用户体验则是我们进行物联网开发的灵魂。Nordic推出的自带低功耗蓝牙模块的MCU—NRF51822是一款非常强大的,高度灵活的多协议的系统级芯片,非常适合用于蓝牙智能和24GHz的超低功耗无线应用。基于NRF51822开发的智能牙刷就是基于物联网理念进行开发的一款智能产品,通过低功耗蓝牙与手机通讯,手机APP通过WiFi或者运营商提供的移动网络与服务器连接传递有用信息。同时注重创新首次结合口腔医学健康知识把PH模块以及检测牙齿所受到压力、适宜个人调节牙刷震动频率等功能集成起来,能够给用户提供一个自定义的健康的能够直接监控口腔以及刷牙过程中各个参数的有科技含量的智能牙刷。
1.2 设计思路
本项目由于涉及功能较多,使用的芯片NRF51822也只是一款Nordic推出的自带低功耗蓝牙协议的MCU并不能进行多线程操作,因此需要单个功能模块进行详细设计之后,结合用户要求以及软件合理性并且考虑到功耗问题,对各个功能模块分配优先级并按照不同的优先级进行整合从而形成一个完整的符合预期目标的产品。同时按照需求配合手机调试一些互动的功能,让牙刷与手机以及服务器形成一个局部的物联网系统。
1.3 本文实现的目标
本文编写的目的是:一是用实例来讲述物联网的概念,向大家普及一下项目涉及到的物联网相关知识;二是向大家详细介绍关于Nordic推出的NRF51822芯片的相关性能;三是给读者提供一些在NRF51822平台上开发的经验。本文的主要针对一些有相关基础的对物联网开发有兴趣的或者想学习一下NRF51822平台进行智能穿戴开发的相关人员。
2 功能需求分析
本项目中对牙刷的功能需求主要分三部分:一是牙刷本身处理功能;二是通信功能;三是与手机互动功能。其中通讯部分蓝牙协议是芯片自带,只需要配置相关模式即可。牙刷本身功能包括:一是两个按键一个支持单击、双击、长按,一个需要识别单击和长按;二是能够监测牙刷头与牙齿之间的压力值;三是能够调节马达震动频率和模式;四是能够测量口腔pH值;五是能够永久存储100KB的数据且不会断电擦除;六是有实时时间;七是低电压保护;八是自动记录每次刷牙的数据。牙刷与手机互动的功能模块有:一是手机发送命令改变马达震动频率和运行模式;二是手机更改牙刷蓝牙设备名称;三是更改三个压力阀值;四是牙刷向手机发送PH值、压力值、按键事件等;五是手机读取牙刷上储存的刷牙信息;六是手机向牙刷同步时间等等。
3 部分功能模块详细设计
下面将讲述部分功能模块的设计思路以及实现途径。
3.1 按键设计
本项目要求按键button_0支持单击、双击、长按,按键button_1支持单击长按,因此我们要详细考虑的按键的每一个状态和可能性来进行功能设计,防止出现错误的事件。在此我定义了四个基本按键状态:空键、单击、长按、双击。定义的基本按键事件是:(1)单击,按下时间小于12s;(2)长按,按下时间大于等于12s。我在按键基本定义的基础之上进行扩展:单击之后不会立即返回而是继续监控按键状态在06s之内如果再次产生单击事件就返回双击事件,如果06s之内没有单击事件产生就返回单击事件。因此最终的按键效果为:长按只会立即返回长按事件;时间间隔在06s以内的单击将在第二次单击事件产生后立即返回双击时间,同时两次单击时间取消;单击事件是要等06s后检测到06s内再无单击事件产生才会返回。这样的设计就摒除了长按对单双击事件的影响,同时防止了多次单击产生对单双击事件的正确返回造成影响。在做好按键功能后按键button_0需要控制APP的某些功能因此在button_0的按键事件返回时要发送到手机上,而button_1则需要控制其他功能,稍后再讲。
3.2 PH模块的应用
本牙刷使用的是一个独立的PH模块放入口中,用AD采样的方法读取PH模块产生的电压变化对应标准酸碱度的溶液定义出准确的PH值。NRF51822提供了8个AIN(Analog inputDigital I/O)PIN,支持ADC、LPCOMP等输入。我们PH模块的AD采样使用霍尔开关进行触发,当开关处于高电平的时候开启控制AD采样的timer,使之不断的进行AD转换读取PH模块的电压变化并发送到手机上可以让手机读取当前口腔PH信息,当开关处于低电平的时候关闭控制AD采样的timer。
3.3 压力检测功能
检测牙刷头与牙齿之间的压力并不是一个非常简单的事,我们软件硬件考虑过多种压力传感器都不是很适用,同时高精度高适应性的压力传感器的价格也非常高不利于我们控制生产成本。因此我们转换思路利用电磁感应来实现,利用杠杆原理将牙刷头的压力产生的位移在牙刷中间部分用检测电磁的芯片和线圈进行检测来测取位移变化结合使用的弹簧规格参数算出牙刷头与牙齿间的压力值。在软件上我用IO口模拟spi连接电磁检测的传感器来进行通信。读出的数据转换成对应的压力值后需要判断属于那个压力段位,我一般分为轻、中、重三个压力阶段并且用蓝、绿、红三个灯的闪烁来表示,同时记录刷牙过程中停留在三个阶段的时间与刷牙的起始时间一起存进牙刷内存。
3.4 马达震动频率控制
我牙刷上的马达是震动式的而不是旋转马达,硬件上是用的两个PIN来进行控制,因此控制IO口的供电情况来控制马达震动的频率和强度。根据产品定义我给马达设计了三个工作档位以及一个自定义模式,三个工作档位是由改变控制马达震动的PWM的相关参数来定义的,而自定义模式则是用户体验过后根据自己的感受定义相关PWM参数并存入牙刷内存让它成为马达工作的一个新的档位。在马达开启震动之后一段时间在无外部触发条件控制的情况下如按键,会自动关闭马达。
3.5 实时时间功能
实时时间功能是要求在不断电不重启的情况牙刷能够产生实时时间方便记录刷牙的时间、牙刷头使用寿命报警、定时自动校验压力偏转值等功能,它能够与手机时间进行同步。
3.6 牙刷电量读取与低电压保护
同PH模块一样我们用AD采样的方法读取电池电量并发送到手机,这个电量读取的timer不仅仅是被手机读取电量命令进行控制,也可以被其它条件进行触发即在每次刷牙结束后自动读取电量如果电压过低立即进入低功耗模式,除非充电使电压抬高到一定阀值才能正常工作。
3.7 数据存储
数据存储对于我开发的智能牙刷整个产品来说也是比较重要的,它要求能够存储每次刷牙的起始时间、刷牙过程中在每个压力段位停留的时间、手机更改牙刷蓝牙设备名称数据、牙刷刷头寿命期限、马达自定义模式数据、手机定义的压力段位阀值、牙刷次数等等。要求是能够被手机写入也能被牙刷自动录入。这些存储的数据不会因为断电或者重启被擦除,除非是被相关命令或者专业的烧录工具才能清楚我们设定的存储空间。
4 智能牙刷功能整合和代码实现设计
4.1 功能优先级处理
由于功能众多,并且要与手机相互配合因此要用不同的优先级来整合不同的功能防止在运行的过程中出现不必要的逻辑性的错误。如下是部分功能的逻辑性和优先级处理。
4.1.1 无线充电
在检测到牙刷处于无线充电的状态下时,自动disable所有的按键功能、关闭所有的LED灯、并且防止马达正在工作时直接充电也要关闭马达,一旦从充电环上拿开时自动初始化按键。
4.1.2 压力检测模块
压力检测由于可以受到手机控制因此对执行步骤的逻辑性要求比较严格,每次执行压力检测模块的时候都要读取牙刷内存空间中压力参数所处的地址判断用户是否设置了相关参数并且判断是否符合规范,如果没有就按照默认的参数执行,有的话如果不规范则按照默认参数执行反之按照用户设定执行。在按键触发压力检测的时候压力检测模块优先于PH功能模块,因此先禁用一下PH模块。
4.1.3 牙刷自动存储数据
牙刷储存数据是在牙刷事件结束之后存入牙刷内存,但是由于牙刷事件结束的触发条件比较多并且不适合放到马达控制里面,因此需要考虑到不同情形下的自动储存数据。一是button_1单击按键循环到马达空档的时候存储存数据;二是长按直接关闭马达震动时存储;三是当马达没有接到关闭命令而自动关闭时储存刷牙信息。
4.2 所有按键事件控制
Button_0产生的三个按键事件在产生的时候自动发送到手机上,当APP检测到相关数据,就会执行相关的操作,实现的主要代码如下:
该功能主要由按键timer进行监控电平变化,用两个switch语句进行判断并在下一个switch语句中判断出单击、双击、长按事件后直接通过ble_nus_string_send函数发送到手机。而button_0是单击控制马达工作模式,长按关闭马达工作。点击开启马达的同时开始检测压力值并向手机传输压力值,因此按键的同时先行关闭PH模块timer,防止数据传输冲突同时disable控制PH模块的霍尔开关防止误触发。单击的同时还要分析牙刷是否存有用户设定的自定义模式,有则从自定义模式、一、二、三、关闭循环,没有的话进行一、二、三、关闭循环。并且在关闭之后检测电压等等。实现代码如下:
5 开发总结
在基于NRF51822的智能牙刷的开发过程中,我加深了对NRF51822平台的了解,本次开发项目用到了NRF51822的低功耗蓝牙、电源管理、AD采样、PWM控制、Pstorage管理、timer的控制使用等相关功能,同时让我对功能设计的逻辑性和优先级考虑得更加完善,本文主要是提供一些功能实现思路和产品功能模块设计理念,同时希望促进更多正在或者即将进行NRF51822开发的软件人员进行技术交流和沟通。最后感谢老师和同学对我的指导和帮助,我将更加努力的学习软件开发相关知识并在今后工作项目中得以实现和提高。