【雕爷学编程】Arduino动手做(02)---光敏电阻模块2
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二:光敏电阻传感器模块
光敏电阻传感器模块实验所需硬件清单
光敏电阻(5516)X3
Arduino Uno开发板 X1
10K分压电阻(1/8W)x1
杜邦线 若干(备了10条)
LED发光二极管(蓝色)X1
220欧姆限流电阻(1/8W)x1
光敏电阻模块(3针与4针)X2
Proto Shield 原型扩展板(带mini面包板)X1
按键开关模块(下拉电阻与上拉电阻款各1只)X2
光敏电阻传感器模块实验的说明
1、光敏电阻模块小板模拟量输出AO可以和AD模块相连,通过AD转换,可以获得环境光强更精准的数值;
2、光敏电阻模块对环境光线变化比较敏感,一般用来检测周围环境的光线的亮度,触发Arduino或继电器模块等,实现光电控制;
3、模块在环境光线亮度达不到设定阈值时,DO端输出高电平,当外界环境光线亮度超过设定阈值时,DO端输出低电平;
4、DO输出端可以与Arduino直接相连,通过Arduino来检测高低电平,由此来检测环境的光线亮度改变;
5、DO输出端也能直接驱动继电器模块,由此可以组成一个光控开关;
6、光敏传感器控制的LED为你Arduino上接的13脚LED灯(也可以理解为负载),并非模块上的D0-LED+指示灯;
7、模块上的蓝色电位器旋钮最好不要顺时针和逆时针到底,保持在中间即可控制。微调进行灵敏度调节;
8、本系列小实验使用多种方式进行,包括光敏电阻直接输出、4针模块的A0模拟输出和3针模块数字输出等。
实验二:通过光敏电阻模块模拟口来控制LED灯的开关
1、实验二参考开源代码(Arduino):
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验二:通过光敏电阻模块模拟口来控制LED灯的开关 实验接线: LED灯(板载D13) 光敏电阻模块 Uno + Vcc G GND A0 A0 */ int sensor_value = 0; void setup() { Serial.begin(9600); pinMode(A0, INPUT); pinMode(13, OUTPUT); } void loop() { sensor_value = analogRead(A0);//将模拟数据(A0)赋值给变量 Serial.println(sensor_value);//串口输出亮度数值 delay(200); if (sensor_value > 151)//设置打开LED灯的阕值(可参考串口值来定) { digitalWrite(13, HIGH);//如果串口值大于151则LED灯亮 Serial.println("亮");// 串口输出“亮”字 delay(500);// 点亮500毫秒 } else { digitalWrite(13, LOW); } }
打开串口监视器,可以看到正常光线时的数值,当用手遮住光敏电阻模块时,数值上升,如果大于151(实验设置的阕值),则点亮LED灯(显示亮),小于151则LED灯熄灭。
用手遮光时的实验场景图
开源仿真编程(Linkboy V4.2)及串口输出
开源图形编程(Mind+、编玩边学)以及实验串口输出截图
实验三:LED亮度随环境光发生变化(PWM调制)
实验三参考开源代码(Arduino):
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验三:LED亮度随环境光发生变化(PWM调制) 实验接线: LED灯接D3(PWM脚) 光敏电阻模块 Uno + Vcc G GND A0 A0 */ const int minVal = 220; //设定当前环境光最小值(正常光线下灯未亮的值) const int maxVal = 800; //设定当前环境光的最大值 const int ldrPin = A0; //光敏电阻连接引脚A0 const int ledPin = 3; //LED模拟(PWM)输出引脚D3 void setup() { pinMode(ldrPin, INPUT); pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { int ldrVal = analogRead(ldrPin); //获取光敏电阻的返回值 ldrVal = constrain(ldrVal, minVal, maxVal); int ledVal = map(ldrVal, minVal, maxVal, 0, 255); Serial.print("Value : "); Serial.print(ldrVal); //将光敏电阻返回值输出到串口监视器上 Serial.print("----"); Serial.println(ledVal); //将映射后的值输出到串口监视器上 analogWrite(ledPin, ledVal); //PWM输出,LED亮度随环境光发生变化 delay(400); }
实验结果:随着光照强度变小,LED越亮。随光线变化的串口输出情况