任务名称
2022年_10月_D题:盲盒识别装置
任务要求
难度

一、任务

设计并制作一套利用电磁检测原理实现的识别装置,用于识别装在封闭盒子(盲盒)里的硬币及硬币组合。该装置的原理框图如图 1 所示。装有不同种类和数量的硬币组合构成“A、B、C”三类盲盒,装置能自动识别并指出各类盲盒中所包含的不同品种硬币,并在过程中显示“有无盲盒”、“识别中”、“识别完成”等工作状态。 

二、、要求

  1. “A 类盲盒”识别。能识别随机选取的任意一种 A 类盲盒,识别后显示盲盒内的硬币类型,识别时间不超过 5s,识别过程中不允许人工干预。(39 分)
  2. “B 类盲盒”识别。识别后显示盲盒内的硬币组合,识别时间不超过 5s,识别过程中不允许人工干预。(30 分)
  3. “C 类盲盒”识别。识别过程中,允许自动调或人工调整整盲盒角度,但不得触碰装置其他部件,每种盲盒识别计时不超过 25s。(24 分)
  4. 其他。(7 分)
  5. 设计报告。(20 分)

3、说明

  1. 盲盒由尺寸长宽高约为 3cm×3cm×3cm 的立方体塑料或硬纸板等不透明材质构成,也可以采用 3D 打印方式设计制作,并可打开或闭合;识别系统的传感器检测区域能兼容上述尺寸;盲盒可以由多种盒子存放不同物件的方式实现,也可以采用一个盒子,通过更换内部物件的方式实现。测试时盲盒自带,并可以方便打开检查。
  2. 盲盒内的硬币可选择目前市场流通人民币硬币中的 3 种不同硬币,每种硬币至少准备3个,同面值不同版本,可视为两种硬币;“A 类盲盒”为内部放置一枚硬币的盲盒,放置方式如图 2(a)所示,放置时允许紧贴立方体的
    某一平面,该面可以做标记,有利于放置时由选手决定放置方向,此类盲盒共有 3 种; “B 类盲盒”为内部放置了两枚硬币的盲盒,放置位置与 A 类相同,可紧靠某一面,如图 2(b)图所示,任选2种硬币的 2 种组合,由于叠放次序不同形成2个品种(如取1元、5角硬币各2枚,1元下和5角上算一个盲盒,5角下和1元上为另一个盲盒),取同种2枚硬币构成第3种盲盒(如取2个1元硬币构成一个盲盒),由选手决定放置方向;“C 类盲盒”为内部任意位置放置了一枚硬币的盲盒,其位置和角度不再紧贴表面,如图 2(c)所示,取2个同种硬币,2个不同位置放置构成2种盲盒(如取2个1元硬币,不同位置构成2个盲盒),再取另一种硬币,作为第 3 个盲盒,内部可以采用填充纸屑或海绵的方式固定硬币的位置,识别期间允许人工或自动方式调整盲盒的角度或位置。
  3. 识别装置传感方式只能采用电磁检测技术,不允许采用如颜色、图像识别等表面检测方式或称重压力传感检测方式来识别;只允许安装一个光电开关传感器用于判别检测区域有无盲盒,传感器需明确标识;允许安装多个电磁类传感器。
  4. 装置要有传感区域“有”、“无”盲盒指示,“识别过程中”和“识别完成”等工作状态指示;识别完成后结果显示稳定,如果存在跳动,认为识别失败。
  5. 识别装置操作时,应按如下流程:   
    • 一键启动(选择类),此时系统指示盲盒为“无”盲盒;
    • 摆放盲盒,指示“有”盲盒;
    • 识别盲盒;
    • 指示识别完成,显示结果;
  6. 在同类识别中,启动后不允许再按键操作; C 类识别时允许人工调整改变盲盒的角度,但不允许触碰其他部件;不允许使用遥控电路。
  7. 需显示硬币面值为结果,若相同面值的不同版本硬币视为不同硬币,后缀加不同版作区别,B 类结果显示时两类硬币间加“+”,要明确指示硬币在盲盒中的前后或上下位置。
参考答案

GPT-4.0给出的设计方案:


一、设计方案概述

该方案利用电磁检测原理,通过传感器检测封闭盒子中的硬币组合并进行分类。系统由传感器模块、信号调理电路、信号处理模块和显示控制模块构成。其工作流程是传感器感应硬币的存在和特征,通过信号调理和处理判断硬币类型,并在显示屏上输出识别结果。

