AiCube 试用 - ADC 水位监测系统

AiCube 试用 - ADC 水位监测系统

水位检测在水资源管理、城市防洪、农业灌溉、家用电器和工业生产等多领域发挥积极建设作用。利用水位传感器,可以实现水资源的智能管理,提高生产效率。

本文介绍了擎天柱开发板利用 AiCube 工具快速创建 I/O 电压读取,并进一步结合水位传感器,实现水位监测的项目设计。

项目介绍

该项目分为两部分

  • ADC 电压转换和采集;

  • 水位传感器模拟电压信号的读取与水位高度转换。

项目方案

  1. ADC 获取模拟通道 I/O 接口的模拟值;
  2. 电压转换,获取 I/O 电压值;
  3. 连接水位传感器,进行电压-水位校准;
  4. USB 串口打印电压值和水位高度,完成水位的实时监测。

硬件平台

硬件测试平台为基于 AI8051U-34K64 主控的 擎天柱 开发板

在这里插入图片描述

I/O 电压采集

使用 AiCube 工具创建 ADC 工程,经过 ADC 转换,计算模拟通道的电压值,并 USB 串口打印电压值。

工程创建

使用 AiCube 工具实现工程的快速创建。

首次安装需添加 Keil 仿真头文件

下载 最新版 AIapp-ISP 软件;

解压并打开该软件,右侧操作界面选择并进入 Keil 仿真设置 标签项;

选择目标单片机型号 - 添加型号和头文件到 Keil - 选择 Keil 安装目录文件夹 - 确定,提示添加成功;

打开最新版 AIapp-ISP 软件,菜单栏点击 AiCube 标签,进入 项目创建助手

选择目标单片机型号 - 填写项目名称 - 设置保存路径 - 点击 下一步 - 进入参数配置界面;

参数配置

勾选 外设 - USB 通用串行总线 项(为了实现 USB 串口打印);

在这里插入图片描述

勾选 外设 - ADC,模数转换 项(初始化 ADC 配置);

在这里插入图片描述

可根据需求更改参数、模拟通道等。

进入 可视化图形I/O口配置 界面

  • 点击 P1.0 管脚,选择 ADC0 项 ;

  • 点击 P3.0 和 P3.1 分别配置为 D- 和 D+ ;

在这里插入图片描述

设置完成后,点击右下角的 创建项目 ,此时初始化完成,自动打开项目。

编译直接生成的工程,确保无误。

代码添加

AiCube 生成项目后,仅需添加 7 行代码,即可实现电压值的计算和 USB 串口输出

