如何使用Arduino测量液体的浊度

描述

  对于液体,浊度是一个重要术语。因为它在液体动力学中起着重要的作用,也用于测量 水质。所以在本教程中,让我们讨论什么是浊度,如何使用 Arduino 测量液体的浊度。

  什么是液体浊度?

  浊度是液体浑浊或浑浊的程度或水平。这是由于存在大量类似于空气中的白烟的不可见颗粒(用肉眼)。当光穿过液体时,由于这些微小颗粒的存在,光波会被散射。液体的浊度与游离悬浮颗粒成正比,即如果颗粒数量增加,浊度也会增加。

测试测量

  如何使用 Arduino 测量浊度?

  正如我前面提到的,浊度是由于光波的散射而发生的,为了测量浊度,我们应该测量光的散射。浊度通常以比浊法浊度单位 (NTU)或杰克逊浊度单位 (JTLJ) 进行测量,具体取决于用于测量的方法。两个单位大致相等。

  现在让我们看看浊度传感器是如何工作的,它有两个部分, 发射器和接收器。发射器由一个光源(通常是一个 LED)和一个驱动电路组成。在接收端,有一个光检测器,如光电二极管或 LDR。我们将解决方案置于发射器和接收器之间。

测试测量

  发射器只是传输光,光波穿过溶液,接收器接收光。通常(不存在溶液)透射光在接收器侧完全接收。但是在存在混浊溶液的情况下,透射光的量非常低。也就是说,在接收端,我们只得到低强度的光,而这种强度与浊度成反比。因此,我们可以通过测量光强来测量浊度,如果光强高,则溶液浊度较低,如果光强非常低,则意味着溶液更混浊。

  制作浊度计所需的组件

测试测量

  浊度模块

  阿杜诺

  16*2 I2C液晶屏

  共阴极RGB LED

  面包板

  跳线

  浊度传感器概述

  本项目中使用的浊度传感器如下图所示。

测试测量

  如您所见,此浊度传感器模块包含 3 个部分。防水引线、驱动电路、连接线。测试探头由发射器和接收器组成。

测试测量

  上图显示,这种模块使用红外二极管作为光源,红外接收器作为检测器。但工作原理和以前一样。驱动器部分(如下所示)由一个运算放大器和一些放大检测到的光信号的组件组成。

测试测量

  实际传感器可以使用 JST XH 连接器连接到该模块。它具有三个引脚,VCC、地和输出。Vcc 连接到 5v 并接地。该模块的输出是一个模拟值,它根据光强度而变化。

  浊度模块的主要特点

  工作电压:5VDC。

  电流:30mA(最大)。

  工作温度:-30°C 至 80°C。

  兼容 Arduino、Raspberry Pi、AVR、PIC 等。

  将浊度传感器与 Arduino 接口 - 电路图

  将浊度传感器连接到 Arduino 的完整示意图如下所示,该电路是使用 EasyEDA 设计的。

测试测量

  这是一个非常简单的电路图。浊度传感器的输出是模拟的,因此连接到 Arduino 的 A0 引脚,I2C LCD 连接到 Arduino 的 I2C 引脚,即 SCL 到 A5,SDA 到 A4。然后将 RGB LED 连接到数字引脚 D2、D3 和 D4。连接完成后,我的硬件设置如下所示。

测试测量

  将传感器的 VCC 连接到 Arduino 5v,然后将地线连接到地线。传感器的输出引脚到 Arduino 的模拟 0。接下来,将 LCD 模块的 VCC 和地连接到 Arduino 的 5v 和地。然后SDA转A4,SCL转A5,这两个管脚就是Arduino的I2C管脚。最后将RGB LED的地连接到Arduino的地,并将绿色连接到D3,蓝色连接到D4,红色连接到D5。

编程 Arduino 以测量水中的浊度

计划是显示从 0 到 100 的浊度值。即仪表应显示 0 表示纯液体,100 表示高度混浊的液体。这个Arduino代码也很简单,完整的代码可以在这个页面的底部找到。