二、方案论证

  1. 实时识别性能

    • 识别时间要求在5秒以内,对于C类首盒允许调试不超过25秒。
    • 电磁传感器选择快速响应型号,信号处理通过高效算法实现。
  2. 抗干扰与可靠性

    • 识别过程不得中断,选择具有抗干扰能力的传感器和屏蔽措施。
    • 软件层面添加信号滤波,增强识别信号的稳定性。

三、理论分析与计算

  1. 识别准确性:

    • 电磁传感器的灵敏度与硬币材质和数量有关。需通过实验数据分析配置传感器的阈值。
    • 选择高精度的传感器,减少错误率。
  2. 传感器响应与处理速度:

    • 确保传感器和信号调理电路的延迟在毫秒级范围。
    • MCU选用高性能型号,确保处理速率满足要求。

四、原理图设计要点

  1. 传感器电路设计

    • 选用电感式传感器,以检测磁性变化。调整LC电路参数以匹配不同硬币的特性。
    • 增设滤波电路减小高频干扰。
  2. 信号调理电路

    • 使用运放进行信号放大,确保信号强度适合后续处理。
    • 增设带通滤波器,增强特定频率信号。
  3. 信号处理模块

    • 使用MCU进行AD转换和数据处理,采用STM32系列高性能MCU。
    • 根据传感器数据预设比较和分类逻辑,实现硬币分类。

五、核心器件设计要点

  1. 电感式传感器

    • 灵敏度高,适应不同硬币材质。
    • 工作频率在10KHz以上,确保动态响应。
  2. 信号处理IC

    • 选用带有内置ADC的MCU,如STM32系列,方便实时数据采集与处理。
    • MCU需具备多通道ADC和较强的运算能力,频率至少72MHz。
  3. 显示控制模块

    • 选用低功耗LCD显示屏,通过I2C或SPI与MCU连接。
    • 界面设计简洁,易于读取识别结果。

六、重要功能的C代码

假设使用STM32 MCU进行数据处理和显示控制,提供核心C代码部分:

#include "stm32f4xx_hal.h"
ADC_HandleTypeDef hadc1;
I2C_HandleTypeDef hi2c1;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
static void MX_I2C1_Init(void);
void Display_Result(char* result);

int main(void) {
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_ADC1_Init();
    MX_I2C1_Init();
    
    uint32_t adc_value = 0;
    char result[20];

    while (1) {
        HAL_ADC_Start(&hadc1);
        if (HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY) == HAL_OK) {
            adc_value = HAL_ADC_GetValue(&hadc1);
            if (adc_value > THRESHOLD_A) {
                strcpy(result, "A类首盒");
            } else if (adc_value > THRESHOLD_B) {
                strcpy(result, "B类首盒");
            } else {
                strcpy(result, "C类首盒");
            }
            Display_Result(result);
        }
        HAL_ADC_Stop(&hadc1);
        HAL_Delay(100);
    }
}

void Display_Result(char* result) {
    // 通过I2C将结果发送到显示模块
    HAL_I2C_Master_Transmit(&hi2c1, LCD_ADDRESS, (uint8_t*)result, strlen(result), HAL_MAX_DELAY);
}

void SystemClock_Config(void) {
    // 系统时钟配置
}

static void MX_GPIO_Init(void) {
    // GPIO初始化
}

static void MX_ADC1_Init(void) {
    // ADC初始化
    ADC_ChannelConfTypeDef sConfig = {0};
    hadc1.Instance = ADC1;
    hadc1.Init.Resolution = ADC_RESOLUTION_12B;
    HAL_ADC_Init(&hadc1);
    sConfig.Channel = ADC_CHANNEL_0;
    sConfig.Rank = ADC_REGULAR_RANK_1;
    HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}

static void MX_I2C1_Init(void) {
    // I2C初始化
    hi2c1.Instance = I2C1;
    hi2c1.Init.ClockSpeed = 100000;
    hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
    hi2c1.Init.OwnAddress1 = 0;
    hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
    hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
    hi2c1.Init.OwnAddress2 = 0;
    hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
    hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
    HAL_I2C_Init(&hi2c1);
}

 


该题目考察的知识点:

  1. 电磁检测原理:理解并应用电磁传感器进行非接触式识别。
  2. 信号处理:掌握电感信号的采集、放大和滤波,确保信号精准。
  3. 嵌入式系统设计:使用STM32等MCU进行AD转换、数据处理和控制。
  4. 通信协议:熟悉I2C、SPI等通信协议,实现MCU与显示模块的连接和数据传输。
  5. 系统集成与调试:整合传感器、MCU和显示模块,调试整个系统确保其可靠性和准确性。
  6. 软件编程:使用C语言编写嵌入式软件,实现数据采集、逻辑判断和显示控制。
  7. 电路设计:设计和实现电感传感器电路、信号调理电路和MCU外围电路。
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号