【雕爷学编程】Arduino动手做(24)---水位传感器模块3

在这里插入图片描述

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二十四:水位传感器 液滴传感器 水深检测模块 水位检测模块 Water depth Sensor

在这里插入图片描述

(6)实验串口返回情况(往杯子里面慢慢倒水,水位逐渐升高)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
(9)拿住水位传感器,校准实际水位的串口数值,校准时的动态波形见下图

在这里插入图片描述

(10)校准实验时的场景图

实际校准的实验串口值为100-240之间(大概值)

在这里插入图片描述
2、程序二:用于检测水的存在(泄漏、溢出、洪水、雨水等情况)
(1)Arduino参考开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序二:用于检测水的存在(泄漏、溢出、洪水、雨水等情况)
*/

#define LED_PIN     13
#define POWER_PIN   7
#define SIGNAL_PIN  A0
#define THRESHOLD   100

int value = 0; // 存储传感器值的变量

void setup() {
    
    
  Serial.begin(9600);
  pinMode(LED_PIN,   OUTPUT);   // 将 D13 引脚配置为输出,接LED
  pinMode(POWER_PIN, OUTPUT);   // 将 D7 引脚配置为配置为输出,接水位传感器+
  digitalWrite(POWER_PIN, LOW); // 关闭传感器
  digitalWrite(LED_PIN,   LOW); // 关闭LED
  Serial.println("检测准备就绪!");
}

void loop() {
    
    
  digitalWrite(POWER_PIN, HIGH);  // 打开传感器
  delay(10);                      // 等待 10 毫秒
  value = analogRead(SIGNAL_PIN); // 从传感器读取模拟值
  digitalWrite(POWER_PIN, LOW);   // 关闭传感器

  if (value > THRESHOLD) {
    
    
    Serial.println("检测到水");
    digitalWrite(LED_PIN, HIGH);  // 打开 LED
  } else {
    
    
    digitalWrite(LED_PIN, LOW);   // 关闭LED
  }
}

(2)实验串口返回情况

在这里插入图片描述
(3)实验场景图(检测到水时,点亮LED)

在这里插入图片描述
3、程序三:通过水传感器检测水的情况
(1)实验开源仿真编程(Linkboy V4.63)

在这里插入图片描述
(2)实验串口返回情况

在这里插入图片描述
4、程序四:分三档测量水位(低绿色LED,中蓝色LED,高红色LED)
(1)Arduino参考开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序四:分三档测量水位(低绿色LED,中蓝色LED,高红色LED)
  使用:5MM三色RGB全彩LED模块
*/

void setup() {
    
    
  Serial.begin(9600);
  pinMode(8, OUTPUT); // 设置D8为输出
  pinMode(9, OUTPUT); // 设置D9为输出
  pinMode(10, OUTPUT); // 设置D10为输出
}

void loop() {
    
    
  int s1 = analogRead(A0);
  Serial.println(s1); //串口输出传感器值
  delay(50);

  if (s1 > 350 && s1 < 480 )
  {
    
    
    digitalWrite(10, HIGH);    // 中水位时蓝色LED亮
    Serial.println("中水位");
  }
  else
  {
    
    
    digitalWrite(10, LOW);       // 否则熄灭
  }

  if (s1 < 350 )
  {
    
    
    digitalWrite(9, HIGH);    // 低水位时绿色LED亮
    Serial.println("低水位");
  }
  else
  {
    
    
    digitalWrite(9, LOW);    // 否则熄灭
  }

  if (s1 > 480 )
  {
    
    
    digitalWrite(8, HIGH);  // 高水位时红色LED亮
    Serial.println("高水位");
  }
  else
  {
    
    
    digitalWrite(8, LOW);  // 否则熄灭
  }
  delay(1500);
}

(2)实验串口返回情况

在这里插入图片描述
(3)实验场景图

在这里插入图片描述

5、程序五:高水位声光报警
(1)实验开源图形编程(Mind+、Mixly、编玩边学)

在这里插入图片描述

(2)实验场景图

在这里插入图片描述

6、程序六:使用1602 LCD显示屏显示水位传感器值
(1)Arduino参考开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序六:使用1602 LCD显示屏显示水位传感器值
*/

#include <LiquidCrystal_I2C.h>
// 用接口引脚的编号初始化库
LiquidCrystal_I2C lcd(0x27, 16, 2);
// 将 LCD 地址设置为 0x27,用于 16 个字符和 2 行显示常量
int waterSensor = 0;
int waterValue = 0;

void setup() {
    
    
  lcd.init(); //初始化液晶屏
  lcd.backlight(); //打开背光
  lcd.setCursor(0, 0);
  lcd.print("Water Sensor");
}

void loop() {
    
    
  int waterValue = analogRead(waterSensor); //获取水传感器值
  lcd.setCursor(6, 1); //将光标放在6列2行
  lcd.print(waterValue); //值显示在lcd上
  delay(200); //延迟200ms
  lcd.setCursor(0, 1); //将光标放在1列2行
  //添加16个空格以确保第1行中剩余的字符(如果有)被清除
  lcd.print("                ");
}

(2)实验场景图(未放到水杯里,传感器值为0)

在这里插入图片描述

(3)放到水杯里,水位传感器值为480

在这里插入图片描述

7、程序七:获取水位传感器模拟信号数据

(1)Arduino参考开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  程序七:获取水位传感器模拟信号数据
*/

int val = 0; //定义一个变量 val ,初始化值为0

void setup() {
    
    
  Serial.begin(9600); // 设置波特率为9600
}

void loop() {
    
    
  val = analogRead(A0); // 获取A0模拟口的数据,并赋值给 val 变量
  Serial.print("val = "); // 串口输出 val 当前的数据
  Serial.print(val);

  if(val < 200) {
    
     // 如果 val 小于200
    Serial.println(" | dry"); // 说明很干,没有水
  } else if(val < 450) {
    
     // 如果 小于 450
Serial.println(" | water level: ~ 0-1 cm"); 
// 水位大约在0-1cm ,以下语句如此类推
  } else if(val < 500) {
    
    
    Serial.println(" | water level: ~ 1-2 cm");
  } else if(val < 540) {
    
    
    Serial.println(" | water level: ~ 2-3 cm");
  } else if(val < 600) {
    
    
    Serial.println(" | water level: ~ 3-4 cm");
  } else {
    
    
    Serial.println(" | water level: over 4 cm");
  }
  delay(1000); // 等待1秒
}

(2)实验串口返回情况

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41659040/article/details/132242722
今日推荐