针对项目中的几个部分再详细说明一下吧。
首先是速度及里程检测单元
速度及里程检测单元模块用两个GPIO配置成上升沿触发的外部中断,接干簧管磁控开关模块。在旋转的车轮上固定强磁铁,车轮旋转时,先后吸合、释放干簧管磁控开关1、2,分别形成两个脉冲触发上升沿中断。由此再用正交解码器的方法确定车轮旋转方向及圈数,算出骑行里程。通过定时器,可以计算出骑行速度。
其次是尾灯模块
尾灯模块原来的设想是通过GPIO驱动三极管来驱动行列LED点阵,其中3个GPIO做为行控(实际有7行,但是中间那一行始终通过一个限流电阻接VCC),对称行用一个GPIO控制,其余12个GPIO做为列控。。通过行列扫描的方式实现动态LED转向指示和夜晚直行、停车警示。在这次的实现中,由于没有想再增加MCU来控制尾灯,而SensorTile本身的GPIO引出极少,所以就做了化简,仅仅通过一个GPIO控制多组LED(分别串并,最后用一个GPIO控制开关),实现闪烁、常亮和关闭状态。而这个GPIO的控制又是有手机端APP中一个按钮控制实现,通过蓝牙通讯传递按钮状态给SensorTile,从而控制LED阵列的状态。
在接下来就是GPS模块
GPS模块是通过UART接入SensorTile,SensorTile的支架板(STLCR01V1)体积很小,接口引出少,所以有许多接口复用(接在一起)。在这里,UART接口就和板上USB口复用,通过USB口引出,具体可以参见我以前的帖子--
如何在SensorTile 支架板扩展出一个串口?
GPS模块主要是用来提供自行车运动轨迹,目前只是打上时间戳记录到SD卡内,同时通过蓝牙通讯间隔上传手机APP端显示坐标和海拔,后续有时间可以考虑在手机APP中结合Google地图显示。
其他的电路就是充分利用SensorTile上已有的电路了。具体的有SD卡电路,用来存储骑行数据(骑行路径(GPS数据)、骑行数据(骑行速度、骑行里程等)、环境参数(温度、湿度、大气压)、自行车状态(倾斜度)),软件也充分学习了ST的Demo示例。环境参数(温度、湿度、大气压)的采集主要是利用了SensorTile上已有的温湿度传感器、大气压传感器电路,自行车状态(倾斜度)主要利用了SensorTile上已有的重力加速度传感器电路。自行车的倾斜度主要是用来判断骑行过程中,自行车是在上坡还是下坡,或者是平地,结合骑行时间和骑行速度估算运动量。