任务名称
2019年_K题:简易多功能液体容器【高职高专组】
任务要求
难度

一、任务

设计制作一个简易多功能液体容器。该容器为容量不小于 0.5 升、高于 20cm、 带有(或自制)液位标记的透明塑料容器;可以自动测量给定液体的液位、重量 等参数;可判别给定液体的种类(如纯净水、白糖水、盐水、牛奶、白醋等); 可显示测量数据。所有测试项目均要求使用同一启动键启动,并且每次启动只允 许按一次启动键,否则不予测试。

二、要求
1. 基本要求
(1) 能检测液体液位、重量等参数,可显示检测结果。
(2) 分别装载一定量(200~500mL)的不同液体进行测量,要求液位测量绝对误差的绝对值小于等于2mm;重量测量绝对误差的绝对值小于等于1g。
(3) 在(2)的测量基础上,能够区分不同浓度的盐水。要求显示第二次测量液体的名称(根据两次测量盐水的浓度,相对显示是浓盐水或淡盐水)。
2. 发挥部分
(1) 根据液体特征可分辨纯净水、盐水、牛奶、白醋四种液体种类(限定采用电子测量技术,传感器与测量方法不限,可同时采用多种测量方法)。

(2) 根据液体特征可分辨出纯净水和白糖水的种类。(限定采用电子测量技术,传感器与测量方法不限)。
(3) 其他。
三、说明
(1) 溶液的浓度以其质量百分比浓度(以下简称“浓度”)为准,定义为:质量百分比浓度=(溶质质量/溶液质量)×100%
(2) 实验用盐水的浓度取值范围为 0%~30%。
(3) 实验用白醋采用酸度为 9°的市售白醋。
(4) 测量液体重量时应先完成去皮操作。测试中,以待测液体样品的净重作为待测液体样品的实际值:以作品容器自带液位标记的读数作为液位高度实际值。液体参数的实际值与测量值之差为测量绝对误差。
(5) 实验用牛奶采用市售纯牛奶。
(6) 实验用白糖水的浓度取值为 10%,溶质为白砂糖。
(7) 液体特征测试限定采用电子测量技术,采用的传感器和测试方法不限定,容许同时采用多种测量方法。
(8) 作品结构设计应考虑承装液体的容器方便液体更换操作(包括清洗容器、加装液体,移除液体和去除残留液体)。

 

评审标准

参考答案

专家解析:

天津大学 刘开华老师—多功能液体容器(K题)解析与交流


GPT-4o给出的设计方案:


一、任务概述

设计并制作一个简易多功能液体容器,容量不少于0.5升,高度20 cm,带自动测量液位标记的透明塑料容器。能够自动测量并展示液体的液位和重量等参数,自动识别给定液体的种类(如纯净水、牛奶等)并显示浓度信息。所有测试项目通过一个启动键启动且保证测试过程中一次只允许启动键起效,避免误操作。

二、系统组成

  1. 机械结构

    • 容器:透明塑料材质,内包含液位标记和自动测量装置。
    • 底座:安装电子测量设备和控制电路。
  2. 传感器系统

    • 液位传感器:用于测量液体高度和确定液位。
    • 重量传感器:用于测量液体重量,得到密度信息。
    • 电导率传感器:用于区分不同液体类型(如纯净水和盐水)。
  3. 控制系统

    • 微控制器:控制传感器和数据处理,显示测量结果。
    • 启动键:用户启动测量过程。
    • 显示屏:实时显示液体种类、浓度、液位和重量数据。
  4. 电源模块

    • 提供系统所需电力,确保设备长期稳定运行。

三、设计步骤

  1. 机械结构设计

    • 设计透明塑料容器和底座,确保美观和功能性。
    • 安装液位传感器、重量传感器和电导率传感器。
  2. 电路设计

    • 设计连接各传感器的电路,确保信号稳定传输。
    • 连接微控制器和显示屏,保证数据正确显示。
  3. 软件编程

    • 编写微控制器程序,读取传感器数据并进行计算。
    • 实现液体识别算法,根据电导率等参数区分液体类型。
    • 计算浓度参数(如盐水浓度),显示详细结果。
  4. 装配与调试

    • 将所有组件集成在底座和容器中,进行初步装配。
    • 稳定和校准传感器,确保读数准确。
    • 进行综合测试,确保系统稳定运行。

四、关键算法与代码

针对实现液体识别和测量的关键代码部分,我会详细介绍主要功能,包括如何读取传感器数据、计算液体参数,以及依据电导率判断液体类型等。

1. 液位测量

使用液位传感器来读取液体的高度,该传感器可以是超声波传感器或者电容式液位传感器,这里以模拟输入为例。

const int levelSensorPin = A0;

