“做一個(gè)明亮的火花,把燈關(guān)到天黑!” 有時(shí)我們忘記關(guān)燈和浪費(fèi)電力,你一定也看到白天打開了路燈。我們已經(jīng)在黑暗探測器上構(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引腳的輸出信號將是模擬信號,并從Arduino獲取為數(shù)字信號。它使用數(shù)字波的占空比來生成信號的順序模擬值。并且,該信號進(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信號。在這里,我們僅在模擬值小于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 的模擬引腳。模擬引腳感測電壓并為Arduino提供一些模擬值。模擬值根據(jù)LDR的電阻而變化。因此,如果LDR上暗,則其電阻增加,因此電壓值(模擬值)減小。因此,模擬值改變PWM輸出或占空比,并且占空比進(jìn)一步與功率LED的光強(qiáng)度成正比。所以LDR上的光會(huì)自動(dòng)控制電源LED的強(qiáng)度。下面是這將如何工作的流程圖,向上箭頭符號表示“增加”,向下箭頭符號表示“減少”。
光強(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文章
23308瀏覽量
661556 -
PWM
+關(guān)注
關(guān)注
114文章
5193瀏覽量
214217 -
Arduino
+關(guān)注
關(guān)注
188文章
6472瀏覽量
187327
發(fā)布評論請先 登錄
相關(guān)推薦
評論