基于KNN算法的智能分类垃圾桶模型设计与制作

2020-06-133.7万
精华项目
AI 快速预览详细 收起
本文介绍了南师附中树人学校学生唐羽萱设计的一款基于KNN算法的智能分类垃圾桶。该项目使用Arduino Uno和HuskyLens AI视觉传感器,能够识别并分类垃圾。通过KNN算法,垃圾桶能够学习并识别不同的垃圾类型,并通过机械结构自动投放到相应的垃圾桶中。这个项目不仅解决了传统垃圾桶无法智能分类的问题,还为学生们提供了一个实践人工智能技术的机会。


南师附中树人学校:唐羽萱
【项目背景】
        2019年可以说是中国垃圾分类的元年,因为在这一年“上海垃圾分类于7月1日正式施行。”而目前普遍使用的分类垃圾桶只是通过颜色和标签指示分类信息,在上海市垃圾分类试行期间,居委会大妈会站在公共垃圾桶旁边指导,“你是什么垃圾?”成为市民每天不得不经受的拷问。在这样一个大背景下,人们迫切需要一台能够智能分类的垃圾桶。于是我们设计了一款基于KNN算法的智能分类垃圾桶模型。
基于KNN算法的智能分类垃圾桶模型设计与制作图1

【项目展示】
基于KNN算法的智能分类垃圾桶模型设计与制作图4
基于KNN算法的智能分类垃圾桶模型设计与制作图2
基于KNN算法的智能分类垃圾桶模型设计与制作图3

【功能简介】
(1)基于KNN算法识别,进行垃圾分类。
(2)将垃圾放入识别区后,垃圾桶智能识别,分区投放。
(3)当出现无法识别的垃圾后,人工强制学习识别。
(4)灯光指示、语音播报,让垃圾分类投放更简单。

【器材列表】
序号 名称 数量
1 Arduino Uno 1
2 IO 传感器扩展板 V7.1 1
3 HuskyLens AI 视觉传感器 1
4 数字大按钮 4
5 LED 1
6 9g金属舵机 2
7语音合成模块、小喇叭 1
8 7.4V锂电池 1
9 螺丝 若干
10 铜柱 若干
11 奥松板 若干

【制作过程】
1.KNN算法
KNN(k-nearest neighbors)作为一个入门级模型,既简单又可靠,对非线性问题支持良好,虽然需要保存所有样本,但是仍然活跃在各个领域中,并提供比较稳健的识别结果。KNN就是在特征空间中找出最靠近测试样本的k个训练样本,然后判断大多数属于某一个类别,那么将它识别为该类别。
基于KNN算法的智能分类垃圾桶模型设计与制作图5
针对测试样本 Wu,想要知道它属于哪个分类,就先for 循环所有训练样本找出离 Wu 最近的 K个邻居(假设k=5),然后判断这 K个邻居中,大多数属于哪个类别,就将该类别作为测试样本的预测结果,如上图有4个邻居是橙色,1个是绿色,那么判断Wu的类别为“红色”。
2.系统设计
我们设计的这款智能分类垃圾桶具备学习能力,可以通过学习记录相关垃圾分类,从而能够做到智能识别分类。并通过相应机械结构,把不同类的垃圾自动投放不同的垃圾桶中。对于垃圾桶不能识别的垃圾,可以通过人工方式强制定义所属类别,然后在进行垃圾分类投放。
基于KNN算法的智能分类垃圾桶模型设计与制作图6
使用流程:定义垃圾分类,垃圾学习初始化——垃圾识别(可识别的垃圾)——
2.结构设计
垃圾桶结构设计我将其划分三部分,第一部分是垃圾桶结构,第二部分垃圾分类投放结构,第三部分视觉识别传感器支架结构。本次结构件设计采用lasermaker设计,激光切割出相关结构件。
(1)垃圾桶结构设计
垃圾桶整体结构设计上,采用Lasermake中的快速造盒功能,生成一个盒体的快速原型,再对其细节进行修改,具体如下所示:
后背板:在背板位置上增加传感器支架固定孔位(①处),主控安装孔位(②处)和分类投放装置固定件支架孔位(③处)。
基于KNN算法的智能分类垃圾桶模型设计与制作图7
左右侧板:左右侧板修改如下所示,右侧板留有主控的外置电源接孔和分类投放装置固定件支架孔位(①处),左侧板留有分类投放装置固定件支架孔位(②处)
基于KNN算法的智能分类垃圾桶模型设计与制作图8
前面板:前面板修改如下图所示,主题装饰画,由外部导入(①处),垃圾入口处(②处),舵机安装孔(③处),喇叭安装孔(④处)按钮及指示灯安装孔(⑤处)。
基于KNN算法的智能分类垃圾桶模型设计与制作图9
分类投放支架:传感器支架修改如下所示,垃圾推送舵机安装孔位(①处),分类投放装置旋转空间(②处)。
基于KNN算法的智能分类垃圾桶模型设计与制作图10
垃圾桶前挡板:垃圾桶前挡板添加标题“二哈垃圾桶”。
基于KNN算法的智能分类垃圾桶模型设计与制作图11
分类垃圾桶:三个分类垃圾桶设计如下,采用前高后低的设计,确保垃圾可以落入垃圾桶内。前面板分别倒入图片形成雕刻图案(如①⑥),底板(②),后背板(③),左右侧板(④⑤)。
基于KNN算法的智能分类垃圾桶模型设计与制作图12
垃圾推送结构:垃圾推送结构是使用舵机把识别出的垃圾推送至垃圾口内。推送杆(如①),增厚片(②)

基于KNN算法的智能分类垃圾桶模型设计与制作图14
(2)分类投放结构设计:分类投放机械结构由舵机带动导流槽转向不同角度,向不同的垃圾桶倾倒垃圾。由于导流槽与舵机之间通过一个等腰直角的三角形连接件固定(如③)。因此导流槽左右侧导板,接近垃圾倾倒口处设计成切割掉一部分(如①处),导流槽底板设计(如②)。

基于KNN算法的智能分类垃圾桶模型设计与制作图13
(3)视觉识别传感器支架结构设计:视觉识别传感器支架,可以调整视觉传感器与待识别垃圾之间的距离。固定视觉识别传感器孔位在①处,调整高度孔在②处。
基于KNN算法的智能分类垃圾桶模型设计与制作图15
3.电路连线
系统电路连接如图所示,HuskyLens AI视觉识别传感器接I2C口,LED接D10口(识别指示灯),确认倾倒按钮接D9口,定义有害垃圾按钮接D7口,定义厨余垃圾按钮接D6口,定义可回收垃圾接D5口,分类投放舵机接D3口,推送垃圾的舵机接D12口。
基于KNN算法的智能分类垃圾桶模型设计与制作图16
5.代码编写
代码编写如下所示分为系统主程序和有害垃圾、厨余垃圾、可回收垃圾、定义处理四段子程序。
[mw_shl_code=actionscript3,false]*!
* MindPlus
* uno
*
*/
#include <DFRobot_Servo.h>
#include <DFRobot_SYN6288.h>
#include <DFRobot_HuskyLens.h>
// 函数声明
void DF_YouHaiLaJi();
void DF_DingYiChuLi();
void DF_ChuYuLaJi();
void DF_KeHuiShouLaJi();
// 创建对象
Servo             servo_3;
Servo             servo_12;
DFRobot_HuskyLens huskylens;
DFRobot_SYN6288   syn6288;


// 主程序开始
void setup() {
        servo_3.attach(3);
        servo_12.attach(12);
        huskylens.beginI2CUntilSuccess();
        huskylens.writeAlgorithm(ALGORITHM_OBJECT_CLASSIFICATION);
        syn6288.begin(&Serial, 0, 1, 4);
        syn6288.setVolume(true, 16);
        syn6288.playText("智能垃圾分类", 0);
        delay(3000);
}
void loop() {
        huskylens.request();
        huskylens.clearOSD();
        if (huskylens.isAppear(2,HUSKYLENSResultBlock)) {
                if ((digitalRead(9)==1)) {
                        DF_YouHaiLaJi();
                }
                else {
                        DF_DingYiChuLi();
                }
        }
        if (huskylens.isAppear(3,HUSKYLENSResultBlock)) {
                if ((digitalRead(9)==1)) {
                        DF_KeHuiShouLaJi();
                }
                else {
                        DF_DingYiChuLi();
                }
        }
        if (huskylens.isAppear(4,HUSKYLENSResultBlock)) {
                if ((digitalRead(9)==1)) {
                        DF_ChuYuLaJi();
                }
                else {
                        DF_DingYiChuLi();
                }
        }
        if (huskylens.isAppear(1,HUSKYLENSResultBlock)) {
                huskylens.clearOSD();
                delay(1000);
                huskylens.writeOSD(String(" identification;"), 114, 35);
        }
}


