0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用安信可Ai-M61-32S开发板监测水位?

AIoT行业洞察 来源:AIoT行业洞察 作者:AIoT行业洞察 2025-05-17 09:48 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

本文介绍了安信可 Ai-M61-32S 开发板结合水位传感器实现水位监测计的项目设计。

项目方案

通过读取 IO 接口模拟值,进行电压转换,获取检测到的电压值,进一步通过电压-水位校准,实现水位高度的串口打印和串口绘图,实时水位监测功能。

电压转换

根据欧姆定律,V = I / R,电压和电阻成正比;

因此通过获取 3.3V 和 GND 对应的模拟数值(实测为 3199 和 21),

即可得到实际电压的转换公式 Valtage = val * (3.3 / (3199-21)) .

代码

#include

void setup() {

pinMode(19, INPUT);

Serial.begin(115200);

}

void loop() {

int val = analogRead(19); // analog value reading

float vlt = val * (3.3 / (3199-21)); // real voltage conversion

Serial.println(vlt);

delay(200);

}

按住 IO2 键的同时,短按 EN 键,进入下载模式,配置端口号后上传工程,复位运行程序。

效果

wKgZPGgm98iAJ29LAAB41r2xfrE49.jpeg

水位传感器

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

模块简介

当模块上电,电源指示 LED 点亮;

工作电压:DC 3.3V - 5V ;

输出类型:模拟信号

wKgZO2gm98mACEI7AABfS3t-yzI93.jpeg

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

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

模块原理图

wKgZPGgm98mAE9HaAAB1ycznIPM85.jpeg

参考:水位检测报警 - Telesk

引脚定义

S(信号)为模拟输出;

+(VCC)为传感器供电;

–(GND)为接地。

wKgZO2gm98mAHhbZAABha0VA6OE73.jpeg

参考:Arduino Uno 水位传感器

运行原理

当平行铜线之间有水时,水浸没的高度不同,电流不同。铜线间的电阻根据水位的变化而变化。

电阻与水的高度成反比(传感器浸水越深,导电性越好,电阻越小,电流越大)。

wKgZPGgm98-Af88DAAOI4qceSEQ746.gif

参考:水位传感器如何工作并与Arduino接口

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

硬件连接

S -> IO19

+ -> 3V3

- -> GND

wKgZO2gm99CAUci2AAE-nBfOQZg63.jpeg

硬件连接完成后,打开串口,此时输出的电压值应为 0 。

水位校准

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

多次校准,取平均值;

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

校准数据采集

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

wKgZPGgm99CAILrTAACZvBXFSQI10.jpeg

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

假设 ADC 读取电压(V)与水位高度(mm)为线性相关关系,对上述数据进行拟合。使用 Excel 软件进行拟合,获得拟合表达式 y = 41.774 x - 38.686。

wKgZO2gm99GAKVpLAACqnQ0ixIE11.jpeg

工程代码

在代码中添加相应的水位高度定义

#include void setup() { pinMode(19, INPUT);

Serial.begin(115200); } void loop() { int val = analogRead(19); // analog sensor value

float vlt = val * (3.3 / (3199-21)); // real voltage conversion float wl = 41.774 * vlt - 38.686; // water level (mm)

Serial.print(val);

Serial.print(","); Serial.print(vlt); Serial.print(","); Serial.println(wl); delay(200);

}

保存代码,构建工程,上传固件,复位后运行程序。

打开串口助手,连接目标串口对应的设备端口号,打开串口,获取实时 IO 模拟值、电压值(伏特)和水位值(毫米)。

wKgZPGgm99GAAN5HAAAyz9EUv1A06.jpeg

效果演示

wKgZO2gm99KADOHAACkTkuPc5FQ197.gif

对应的水位演化曲线

wKgZPGgm99OAKX3hAAStBAtPPmc538.gif

水位的数码管显示

在前面关于 ADC 读取电压并结合水位传感器实现电压-水位高度转换的基础上,增加 4 位共阳 数码管显示 水位高度的功能。

硬件连接

这里采用 2 个 74HC595 驱动的 4 位共阳数码管,支持 3.3V 至 5V 的宽电压输入,仅需 3 个信号引脚即可驱动。

水位传感器接线方式

Water-sensor_S -> IO19

Water-sensor_+ -> 3V3

Water-sensor_- -> GND

数码管接线方式

4Bit-segment_SCLK -> IO23

4Bit-segment_RCLK -> IO24

4Bit-segment_DIO -> IO11

wKgZO2gm99SARXJ9AAEZJtNHpng86.jpeg

工程代码

#include

const int sensorPin = 19; // water-level sensor pin

// 74HC595 引脚设置

const int latchPin = 24; // RCLK

const int clockPin = 23; // SCLK

const int dataPin = 11; // DIO

unsigned char num[]={0xC0, //"0"

0xF9, //"1"

0xA4, //"2"

0xB0, //"3"

0x99, //"4"

0x92, //"5"

0x82, //"6"

0xF8, //"7"

0x80, //"8"

0x90 //"9"

};

