物联网AI MicroPython传感器学习 之 TDS水质检测传感器

news2024/11/19 14:30:31

学物联网,来万物简单IoT物联网!!在这里插入图片描述

一、产品简介

TDS是Total Dissolved Solids的缩写,中文名总溶解固体,也叫溶解性固体总量,他标识1升水中溶有多少毫克的可溶解性固体。一般来说,TDS值越高,表示水中含有的溶解物越多,水就越不干净;反之,TDS值越低代表水越干净。因此,TDS值的大小,可作为反映水的洁净程度的依据之一。 常用的TDS检测设备为TDS笔,虽然价格低廉,简单易用,但不能把数据传给控制系统,做长时间的在线监测,并做水质状况分析。将TDS探头浸入水中测量水的TDS值。 该产品可应用于生活用水、水培等领域的水质检测。
TDS传感器外观及引脚如下图所示。
image.png
image.png
引脚定义

  • 1:电源负极
  • 2:电源正极
  • 3:输出模拟信号
  • 4:电源指示灯
  • 5:TDS表笔接口

二、技术参数

  • 工作电压:3.3V~5.5V
  • 输出电流:0~2.3V
  • 工作电流:3mA~6mA
  • TDS测量范围:0~1000ppm
  • TDS测量精度:±10%F.S.(25摄氏度)
  • 工作温度:-10°C~65°C
  • 存储温度:-20°C~80°C
  • 模块重量:15g
  • 板子尺寸:42mm x 32mm

注意:TDS表笔不能用于55摄氏度以上的水中
TDS探头放置位置不能太靠近容器边缘,否则会影响测量结果
TDS探头仅头部与导线为防水,可浸入水中,和信号转接板的连线接口处不防水

三、软件接口

TDS(adcObj,T) - 创建TDS传感器驱动对象

  • 函数原型

tdsObj = TDS(adcObj,T=25)

  • 参数说明
参数类型必选参数?说明
adcObjADC传入ADC对象
TNumber水温,单位:摄氏度,默认值为25
  • 返回值

TDS传感器对象成功,返回tdsObj对象;TDS传感器对象创建失败,抛出Exception

  • 示例代码
from machine import ADC, Pin
import tds

# 初始化 ADC 类型的设备
adcObj = ADC(Pin(32))
tdsObj=tds.TDS(adcObj, T=26)
print("tdsObj inited!")
  • 输出
tdsObj inited!

getTDS() - 获取水质检测结果

  • 函数功能:

获取当前水质检测结果

  • 函数原型:

TDS.getTDS()

  • 参数说明:

  • 返回值:

测量水质并返回水质监测结果,单位:ppm

  • 示例:
from machine import ADC, Pin
import tds

# 初始化 ADC 类型的设备
adcObj = ADC(Pin(32))
tdsObj=tds.TDS(adcObj, T=26)
print("tdsObj inited!")
tds = tdsObj.getTDS()
print("TDS measure result:", tds)
  • 输出
tdsObj inited!
TDS measure result: 153

setTemperature() - 设置水温

  • 函数功能:

设置当前水温

  • 函数原型:

TDS.setTemperature(T)

  • 参数说明:
参数类型必选参数?说明
TNumber水温,单位:摄氏度
相同水质下不同温度水的导电率是不同的,所以需要用水温对测量结果进行校准
  • 返回值:

  • 示例:
from machine import ADC, Pin
import tds

# 初始化 ADC 类型的设备
adcObj = ADC(Pin(32))
tdsObj=tds.TDS(adcObj, T=26)
print("tdsObj inited!")

tdsObj.setTemperature(28)
print("set temperature done")

tds = tdsObj.getTDS()
print("TDS measure result:", tds)
  • 输出
tdsObj inited!
set temperature done
TDS measure result: 151

四、接口案例

  • 案例代码
from machine import ADC, Pin
import tds
import utime

# 初始化 ADC 类型的设备
adcObj = ADC(Pin(32))
tdsObj = tds.TDS(adcObj, T=26)
print("tdsObj inited!")

tdsObj.setTemperature(28)
print("set temperature done")

while True:
    tds = tdsObj.getTDS()
    print("TDS measure result:", tds)
    utime.sleep(1)
  • 输出
tdsObj inited!
set temperature done
TDS measure result: 150
TDS measure result: 153
...

五、工作原理

