此作品使基于CH32V_EVB RISC-V开发套件以及TencentOS Tiny进行的开发。相对于传统手动分拣芒果,芒果分拣机可以快速高效的将成熟芒果和未成熟芒果进行分类,极大的减少了人力成本,农户或企业可以将资金重心转移至包装或销售上,从而提高利润。
E53_IA1扩展板采用了E53标准接口,包含了一个补光灯,一个BH1750光照强度传感器,一个小的贴片电机,一个温湿度传感器SHT30,一个其中补光灯和贴片电机使用普通GPIO控制,BH1750和SHT30使用IIC接口通信。
CH32V307作为主控,使用EasyTrace算法通过OV2640进行芒果颜色检测。检测到绿色芒果时,传送带停止运行,当人工或机械臂去除绿色芒果后传送带继续运行,可以随时通过腾讯连连小程序查看机器运行状况。
EasyTrace算法(作者ilovepp 原文在stm32上实现颜色跟踪 (amobbs.com 阿莫电子论坛))可以对单一颜色物体进行实时跟踪识别,算法特点如下:
芒果成熟与外表颜色有关,所以选择此算法进行检测,以下是颜色参数
TARGET_CONDITION_t condition[TRACE_NUM]={
{
80, //目标色度,H_MIN,H_MAX 蓝色130-170 绿色80-120 红色200-270
120,
50, //目标饱和度,S_MIN,S_MAX
230,
50, //目标亮度,L_MIN,L_MAX
240,
10, //目标最小宽度,WIDTH_MIN
10, //目标最小高度,HEIGHT_MIN
120, //目标最大宽度,WIDTH_MAX
120, //目标最大高度,HEIGHT_MAX
},
};
其他颜色可以使用HSL计算器进行查找(HSL 颜色 (w3schools.cn))
这次项目运用到TencentOS Tiny组件中提供的ESP8266腾讯云固件,以及基本的task、信号量、循环队列。
连接腾讯云要使用创建设备的三元组进行注册,然后定义数据发送格式:
#define PRODUCT_ID "6WNFBKZBSC"
#define DEVICE_NAME "dev001"
#define DEVICE_KEY "JfCutCtSyN0+6vHwKG46iA=="
#define REPORT_DATA_TEMPLATE "{\\\"method\\\":\\\"report\\\"\\,\\\"clientToken\\\":\\\"00000001\\\"\\,\\\"params\\\":{\\\"color\\\":\\\"%s\\\"}}"
通过队列中存储的字符串进行判断并赋值到物模型的对应的值:
tos_sem_pend(&status_change, TOS_TIME_FOREVER);
err = tos_chr_fifo_pop(&status_fifo, &dev_status);
if (err != K_ERR_NONE) {
printf("status_fifo pop fail, err is %d\r\n", err);
continue;
}
if (dev_status == 0) {
snprintf(payload, sizeof(payload), REPORT_DATA_TEMPLATE, "null");
} else if (dev_status == 1) {
snprintf(payload, sizeof(payload), REPORT_DATA_TEMPLATE, "green");
} else {
printf("device status unknown!");
continue;
}
通过此次活动,更加熟悉了TencentOS Tiny操作系统,也学到了新的视觉识别算法。另外这也是我第一次使用RISC-V的MCU,在使用方面与STM32很类似,CH32V307还拥有DVP这样的外设很方便使用摄像头设备,新手也可以快速上手。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。