[RISC-V MCU 创新应用比赛] 基于CH32V307的智能垃圾桶及其信息系统

[复制链接]
 楼主| 红墙白雪 发表于 2023-2-13 21:26 | 显示全部楼层 |阅读模式
本帖最后由 红墙白雪 于 2023-3-2 23:28 编辑

#技术资源#     #申请原创#    基于CH32V307的智能垃圾桶及其信息系统

一、项目简介
本设计是一个智能垃圾桶及其信息管理系统,主要解决了一些卫生和管理的问题。第一个问题是人与垃圾桶接触和垃圾分类的问题,利用语音识别来自动开启对应的垃圾桶盖;第二个问题是远离市电地方投放垃圾桶问题,我们采用太阳能电池板供电;第三个问题是垃圾及时清运和垃圾桶合理配置问题,我们采用光电传感器检测每个单体垃圾桶是否满,一旦满了就通过板载的以太网模块或WiFi模块给物联网平台发送数据,利用手机APP通知清运者,提升垃圾桶清运更换时间,并且记录垃圾桶开盖次数,利用此数据分析同一区域范围人丢垃圾的活动规律,优化垃圾桶的投放配置。

二、硬件设计
1375063eb50a48c7ea.png
模块选择及应用
CH32V305/7系列是基于32位RISC-V设计的互联型微控制器,配备了硬件堆栈区、快速中断入口,在标准RISC-V基础上大大提高了中断响应速度。加入单精度浮点指令集,扩充堆栈区,具有更高的运算性能。扩展串口UART数量到8组,电机定时器到4组。提供USB2.0高速接口(480Mbps)并内置了PHY收发器,以太网MAC升级到千兆并集成了10M-PHY模块。
6552463eb50acefb65.png
使用红外热释电传感器是为了出于对减少语音模块受到来自外界的干扰以及减少功耗,即只有检测到人时语音模块才会被正常唤醒,其余时刻处于休眠状态。语音识别模块监测外界的语音输入并进行语音识别,并将识别结果通过串口传到MCU中,MCU将根据接收到的指令进行后续的操作。
3442963eb50b5cc891.png
舵机采用MG995模块,它位于垃圾桶的翻盖处,当MCU发送动作指令后,舵机将会旋转从而打开桶盖,并在垃圾投递结束后复位舵机关闭桶盖。作为智能垃圾桶的动作执行模块,在智能垃圾桶中它的主要作用是接收MCU发送的动作指令,并根据相应的指令打开对应的垃圾桶做到垃圾的精准分类。
6166063eb50c2b9bd4.png
本次设计所采用的供电电源为锂电池,在充电模块中通过安置在桶盖的太阳能板将太阳能转换为电能并利用充电升压电源板保护锂电池充电,以此达到减少能源消耗和低碳的效果。
9563663eb50ca1b22a.png
WiFi模块采用ESP8266芯片,将智能垃圾桶连接到WiFi无线网络之中,是实现阿里云平台和APP上数据显示的关键步骤。在本次设计中,ESP8266采用MQTT协议将MCU中的实时数据上传至阿里云平台,再通过阿里云平台将数据流转至智能垃圾检测终端APP中,实现智能垃圾桶数据的远距离传输。传输的数据主要为各个垃圾桶的状态和截至当前时刻的人流量。
2214763eb50df99687.png
智能垃圾桶的容量感知采用E18-D80NK光电传感器模块,智能垃圾桶将检测距离调整至3cm并在检测到容量已满时进行多次检测以提高智能垃圾桶的精准性和准确性。
1485163eb50d6106e1.png
扩展板电路介绍
为了方便各模块与开发板连接,我们制作了一块扩展板,可以扣在开发板上面,然后插上各模块。
实物图如下图所示:
4197663eb50ebbbb18.jpg
PCB如下图所示:
764763eb50f3ab035.png
原理图如下图所示:
7147863eb51011e24c.png
扩展排母是与开发板的各个信号线,电源线的排针连接;升压电路是将锂电池的电压升至12V给舵机供电;垃圾桶接口是和各个垃圾桶接线,进行供电以及进行信号传输;热释电传感器接口是接热释电传感器;ESP8266接口接ESP8266模块;语音模块接口接语音识别模块;充电电路是除了太阳能锂电池充电板以外加的外接供电锂电池充电电路;复位电路对单片机信号进行复位。
作品完整图片:
fe487e0dc3a5d188d6a081d477d0ffa.png
三、软件说明
集成开发环境(IDE)为“MounRiver Studio”,详情可见其官网:http://www.mounriver.com/
8520163eb51577d55d.png
本系统流程为,先初始化,检测是否有人,如果有人则进一步检测是否有语音指令,否则去检测垃圾是否已满。如果有语音指令,则打开对应的垃圾桶盖子,否则去检测垃圾是否已满。接着把人数统计上传到阿里云平台,并且更新收集APP显示。继续检测垃圾是否已满,如果已满,把人数统计上传到阿里云平台,并且更新收集APP显示,否则检测是否有人,形成一个循环。
数据传输模块
数据传输模块是对垃圾桶容量的状态和人流量数据进行打包整合,在这里为了进一步提高智能垃圾桶的应用场景,我们设置了两种传输方式,上传到上位机。

