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.pswp.cn/news/903158.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903158.shtml
英文地址,請注明出處:http://en.pswp.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;適合動態系統&#…