void setup()

{

pinMode(latchPin,OUTPUT);

pinMode(clockPin,OUTPUT);

pinMode(dataPin,OUTPUT);

pinMode(sensorPin, INPUT);

// uart setting

Serial.begin(115200);

}

/* ------------ loop for serial print and segment display -------------- */

void loop() {

int count = 0;

int val = analogRead(sensorPin); // analog sensor value

float vlt = val * (3.3 / (3199-21)); // real voltage conversion

float wl = 41.774 * vlt - 38.686; // water level (mm)

//Serial.print("Analog Value: ");

Serial.print(val); // in order to serial plot

Serial.print(", ");

//Serial.print("Voltage: ");

Serial.print(vlt);

//Serial.print("V");

Serial.print(", ");

//Serial.print("Water Level: ");

Serial.println(wl);

//Serial.println("mm");

Serial.println((String)"Analog Value: " + val + ", Valtage: " + vlt + "V, Water Level: " + wl + "mm"); // serial print string

while (count < 25) // loop 25 times for delay 500ms (20ms every display)

{

if (wl < 0){

disp(0);

}else{

disp(wl); // display water level

}

count++;

}

}

/* ------------ segment display number (dynamics scanning) -------------- */

void disp(float n)

{

int t = 5;

int yi = ((int)(n*10))%10;

int ge = (int)n%10;

int shi = ((int)n/10)%10;

int bai = ((int)n/100)%10;

if(bai>0){

shiftOut(dataPin,clockPin,MSBFIRST,num[bai]);

}else{

shiftOut(dataPin,clockPin,MSBFIRST,0xFF);

}

shiftOut(dataPin,clockPin,MSBFIRST,0b00001000);

digitalWrite(latchPin, HIGH);

delay(t);

digitalWrite(latchPin,LOW);

if(shi>0){

shiftOut(dataPin,clockPin,MSBFIRST,num[shi]);

}else{

if(bai>0){

shiftOut(dataPin,clockPin,MSBFIRST,num[0]);

}else{

shiftOut(dataPin,clockPin,MSBFIRST,0xFF);

}

}

shiftOut(dataPin,clockPin,MSBFIRST,0b00000100);

digitalWrite(latchPin, HIGH);

delay(t);

digitalWrite(latchPin,LOW);

shiftOut(dataPin,clockPin,MSBFIRST,num[ge]&0x7F);//与运算加入小数点

shiftOut(dataPin,clockPin,MSBFIRST,0b00000010);

digitalWrite(latchPin, HIGH);

delay(t);

digitalWrite(latchPin,LOW);

shiftOut(dataPin,clockPin,MSBFIRST,num[yi]);

shiftOut(dataPin,clockPin,MSBFIRST,0b00000001);

digitalWrite(latchPin, HIGH);

delay(t);

digitalWrite(latchPin,LOW);

}

/* ------------ shiftOut -------------- */

void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val)

{

uint8_t i;

for (i = 0; i < 8; i++) {

if (bitOrder == LSBFIRST)

digitalWrite(dataPin, !!(val & (1 << i)));

else

digitalWrite(dataPin, !!(val & (1 << (7 - i))));

digitalWrite(clockPin, HIGH);

digitalWrite(clockPin, LOW);

}

}

●注意 shiftOut 函数需要定义;

●由于每次采样数值均存在较大波动,为了避免数码管动态刷新过于频繁,加入循环延长数据刷新时间;

●或者多次采样取平均值,进而减小水位数值的波动,使数码管的显示更稳定。

效果显示

数码管显示水位

wKgZPGgm99SAFTxfAACxvLPAXKQ09.jpeg

动态

wKgZO2gm99WAPqx9ABIEbjMJzuM593.gif

串口输出电压和水位值

wKgZPGgm99aAeMOHAAFJHRsydIQ953.gif

动态水位的演化曲线

wKgZO2gm99aAdMsCAAF0jmq11v0944.gif

静态水位的演化曲线

