这个畜牧定位器,主要功能是对农场养殖的牛羊等进行定位,另外还提供了计步功能,可用于监测牛羊的健康状态。项目的主体逻辑很简单,就是定期获取GPS定位信息和步数,然后联网将数据上传到后台的服务器,用户可通过手机APP或者小程序查看相应的统计信息。
为了适应更多的使用场景,我们提供了两种联网方案来上传数据,一种是通过NB-IoT直接联网发送数据,另外一种先通过LoRa将数据发送至配套的网关,然后再由网关将数据转发至后台服务器。如果所在地区的移动网络信号比较好,就可以使用第一种方案,否则就选择第二种方案。
下面我介绍一下项目的实现细节 首先是定位信息的获取,这里我们使用了一个GPS模块,型号是AT6558R-5N32。这个模块通过串口与主控芯片进行通信,并且只要上电后就会不断获取定位信息,然后主动将数据发送给主控,所以主控芯片只需通过串口接收数据即可。这个模块提供的数据非常丰富,包括经纬度、卫星状态、时间、以及速度等等,这里我们只提取了一个RMC信息,也就是推荐的最小定位信息,主要包括经纬度、速度和时间,这就是定位信息的获取逻辑。
下面再介绍一下计步信息的获取,这里也是使用了一个计步模块,型号是DS3553,它内部有一个加速度传感器,能够自动识别脚步并计数,然后将步数存储到内部的寄存器,主控芯片通过IIC就能直接读取到步数。
以上就是定位信息和计步信息的获取逻辑,下面我再介绍一下数据的上传逻辑。数据的上传,我们提供了两种方案,一是直接通过NB-IoT联网发送,二是通过一个LoRa网关转发。 首先介绍一下NB-IoT的方案,这里我们使用了一个模块,型号是QS100,它支持AT指令,主控芯片只需通过串口向它发送AT指令就能完成联网、发送数据等操作。
接下来再介绍一下LoRa的方案,考虑到有些农场的移动网络信号可能不太好,所有我们才提供了这个备选方案。这个方案需要一个配套的网关,这个网关呢,一端通过LoRa接收定位器的数据,另一端通过以太网将数据发送至服务器。定位器和网关之间的LoRa通信,我们使用的是LLCC68这款芯片,这个芯片与主控芯片通过SPI通信,然后网关联网使用的是w5500,它与主控也是通过SPI进行通信。
最后再介绍一下我们在功耗方面所做的工作,这个定位器,默认每一个小时,获取一次定位信息并上传到服务器,所以每次发送完数据,完全可以让主控以及各种外设进入低功耗模式。 比如 主控芯片,主控芯片我们使用的是STM32F103C8T6,它支持三种低功耗模式,分别是睡眠模式、停机模式和待机模式,其中待机模式功耗最低,一旦进入待机模式,CPU时钟、外设时钟都会关闭,并且RAM和寄存器也会关闭,也就说一旦进入低功耗模式,程序的运行状态就会丢失,从待机模式唤醒后,程序只能重新执行。不过由于整个定位器的工作逻辑非常简单,每次唤醒后也不需要恢复之前的运行状态,只需要重新从外部传感器读取数据,再发送出去就可以了。所以当前场景下采用待机模式是最合适的选择,然后这个待机模式需要使用RTC唤醒。 最后再补充一点,这个芯片正常工作时,最高主频可以达到72MHZ,出于功耗考虑,我们采用的主频为8MHZ。
另外我们使用的NB-IOT模块,也支持低功耗模式,每次发送完数据后,主控都会通过一个AT指令另其进入低功耗模式,主控唤醒后,再通过AT指令将其唤醒。 再有就是计步模块,它也支持低功耗,但是无需主控干预,当它检测到静止15s后,就会自动进入低功耗。 还有就是GPS模块,它本身不支持低功耗,所以我们的做法是,直接给他断电,每次上传完一次数据后,就给他断电,主控唤醒后再重新给它上电。 最后就是电池的选择,我们选择是容量比较大的锂亚电池,容量能到9000mah,然后我们测算下来,这样的一节电池能工作一年左右。