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 100int value = 0; // 存储传感器值的变量void setup() {Serial.begin(9600);pinMode(LED_PIN, OUTPUT); // 将 D13 引脚配置为输出,接LEDpinMode(POWER_PIN, OUTPUT); // 将 D7 引脚配置为配置为输出,接水位传感器+digitalWrite(POWER_PIN, LOW); // 关闭传感器digitalWrite(LED_PIN, LOW); // 关闭LEDSerial.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); //延迟200mslcd.setCursor(0, 1); //将光标放在1列2行//添加16个空格以确保第1行中剩余的字符(如果有)被清除lcd.print(" ");
}
(2)实验场景图(未放到水杯里,传感器值为0)
(3)放到水杯里,水位传感器值为480
7、程序七:获取水位传感器模拟信号数据
(1)Arduino参考开源代码
/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)程序七:获取水位传感器模拟信号数据
*/int val = 0; //定义一个变量 val ,初始化值为0void setup() {Serial.begin(9600); // 设置波特率为9600
}void loop() {val = analogRead(A0); // 获取A0模拟口的数据,并赋值给 val 变量Serial.print("val = "); // 串口输出 val 当前的数据Serial.print(val);if(val < 200) { // 如果 val 小于200Serial.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)实验串口返回情况