1 Star 1 Fork 0

WF / smart-trash-can

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

智能垃圾桶

一、概述: 支持语音和网络控制两种方法来唤醒垃圾桶进行垃圾识别;智能识别垃圾种类后会自动开盖,并且语音播报该垃圾的种类,与此同时oled显示该垃圾的种类。

二、设计思路: 1、阿里云识别垃圾:阿里云里面并没有c语言的调用,所以我使用官网的python代码【garbage.py】封装成一个c语言函数【garbage.c】,该c函数可以获得到识别的垃圾类型,之后可以放在主函数内使用。 2、摄像头:摄像头使用的就是树莓派对应的摄像头,配置完成后,可以写个脚本来上电运行,打开实时监控即可,可以使用浏览器获取瞬间的照片保存到本地,方便阿里云进行识别。 3、语音模块:采用的su-03的语音模块,在智能公园的平台事先下载好离线的sdk,这样语音模块通过串口连接到树莓派即可。 4、舵机开盖:舵机是用的sg90,我将舵机的数据线接在树莓派的BCM的21引脚,做的驱动开发,即【servo.c】,只需要在应用层打开/dev/servo的设备文件即可操作舵机。 5、oled显示:涉及到i2c,我直接使用的wiringOP库里面的font.h,oled.c,oled.h等函数进行封装,即【myoled.c】,从而可以根据传过来的数据进行显示垃圾种类的字符。 6、网络控制:采用的socket编程,在垃圾桶的程序里建立一个服务端线程,在里面接受连接过来的客户端,进行收数据,发现收到open就进行垃圾识别并且开盖显示,也就是【socket.c】。

三、程序思路: 一开始先将阿里云的python接口初始化,再将串口初始化,串口是用来与语音模块进行通信的,再将oled初始化;创建并发的三个线程,分别为:语音唤醒,阿里云垃圾识别,网络控制;这三个线程同时执行,通过互斥锁和条件变量可以控制语音唤醒和网络控制,当这两个线程发生变化,也就是语音线程去唤醒了语音模块要进行垃圾识别,网络发来了open代表需要开始识别垃圾类型了;此时会发一个信号给阿里云的垃圾识别,阿里云线程就在wait等待中被唤醒开始进行拍照再上传阿里云平台进行识别,识别完成后将对应的垃圾类型输出且将每一种垃圾种类进行数据的保存,并且标上序号,此时每个垃圾种类抖都有对应的数据表示;这时候再创建三个线程,因为这三件事要同时进行,分别为:垃圾桶开盖,语音播报,oled显示垃圾种类;简单来说就是当垃圾识别完成后这三件事要一起作,首先是垃圾桶开盖,此时往打开的舵机驱动设备写入打开的角度即可;语音播报就是将垃圾种类的数据信息通过串口发给语音模块,然后语音模块进行识别,再进行播报;oled显示就是通过垃圾种类的数据进行选择输出的显示内容;最后舵机线程在延时5秒后自动关盖;到此整个智能垃圾桶的功能就全部完成。

/* 首先要版本要是python3,其次还需要python3的dev包,可以通过 dpkg -l | grep libpython3 | grep dev 查看,没有的话就需要安装 sudo apt install libpython3.9-dev  */

// 打开摄像头实时监控(& 是指后台执行)
./mjpg.sh &

// 添加环境变量(导入环境变量才能进行阿里云识别)
export ALIBABA_CLOUD_ACCESS_KEY_ID="***"
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="***"

// 舵机数据口的驱动编译(树莓派BCM引脚的21)
make
insmod servo.ko
chmod 777 /dev/servo

// 编译运行
gcc main.c garbage.c myoled.c oled.c socket.c -o main -I /usr/include/python3.9/ -l python3.9 -lwiringPi -lpthread

// 执行
./main

// 可以切换到另外一个界面执行网络连接,open之后即可开始识别
nu 192.168.18.11 9999
open

// 可以直接呼喊“你好小陌”,触发语音自动识别垃圾;也可以通过串口发送数据
AA 55 46 00 55 AA

空文件

简介

支持语音和网络控制两种方法来唤醒垃圾桶进行垃圾识别;智能识别垃圾种类后会自动开盖,并且语音播报该垃圾的种类,与此同时oled显示该垃圾的种类。 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/NUISTWF/smart-trash-can.git
git@gitee.com:NUISTWF/smart-trash-can.git
NUISTWF
smart-trash-can
smart-trash-can
master

搜索帮助