float readLiquidLevel() {
  int sensorValue = analogRead(levelSensorPin);
 考虑到你的要求,这里详细介绍一下该项目中如何通过编写代码实现液体识别和测量。我们将使用Arduino编程语言实现液体的识别和测量功能。

### 系统概述

1. **传感器系统**:
   // 将传感器值转换为实际液位,以 cm 为单位
  float liquidLevel = sensorValue * (5.0 / 1023.0) * 20.0; // 假设最大20cm
  return liquidLevel;
}

2. 重量测量

使用重量传感器(如HX711模块)来测量液体的重量,这里假设使用模拟输入得到简化的重量值。

const int weightSensorPin = A1;

float readLiquidWeight() {
  int sensorValue = analogRead(weightSensorPin);
  // 将传感器值转换为实际重量,以 g 为单位
  float liquidWeight = sensorValue * (5.0 / 1023.0) * 500.0; // 假设最大500g
  return liquidWeight;
}

3. 电导率测量

  • 液位传感器:用于测量液体高度。
    • 重量传感器:用于测量液体重量。
    • 电导率传感器:用于区分不同液体类型(如纯净水和盐水)。
  1. **控制系统使用电导率传感器来测量不同液体的电导率,通过这个参数来判断液体种类。
const int conductivitySensorPin = A2;

float readConductivity() {
  int sensorValue = analogRead(conductivitySensorPin);
  // 将传感器值转换为电导率值,假设最大300uS/cm
  float conductivity = sensorValue * (5.0 / 1023.0) * 300.0;
  return conductivity;
}

4. 液体识别

根据电导率值判断液体的类型,比如纯净水、牛奶、盐水等。

String identifyLiquid(float conductivity) {
  if (conductivity < 100) {
    return "Water";
  } else if (conductivity < 200) {
    return "Milk";
  } else if (conductivity < 300) {
    return "Salt Water";
  } else {
    return "Unknown";
  }
}

5. 综合代码

将上述功能综合到一个完整流程中,包含读取数据、计算和显示。

#include <LiquidCrystal.h>

// 定义LCD引脚**:
   - **微控制器**:例如Arduino,用于控制传感器读取和数据处理。

3. **显示系统**:
   - **液晶显示屏(LCD)**:用于显示测量结果。

### 关键代码实现

#### 1. 引脚定义与初始化
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int buttonPin = 7;

void setup() {
  pinMode(buttonPin, INPUT);
  lcd.begin(16, 2);
  lcd.print("Ready");
}

void loop() {
  if (digitalRead(buttonPin) == HIGH) {
    measureAndDisplay();
  }
}

void measureAndDisplay() {
  float level = readLiquidLevel();
  float weight = readLiquidWeight();
  float conductivity = readConductivity();
  String liquidType = identifyLiquid(conductivity);

  lcd.clear();
 

首先,定义液位传感器、重量传感器、电导率传感器和按钮的引脚,并初始化LCD。

```cpp
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define levelSensorPin A0
#define weightSensorPin A1
#define conductivitySensorPin lcd.print("Lvl: ");
  lcd.print(level, 1);
  lcd.print(" cm");
  lcd.setCursor(0, 1);
  lcd.print("Wgt: ");
  lcd.print(weight, 1);
  lcd.print(" g");
  lcd.setCursor(0, 2);
  lcd.print(liquidType);
  
  delay(5000); // 显示5秒钟
  lcd.clear();
  lcd.print("Ready");
}

float readLiquidLevel() {
  int sensorValue = analogRead(levelSensorPin);
  float liquidLevel = sensorValue * (5.0 / 1023.0) * 20.0;
  return liquidLevel;
}

float readLiquidWeight() {
  int sensorValue = analogRead(weightSensorPin);
  float liquidWeight = sensorValue * (5.0 / 1023.0) * 500.0;
  return liquidWeight;
}

float readConduct A2
#define buttonPin 7

LiquidCrystal_I2C lcd(0x27, 16, 2); // LCD地址和尺寸

void setup() {
  pinMode(buttonPin, INPUT);
  lcd.init(); 
  lcd.backlight();
  lcd.print("Ready");
}

该设计中关键代码实现了液位、重量及电导率的测量,并根据电导率识别液体类型并显示相关数据。通过这些代码片段,可以有效进行液体识别和测量,达到项目要求,以上代码均由chat GPT生成仅供参考。


本题考察的知识点

此次设计项目主要考察以下几个关键知识点:

  1. 传感器应用与校准:液位传感器、重量传感器和电导率传感器的选择与使用。
  2. 机械设计:透明塑料容器及其标记设计,底座结构的稳固性。
  3. 电子电路设计:传感器与控制电路的连接与稳定性。
  4. 编程与算法:微控制器编程,液体识别和浓度计算算法。
  5. 数据处理与显示:测量数据的计算、处理、显示。
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号