开发者成长激励计划-基于TencentOS Tiny的芒果分拣机Demo

2022-08-01 20:54:06 浏览数 (2)

方案介绍

此作品使基于CH32V_EVB RISC-V开发套件以及TencentOS Tiny进行的开发。相对于传统手动分拣芒果,芒果分拣机可以快速高效的将成熟芒果和未成熟芒果进行分类,极大的减少了人力成本,农户或企业可以将资金重心转移至包装或销售上,从而提高利润。

整体外观整体外观

硬件介绍

开发板

CH32V_EVB开发板CH32V_EVB开发板
  • 开发板采用沁恒RISC-V MCU CH32V307VCT6芯片,CH32V305/7系列是基于沁恒自研RISC-V架构微处理器青稞V4系列设计的32位工业级互联型微控制器,配备了硬件堆栈区、快速中断入口,在标准RISC-V基础上大大提高了中断响应速度。加入单精度浮点指令集,扩充堆栈区,具有更高的运算性能。扩展串口UART数量到8组,定时器到10组,其中4组高级定时器。提供USB2.0高速接口(480Mbps)并内置了PHY收发器,以太网MAC升级到千兆并集成了10M-PHY模块。
  • 64KB SRAM,256KB Flash
  • 板载Type-C接口WCH-LINK仿真器
  • 板载esp8266 WiFi模组,支持腾讯云固件
  • 板载以太网接口
  • 板载物联网俱乐部WAN Interface接口,可支持NB-IoT、WiFi、4G cat1、LoRa等模组
  • 板载物联网俱乐部E53 Interface接口,可扩展全系E53传感器以及音频模块;
  • 板载标准24P DVP摄像头接口,可支持最高500万像素摄像头;
  • 板载1.54寸 IPS高清显示屏,支持240*240分辨率;
  • 预留SD卡、用户按键、SPI Flash,
  • 扩展IO口,方便开发者扩展硬件模块

E53扩展板

E53_IA1扩展板E53_IA1扩展板

E53_IA1扩展板采用了E53标准接口,包含了一个补光灯,一个BH1750光照强度传感器,一个小的贴片电机,一个温湿度传感器SHT30,一个其中补光灯和贴片电机使用普通GPIO控制,BH1750和SHT30使用IIC接口通信。

OV2640摄像头

OV2640摄像头模块OV2640摄像头模块
  • CMOS UXGA图像传感器
  • 支持自动曝光控制、自动增益控制
  • UXGA最高15帧/秒,SVGA最高30帧/秒
  • 支持输出JPEG图像数据
  • 200W像素

整体架构

项目架构项目架构

CH32V307作为主控,使用EasyTrace算法通过OV2640进行芒果颜色检测。检测到绿色芒果时,传送带停止运行,当人工或机械臂去除绿色芒果后传送带继续运行,可以随时通过腾讯连连小程序查看机器运行状况。

算法使用

EasyTrace算法(作者ilovepp 原文在stm32上实现颜色跟踪 (amobbs.com 阿莫电子论坛))可以对单一颜色物体进行实时跟踪识别,算法特点如下:

  1. 代码只有300行,非常简单
  2. 识别一次只需要2至5毫秒,实时性强
  3. 只有1个API,使用方便
  4. 可配置”容错率“ ”迭代次数“等参数,可在”时间“实时性”“ ”准确度“ ”识别率“ ”误识率“ 之间寻找平衡点

芒果成熟与外表颜色有关,所以选择此算法进行检测,以下是颜色参数

代码语言:javascript复制
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))

HSL计算器HSL计算器
绿色芒果检测(一)绿色芒果检测(一)
绿色芒果检测(二)绿色芒果检测(二)

TencentOS Tiny运用

这次项目运用到TencentOS Tiny组件中提供的ESP8266腾讯云固件,以及基本的task、信号量、循环队列。

连接腾讯云要使用创建设备的三元组进行注册,然后定义数据发送格式:

代码语言:javascript复制
#define PRODUCT_ID              "6WNFBKZBSC"
#define DEVICE_NAME             "dev001"
#define DEVICE_KEY              "JfCutCtSyN0 6vHwKG46iA=="
代码语言:javascript复制
#define REPORT_DATA_TEMPLATE    "{\"method\":\"report\"\,\"clientToken\":\"00000001\"\,\"params\":{\"color\":\"%s\"}}"

通过队列中存储的字符串进行判断并赋值到物模型的对应的值:

代码语言:javascript复制
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 %drn", 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;
        }

腾讯云物联网平台开发

物模型定义物模型定义
腾讯连连交互开发腾讯连连交互开发
在线调试在线调试

视频演示

视频内容

PPT

芒果分拣机.pptx

工程代码

Mango.zip

总结

通过此次活动,更加熟悉了TencentOS Tiny操作系统,也学到了新的视觉识别算法。另外这也是我第一次使用RISC-V的MCU,在使用方面与STM32很类似,CH32V307还拥有DVP这样的外设很方便使用摄像头设备,新手也可以快速上手。

0 人点赞