u16 Bandgap;void main(void)
{u16 vol;SYS_Init();while (1){USBLIB_OUT_Done();              //查询方式处理USB接收的数据vol = ADC_Convert(0); // 调用自动生成的 ADC 转换函数Bandgap = ADC_Convert(15); // 读取内部基准 ADC(15通道)vol = (u16)((u32)vol * 119 / Bandgap); // 相对电压值计算printf_usb("Analog Voltage: %0.2fV\r\n",(float)vol/100); // 打印电压值delay_ms(500);}
}

这里的电压转换公式参考 Ai8051U 官方示例工程:

18-P1.3做ADC3-使用ADC15测量内部1.19V信号源,计算外部电压VCC

此外,通过多次采集取平均值的方法,可以提高数据精度,详情参考上述官方 Demo 例程。

编译上传

编译代码后生成固件,通过 AIapp-ISP 软件烧录至芯片。

生成的 HEX 烧录固件位于 Objects 文件夹下,

使用 Type-C 数据线连接开发板和电脑,按住 P32 按键的同时,短按 POWER 按键,

此时 Aiapp-ISP 软件自动识别 HID 设备

在这里插入图片描述

点击 下载/编程 按钮,待烧录结束,程序自动运行。

此时软件识别出 USB 串口,进入 CDC/HID-串口助手 标签, 打开相应的串口 (波特率 115200 bps )即可接收芯片打印的数据。

在这里插入图片描述

效果演示

ADC 采集 I/O 电压并 USB 打印

Channel 0 (P1.0) 引脚悬空

在这里插入图片描述

P1.0 接地

在这里插入图片描述

P1.0 接 VCC(5V)

在这里插入图片描述

此时完成了 I/O 电压采集和 USB 串口打印电压值的流程。

水位传感器

水位传感器(Water Sensor)可以检测水位高度(检测高度:0 - 40 mm),亦可用作雨滴传感器,用于各种天气状况的监测,检测是否下雨及雨量的大小,广泛应用于汽车自动刮水系统、智能灯光系统和智能天窗系统等。

模块简介

  • 当模块上电,电源指示 LED 点亮;
  • 工作电压:DC 3.3V - 5V
  • 输出类型:模拟信号;

在这里插入图片描述

传感器具有 10 条裸露的铜线,其中 5 条是电源铜线,另外 5 条是感测铜线。

走线隔行平行排列,每两条电源铜线间有一条感测铜线。

模块原理图

在这里插入图片描述

参考:水位检测 - Telesky .

引脚定义
  • S(信号)为模拟输出;
  • +(VCC)为传感器供电;
  • –(GND)为接地。

在这里插入图片描述

参考:水位传感器 .

运行原理

当水位上升时,更多的电子可以在正负极之间运动,因此电阻减小,ADC 采集的电压值随之增大;

在这里插入图片描述

参考:水位传感器如何工作 .

因此根据 ADC 测量传感器输出的电压,便可以确定水位。

硬件连接

Water-Sensor_Signal -> P1.0

在这里插入图片描述

硬件连接完成后,终端打印测试,此时输出的电压值应为 0 .

水位校准

由于各地的水质差异,导电性能不同,因此需要根据实际情况进行校准。

  • 多次校准,取平均值;

  • 每次校正前,需将 PCB 表面的平行铜线擦干,待测得电压为 0 时再置入水中,记录水位值和电压值。

校准数据采集

水位 21 毫米,相应的串口输出电压为 2.65 伏特

在这里插入图片描述

……

增加水位高度,采集多组电压-水位数据。

在这里插入图片描述

假设 ADC 读取电压(V)与水位高度(mm)为线性相关关系,使用 Excel 软件对上述数据进行拟合

获得拟合表达式 y = 20.674 x - 32.727 .

代码

代码包括两部分:

  1. ADC 采集水位传感器模拟信号的电压;
  2. 水位高度转换和 USB 串口打印数值
void main(void)
{u16 vol,wl;SYS_Init();while (1){USBLIB_OUT_Done();              //查询方式处理USB接收的数据vol = ADC_Convert(0);Bandgap = ADC_Convert(15);vol = (u16)((u32)vol * 119 / Bandgap); // voltagewl = (u16)((u32)vol * 20.674 - 3272.7); // water levelprintf_usb("Analog Voltage: %0.2fV, Water Level: %0.2fmm\r\n",(float)vol/100,(float)wl/100); // USB printdelay_ms(500);}
}

注意代码中公式参数的变化,保留两位小数,因此将方程乘以100

效果

编译工程并烧录固件,打开 USB 串口,获得打印数据。

上下移动水位传感器,使探测的水位高度发生变化

在这里插入图片描述

相应的 USB 串口打印如下

在这里插入图片描述

结果分析

经过多次测量,可以获得较为理想的检测结果。

此外,校准和测量过程中发现 ADC 采集的电压值会随时间逐渐减小,可能原因是

  • PCB 板被液体浸润,液体表面张力导致初始时刻覆盖更大面积的铜板,电阻较小,输出电压较大;
  • 随着时间推移,表面张力被克服,PCB板液面覆盖面积逐渐平稳下降,此时电压也逐渐减小,最后趋于稳定。

类似“海水退潮”

因此采样和校准时需要等待示数稳定,再记录数值,以提高精度。

总结

本文介绍了 Aiapp-ISP 仿真调试平台软件的 AiCube 工具实现 ADC 电压采集,并以此为基础结合水位传感器实现水位监测系统的项目设计,为 STC 系列单片机的快速开发和应用提供了参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

秒杀压测计划 + Kafka 分区设计参考

文章目录 前言🚀 秒杀压测计划(TPS预估 测试流程)1. 目标设定2. 压测工具推荐3. 压测命令示例(ab版)4. 测试关注指标 📦 Kafka Topic 分区设计参考表1. 单 Topic 设计2. 分区路由规则设计(Part…

memcpy 使用指南 (C语言)

memcpy 是 C 语言标准库中的一个重要函数&#xff0c;用于在内存区域之间复制数据。它是 <string.h> 头文件中定义的高效内存操作函数之一。 函数原型 void *memcpy(void *dest, const void *src, size_t n); 参数说明 dest: 目标内存地址&#xff0c;数据将被复制到这…

跨境电商货物体积与泡重计算器:高效便捷的物流计算工具

跨境电商货物体积与泡重计算器&#xff1a;高效便捷的物流计算工具 工具简介 货物体积与泡重计算器是一款免费的在线工具&#xff0c;专门为物流从业者、跨境电商卖家和需要计算货物运输体积重量的用户设计。这款工具可以帮助您快速计算货物的体积和对应的空运、快递泡重&…

如何避免爬虫因Cookie过期导致登录失效

1. Cookie的作用及其过期机制 1.1 什么是Cookie&#xff1f; Cookie是服务器发送到用户浏览器并保存在本地的一小段数据&#xff0c;用于维持用户会话状态。爬虫在模拟登录后&#xff0c;通常需要携带Cookie访问后续页面。 1.2 Cookie为什么会过期&#xff1f; 会话Cookie&…

matlab simulink中理想变压激磁电流容易有直流偏置的原因分析。

simulink把线性变压器模块拉出来&#xff0c;设置没有绕线电阻的变压器&#xff0c;激磁电感和Rm都有&#xff0c;然后给一个50%占空比的方波&#xff0c;幅值正负10V&#xff0c;线路中设置一个电阻&#xff0c;模拟导线阻抗。通过示波器观察激磁电流&#xff0c;发现电阻越小…

电力系统失步解列与振荡解析

一、基本概念解析 1. 失步&#xff08;Out-of-Step&#xff09; 在电力系统中&#xff0c;失步是指并列运行的同步发电机因功率失衡导致转子间相对角度超过稳定极限&#xff0c;无法维持同步运行的状态。具体表现为&#xff1a; 当系统发生短路、负荷突变或故障切除等扰动时&…

ctfhub-RCE

关于管道操作符 windows&#xff1a; 1. “|”&#xff1a;直接执行后面的语句。 2. “||”&#xff1a;如果前面的语句执行失败&#xff0c;则执行后面的语句&#xff0c;前面的语句只能为假才行。 3. “&”&#xff1a;两条命令都执行&#xff0c;如果前面的语句为假则直…

Missashe考研日记-day28

Missashe考研日记-day28 1 专业课408 学习时间&#xff1a;2h学习内容&#xff1a; 今天先是预习了OS关于虚拟内存管理的内容&#xff0c;然后听了一部分视频课&#xff0c;明天接着学。知识点回顾&#xff1a; 1.传统存储管理方式特征&#xff1a;一次性、驻留性。2.局部性原…

01 appium环境搭建

环境搭建 Java JDKNode.jsAndroidStudio(提供sdk)appiumappium Inspector 相关安装包下载 链接&#xff1a;https://pan.xunlei.com/s/VOOf3sCttAdHvlMkc7QygsoJA1# 提取码&#xff1a;x4s5 AndroidStudio下载安装sdk AndroidStudio下载 安装运行&#xff0c;配置代理及测…

指针(4)

1.回调函数 回调函数就是通过函数指针调用的函数。 将函数的指针&#xff08;地址&#xff09;作为一个参数传递给另一个函数&#xff0c;当这个指针被调用其所指向的函数时&#xff0c;被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用&#xff0c;而是在特…

Raptor码的解码成功率matlab实现

下面是使用matlab实现关于Raptor 码解码成功率的仿真代码&#xff0c;并绘制成功率随编码符号数量变化的图形示例。代码中包含了 Raptor 码的预编码&#xff08;使用稀疏矩阵乘法模拟&#xff09;、LT 编码、解码过程&#xff0c;以及解码成功率的计算和绘图。 具体代码如下&am…

域名系统DNS

DNS介绍 DNS是一个域名系统&#xff0c;在互联网环境中为域名和IP地址相互映射的一个分布式数据库 &#xff0c; 能够使用户更方便的访问互联网&#xff0c;而不用去记住能够被机器直接读取的IP数串。类似于生活中的114服务&#xff0c;可以通过人名找到电话号码&#xff0c;也…

Spark Streaming核心编程总结(四)

一、有状态转化操作&#xff1a;UpdateStateByKey 概念与作用 UpdateStateByKey 用于在流式计算中跨批次维护状态&#xff08;如累加统计词频&#xff09;。它允许基于键值对形式的DStream&#xff0c;通过自定义状态更新函数&#xff0c;将历史状态与新数据结合&#xff0c;生…

Dijkstra 算法代码步骤[leetcode.743网络延迟时间]

有 n 个网络节点&#xff0c;标记为 1 到 n。 给你一个列表 times&#xff0c;表示信号经过 有向 边的传递时间。 times[i] (ui, vi, wi)&#xff0c;其中 ui 是源节点&#xff0c;vi 是目标节点&#xff0c; wi 是一个信号从源节点传递到目标节点的时间。 现在&#xff0c;…

【java】lambda表达式总结

目录 一、面向对象的处理方法 二、函数式编程的处理方法 先使用匿名内部类&#xff1a; lambda改造&#xff1a; lambda改造规则 示例&#xff1a; 三、补充&#xff1a;函数式接口 大家好&#xff0c;我是jstart千语。今天总结一下lambda表达式。lambda表达式在后面的s…

AtCoder Beginner Contest 242 G - Range Pairing Query (莫队)

每周五篇博客&#xff1a;&#xff08;5/5&#xff09; 我做到了&#xff01; https://atcoder.jp/contests/abc242/tasks/abc242_g 这题主要是想给大家提供一份莫队的板子&#xff0c;很多莫队题基本上填空就差不多了&#xff08; 板子 void solve() {int n;std::cin >…

淘宝商品主图标题api接口

1、输入淘宝商品id或者链接&#xff0c;点查询 2、查询淘宝商品主图&#xff0c;商品标题&#xff0c;商品价格&#xff0c;卖家旺旺 3、支持api接口

文心一言开发指南06——千帆大模型平台新手指南

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 千帆大模型平台为新手用户提供了一个全面的入门指南&#xff0c;以便用户能够快速熟悉平台的操作和功能。千帆大模型平台通过提供详细的新手指南&#xff0c;确保用户能够顺…

Pacman-N-queen

文档 代码及文档&#xff1a;通过网盘分享的文件&#xff1a;code 链接: https://pan.baidu.com/s/1Rgo9ynnEqjZsSP2-6TyS8Q?pwdn99p 提取码: n99p 补充核心代码 核心代码内容&#xff1a; genetic_algorithm,py # -*- coding: utf-8 -*- """ Created on …

常用的多传感器数据融合方法

1. 概述 根据具体需求&#xff08;实时性、计算资源、噪声特性&#xff09;选择合适的方法&#xff0c;实际应用中常结合多种方法&#xff08;如UKF与神经网络结合&#xff09;。 传统方法 &#xff08;KF/EKF/UKF/PF&#xff09;依赖数学模型&#xff0c;适合动态系统&#…