4

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

 2 years ago
source link: https://www.ihcblog.com/%E5%B0%8F%E6%89%8B%E5%B7%A5%E2%80%94%E2%80%94%E5%8A%A8%E6%89%8B%E5%81%9A%E4%B8%80%E4%B8%AA%E4%BB%93%E9%BC%A0%E8%AE%A1%E6%AD%A5%E5%99%A8/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

发表于

2018-10-24

继续发存货。

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

想过几种方案:

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

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

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

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

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

避障模块

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

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

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

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

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

70c36a4b03cf125885124b03c9170c5278994f15.jpg

6926727ac945e5aa6d07f89f5669ea88d95ec56e.jpg

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

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

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

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

e1ef9c9fe02ff5ff9941aa7364df6f81c64ffb85.png

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


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

8fee8938d2a62c2534207f3fc0e1f30fb4865bf4.png


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK