提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

有需要源码参考的可以点赞在评论区留邮箱

K210识别垃圾

k210识别2

文章目录

  • 前言
  • 一、垃圾分类识别+舵机控制(K210)
  • 二、语音控制(K210+ld3320)(UART通信)
  • 三、满溢度距离传感器数据获取(STM32MP157)
  • 四、图像获取以及传输(STM32MP157)(UDP)
  • 总结

前言

最近做了一个多功能智能垃圾桶,主要用了k210开发板来做识别和控制以及用stm32mp157来做传感器数据采集以及图像传输。主要功能如下

垃圾分类识别+舵机控制

语音控制垃圾桶开关

检测垃圾桶的满溢程度

摄像头读取图像信息并通过UDP传输至客户端

一、垃圾分类识别+舵机控制

垃圾分类使用的开发板是K210

模型训练可以用mxyolov3平台,也可以用官方的训练平台(这个比较容易使用,但有数据集20M大小的限制),使用开发板前需要用KFLASH烧录.bin后缀的固件包,将训练完成的kmodel文件烧录至开发板,然后需要一段执行代码,后续的功能联调也是需要在识别代码基础上添加

识别完需要进行一些控制,不然结果也就只是结果。我在项目中通过pwm信号控制舵机转动,来识别垃圾桶的识别功能。

为了防止误判,我在识别代码里加了连续10帧检测同一物体才驱动舵机

识别控制

以下是舵机转动角度的函数,主要是改变PWM信号的占空比

def Servo(servo,angle):servo.duty((angle+90)/180*10+2.5)

二、语音控制

语音控制

ld3320语音模块控制垃圾桶的开关(也就是ld3320跟K210通信,K210控制舵机转动)

ld3320跟K210通过UART串口通信

ld3320模块,识别到垃圾桶打开的指令,就通过串口向K210发送‘aa’的数据,在K210端进行UART串口信息的检测,若收到的信息为‘aa’ 就控制舵机转动

read_data = uart_wifi.read()
#下面是开盖 并进入检测 servo是转动角度的函数if(read_data == b'bb'):Servo(S3,-30)flag = 1;
if(read_data == b'aa'):Servo(S3,60)flag = 0;

三、满溢度距离传感器数据获取(STM32MP157)

检测垃圾桶有没有满,距离检测主要用stm32mp157开发板上的ap3216c传感器。

对传感器数据的读取是读取设备文件数据,是通过文件 I/O 的方式来实现。在应用层编写代码读取设备下的数据即可

以下为传感器数据读取的代码

QString Ap3216c::readPsData()
{char const *filename = "/sys/class/misc/ap3216c/ps";int err = 0;int fd;char buf[10];fd = open(filename, O_RDONLY);if(fd < 0) {close(fd);return "open file error!";}err = read(fd, buf, sizeof(buf));if (err < 0) {close(fd);return "read data error!";}close(fd);QString psValue = buf;QStringList list = psValue.split("\n");return list[0];
}

四、图像获取以及传输(STM32MP157)(UDP)

获取开发板摄像头的数据,并通过UDP传输至客户端

在QT中使用UDP传输流程:

服务器端创建socket,就可以直接使用writeDatagram函数发送信息,在函数的参数中需要写入数据,数据大小接收端的IP,端口号

(使用TCP的话一般服务器端是需要创建socket,bind,listen监听,并accept客户端的connect,我们这里传输视频信息,用UDP延时会比较小,当然只是理论,我并没有测试过)

客户端创建socket,绑定自己的IP和端口号,就可以用readDatagram函数接收数据

这里就用自己的电脑作为客户端,来获取垃圾桶的实时状况。(其实这个功能只是我为了学习网络编程强加的,功能比较鸡肋,主要是学习)

服务器端的代码

//摄像头通过调用opencv库获取到的数据类型为mat 需要先转成QImage类型
//QImage类型的图像放入QByteArray中,然后进行base64编码的压缩
//接收端在进行base64解码
/* udp套接字 */QUdpSocket udpSocket;/* QByteArray类型 */QByteArray byte;/* 建立一个用于IO读写的缓冲区 */QBuffer buff(&byte);/* image转为byte的类型,再存入buff */qImage.save(&buff, "JPEG", -1);/* 转换为base64Byte类型 */QByteArray base64Byte = byte.toBase64();/* 由udpSocket以单播的形式传输数据,端口号为8888 */udpSocket.writeDatagram(base64Byte.data(), base64Byte.size(), QHostAddress("192.168.10.200"), 8888);

客户端代码

udpSocket = new QUdpSocket(this);
udpSocket->bind(QHostAddress("192.168.10.200"), 8888);
QByteArray datagram;
udpSocket->readDatagram(datagram.data(), datagram.size());//String-Base64编码转QByteArrayQByteArray decryptedByte;
decryptedByte = QByteArray::fromBase64(datagram.data());//比如读入一张BMP格式的文件到QByteArray对象中,再调用该函数,那么该函数就会根据QByteArray中数据进行解析,分析图像的格式等
QImage image;
image.loadFromData(decryptedByte);
videoLabel->setPixmap(QPixmap::fromImage(image));

总结

整个的项目用了2个架构的开发板K210(RISV-C)和stm32mp157(cortex-A)

主要是为了学习一些嵌入式方面的知识,并把他实际运用上。

智能垃圾分类垃圾桶(K210+stm32mp157)相关推荐

  1. 第七届工程训练比赛之智能垃圾分类

    2021第七届工程训练综合能力竞赛之智能垃圾分类 前言 写在前面:第一次写博客,想把这半年的备赛经历记录下来分享分享给大家,如有错误欢迎大家指正. 比赛成绩:1分23秒(播放宣传片到满载结束) 基本配 ...

  2. 计算机本科毕业设计-智能分类垃圾桶

    文章目录 1. 前言 2. 系统定义 2.1 硬件装置 2.2 软件功能模块 2.2.1 环境依赖 2.2.2 软件模块 3. 详细设计 3.1 硬件设计 3.1.1 硬件零件型号 3.1.2 智能垃 ...

  3. 物联网+智能垃圾分类回收系统解决方案

    一.方案背景 今年垃圾分类正式进入大众视野,不仅成为普通百姓最关心的话题,也再次将垃圾分类行业推向市场焦点.随着政策文件不断出台,明确到2020年46个重点城市基本建成生活垃圾分类处理系统,到2025 ...

  4. 基于STM32 STC15和SU-03T语音模块的智能语音垃圾桶设计

    一. 系统设计及框图: 本设计可以实现垃圾的自动识别和分类,通过离线语音模块SU-03T进行语音采集分辨,分析出不同的垃圾种类后MCU模块驱动不同的舵机开关来模拟垃圾桶的开启关闭.MCU模块可选择ST ...

  5. js等待5秒后执行_厦门同安首台智能垃圾分类回收柜机投用 扫二维码5秒后回收变现...

    居民在智能垃圾分类回收柜机前排起了队. 台海网9月11日讯 据厦门晚报报道 一秒扫描,五秒到账,垃圾分类实现智能化,不仅能自动识别称重,还能变废为宝,兑换成商品.昨天,一台智能垃圾分类回收柜机在同安区 ...

  6. CVPR2022:将X光图片用于垃圾分割,探索大规模智能垃圾分类

    关注并星标 从此不迷路 计算机视觉研究院 公众号ID|ComputerVisionGzq 学习群|扫码在主页获取加入方式 论文链接:https://openaccess.thecvf.com/cont ...

  7. CVPR:将X光图片用于垃圾分割,探索大规模智能垃圾分类

    关注并星标 从此不迷路 计算机视觉研究院 公众号ID|ComputerVisionGzq 学习群|扫码在主页获取加入方式 论文链接:https://openaccess.thecvf.com/cont ...

  8. 综合项目——智能分类垃圾桶

    综合项目--智能分类垃圾桶 一.讲在前面 之前做过许多项目,也写了许多工程代码,但是一直没能好好整理,导致我每做一个新的项目就跟重头开始似的,为了更好进行代码资料的管理,我决定开辟这个博客,作为我资料 ...

  9. 论文阅读——基于深度学习智能垃圾分类

    B. Fu, S. Li, J. Wei, Q. Li, Q. Wang and J. Tu, "A Novel Intelligent Garbage Classification Sys ...

最新文章

  1. AutoLISP将多段线各个端点坐标写入外部文件
  2. 北京招聘 | 百度智能生活事业群组小度科技招聘对话系统算法实习生、工程师...
  3. 带有Oracle Digital Assistant和Fn Project的会话式UI。 第二部分
  4. 中小学生学python_《中小学生Python编程入门指南》 附录一
  5. mysql1关闭_(2.1)学习笔记之mysql基本操作(启动与关闭)
  6. Mac OSX下的nano编辑器下载设置
  7. rhel系统启动过程_linux系统启动过程及运行等级详解
  8. SQL Server中的批处理排序和嵌套循环
  9. input单选框多选框时可用的事件
  10. 既然选择了远方,便只顾风雨兼程……
  11. Node.js安装教程
  12. 天猫专卖店运营计划书
  13. 光源基础知识及光源选型
  14. zencart和php是什么,什么是ZenCart ZenCart有什么特点 ZenCart模板
  15. 关于socket传输图片
  16. 六种礼仪帮助你赢得面试
  17. 强大的图片预览组件Viewer.js
  18. Truffle - 2 利用Truffle编写、测试智能合约并将其部署到不同的测试网络
  19. 李炎恢ecshop2.7.2安装教程与PHP5.5x不兼容的处理方法
  20. Python 基础(四):基础语法

热门文章

  1. 木马免杀原理详解(一)
  2. canvas中添加html,如何在DIV中添加html5 CANVAS
  3. 空间计量xsmle命令遇到(3200)error,
  4. JS修改class属性
  5. python 实现多线程编程
  6. 全球知名移动间谍软件FlexiSpy的分析(part2)
  7. php kindeditor 文件不存在_不能取得文件类型!,kindeditor=4.1.5文件上传漏洞复现
  8. 计算机总线接口规范协议,MIL-STD-1553B航空总线协议开发手册
  9. 基于RT-Thread Studio的FAL,EasyFlash,文件系统移植
  10. 【目标检测】【AnchorFree】【P-PicoDet】 移动端的目标检测器