TDS传感器检测的是“溶解性固体总量”,这些可溶解的物质有很多,包括钙、钠、镁离子和碳酸根离子、碳酸氢根离子、氯离子、硫离子等等。
TDS的检测原理是利用正负电极形成高低电场,让水中的离子向一定的电场方向移动,移动的离子流过的电流形成一定的数值,数值越大,水中的杂质和导电性离子就越多。不过水质条件会影响TDS检测的准确性,如水温太高就不行,同样的水质,温度越高TDS值也会越高。
进行TDS测量需要如下3个步骤:

  1. 通过ADC接口读取TDS传感器引脚3的模拟电压测量结果,测量结果经过电压单位转换,用Vt标识,单位:V
  2. 用温度值(T,单位:摄氏度)对电压测量结果进行校准,结果用Vc标识,计算公式:Vc=Vt_(1+0.02_(T - 25))
  3. 将校准过后的电压转换成水质的ppm值,用T标识,计算公式:T=66.71 _ Vc _ Vc _ Vc - 127.93 _ Vc _ Vc + 428.7 _ Vc,单位:ppm

参考文献及购买链接

[1] TDS水质检测传感器购买链接

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

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

相关文章

CVPR 2023 | 数据驱动的解释对分布外数据具有鲁棒性吗?

论文链接: https://arxiv.org/abs/2303.16390 代码链接: https://github.com/tangli-udel/DRE 01. 研究背景:数据驱动的解释对分布外数据具有鲁棒性吗? 近年来,将黑盒机器学习(ML)模型用于高风…

1.14.C++项目:仿muduo库实现并发服务器之Util模块的设计

