Arduino爱好者

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: eagler8

【Arduino】168种传感器模块系列实验(02)---光敏电阻模块

[复制链接]
 楼主| 发表于 2021-3-12 20:54 | 显示全部楼层
52.jpg
 楼主| 发表于 2021-3-18 18:57 | 显示全部楼层
实验三:LED亮度随环境光发生变化(PWM调制)
实验三参考开源代码(Arduino):

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验三:LED亮度随环境光发生变化(PWM调制)
  4.   实验接线:
  5.   LED灯接D3(PWM脚)
  6.   光敏电阻模块  Uno
  7.   +             Vcc
  8.   G             GND
  9.   A0            A0
  10. */

  11. const int minVal = 220; //设定当前环境光最小值(正常光线下灯未亮的值)
  12. const int maxVal = 800;   //设定当前环境光的最大值
  13. const int ldrPin = A0;   //光敏电阻连接引脚A0
  14. const int ledPin = 3;   //LED模拟(PWM)输出引脚D3

  15. void setup()
  16. {
  17.   pinMode(ldrPin, INPUT);
  18.   pinMode(ledPin, OUTPUT);
  19.   Serial.begin(9600);
  20. }

  21. void loop()
  22. {
  23.   int ldrVal = analogRead(ldrPin);  //获取光敏电阻的返回值
  24.   ldrVal = constrain(ldrVal, minVal, maxVal);
  25.   int ledVal = map(ldrVal, minVal, maxVal, 0, 255);
  26.   Serial.print("Value : ");
  27.   Serial.print(ldrVal);         //将光敏电阻返回值输出到串口监视器上
  28.   Serial.print("----");
  29.   Serial.println(ledVal);       //将映射后的值输出到串口监视器上
  30.   analogWrite(ledPin, ledVal);  //PWM输出,LED亮度随环境光发生变化
  31.   delay(400);
  32. }
复制代码



 楼主| 发表于 2021-3-18 18:58 | 显示全部楼层
实验结果:随着光照强度变小,LED越亮。随光线变化的串口输出情况

53.jpg

发表于 2021-4-15 19:05 | 显示全部楼层
后排围观大佬
 楼主| 发表于 2021-4-15 20:40 | 显示全部楼层

谢谢晚上的鼓励
 楼主| 发表于 2021-4-27 15:32 | 显示全部楼层
程序九:随着光照强度变小,LED越亮,且自动设置最大值与最小值
实验参考开源代码(Arduino):

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   程序九:随着光照强度变小,LED越亮,且自动设置最大值与最小值
  4.   实验接线:
  5.   LED灯接D3(PWM脚)
  6.   光敏电阻模块  Uno
  7.   +             Vcc
  8.   G             GND
  9.   A0            A0
  10. */

  11. const int ldrPin = A0;   //光敏电阻连接引脚A0
  12. const int ledPin = 3;   //LED模拟(PWM)输出引脚3
  13. int minVal = 1023;   //设定当前环境光的最小值
  14. int maxVal = 0;   //设定当前环境光的最大值

  15. void setup() {
  16.   pinMode(ldrPin, INPUT);
  17.   pinMode(ledPin, OUTPUT);
  18.   Serial.begin(9600);
  19.   analogWrite(ledPin, 255); //点亮LED,标示检测开始
  20.   for (int i = 0; i < 1000 ; i++) { //循环1000次检测当前的最小值和最大值
  21.     int val = analogRead(ldrPin);//获取光敏电阻的返回值
  22.     if (val > maxVal) {     //若val大于maxVal
  23.       maxVal = val;         //将maxVal的值更改为val的值
  24.     }
  25.     if (val < minVal) {     //若val小于minVal
  26.       minVal = val;         //将minVal的值更改为val的值
  27.     }
  28.     delay(5);
  29.   }
  30.   analogWrite(ledPin, 0); //LED熄灭,检测结束
  31.   Serial.print("max =");
  32.   Serial.println(maxVal);  //输出最大值
  33.   Serial.print("min =");
  34.   Serial.println(minVal);  //输出最小值
  35. }

  36. void loop() {
  37.   // put your main code here, to run repeatedly:
  38.   int val = analogRead(ldrPin);  //获取光敏电阻的返回值
  39.   val = constrain(val, minVal, maxVal);
  40.   val = map(val, minVal, maxVal, 0, 255);
  41.   analogWrite(ledPin, val);  //模拟输出,LED亮度发生变化
  42.   Serial.print("Value : ");
  43.   Serial.println(val);    //将映射后的值输出到串口监视器中
  44. }
复制代码


 楼主| 发表于 2021-4-27 15:34 | 显示全部楼层
测试实验场景图

54.jpg

 楼主| 发表于 2021-4-27 15:35 | 显示全部楼层
程序十:无光时输出1,有光时输出0(需调整触发阕值)
实验参考开源代码(Arduino):

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.    程序十:无光时输出1,有光时输出0(需调整触发阕值)
  4.   实验接线:
  5.   光敏电阻模块   Uno
  6.   +             Vcc
  7.   G             GND
  8.   D0            D2
  9. */

  10. void setup(){
  11.   pinMode(2, INPUT);//设置D2口为输入
  12.   Serial.begin(9600);
  13. }

  14. void loop(){
  15.   int temp = digitalRead(2);//赋值数字变量
  16.   Serial.println(temp);将变量输出到串口
  17.   delay(200);
  18. }
复制代码


 楼主| 发表于 2021-4-27 15:35 | 显示全部楼层
实验串口输出截图

55.jpg

实验说明——模块的D0口接入arduino Pin2上,实验串口只输出10两个数字,默认为输出1,高电平,有光的时候输出低电平 0V(数值0),无光的时候输出高电平 5V(数值1)。这里的有光指的是通过模块上电位器调节的一个阈值(临界值),在室内正常光下调灭模块上的开关指示灯,外加光线时指示灯能亮为准。

 楼主| 发表于 2021-4-27 15:37 | 显示全部楼层
程序十一:简易智能光控开关,白天灯灭晚上灯亮
实验参考开源代码(Arduino):

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   程序十一:简易智能光控开关,白天灯灭晚上灯亮
  4.   LED(接入板载灯D13脚)
  5.   实验接线:
  6.   光敏电阻模块   Uno
  7.   +             Vcc
  8.   G             GND
  9.   D0            D2
  10. */

  11. void setup() {
  12.   pinMode(2, INPUT);//将2号数字口设置为输入状态,13号数字口设置为输出状态
  13.   pinMode(13, OUTPUT);
  14. }

  15. void loop() {
  16.   if (digitalRead(2)) {//如果有光(白天)
  17.     digitalWrite(13, HIGH); //则灯熄灭
  18.   }
  19.   else {
  20.     digitalWrite(13, LOW); //否则灯亮(夜晚)
  21.     delay(1000);
  22.   }
  23. }
复制代码



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino爱好者

GMT+8, 2022-12-4 17:09 , Processed in 0.076550 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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