// 自定义函数
void DF_YouHaiLaJi() {
        servo_3.angle(abs(45));
        delay(1000);
        servo_12.angle(abs(0));
        digitalWrite(10, HIGH);
        huskylens.writeOSD(String("Harmful waste"), 114, 35);
        syn6288.playText("有害垃圾", 0);
        delay(2000);
        digitalWrite(10, LOW);
        servo_3.angle(abs(90));
        delay(1000);
        servo_12.angle(abs(90));
}
void DF_DingYiChuLi() {
        if ((digitalRead(5)==1)) {
                huskylens.learnOnece(2);
        }
        if ((digitalRead(6)==1)) {
                huskylens.learnOnece(3);
        }
        if ((digitalRead(7)==1)) {
                huskylens.learnOnece(4);
        }
}
void DF_ChuYuLaJi() {
        servo_3.angle(abs(90));
        delay(1000);
        servo_12.angle(abs(0));
        digitalWrite(10, HIGH);
        huskylens.writeOSD(String(" kitchen waste"), 114, 35);
        syn6288.playText("厨余垃圾", 0);
        delay(2000);
        digitalWrite(10, LOW);
        servo_3.angle(abs(90));
        delay(1000);
        servo_12.angle(abs(90));
}
void DF_KeHuiShouLaJi() {
        servo_3.angle(abs(135));
        delay(1000);
        servo_12.angle(abs(0));
        digitalWrite(10, HIGH);
        huskylens.writeOSD(String("Recyclable waste"), 114, 35);
        syn6288.playText("可回收垃圾", 0);
        delay(2000);
        digitalWrite(10, LOW);
        servo_3.angle(abs(90));
        delay(1000);
        servo_12.angle(abs(90));
}
[/mw_shl_code]


6.设备组装
第1步:拿出识别指示LED用螺丝螺母固定如下图所示,将LED模块电路板垫高一断距离,避免电路板上的焊点与垃圾桶体直接接触。

基于KNN算法的智能分类垃圾桶模型设计与制作图18
图20垫高模块电路板
第2步:将上步中的LED按垃圾桶前面板对应孔位装入,再拿出2个螺母将其固定。
基于KNN算法的智能分类垃圾桶模型设计与制作图19基于KNN算法的智能分类垃圾桶模型设计与制作图17

图21固定LED模块
第3步:依次对几个按钮按上述方法进行安装在前面板上。
基于KNN算法的智能分类垃圾桶模型设计与制作图40

图22安装各按钮
第4步:将舵机和音箱安装到前面板上。

基于KNN算法的智能分类垃圾桶模型设计与制作图21
图23安装舵机和音箱
第5步:取出舵机舵棒,将其放入垃圾推送结构中,并用胶水粘贴增厚片如下图所示。

基于KNN算法的智能分类垃圾桶模型设计与制作图26
图24安装舵棒

基于KNN算法的智能分类垃圾桶模型设计与制作图22基于KNN算法的智能分类垃圾桶模型设计与制作图20
图25胶水粘贴增厚片
第6步:将第5步中安装好的垃圾推送结构,安装到前面板舵机上。
基于KNN算法的智能分类垃圾桶模型设计与制作图41

图26安装推送结构
第7步:取出后背板和Arduino Uno主控器,先在背板上对应Uno的孔位,固定铜柱。
基于KNN算法的智能分类垃圾桶模型设计与制作图25

图27固定Uno的铜柱
第8步:将Uno主控对应卡在铜柱上,用螺丝固定。再拿出拓展板叠加到Arduino主控之上。
基于KNN算法的智能分类垃圾桶模型设计与制作图23

图28固定Arduino主控
基于KNN算法的智能分类垃圾桶模型设计与制作图24

图29叠加拓展板
第9步:拿出HuskyLens AI 视觉传感器及支撑架、螺丝及调整支架
基于KNN算法的智能分类垃圾桶模型设计与制作图27

图30固定HuskyLens AI 视觉传感器
基于KNN算法的智能分类垃圾桶模型设计与制作图29

