【雕爷学编程】Arduino动手做(02)---光敏电阻模块3

发布时间 2023-07-15 16:51:54作者: 行者花雕

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

 

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二:光敏电阻传感器模块

程序九:随着光照强度变小,LED越亮,且自动设置最大值与最小值
实验参考开源代码(Arduino):

 

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

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

void setup() {
  pinMode(ldrPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  analogWrite(ledPin, 255); //点亮LED,标示检测开始
  for (int i = 0; i < 1000 ; i++) { //循环1000次检测当前的最小值和最大值
    int val = analogRead(ldrPin);//获取光敏电阻的返回值
    if (val > maxVal) {     //若val大于maxVal
      maxVal = val;         //将maxVal的值更改为val的值
    }
    if (val < minVal) {     //若val小于minVal
      minVal = val;         //将minVal的值更改为val的值
    }
    delay(5);
  }
  analogWrite(ledPin, 0); //LED熄灭,检测结束
  Serial.print("max =");
  Serial.println(maxVal);  //输出最大值
  Serial.print("min =");
  Serial.println(minVal);  //输出最小值
}

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

  

测试实验场景图

程序十:无光时输出1,有光时输出0(需调整触发阕值)
实验参考开源代码(Arduino):

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

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

void loop(){
  int temp = digitalRead(2);//赋值数字变量
  Serial.println(temp);将变量输出到串口
  delay(200);
}

  

实验串口输出截图

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

程序十一:简易智能光控开关,白天灯灭晚上灯亮
实验参考开源代码(Arduino):

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

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

void loop() {
  if (digitalRead(2)) {//如果有光(白天)
    digitalWrite(13, HIGH); //则灯熄灭
  }
  else {
    digitalWrite(13, LOW); //否则灯亮(夜晚)
    delay(1000);
  }
}

  

Arduino实验场景图

开源仿真编程(Linkboy V4.2)

开源图形编程(Mind+、编玩边学)