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)实验串口返回情况