如何使用Arduino对电源LED进行自动强度控制

描述

“做一个明亮的火花,把灯关到天黑!” 有时我们忘记关灯和浪费电力,你一定也看到白天打开了路灯。我们已经在黑暗探测器上构建了一些电路,如果外面很亮,灯会自动关闭,如果外面很暗,灯会自动打开。但是这一次,在这个电路中,我们不仅根据光照条件打开和关闭灯,而且还根据外部光线条件改变光的强度。在这里,我们将LDR和PWM概念与Arduino一起使用,以自动降低或增加1瓦功率LED的亮度。

基本上,PWM是指脉宽调制,通过PWM引脚的输出信号将是模拟信号,并从Arduino获取为数字信号。它使用数字波的占空比来生成信号的顺序模拟值。并且,该信号进一步用于控制电源LED的亮度。

所需材料

Arduino UNO

LDR

电阻器(510,100k欧姆)

电容器 (0.1uF)

晶体管 2N2222

1 瓦电源指示灯

连接线

面包板

电路图

led

代码和说明

最后给出了自动LED调光器的完整Arduino代码。

在下面的代码中,我们定义了PWM引脚和要在代码中使用的变量。

int pwmPin = 2; // assigns pin 12 to variable pwm

int LDR = A0; // assigns analog input A0 to variable pot

int c1 = 0;   // declares variable c1

int c2 = 0;   // declares variable c2

现在,在循环中,我们首先使用命令“analogRead(LDR)”读取值,然后将模拟输入保存到名为“value”的变量中。通过进行一些数学计算,我们正在生成PWM信号。在这里,我们仅在模拟值小于500时才使用PWM控制光的强度,如果超过500,则完全关闭灯。

int value = analogRead(LDR);

Serial.println(value);

c1= value;

c2= 500-c1;     // subtracts c2 from 1000 ans saves the result in c1

if (value < 500)

{

digitalWrite(pwmPin, HIGH);

delayMicroseconds(c2);  

digitalWrite(pwmPin, LOW); 

delayMicroseconds(c1);  

}

if (value > 500)

{

digitalWrite(2,LOW);

}

}

它如何自动控制光强度:

根据电路图,我们使用LDR和100k电阻制作了分压器电路。分压器输出馈送到 Arduino 的模拟引脚。模拟引脚感测电压并为Arduino提供一些模拟值。模拟值根据LDR的电阻而变化。因此,如果LDR上暗,则其电阻增加,因此电压值(模拟值)减小。因此,模拟值改变PWM输出或占空比,并且占空比进一步与功率LED的光强度成正比。所以LDR上的光会自动控制电源LED的强度。下面是这将如何工作的流程图,向上箭头符号表示“增加”,向下箭头符号表示“减少”。

光强度(在 LDR 上) ↓ - 电阻↑ - 模拟引脚电压↓ - 占空比 (PWM)↑ -功率指示灯亮度↑

如果其外部完全亮起(当模拟值增加超过 500 时),电源 LED 将熄灭。

这就是使用 LDR 自动控制光强度的方法。

int pwmPin = 2; // assigns pin 12 to variable pwm

int pot = A0; // assigns analog input A0 to variable pot

int c1 = 0; // declares variable c1

int c2 = 0; // declares variable c2


void setup() // setup loop

{

pinMode(pwmPin, OUTPUT); 

pinMode(pot, INPUT); 

Serial.begin(9600);

}


void loop()

{


int value = analogRead(pot);

Serial.println(value);

c1= value; 

c2= 500-c1; // subtracts c2 from 1000 ans saves the result in c1



if (value < 500)

{

digitalWrite(pwmPin, HIGH); 

delayMicroseconds(c2); 

digitalWrite(pwmPin, LOW); 

delayMicroseconds(c1); 

}


if (value > 500)

{

digitalWrite(2,LOW);

}



}
 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分