图31安装再调整支撑架上
基于KNN算法的智能分类垃圾桶模型设计与制作图28

图32
第10步:将第9步中的HuskyLens AI 视觉传感器组合体与后背板选择合适的安装孔位进行安装。
基于KNN算法的智能分类垃圾桶模型设计与制作图31

图33固定HuskyLens AI 视觉传感器

基于KNN算法的智能分类垃圾桶模型设计与制作图30
图34从垃圾桶背板走线孔穿线与传感器连接
第11步:拿出分类投放机构固定件安装在后背板上。
基于KNN算法的智能分类垃圾桶模型设计与制作图33

图35安装分类头饭机构固定件
第12步:组装垃圾分类投放结构,用热熔胶将垃圾分类投放结构件组合成导流槽。再将连接件与舵机导流槽粘合成一体。
基于KNN算法的智能分类垃圾桶模型设计与制作图36

图36热熔胶粘和导流槽
基于KNN算法的智能分类垃圾桶模型设计与制作图32

图37组装垃圾分类结构

基于KNN算法的智能分类垃圾桶模型设计与制作图34
图38安装垃圾分类机构

基于KNN算法的智能分类垃圾桶模型设计与制作图35
图39注意安装时,电路连线整理整齐。
第13步:安装垃圾桶前档板
基于KNN算法的智能分类垃圾桶模型设计与制作图37

图40安装垃圾桶前挡板
第14步:将切割好的垃圾桶结构件组装成不同的桶。

基于KNN算法的智能分类垃圾桶模型设计与制作图38基于KNN算法的智能分类垃圾桶模型设计与制作图39


第15步:垃圾桶整体组装完成。

基于KNN算法的智能分类垃圾桶模型设计与制作图42

z20.jpg (57.74 KB, 下载次数: 5572)

STEM教育 · 基于KNN算法的智能分类垃圾桶模型设计与制作_image_3.webp

图1.jpg (125.14 KB, 下载次数: 5870)

STEM教育 · 基于KNN算法的智能分类垃圾桶模型设计与制作_image_6.webp

图3.jpg (84.93 KB, 下载次数: 5625)

STEM教育 · 基于KNN算法的智能分类垃圾桶模型设计与制作_image_9.webp

图4.jpg (65.09 KB, 下载次数: 5799)

STEM教育 · 基于KNN算法的智能分类垃圾桶模型设计与制作_image_12.webp

图2.jpg (69.11 KB, 下载次数: 5827)

STEM教育 · 基于KNN算法的智能分类垃圾桶模型设计与制作_image_15.webp

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(10)
Rickey
Rickey
您好,想请教一下这个AI视觉传感器是如何进行学习的哇
20060606
20060606
垃圾怎么从垃圾桶里倒出来?
twfolove
twfolove
垃圾不都是用垃圾袋装着的吗
hnyzcj
hnyzcj
作者
回复twfolove
垃圾袋装是看不见,也就分辨不出来了。有道理。哈哈哈
hnyzcj
hnyzcj
作者
回复twfolove
概念模型,
春秋大仙
春秋大仙
大师出品,必属精品!!
hnyzcj
hnyzcj
作者
回复春秋大仙
谁敢春秋大仙面前称大师。
春秋大仙,法力无边,攻无不克,战无不胜。春秋大仙,法力无边,仙福永享,寿与天齐。
DFHJM_IpFmV
DFHJM_IpFmV
陈老师的作品,赞一个@hnyzcj
DFHJM_IpFmV
DFHJM_IpFmV回复hnyzcj
嘻嘻
hnyzcj
hnyzcj
作者
回复DFHJM_IpFmV
谢谢
DFS1w2cb8o8
DFS1w2cb8o8
厉害厉害
gray6666
gray6666
升级的二哈能写代码了?
hnyzcj
hnyzcj
作者
回复gray6666
WIKI
gray6666
gray6666回复hnyzcj
我居然木发现
共3条回复,已加载2条,点击查看更多共3条回复,已加载全部
gray6666
gray6666
[Actionscript3] 求科普
hnyzcj
hnyzcj
作者
回复gray6666
把你二哈升级
汤果
汤果
清单里少了语音合成模块吧
hnyzcj
hnyzcj
作者
回复汤果
已添加,多谢提醒,哈哈哈
汤果
汤果
坐等更新~~~~~
- 没有更多了 -