【基于Arduino自动水位指示器和控制器】

前言

在这里插入图片描述

在这个基于 Arduino 的自动水位指示器和控制器项目 中,我们将使用超声波传感器测量水位。超声波测距的基本原理是基于 ECHO。当声波在环境中传播时,它们在撞击任何障碍物后会以 ECHO 的形式返回原点。所以我们只需要计算它的两个声音的传播时间,即出射时间和撞击任何障碍物后返回原点的时间。经过一些计算,我们可以得到一个结果,那就是距离。这个概念用于我们的水控制器项目中,当水箱中的水位变低时,水泵会自动打开。

模块

Arduino UNO
超声波传感器模块
16x02 液晶
继电器
ULN2003
7806
PVT
铜线
9 伏电池或 12 伏适配器
连接线

超声波传感器模块

在这里插入图片描述

超声波传感器HC-SR04用于测量2cm-400cm范围内的距离,精度为3mm。传感器模块由超声波发射器、接收器和控制电路组成。

在这里插入图片描述


超声波传感器模块作用于声音的自然回声现象。发送一个脉冲约 10us 以触发模块。之后,模块会自动发送 8 个周期的 40 KHz 超声信号并检查其回波。撞击障碍物后的信号返回并被接收器捕获。因此,障碍物到传感器的距离可以通过给出的公式简单地计算为

        距离=(时间 x 速度)/2。

在这里,我们将速度和时间的乘积除以 2,因为时间是到达障碍物并返回的总时间。因此,到达障碍物的时间只是总时间的一半。

自动水位控制器的工作原理

这个项目的工作非常简单,我们使用了超声波传感器模块,它发送水箱中的声波并检测声波的反射,即 ECHO。首先我们需要通过Arduino触发超声波传感器模块发送信号,然后等待接收ECHO。Arduino 读取触发和接收 ECHO 之间的时间。我们知道声速约为 340 m/s。所以我们可以使用给定的公式计算距离:

距离=(行程时间/2)*声速

声速约为每秒 340 米。

通过使用这种方法,我们可以获得传感器到水面的距离。之后我们需要计算水位。

现在我们需要计算水箱的总长度。因为我们知道水箱的长度,所以我们可以通过从水箱的总长度中减去超声波产生的距离来计算水位。我们将得到水位距离。现在我们可以将这个水位转换为水的百分比,并可以在 LCD 上显示出来。

电路图及说明

如下面给出的水位控制器电路 所示,超声波传感器模块的“触发”和“回声”引脚直接连接到arduino的引脚10和11。16x2 LCD 以4 位模式与 arduino 连接。控制引脚RS、RW和En直接连接到arduino引脚7、GND和6。数据引脚D4-D7连接到arduino的5、4、3和2,蜂鸣器连接到引脚12。6伏继电器是还通过ULN2003连接到 arduino 的引脚 8,用于打开或关闭水泵。稳压器 7805 也用于为继电器和剩余电路提供 5 伏电压。

在这里插入图片描述


在该电路中,超声波传感器模块放置在桶(水箱)的顶部进行演示。该传感器模块将读取传感器模块与水面之间的距离,并在液晶显示屏上显示距离并显示“水箱中的水位为:”。这意味着我们在这里显示的是水的距离或体积的空白位置,而不是水位。由于这个功能,我们可以在任何水箱中使用这个系统。当空水位达到约 30 厘米时,Arduino 通过驱动继电器打开水泵。现在 LCD 会显示“LOW Water Level”“Motor turn on”,继电器状态 LED 会开始发光

现在,如果空的空间达到约 12 厘米的距离,arduino 将关闭继电器,LCD 将显示“油箱已满”“电机已关闭”。蜂鸣器也会发出一段时间的蜂鸣声,继电器状态 LED 将关闭。

编程

要为水位控制器编程 Arduino ,首先我们定义将在项目中用于连接外部设备(如继电器、LCD、蜂鸣器等)的所有引脚。

#define trigger 10
#define echo 11
#define motor 8
#define buzzer 12

然后我们初始化项目中使用的所有设备。

 lcd.begin(16,2);
 pinMode(trigger,OUTPUT);
 pinMode(echo,INPUT);
 pinMode(motor, OUTPUT);
 pinMode(buzzer, OUTPUT);
 lcd.print("  Water Level ");
 lcd.setCursor(0,1);
 lcd.print("   Indicator  ");
 delay(2000);

现在初始化超声波传感器模块,并使用pulseIn(pin)读取超声波或声音的发送和接收时间。然后使用适当的函数执行计算并在 16x2 LCD 上显示结果。

 digitalWrite(trigger,HIGH);
 delayMicroseconds(10);
 digitalWrite(trigger,LOW);
 delayMicroseconds(2);
 time=pulseIn(echo,HIGH);
 distance=time*340/20000;
 lcd.clear();
 lcd.print("Water Space In  ");
 lcd.setCursor(0,1);
 lcd.print("Tank is: ");
 lcd.print(distance);
 lcd.print("Cm");

之后,我们检查水箱是否已满或水位低,并采取相应措施。

 if(distance<12 && temp==0)
 {
     digitalWrite(motor, LOW);
     digitalWrite(buzzer, HIGH);
     lcd.clear();
     lcd.print("Water Tank Full ");
     lcd.setCursor(0,1);
     lcd.print("Motor Turned OFF");
     delay(2000);
     digitalWrite(buzzer, LOW);
     delay(3000);
     temp=1;
 }

  else if(distance<12 && temp==1)
 {
     digitalWrite(motor, LOW);
     lcd.clear();
     lcd.print("Water Tank Full ");
     lcd.setCursor(0,1);
     lcd.print("Motor Turned OFF");
     delay(5000);
 }

完整代码

已上传至个人主页。

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...