基于Arduino 水质检测

admin 2025年3月31日23:11:10评论3 views字数 3557阅读11分51秒阅读模式

TDS(总溶解固体)是衡量水中溶解的各类无机和有机物质总量的指标,通常以毫克 / 升(mg/L)或百万分比(ppm)表示。这些物质包括钙、镁、钠、钾等矿物质,以及少量的有机物、重金属等。

本文为你介绍基于Arduino 如何测量当前水质的TDS值。

硬件准备

  • Arduino uno 开发板(或ESP8266)
  • TDS水质传感器(12元左右)
  • 0.96 OLED屏幕

线路连接

设备名称
传感器
Arduino
OLED屏幕
SDA
A4
OLED屏幕
SCL
A5
OLED屏幕
VCC
3.3V/5V
OLED屏幕
GND
GND
TDS传感器
信号线
A1
TDS传感器
VCC
5V
TDS传感器
GND
GND

示例代码

#include"U8glib.h"

// 传感器配置
constint TDS_PIN = A1;
constfloat REF_VOLTAGE = 5.0;    // ADC参考电压(根据实际修改)
constint ADC_RESOLUTION = 1024;  // ADC位数
constfloat TDS_FACTOR = 0.5;    // 国家标准常用系数(需现场校准)

// 显示配置
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);

// 国家标准水质分类阈值(GB/T 14848-2017)
constint TDS_GOOD = 300;    // Ⅰ类水 ≤300mg/L
constint TDS_FAIR = 1000;   // Ⅲ类水 ≤1000mg/L

// 汉字点阵数据(保持不变)
staticconstuint8_t PROGMEM dang[] = {0x01,0x00,0x21,0x08,0x11,0x08,0x09,0x10,0x09,0x20,0x01,0x00,0x7F,0xF8,0x00,0x08,
0x00,0x08,0x00,0x08,0x3F,0xF8,0x00,0x08,0x00,0x08,0x00,0x08,0x7F,0xF8,0x00,0x08,};
staticconstuint8_t PROGMEM qian[] = {0x10,0x10,0x08,0x10,0x08,0x20,0xFF,0xFE,0x00,0x00,0x3E,0x08,0x22,0x48,0x22,0x48,
0x3E,0x48,0x22,0x48,0x22,0x48,0x3E,0x48,0x22,0x08,0x22,0x08,0x2A,0x28,0x24,0x10,};
staticconstuint8_t PROGMEM deng[] = {0x20,0x40,0x3F,0x7E,0x48,0x90,0x85,0x08,0x01,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,
0xFF,0xFE,0x00,0x00,0x00,0x20,0x7F,0xFC,0x08,0x20,0x04,0x20,0x04,0xA0,0x00,0x40,};
staticconstuint8_t PROGMEM ji[] = {0x10,0x00,0x13,0xFC,0x20,0x84,0x20,0x88,0x48,0x88,0xF8,0x90,0x10,0x9C,0x20,0x84,
0x41,0x44,0xF9,0x44,0x41,0x28,0x01,0x28,0x1A,0x10,0xE2,0x28,0x44,0x44,0x01,0x82,};
staticconstuint8_t PROGMEM you[] = {0x08,0x90,0x08,0x88,0x08,0x88,0x10,0x80,0x17,0xFE,0x30,0xA0,0x30,0xA0,0x50,0xA0,
0x90,0xA0,0x10,0xA0,0x11,0x20,0x11,0x22,0x11,0x22,0x12,0x22,0x12,0x1E,0x14,0x00,};
staticconstuint8_t PROGMEM zhong[] = {0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,
0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,};
staticconstuint8_t PROGMEM cha[] = {0x08,0x20,0x04,0x40,0x7F,0xFC,0x01,0x00,0x01,0x00,0x3F,0xF8,0x02,0x00,0x02,0x00,
0xFF,0xFE,0x04,0x00,0x08,0x00,0x17,0xF8,0x20,0x80,0x40,0x80,0x80,0x80,0x1F,0xFC,};

// 改进的TDS读取(增加均值滤波)
floatgetTDSValue(){
constint samples = 10;
float avgVoltage = 0;

for(int i=0; i<samples; i++){
    avgVoltage += analogRead(TDS_PIN) * (REF_VOLTAGE / ADC_RESOLUTION);
    delay(10);
  }
  avgVoltage /= samples;

// 根据国家标准公式:TDS(mg/L) = k * conductivity(μS/cm)
// 典型k值范围0.55-0.8,默认0.65需校准
float tdsValue = avgVoltage * TDS_FACTOR * 1000

return tdsValue;
}

// 国家标准水质判定
constunsignedchargetWaterLevel(float tds){
if (tds <= TDS_GOOD) return you;    // 优(Ⅰ类)
elseif (tds <= TDS_FAIR) return zhong; // 中(Ⅲ类)
elsereturn cha;                    // 差(超Ⅲ类)
}

voidsetup(){
  Serial.begin(115200);

// 显示初始化(保持不变)
if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);
  }
// ...其他显示模式设置
}

voidloop(){
staticfloat tds = 0;
  tds = getTDSValue();

  u8g.firstPage();  
do {
    draw(tds);
  } while( u8g.nextPage() );

  delay(500); // 适当延长采样间隔
}

// 优化显示界面
voiddraw(float tds){
  u8g.setFont(u8g_font_unifont);

// 显示标题
  u8g.drawBitmapP( 00216, dang);
  u8g.drawBitmapP( 160216, qian);
  u8g.drawStr( 3212"TDS");

// 显示数值(保留1位小数)
  u8g.setPrintPos(6012);
  u8g.print(tds, 1);
  u8g.drawStr( 10012"mg/L"); // 国家标准单位

// 显示水质等级
  u8g.drawBitmapP( 1632216, deng);
  u8g.drawBitmapP( 3232216, ji);
constunsignedchar* level = getWaterLevel(tds);
  u8g.drawBitmapP( 6432216, level);

// 串口输出调试信息
  Serial.print("TDS: ");
  Serial.print(tds);
  Serial.println(" mg/L");
}

注意,由于Arduino 内存有限,汉字显示没有ESP8266强大。因此,只能用字模软件,将需要显示的文字提取出来,放到代码中。

效果显示

基于Arduino 水质检测
家中自来水
基于Arduino 水质检测
瓶装矿泉水

注意:水质等级是按照国家标准水质分类阈值(GB/T 14848-2017)划分。Ⅰ类水 ≤300mg/L

水质分级(行业常用)

  • 0-9 mg/L:纯净水(如蒸馏水)。
  • 10-60 mg/L:山泉水、矿化水(含天然矿物质)。
  • 60-100 mg/L:净化水(经活性炭、超滤处理)。
  • 100-300 mg/L:普通自来水。
  • 300 mg/L 以上:可能存在污染,需进一步检测。

原文始发于微信公众号(kali笔记):基于Arduino 水质检测

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月31日23:11:10
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   基于Arduino 水质检测https://cn-sec.com/archives/3901177.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息