小手工——动手做一个仓鼠计步器

继续发存货。

在实验室养了三只仓鼠,琢磨着搞点有意思的事情。想到可以每日统计一下仓鼠跑轮的转动量和时间分布,然后推到微博上,应该还算有趣。

方案设计

想过几种方案:

  1. 光学摄像头:处理太耗CPU

  2. 在轮子上挖个洞,洞的两侧安装发射器和接收器:太麻烦且需对准

  3. 轮子上装微动开关:容易被仓鼠破坏且不好更换

后来搜传感器的时候看到了避障传感器,虽说是避障用的,但原理想想应该是依靠红外反射。而所有光学反射的强弱不仅和距离有关,还和反射面的性质有关。所以只需要检测转轮的面周期性变化就能拿到转动数据。

DIY

淘宝花了2块钱买了一个 3.7V 的避障传感器,用于接在树莓派上。

避障模块

找了张银色的塑料纸贴上去,的确 work。但是贴纸不够光滑,在棱角处会导致信号有毛刺。

后来找了支黑色的白板笔,涂上一块。因为黑白对比度是要高于白色银色对比度的,所以可以得到较为稳定的数据。当传感器对准黑色部分时输出低电平,对准白色部分时输出高电平。一次高到低的跳变或低到高的跳变即对应转轮的一圈。

软件部分只需要检测传感器的输出端对应的 GPIO 口的电平。这里为了不拖累树莓派使用 Golang 编写,使用 GoBot 库简化信号处理。

当传感器信号传入时将其丢至带 buffer 的 channel ,避免长时间阻塞影响下一次信号传入。同时,在另一个 goroutine 中收集 channel 中的数据,并以一定时间间隔将收集到的数据写入数据库。

这里数据库使用对时间序列友好的 influxdb 。

可视化

到这里,轮子每转动一圈都会在数据库中写入一条时间戳。

而数据需要可视化和发布,才能友好地呈现出来。

这里使用 matplotlib 来做数据可视化,并在可视化后保存图片然后调用微博接口发布。

欢迎关注我的仓鼠们: https://weibo.com/cangshucangshu

完整代码见: https://github.com/ihciah/HamsterRunning


不幸的消息(2018/10/24):