wKgZPGgm99eAWVDiAAEOh5L7SB8756.gif

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2577

    文章

    55443

    浏览量

    793722
  • 开发板
    +关注

    关注

    26

    文章

    6402

    浏览量

    120534
  • 安信可
    +关注

    关注

    0

    文章

    238

    浏览量

    5153
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    开源硬件:小安派-DSL 屏幕驱动开发板

    概述 小安派-DSL(AiPi-DSL) 是开源团队专门为Ai-M61-32S设计的一款屏幕驱动开发板,支持2.8/3.5寸等30Pi
    的头像 发表于 07-10 10:47 1763次阅读
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>开源硬件:小安派-DSL 屏幕驱动<b class='flag-5'>开发板</b>

    Ai-M61-32S(点灯)

    Ai-M61-32S(点灯) 博主环境:win10 vscode 设备:usb数据线+Ai-M61-32S 工厂配置 首先vscode打开文件夹AiPi-Open-Kits,就会下图,该文
    发表于 11-21 09:11

    开源工程——小安派-Eyes-S1/S2多功能开发板

    前言 AiPi-Eyes-S1 是开源团队专门为Ai-M61-32S设计的一款开发板,支持
    的头像 发表于 06-20 09:51 1485次阅读
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>开源工程——小安派-Eyes-<b class='flag-5'>S</b>1/<b class='flag-5'>S</b>2多功能<b class='flag-5'>开发板</b>

    玩透开源硬件!科技小安派2款音频开发板全新上线

    (AiPi-Voice)是团队专门为Ai-M61-32S设计的音频驱动开发板,搭配BL618芯片,其外置ES8388音频编码解码器,能
    的头像 发表于 07-17 17:39 1772次阅读
    玩透开源硬件!<b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>科技小安派2款音频<b class='flag-5'>开发板</b>全新上线

    开源硬件——小安派-Eyes-DU开发板

    科技又来一款小安派开源硬件——小安派-Eyes-DU开发板,来看看参数~ 01概述 小安派-Eyes-DU
    的头像 发表于 08-07 14:52 1595次阅读
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>开源硬件——小安派-Eyes-DU<b class='flag-5'>开发板</b>

    Ai-M61-32S开发环境搭建

    Ai-M61-32S开发环境搭建
    的头像 发表于 11-10 12:30 1992次阅读
    <b class='flag-5'>Ai-M61-32S</b><b class='flag-5'>开发</b>环境搭建

    Ai-M61-32S开发板能玩出多少拓展板?

    i2c屏幕、WS2812RGB灯珠、DS1302时钟、蜂鸣器、继电器、红外接收发送管、DHT11温湿度传感器、矩阵键盘、光敏电阻......当然,M61不仅可以用来学习,还可以当
    的头像 发表于 11-13 14:54 1325次阅读
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>Ai-M61-32S</b><b class='flag-5'>开发板</b>能玩出多少拓展板?

    晚上再也不摸黑 ,Ai-M61-32S&amp;Rd-03制作一盏自动感应小夜灯

    Ai-M61-32S 开发板,非常开心,收到了人生中第一块板子。也感谢社区中各种经验贴,对开发板
    的头像 发表于 01-02 10:58 1666次阅读
    晚上再也不摸黑 ,<b class='flag-5'>用</b><b class='flag-5'>Ai-M61-32S</b>&amp;Rd-03制作一盏自动感应小夜灯

    Ai-M61/Ai-M62系列连接AWS亚马逊云

    本文介绍Ai-M61/Ai-M62系列模组/开发板连接亚马逊云方法。 Ai-M61 系列模组(下称模组)是由深圳市
    的头像 发表于 02-04 15:51 2003次阅读
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>Ai-M61</b>/<b class='flag-5'>Ai-M</b>62系列连接AWS亚马逊云

    星闪开发板or模组烧录指导

    Ai-BS21-32S_Kit是由科技开发的蓝牙星闪开发板。该模块核心处理器芯片Hi282
    的头像 发表于 05-06 17:31 2302次阅读
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>星闪<b class='flag-5'>开发板</b>or模组烧录指导

    不到10块钱,Ai-M61-32S如何自制一个开机棒?

    ?如何自制一个开机棒? Ai-M61-32S开机棒是一个仅使用Ai-M61-32S的开机棒,无需额外的硬件,刷入程序,接上电源,最后结合一些简单的配置即可使用。该项目标为最少的硬件,最少的配置去实现远程开机功能。 Wake-o
    的头像 发表于 08-27 16:17 1440次阅读
    不到10块钱,<b class='flag-5'>用</b><b class='flag-5'>Ai-M61-32S</b>如何自制一个开机棒?

    外设移植 Ai-WB2-32S开发板+TM1637 NTP时钟

    以下作品由社区用户 King6688制作 产品说明 Ai-WB2-32S 是由深圳市
    的头像 发表于 09-24 14:29 1564次阅读
    外设移植 <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>Ai-WB2-32S</b><b class='flag-5'>开发板</b>+TM1637 NTP时钟

    能和Ai-M61模组对话了?手搓一个ChatGPT 语音助手

    也争先恐后, 的英文名是Ai-Thinker, 我们也一直在思考 人工智能+
    的头像 发表于 03-12 11:57 1.2w次阅读
    能和<b class='flag-5'>Ai-M61</b>模组对话了?手搓一个ChatGPT 语音助手

    上手体验小安派AI开发板,如何接入Home Assistant?

    以下作品由社区用户 无垠的广袤 制作 感谢社区的支持,免费领到了
    的头像 发表于 07-08 10:34 4947次阅读
    上手体验<b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>小安派<b class='flag-5'>AI</b><b class='flag-5'>开发板</b>,如何接入Home Assistant?

    轻松配置小智AI语音开发板IOT小程序功能更新

    科技:可发布的 AI 语音开发板,可以通过
    的头像 发表于 08-19 17:46 1521次阅读
    轻松配置小智<b class='flag-5'>AI</b>语音<b class='flag-5'>开发板</b>,<b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>IOT小程序功能更新