|
【背景】
去年夏天被疫情困在了村子里,闲来无事准备体验下传统的快乐:钓龙虾。
竹竿砍好了,肥肉绑好了,村后边水田水渠也找好了,啥都就绪唯独龙虾不上钩。一群人一下午钓个寂寞:
观察旁边的小水渠明显有放网的痕迹,索性跟随大家入手虾网,水渠周边造起来。
白天随便收个一两趟,就比折腾整个下午的收成还要好:
然而没过几天,严峻的问题开始浮出水面:收成骤减。
经观察应该是新虾网被淳朴的村民发现了,有助人为乐者帮我们提了虾笼,顺走了收成。
【方案】
目标是以最小代价恢复收成,因而任何牵扯上门沟通 / 暴力解决的手段都显得费事又没效率。
本只想安安静静吃个虾,最后搞到邻里不和,这样得不偿失。
航拍图可以看到,水渠周边小路不少,大多可以骑电瓶车通过。故助人为乐的很可能不止一人。
悄悄掌握助人为乐(们)的周期节律,适当保持领先相位,成为方案设计的重点。
一旦掌握,就可提前半小时下地收网,最大化收成的同时,给助人为乐们留一个惊喜。
方案1,装监控
这基本是最直接想到的方法,随时记录助人为乐的嘴脸,想来虾网也就无虞了。
抛开法律问题,最大障碍在于:
电源怎么搞? 荒郊野外的总不能扯高压线吧,用电池天天爬线杆也不是事。
再就是网络怎么搞? 荒郊野外的总不能拉根网线吧,用 WIFI 也不现实。
于是作罢。
方案2,假监控
监控的供电+网络不好搞,装个假的吓唬吓唬也行。再在虾网旁插个牌子“有监控,请自重”,简直太有画面感。
然而村民可能不识字,作罢。
方案3,放红外热释电
假若能在适当的位置放置红外热释电(PIR)传感器,就可以在虾网范围内检测人体活动。
采用射频/离线方式汇报+记录数据,可起到报警的效果。
然而同样面临供电问题,更要命的是热释电传感器范围较大,容易误报路过的行人/小动物。
方案4,放振动传感
既然逃不开传感器,野外供电的问题暂且搁置,最差堆上 18650 也能凑合用。
因而重点落在如何准确检测“助人为乐”行为。
思前想后,基于振动传感的动作检测,恐怕是最为稳妥的办法:
将振动传感器固定在虾网系绳上,当有人拉出水中的长网,系绳晃动触发传感。
传感器以及配套电路应尽可能小,避免被人顺走或损坏。
【选型】
确定好使用振动传感,需要选型一套尽可能迷你的系统板,以便于现场施工安装。
找来找去选定了 Arduino Digispark 的 ATTINY85 系统板:
主控 ATTINY85 片上有 0.5KB-EEPROM,可用于离线记录振动数据。
附上主控原理图,后期需要进行大概,仅保留 ATTINY85 主控,并安装 MΩ 上拉电阻以实现低功耗。
图中红色标记为关键改动位置:
振动传感选择最经典的滚珠式即可,选择双向触发可提升检测灵敏度。
【开干】
全新入手的蓝色 ATTINY85 主板 ¥13一片,带有 Arduino 的 Bootloader:
拆下一众没用的零件(参考原理图),降低整机功耗:
将 D- 的上拉电阻换为 1M,并在 D- 和 GND 之间焊接振动开关。
这样一来振动传感器也可以实现低功耗工作。
装上垃圾店里淘来的电池,大概有 50mAh 的容量,硬件完成:
【软件】
软件则是另一个大头,大致功能需求:
1. 可以连续监测 24h 内振动时刻,精度要达到分钟级;
2. 全离线工作,所有数据均存储于 ATTINY85 片上 EEPROM;
3. 锂电池低电压、EEPROM 填满后自动停机;
4. 整机要求低功耗工作。
AVR 有着非常棒的低功耗,同时休眠时支持诸如 PCINT 这样的异步边沿检测,使得编码并不复杂。
唯独需要注意 ATTINY85 只有 0.5KB-EEPROM 存储可用,需要略微压缩下记录格式,确保能存储超过 24h。
主采集逻辑如下:
ATTINY85 可以监测休眠过程中的 PCINT 而不唤醒 CPU,这样一来利用固定的休眠循环,就可以实现时间基准。
每 3min 晃动计数的总数写入 1 Byte,这样 0.5KB 能记录约 1500min,时长超过 1 天。
主代码依旧采用 ICCAVR 编写,皮实小巧又好用(Arduino IDE 哭瞎在路上):
编写好的代码,使用 USBASP 进行固化。由于已经刷掉了 Arduino-Bootloader,因而采用飞线直接凌空固化。
测试完成后,读取 EEPROM 数据也采用相同方式:
实测整机工作电流大约 0.26ma @4.2v,对于 50mAh 的软包锂电轻松工作好几天,续航达标。
【投放+回收】
找一个瓶盖,把充满电+烧录好+已启动的主板,连同防水袋一同卷进去,伪装成一个简单的浮漂:
来到现场,把传感器系在虾网系绳根部,确保传感器既不落水,又很容易被拽到拖动:
让助人为乐的村民多收几天虾吧,下次就改规矩了。一天后直接剪线回收,外层透明胶已被雨水+露水+渠水打湿,但内部电路完好:
断电导出 EEPROM 数据,大家的行踪尽在掌握哟。
【分析】
正常情况下虾网基本不会晃动,即使有动作也是稍纵即逝,对应 3min 区间内基本没有计数,或计数为零。
当有人扯动虾网时,ATTINY85 就会疯狂计数,振动开关的抖动全然都会被记录进去,临近 3min 区间将出现计数峰值。
一次典型的记录数据如图所示(WinHex 直读),上电、打包、出门、回收的动作都看得清清楚楚。
除了这些已知动作外,其余非零值均可认为是有热心村民在助人为乐:
由于软件算法采用等间隔记录(3min/byte),因而字节地址直接就是标准的时间轴。
数据处理时和额外记录的通电、断电时刻进行等比例缩放,即可得精确的振动记录时间。上图数据处理好时间轴如下:
对于竖轴(晃动次数)采用对数坐标,可以更好地反应晃动的激烈程度。
由图可见,凌晨 3:48、早上 7:30、中午 12:48、傍晚 18:30 前后为助人高峰时期。
初战告捷,接下来将连续几天的采样进行融合绘图,效果如下:
至此基本可以确认,凌晨 3:30-4:30,早晨 7:30、中午 12:30-13:30、傍晚 18:30-20:00,就是收成被顺走的时间段。
平均比这些热心村民早出门半小时,就可以收获满满,并给他们留下空网的惊喜。
【效果】
掌握了最佳出手时间后,基本就没空网过。
凌晨 3:00 出手(没错,就是要给 3:30 那个来点惊喜),不多会就凑齐一盘:
接连吃了大半个月的麻辣小龙虾,达成传说的吃虾自由:
果然赛博农业非常拉风。最后附上主固件:
链接:https://pan.baidu.com/s/1LLdbNMoiVh6FG7zhBW-Mig?pwd=dkpb
提取码:dkpb
--------------------------------------------------------------------------------------
以上,本来想安安静静放个虾笼,淳朴的村民非要来助人为乐。
索性用赛博农业的精神折腾一次,彻底改变玩法,收获夏天里最棒的大作战。
最后祝大家夏天都有好心情!
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|