Arduino:在Photoresistor上使用analogRead(),用PWM读取LED

时间:2016-11-11 21:23:33

标签: arduino pwm

我一直在与Arduino合作开展一个项目,并且遇到了一些令我着迷/困惑的事情。所以,在构建这个项目之前,我必须测试一下。我建立了一个简单的电路,它只包含一个LED和光敏电阻。我必须测试的是光敏电阻是否能够确定通过PWM调暗的LED的亮度。我最初的期望是这不起作用(光敏电阻将读取1023或0,因为PWM是以数字方式实现的)。令我惊讶的是,光敏电阻能够精确读取LED的亮度(精确到一定程度 - 这仅仅是基于将PWM LED的亮度与串联一个电阻的LED进行比较)!这正是我想要的,但我只是好奇为什么这样做。我不确定我最初的怀疑是由于对光敏电阻或PWM的误解。任何帮助将非常感激。谢谢!

这是我正在运行的代码(我没有使用analogWrite()函数,因为我正在处理的项目要求我对PWM有一定程度的控制权):

const int LED_PIN = 9;
const int PHOTO_PIN = 0;

//These values have been altered and tested
const int HIGH_TIME = 250;
const int LOW_TIME = 2750;

void setup()
{
  pinMode(LED_PIN, OUTPUT);
  pinMode(PHOTO_PIN, INPUT);

  Serial.begin(9600);
}

void loop()
{
 digitalWrite(LED_PIN, HIGH);
 delayMicroseconds(HIGH_TIME);
 digitalWrite(LED_PIN, LOW);
 delayMicroseconds(LOW_TIME);

 Serial.println(analogRead(PHOTO_PIN));
}

2 个答案:

答案 0 :(得分:0)

“光敏电阻”是可变电阻器。这是最简单的说法。

想象一下你的电位器,你可以通过旋转小旋钮然后analogRead来控制它的电阻。另一侧的光敏电阻根据光强度改变其电阻。因此,电阻会根据您的LED上下波动。

对于“如何”它确实有效,请参阅here

现在,有几个因素需要考虑:

1 - 房间的环境光。

2 - LED之间的距离

希望我帮助你学习更多有关光敏电阻的知识!

答案 1 :(得分:0)

光电阻的响应时间比您使用的PWM频率慢得多。因此,它平均LED的开启和关闭时间,并给出与平均光线成比例的电阻。如果您使用具有快速响应时间的光电二极管,它将能够“看到”LED开启和关闭。

我建议你不要每次都通过循环写入串口,因为它会很快落在9600波特。也许每循环写500次。