对于液体,浊度是一个重要术语。因为它在液体动力学中起着重要的作用,也用于测量 水质。所以在本教程中,让我们讨论什么是浊度,如何使用 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,输出);
在循环部分,正如我之前提到的,传感器的输出是模拟值。所以我们需要读取这些值。借助 ArduinoAnalogRead函数,我们可以读取循环部分的输出值。
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("它的脏");
}
}
-
测试测量
+关注
关注
25文章
884浏览量
90575 -
浊度传感器
+关注
关注
0文章
29浏览量
10164 -
Arduino
+关注
关注
187文章
6464浏览量
186650
发布评论请先 登录
相关推荐
评论