ESP8266传输部分代码
ESP8266使用AT+MQTTPUB的方式传输,这里我们要用到一个sprintf函数,对数据进行整合。
  1. bool ESP8266_aliyun_PUB(void)
  2. {
  3.     char param[512];
  4.     char jsonBuf[1024];
  5.     sprintf(param,"{\\"Device1\\":\\"%d\\" \\,\\"Device2\\":%d \\,\\"Device3\\":%d \\,\\"Device4\\":%d \\,\\"pedestrian_volume\\":%d }",device_1,device_2,device_3,device_4,rll);
  6.     sprintf(jsonBuf, "%s", param);
  7.     return ESP8266_MQTTPUB(User_ESP8266_MQTTServer_Topic,jsonBuf);
  8. }
以太网传输部分代码
为了适应没有WIFI的环境,我们也设计了可以选择使用板载的以太网接口,进行数据传输。
  1. void MQTT_Publish(char *topic, int qos, char *payload)
  2. {  
  3.     MQTTString topicString = MQTTString_initializer;
  4.     u32 payloadlen;
  5.     u32 len;
  6.     u8 buf[1024];

  7.     topicString.cstring = topic;
  8.     payloadlen = strlen(payload);
  9.     len = MQTTSerialize_publish(buf,sizeof(buf),0,qos,0,packetid++,topicString,payload,payloadlen);
  10.     Transport_SendPacket(buf,len);
  11. }
垃圾桶容量检测模块

垃圾桶容量检测的核心程序如下所示,采用外部中断的方式,通过对GPIOB0引脚的变化来判断垃圾桶是否已满,并传输垃圾桶当前状态至上位机,此处测试传输采用ESP8266传输。

  1. void INF0_IRQHandler(void)
  2. {

  3.     if(EXTI_GetITStatus(INF0_INT_EXTI_LINE) != RESET)
  4.     {
  5.         Delay_Ms(1000);
  6.         if(GPIO_ReadInputDataBit(INF0_INT_GPIO_PORT,INF0_INT_GPIO_PIN) == 0 )
  7.         {
  8.             Delay_Ms(5000);
  9.             if (GPIO_ReadInputDataBit(INF0_INT_GPIO_PORT,INF0_INT_GPIO_PIN) == 0)
  10.             {
  11.                 device_1 = 1;
  12.                 ESP8266_aliyun_PUB();
  13.             }
  14.         }
  15.         EXTI_ClearITPendingBit(INF0_INT_EXTI_LINE);
  16.         Delay_Ms(5000);
  17.         device_1 = 0;
  18.         ESP8266_aliyun_PUB();
  19.     }
  20. }
语音识别模块