首先,我包含了 I2C 液晶库,因为我们使用 I2C LCD 来最小化连接。

 

#包括 

 

然后我为传感器输入设置整数。

 

int sensorPin = A0;

 

在设置部分,我定义了引脚。

 

pinMode(3,输出);
pinMode(4,输出);
pinMode(5,输出);

 

在循环部分,正如我之前提到的,传感器的输出是模拟值。所以我们需要读取这些值。借助 Arduino AnalogRead函数,我们可以读取循环部分的输出值。

 

int sensorValue =analogRead(sensorPin);

 

首先,我们需要了解传感器的行为,这意味着我们需要读取浊度传感器的最小值和最大值。我们可以使用serial.println 函数在串行监视器上读取该值。

要获得这些值,首先,自由读取没有任何解决方案的传感器。我得到一个大约 640 的值,然后在发射器和接收器之间放置一个黑色物质,我们得到一个最小值,通常该值为零。所以我们得到了 640 的最大值和 0 的最小值。现在我们需要将这些值转换为 0-100

为此,我使用了 Arduino 的地图功能。

 

int 浊度 = map(sensorValue, 0,640, 100, 0);

 

然后我在 LCD 显示屏上显示了这些值。

 

  lcd.setCursor(0, 0); 
  lcd.print("浊度:"); 
  lcd.print(""); 
  lcd.setCursor(10, 0); 
  lcd.print(浊度);

 

之后,借助if条件,我给出了不同的条件。

 

if (浊度 < 20) 
{ 
    digitalWrite(2, HIGH); 
    数字写入(3,低);
    数字写入(4,低);
    lcd.setCursor(0, 1); 
    lcd.print("它的清除"); 
}

 

如果浊度值低于 20,这将激活绿色 LED 并在 LCD 上显示“其清晰”。

 

if ((浊度 > 20) && (浊度 < 50)) 
{ 
    digitalWrite(2, LOW); 
    数字写入(3,高);
    数字写入(4,低);
    lcd.setCursor(0, 1); 
    lcd.print("它的阴天"); 
  }

 

如果浊度值在 20 到 50 之间,这将激活蓝色 LED 并在 LCD 上显示“浑浊”。

 

if ((浊度 > 50) 
{ 
    digitalWrite(2, LOW); 
    digitalWrite(3, HIGH); 
    digitalWrite(4, LOW); 
    lcd.setCursor(0, 1); 
    lcd.print("它的脏"); 
  }

 

  如果浊度值大于 50,这将激活红色 LED 并在 LCD 上显示“它很脏”,如下所示。

测试测量

  只需按照电路图并上传代码,如果一切正常,您应该可以测量水的浊度,并且 LCD 应该会显示水的质量,如上图所示。

#include
LiquidCrystal_I2C lcd(0x27, 2, 16);
int sensorPin = A0;
无效设置()
{
序列号.开始(9600);
液晶显示器开始();
pinMode(2,输出);
pinMode(3,输出);
pinMode(4,输出);
}
无效循环(){
int sensorValue = 模拟读取(sensorPin);
Serial.println(sensorValue);
int 浊度 = map(sensorValue, 0, 750, 100, 0);
延迟(100);
lcd.setCursor(0, 0);
lcd.print("浊度:");
lcd.print("");
lcd.setCursor(10, 0);
lcd.print(浊度);
延迟(100);
如果(浊度 < 20){
数字写入(2,高);
数字写入(3,低);
数字写入(4,低);
lcd.setCursor(0, 1);
lcd.print("它的清除");
}
if ((浊度 > 20) && (浊度 < 50)) {
数字写入(2,低);
数字写入(3,高);
数字写入(4,低);
lcd.setCursor(0, 1);
lcd.print("它的阴天");
}
如果(浊度 > 50){
数字写入(2,低);
数字写入(3,低);
数字写入(4,高);
lcd.setCursor(0, 1);
lcd.print("它的脏");
}
}

 

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分