风筝
发表于: 2021-8-30 10:29:04 | 显示全部楼层

在本篇文章中,我们将使用Arduino开发板制作一款自动水位指示器和控制器,本文将使用超声波传感器来测量水位。当水箱中的水位变低时,会自动打开电机泵进行补水。


所需的组件

●    Arduino UNO开发板

●    超声波传感器模块

●    Adafruit RGB背光LCD显示屏

●    步进电机

●    9伏电池


超声波传感器

超声波传感器HC-SR04模块可以测量大约2cm-400cm范围内的距离,精度为3mm。传感器模块包括超声波发射器、接收器和控制电路。


信号在遇到障碍物后会返回并且被接收器捕获。因此,障碍物与传感器的距离通常由以下公式估计:

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

我们使用了一个超声波传感器模块,它在水箱中发送声波并识别回声波的反射。首先,我们需要使用Arduino触发超声波传感器模块发射信号,然后等待接收ECHO回波。

Arduino计算触发和接收ECHO之间的时间。我们知道声速约为 340 m/s。所以我们可以借助公式来测量距离:

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

其中声速约为每秒340m。

Water level indicator.png


借助这种方法,我们可以得到传感器到水面的距离。之后,接下来就是测量水位。


现在我们计算水箱的总长度。然后可以通过从水箱的总长度中减去超声波产生的距离来测量水位。我们将收到水位距离。可以将该水位更改为百分比,然后在LCD上显示。


代码

  1. #include <LiquidCrystal.h>

  2. #define trigger 10
  3. #define echo 11
  4. #define motor 8
  5. #define buzzer 12

  6. LiquidCrystal lcd(7,6,5,4,3,2);

  7. float time=0,distance=0;
  8. int temp=0;
  9. void setup()
  10. {
  11. lcd.begin(16,2);
  12. pinMode(trigger,OUTPUT);
  13. pinMode(echo,INPUT);
  14. pinMode(motor, OUTPUT);
  15. pinMode(buzzer, OUTPUT);
  16. lcd.print("  Water Level ");
  17. lcd.setCursor(0,1);
  18. lcd.print("   Indicator  ");
  19. delay(2000);
  20. }

  21. void loop()
  22. {
  23. lcd.clear();
  24. digitalWrite(trigger,LOW);
  25. delayMicroseconds(2);
  26. digitalWrite(trigger,HIGH);
  27. delayMicroseconds(10);
  28. digitalWrite(trigger,LOW);
  29. delayMicroseconds(2);
  30. time=pulseIn(echo,HIGH);
  31. distance=time*340/20000;
  32. lcd.clear();
  33. lcd.print("Water Space In  ");
  34. lcd.setCursor(0,1);
  35. lcd.print("Tank is: ");
  36. lcd.print(distance);
  37. lcd.print("Cm");
  38. delay(2000);
  39. if(distance<12 && temp==0)
  40. {
  41.      digitalWrite(motor, LOW);
  42.      digitalWrite(buzzer, HIGH);
  43.      lcd.clear();
  44.      lcd.print("Water Tank Full ");
  45.      lcd.setCursor(0,1);
  46.      lcd.print("Motor Turned OFF");
  47.      delay(2000);
  48.      digitalWrite(buzzer, LOW);
  49.      delay(3000);
  50.      temp=1;
  51. }

  52.   else if(distance<12 && temp==1)
  53. {
  54.      digitalWrite(motor, LOW);
  55.      lcd.clear();
  56.      lcd.print("Water Tank Full ");
  57.      lcd.setCursor(0,1);
  58.      lcd.print("Motor Turned OFF");
  59.      delay(5000);
  60. }

  61. else if(distance>30)
  62. {
  63.    digitalWrite(motor, HIGH);
  64.    lcd.clear();
  65.    lcd.print("LOW Water Level");
  66.    lcd.setCursor(0,1);
  67.    lcd.print("Motor Turned ON");
  68.    delay(5000);
  69.    temp=0;
  70. }
  71. }
复制代码

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1479



手机版|

GMT+8, 2024-3-29 22:34 , Processed in 0.104501 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表