语音识别模块核心代码如下所示,CH32V307会根据串口通讯接收到的信息进行判断,控制舵机打开对应的垃圾桶,并传输信息到上位机,此处测试采用ESP8266进行测试传输。

  1. void Language_recognition(uint8_t temp)
  2. {
  3.     if(junk_type[1]==0)
  4.         {
  5.             if(junk_type[0] != 161)
  6.                 junk_type[0]=temp;
  7.             else
  8.                 junk_type[1]=temp;
  9.         }
  10.     else
  11.         {
  12.             junk_type[0] = 0;
  13.             junk_type[1] = 0;
  14.             if(junk_type[0] != 161)
  15.                 junk_type[0]=temp;
  16.             else
  17.                 junk_type[1]=temp;
  18.         }

  19.     Delay_Ms(5);
  20.   if (junk_type[0]==161 && junk_type[1]!=0)
  21.   {

  22.     if (junk_type[0] == 161 && junk_type[1] == 5)
  23.     {
  24.         rll++;
  25.         ESP8266_aliyun_PUB();
  26.         TIM_SetCompare1(TIM5,5);
  27.         Delay_Ms(5000);
  28.         TIM_SetCompare1(TIM5,15);
  29.         Delay_Ms(5000);
  30.         TIM_SetCompare1(TIM5,5);
  31.     }
  32. }

四、物联网平台数据展示

我们可以在阿里云物联网平台创建多个垃圾桶设备,去模拟一个社区的多个垃圾桶放置点或者一个城市的各个垃圾桶放置点。

8426063eb51180e42d.png

每个垃圾点可以看到当前垃圾桶的状态是否已满,也可以看到垃圾桶的人流量,如果当前站点垃圾桶人流量高,我们就可以在附近多设置一些垃圾桶点进行优化。

6999663eb511fe7534.png

我们也设计了一款手机APP可以看到垃圾桶的数据,如果垃圾桶已满,可以使环卫者及时清运。


6622963eb5185a834c.png


五、实物功能演示
bilibili视频链接: https://b23.tv/VYNNBb6




评论

厉害  发表于 2023-7-7 19:18
micky_xie 发表于 2023-2-16 16:44 | 显示全部楼层
单个红外传感器并不能准确检测桶的满溢状态,实际使用会产生许多误判。

评论

红外传感器设置了检测到物体五秒钟内都存在,才会进一步作出反应,也不是检测到垃圾就立马误报,在投垃圾过程中不会误报。当然,如果放置多个传感器效果自然会更好。  发表于 2023-3-2 23:23
minzisc 发表于 2023-3-2 10:18 | 显示全部楼层
这个可以实现垃圾分类的吗?              

评论

可以的,你需要说出是什么垃圾,垃圾桶会打开相应的桶盖。  发表于 2023-3-2 23:24
jkl21 发表于 2023-3-2 10:30 | 显示全部楼层
这个物联网起到了什么作用              

评论

把垃圾桶信息传递给清洁人员,使垃圾满后及时清运。也可以统计当前地区***量,根据***量设计垃圾桶点数量  发表于 2023-3-2 23:25
mollylawrence 发表于 2023-3-2 10:47 | 显示全部楼层
这个怎么实现大垃圾桶的控制?              

评论

可以使用大号的电机和驱动器  发表于 2023-3-2 23:26
averyleigh 发表于 2023-3-2 11:19 | 显示全部楼层
可以加上语音识别的功能吗?              

评论

是有语音识别的啊  发表于 2023-3-2 23:26
lzmm 发表于 2023-3-2 11:31 | 显示全部楼层
这个在实际应用中的可行性是多少?
hilahope 发表于 2023-3-2 11:37 | 显示全部楼层
怎么实现垃圾分类的识别?              

评论

在程序里目前存储了上百个垃圾名称,做出了分类  发表于 2023-3-2 23:27
burgessmaggie 发表于 2023-3-2 11:51 | 显示全部楼层
CH32V307可以做多少个舵机的控制呢?
pixhw 发表于 2023-3-4 12:47 | 显示全部楼层
舵机可以驱动多大的模块?              
maqianqu 发表于 2023-3-5 10:50 | 显示全部楼层
舵机可以驱动多大的模块?              
nomomy 发表于 2023-4-7 22:43 | 显示全部楼层
CH32V307做这个设备大材小用了。
louliana 发表于 2023-4-7 22:50 | 显示全部楼层
语音模块是单片机实现的 吗              
benjaminka 发表于 2023-4-7 23:00 | 显示全部楼层
智能垃圾桶的效果如何?              
mnynt121 发表于 2023-4-7 23:53 | 显示全部楼层
如何区分这个垃圾桶放置的位置              
bestwell 发表于 2023-4-8 13:31 | 显示全部楼层
这个网上有很多的现成模块。              
belindagraham 发表于 2023-4-8 13:48 | 显示全部楼层
使用的是什么联网的?              
tabmone 发表于 2023-4-8 14:01 | 显示全部楼层
可以真的应用到设备上吗              
yeates333 发表于 2023-4-8 14:07 | 显示全部楼层
物联网的效果**在哪里              
saservice 发表于 2023-6-10 13:19 | 显示全部楼层
高性能、低功耗、集成度高的微控制器芯片,支持多种通信协议和接口
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

6

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部