一、Util模块 二、实现思想 (一)管理 实现一些工具接口读取文件内容向文件写入内容URL编码URL解码通过HTTP状态码获取描述信息通过文件后缀名获取mime判断一个文件是不是目录判断一个文件是否是一个普通文件HTTP资源路径有效性判断 (二&am…

《视觉SLAM十四讲》公式推导(一)

文章目录 CH3 三维空间刚体运动CH3-1 旋转矩阵的推导CH3-2 旋转矩阵是正交矩阵的证明CH3-3 变换矩阵的逆的推导CH3-4 罗德里格斯公式推导 CH3 三维空间刚体运动 CH3-1 旋转矩阵的推导 (1)二维空间中的旋转矩阵 易得 { x ′ ∣ O P ′ ∣ c o s ( θ …

高校教务系统登录页面JS分析——重庆交通大学

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文,你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习,勿用于非法用途。 一、密码加…

云耀服务器L实例部署Discuz!Q论坛|华为云云耀云服务器L实例评测使用体验

文章目录 云耀服务器L实例部署Discuz!Q论坛1. 华为云云耀服务器L实例介绍2. Discuz!Q 简介3. 部署华为云云耀服务器L实例3.1 云耀服务器L实例购买3.1.1 云耀服务器L实例初始化配置3.1.2 远程登录云耀服务器L实例 4. Discuz!Q安装部署4.1 Apache安装4.2 中间件配置4.…

SpringCloud:分布式事务Seata部署和集成

一、部署Seata的tc-server 1.下载 首先我们要下载seata-server包,地址在http://seata.io/zh-cn/blog/download.html 2.解压 在非中文目录解压缩这个zip包,其目录结构如下: 3.修改配置 修改conf目录下的registry.conf文件: 内容…

【重拾C语言】十三、动态数据组织(二)链表(创建、遍历检索、插入、删除、交换)

目录 前言 十三、动态数据组织 13.1~2 动态数据组织、动态变量 13.3 链表 13.3.1 单向链表—创建 13.3.2 单向链表—遍历检索 13.3.3 单向链表—插入、删除与交换 13.3.4 单向链表—例题 13.3.5 栈和队列 前言 链表是一种常见的动态数据结构,它由一系列节点…

【Kolla-ansible 16.1.0.dev156】部署/评估快速入门(报错的文章,后面不用看了)

Kolla-ansible 16.1.0.dev156 部署/评估快速入门 报错的文章,后面不用看了 主机必须满足以下最低要求: 2 个网络接口 8GB 主内存 40GB 磁盘空间 rootubuntu:~# sudo apt update Hit:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy InRelease Get:2…

【LeetCode 算法专题突破】双指针(⭐)

文章目录 前言1. 移动零题目描述代码 2. 复写零题目描述代码 3. 快乐数题目描述代码 4. 盛最多水的容器题目描述代码 5. 有效三角形的个数题目描述代码 6. 三数之和题目描述代码 7. 四数之和题目描述代码 总结 前言 学算法入门必学的一个章节,双指针算法&#xff0…

Maven 快速入门

文章目录 一、Maven 间接和快速入门1.1 Maven 介绍1.2 Maven 主要作用理解1.3 Maven 安装和配置 二、基于 IDEA 的 Maven 工程创建2.1 梳理 Maven 工程 GAVP 属性2.2 IDEA 构建 Maven JavaSE 工程2.3 IDEA 构建 Maven JavaEE 工程2.4 Maven 工程项目结构说明 三、Maven 核心功能…

巧用正则表达式

文章目录 题目巧用正则表达式,题目将十进制转为16进制,可以采用Java的语法来表示 题目 巧用正则表达式,题目将十进制转为16进制,可以采用Java的语法来表示 String nInteger.toString(num,16); 那如何确定是否都是字母呢a-f呢&…

使用Python创建faker实例生成csv大数据测试文件并导入Hive数仓

文章目录 一、Python生成数据1.1 代码说明1.2 代码参考 二、数据迁移2.1 从本机上传至服务器2.2 检查源数据格式2.3 检查大小并上传至HDFS 三、beeline建表3.1 创建测试表并导入测试数据3.2 建表显示内容 四、csv文件首行列名的处理4.1 创建新的表4.2 将旧表过滤首行插入新表 一…

qml基础语法

文章目录 基础语法例子 属性例子 核心元素元素item RectangleText例子 Image例子 MouseArea例子Component(组件)例子简单变换例子 定位器ColumnRowGridFlowRepeater 布局InputKeys 基础语法 QML是一种用于描述对象如何相互关联的声明式语言。  QtQuick是…

qt-C++笔记之按行读取文件并切换复选框打印复选框拼接出的字符串

qt-C笔记之按行读取文件并切换复选框打印复选框拼接出的字符串 code review! 文章目录 qt-C笔记之按行读取文件并切换复选框打印复选框拼接出的字符串1.运行2.文件结构3.main.cc4.main.pro5.a.txt6.b.txt 1.运行 2.文件结构 3.main.cc 代码 #include <QApplication> #…

简易通讯录Promax

前言&#xff1a;哈喽小伙伴们&#xff0c;我们在前边的文章中已经介绍过了如何用C语言实现一个简易的通讯录&#xff0c;但是我们这个通讯录存在两个问题&#xff1a; 一是通讯录的大小不能自由变化&#xff1b;二是通讯录的信息在程序退出之后就没有了&#xff0c;不能保存。…

【C语言】进阶——文件操作

目录 前言 1.什么是文件 程序文件&#xff1a; 数据文件&#xff1a; 文件名&#xff1a; 2.文件的打开和关闭 2.1文件指针 2.2文件指针使用 2.3文件的打开和关闭 2.4 文件的使用方式 2.5文件的顺序读写 ✌字符输出函数fputc ✌字符输入函数fgetc ✌文本行输…

【重拾C语言】十三、动态数据组织(一)动态变量(malloc、calloc、realloc、free)

目录 前言 十三、动态数据组织 13.1 动态数据组织 13.2 动态变量 malloc函数 calloc函数 realloc函数 free函数 程序实例 前言 C语言中的动态数据组织是指在程序运行时根据需要动态地分配内存空间来存储数据。这允许程序在运行时根据实际需求来创建、修改和释放数据结…

【数字IC设计】VCS门级网表仿真

本文参考自文章。 除了RTL仿真以外&#xff0c;在IC设计过程中还会进行门级网表的仿真。当设计代码功能仿真通过之后&#xff0c;我们便使用Design Compiler工具对其进行逻辑综合&#xff0c;将RTL代码转化为由与、或、非等门电路和触发器组成的电路&#xff0c;称为门级网表(n…

25栈和队列-理解栈和队列

目录 LeetCode之路——232. 用栈实现队列 分析&#xff1a; LeetCode之路——225. 用队列实现栈 分析&#xff1a; 栈&#xff08;Stack&#xff09;和队列&#xff08;Queue&#xff09;是两种基本的数据结构&#xff0c;它们在计算机科学中用于不同的目的。以下是它们的定…

【传输层协议】UDP/TCP结构特点与原理(详解)

文章目录 1. UDP1.1 UDP结构1.2 UDP特点1. 无连接2. 不可靠3. 面向数据报4. 缓冲区5. 大小受限6. 无序性 2. TCP2.1 TCP结构2.2 TCP特点1. 有连接2. 可靠性3. 面向字节流4. 拥塞控制5. 头部开销 2.3 TCP原理1. 确认应答&#xff08;安全机制&#xff09;2. 超时重传&#xff08…