“做一個(gè)明亮的火花,把燈關(guān)到天黑!” 有時(shí)我們忘記關(guān)燈和浪費(fèi)電力,你一定也看到白天打開了路燈。我們已經(jīng)在黑暗探測(cè)器上構(gòu)建了一些電路,如果外面很亮,燈會(huì)自動(dòng)關(guān)閉,如果外面很暗,燈會(huì)自動(dòng)打開。但是這一次,在這個(gè)電路中,我們不僅根據(jù)光照條件打開和關(guān)閉燈,而且還根據(jù)外部光線條件改變光的強(qiáng)度。在這里,我們將LDR和PWM概念與Arduino一起使用,以自動(dòng)降低或增加1瓦功率LED的亮度。
基本上,PWM是指脈寬調(diào)制,通過PWM引腳的輸出信號(hào)將是模擬信號(hào),并從Arduino獲取為數(shù)字信號(hào)。它使用數(shù)字波的占空比來生成信號(hào)的順序模擬值。并且,該信號(hào)進(jìn)一步用于控制電源LED的亮度。
所需材料
Arduino UNO
LDR
電阻器(510,100k歐姆)
電容器 (0.1uF)
晶體管 2N2222
1 瓦電源指示燈
連接線
面包板
電路圖
代碼和說明
最后給出了自動(dòng)LED調(diào)光器的完整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
現(xiàn)在,在循環(huán)中,我們首先使用命令“analogRead(LDR)”讀取值,然后將模擬輸入保存到名為“value”的變量中。通過進(jìn)行一些數(shù)學(xué)計(jì)算,我們正在生成PWM信號(hào)。在這里,我們僅在模擬值小于500時(shí)才使用PWM控制光的強(qiáng)度,如果超過500,則完全關(guān)閉燈。
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);
}
}
它如何自動(dòng)控制光強(qiáng)度:
根據(jù)電路圖,我們使用LDR和100k電阻制作了分壓器電路。分壓器輸出饋送到 Arduino 的模擬引腳。模擬引腳感測(cè)電壓并為Arduino提供一些模擬值。模擬值根據(jù)LDR的電阻而變化。因此,如果LDR上暗,則其電阻增加,因此電壓值(模擬值)減小。因此,模擬值改變PWM輸出或占空比,并且占空比進(jìn)一步與功率LED的光強(qiáng)度成正比。所以LDR上的光會(huì)自動(dòng)控制電源LED的強(qiáng)度。下面是這將如何工作的流程圖,向上箭頭符號(hào)表示“增加”,向下箭頭符號(hào)表示“減少”。
光強(qiáng)度(在 LDR 上) ↓ - 電阻↑ - 模擬引腳電壓↓ - 占空比 (PWM)↑ -功率指示燈亮度↑
如果其外部完全亮起(當(dāng)模擬值增加超過 500 時(shí)),電源 LED 將熄滅。
這就是使用 LDR 自動(dòng)控制光強(qiáng)度的方法。
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);
}
}
-
led
+關(guān)注
關(guān)注
242文章
23759瀏覽量
671643 -
PWM
+關(guān)注
關(guān)注
116文章
5425瀏覽量
218403 -
Arduino
+關(guān)注
關(guān)注
189文章
6493瀏覽量
190279
發(fā)布評(píng)論請(qǐng)先 登錄
手工制作紅外遙控LED照明燈 可自動(dòng)調(diào)節(jié)光度

LED使用PCB上制作的arduino進(jìn)行控制

使用Arduino控制帶開關(guān)的LED

使用Arduino和Android控制遠(yuǎn)程LED

使用帶有代碼的Arduino UNO進(jìn)行LED漸變

通過LDR傳感器根據(jù)周圍的光強(qiáng)度自動(dòng)改變LED強(qiáng)度

使用Arduino和Python Tkinter進(jìn)行RGB Led控制

Arduino控制的RGB LED燈條

Arduino手勢(shì)控制LED亮度

使用Arduino藍(lán)牙控制LED

用于LED燈串的Arduino控制電源

使用Arduino Uno控制LED矩陣

使用IOT BOLT和SmartPhone控制LED的強(qiáng)度

如何使用Arduino控制RGB LED

評(píng)論