|
8612| 2
|
[项目教程] Obloq大赛第二轮:抓住偷吃贼 |

前言最近放在阳台的花草被啥东西给吃了,然后厨房挂在墙上的小虾米也不知道咋的被抓破吃光了(我怀疑是隔隔壁两条泰迪),所以打算做个简单的项目,教训一下偷吃贼。时间比较仓促,内容比较多,能力有比较有限,好好写是不可能好好写的,这辈子都不可能的好好写的,只能糊弄一下这样子。 【Figure 1. 远在天国的熊童子】 一、项目概览DFRobot万物互联大赛第二轮的比赛更加开放,提供了多种不同的模块,就看每个人戴着脚铐跳舞,详细要求及介绍请看论坛帖子。 如前文所述,本项目起源自种的花草和小虾米被吃了,所以想要对植物进行自动浇水和对偷吃贼进行警戒两部分功能,microbit+Obloq负责浇水和告警驱离,树莓派配合摄像头负责拍照取证,相关传感器数据和偷吃贼的狼狈模样都可以在手机上或者网页上看到。 1.1 比赛限制所提供的硬件列表如下:
只准使用提供的传感器,相当于限制了感受器,好在效应器无限制,不过呢,Microbit Mate引出引脚有限,Analog+Digital总共只有6个引脚。编程环境限制为MakeCode,存在种种掣肘,不过也是为了公平起见。 存在问题:
官方提供模块的介绍及使用可以移步http://wiki.dfrobot.com 1.2 项目设想我们设想两部分功能,根据microbit的特点,物尽其用。首先我们看看引脚分配,Mate板提供了3个模拟量引脚和3个数字量引脚,OBLOQ模块需要占用两个引脚(Rx-Tx),引脚2暂时还没确定,可以接高亮度LED或者震动器。
F2. 注意方块指直接与Microbit相连的部分,左下角和右上角是系统最终的目标。想要用热释电阵列进行粗略定位,受限于microbit引脚数量,所以我们和舵机一起放在树莓派上。
二、项目实现以下分述各个部分的具体实现。(大标题下不加点废话看起来好难受,加了自己也好难受) 2.1 模块检测开工之前先要测试一下各个模块,这里方便起见就用microPython for micro:bit的Read Eval Print Loop (REPL) 模式进行测试。
简述如下,下载安装Thonny,
测试的话就比较简单,分别模拟/数字读写各个引脚,例如:
诸此以上种种,更多用法参考官方BBC micro:bit MicroPython 手册。
感觉microPython代码占用的内存空间比较大,经常报内存分配错误。 2.1 植物监测灌溉系统2.1.1 需要讨论的问题
2.1.2 土壤传感器灵敏度和反应延时问题参考wiki上的演示代码,有两种思路:
两种方法主要受限于土壤湿度传感器的灵敏度和反应延时,比如多久可以感知湿度变化,最小时间间隔如何,我们看看该传感器的采用的元件,从土壤湿度传感器wiki可以下载到传感器的原理图,如下:
结构比较简单,稳压芯片非常重要,关系测量基准,定时器采用Texas Instruments TLC555CDR芯片,介绍及原理图点此下载,最后就是测量用的电容。因为本人小白,但是采用德州TI的芯片测量灵敏度和延时想必有保证,但最后还是需要时间测试一下才行。 2.1.3 硬件组装使用前需要对土壤湿度传感器进行校准 2.1.4 程式代码流程如下:
2.2 识别取证系统(RPi)受限于microbit的IO数量和计算能力,将识别取证功能独立出来,树莓派和microbit之间进行通讯。
这里我们选择无线网络进行通讯,wireless增加了灵活性,同时bt有时候会跑飞。在RPi端的使用Python进行编程。 我们采用的摄像头可视角小于180°,所以设想将摄像头安装在云台上,由RPi识别出偷吃贼入侵的方向调转摄像头进行识别取证,我们这里采用PIR阵列进行定位。 2.2.1 基于红外热释电传感器的空间定位相信很多人都看过连姆尼森的经典电影《飓风营救2》,里面就有通过投掷手雷听**声时间差来判断地点的片段。另外,我们知道一个小常识来判断打雷的地方离自己有多远,就是看到闪电和听到雷声的时间差乘以340米进行估算。这里的原理类似,可是看时间差。
AM412 红外热释电传感器普通的PIR模块具有两个可变电阻用以调节检测范围(阈值)和持续时间,我们拿到的DF模块是固定范围和时常的,比较遗憾。关于红外热释电模块的详细讲解可以看杜洋的视频课程工欲善其事 。
DF的模块采用AM412传感器,可以从这里下载数据手册。需要注意:
另外还要注意该PIR传感器探测视角的问题,并不是前方180°:
菲涅尔透镜菲涅尔透镜 (Fresnel lens) ,又名螺纹透镜,镜片表面一面为光面,另一面刻录了由小到大的同心圆,它的纹理是根据光的干涉及扰射以及相对灵敏度和接收角度要求来设计的。
左侧为普通透镜,右侧为菲涅尔透镜。 菲涅尔透镜作用有两个:一是聚焦作用,即将热释红外信号折射(反射)在PIR上,第二个作用是将探测区域内分为若干个明区和暗区,使进入探测区域的移动物体能以温度变化的形式在PIR上产生变化热释红外信号。
PIR模块采用具有热释电效应的感受器,将生物热红外信号转换为电信号。声音的传播速度是343.2 m/s,生物热红外信号属于红外线,是介于微波和可见光之间的电磁波,也就是约等于光速。 Kalman滤波算法获取的信号中存在干扰,需要滤掉。【To-do】 硬件组装
云台用的DF的迷你2自由度云台,可是和舵机轮盘 不合。。。
程式代码2.2.2 基于计算机视觉的图像物种识别系统使用Python + SimpleCV库在树莓派上实现,具体内容【Todo。。。】——楼主你咋又todo啊,不知道一般todo的都没下文了吗? 2.2.3 分步代码a) RPi通知
详细我就不多讲了,雪球越滚越大,看看paho-mqtt的API手册,我这里单向和mb通讯,仅需要publish。 b) RPi 摄像头捕捉上传识别拍照并上传到百度网盘,调用simpleCV进行识别,需要安装python3-picamera和bypy,参考我之前写的文章:
c) 定位转向抓拍通过三个PIR模块将空间三等分(120°),云台将摄像头带向先捕捉到运动信号的PIR模块方向,然后抓拍。 2.2.4 综合代码
云台部分参考文末链接,我的转盘不合没搞起来。。。 2.3 microbit警告驱离系统比较简单,接收树莓派传来的告警信息,响起大喇叭,开启振动器(大号的绑个蛇效果更好),闪烁高亮LED:
这里新建一个Topic_1,用于接收控制命令。
3、总结完整代码如下:https://makecode.microbit.org/_aaxU6JLY105L
我们选择12小时(43200000ms)检测一次。第一轮使用过的功能如利用led矩阵和手机端功能都没复述,实际上想实现比较简单。其他一些功能受限于个人原因,暂时没实现/没加入,以后会进一步完善。 进一步扩充:
参考
|
萌萌哒新人
活跃会员
宣传大使
版主限定
牛X认证
老版主限定
创作达人
小蘑菇
编辑选择奖
ARD DAY
编辑选择奖
摸鱼团员
编辑选择奖
志“童”道合
编辑选择奖
编辑选择奖
编辑选择奖
沪公网安备31011502402448© 2013-2026 Comsenz Inc. Powered by Discuz! X3.4 Licensed