在上一篇《Windows on Device 項目實踐 1 - PWM調光燈制作》中,我們學習了如何利用Intel Galileo開發板和Windows on Device來設計並完成一個PWM調光燈的制作。該情況下,我們需要手動調節電位器,通過PWM波形來控制LED燈的亮度。在現在的智能家居系統設計中,很多設備都需要融入智能,即無需人為干預,就能夠自動為我們服務。
在這個項目中,我們會使用光敏電阻,利用其感光特性,來設計並且制作一個感光燈。感光燈能夠根據環境光的強度,自動調節LED燈的亮度。
光敏電阻器(photovaristor)又叫光感電阻,是利用半導體的光電效應制成的一種電阻,其電阻值隨入射光的強弱而改變:入射光強,電阻減小,入射光弱,電阻增大。光敏電阻器一般用於光的測量、光的控制和光電轉換(將光的變化轉換為電的變化)。光敏電阻可廣泛應用於各種光控電路,如對燈光的控制、調節等場合,也可用於光控開關。
這次實踐項目需要使用的元器件有:
在本次制作中,光敏電阻是可以根據光強改變阻值的元件,自然也需要Galileo的模擬口讀取模擬值了,因此可以借鑒PWM 接口實驗,將電位計換做光敏電阻,實現當光強不同時LED 小燈的亮度的變化控制。連接的原理圖和硬件圖如下:
在下面的源代碼中,我們將模擬口讀取的返回值除以4,原因是模擬輸入analogRead()函數的返回值范圍是0 到1023,而模擬輸出analogWrite()函數的輸出值范圍是0 到255。
// Main.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "arduino.h"
int _tmain(int argc, _TCHAR* argv[])
{
return RunArduinoSketch();
}
int potpin = 0;//定義模擬接口0 連接光敏電阻
int ledpin = 11;//定義數字接口11 輸出PWM 調節LED 亮度
int val = 0;//定義變量val
void setup()
{
pinMode(ledpin, OUTPUT);//定義數字接口11 為輸出
}
void loop()
{
val = analogRead(potpin);//讀取傳感器的模擬值並賦值給val
Log(L"val: %d\r\n", val);//顯示val 變量數值
analogWrite(ledpin, val/4);// 打開LED 並設置亮度(PWM 輸出最大值255)
delay(10);//延時0.01 秒
}
啟動Galileo,利用TelNet建立連接,然後點擊調試。程序就會通過網口下載到Galileo上。光敏電阻隨著光強度的變化而改變其阻值,經過分壓以後,模擬口0讀取的值也會產生變化。我們可以嘗試使用手來阻擋光敏電阻,使其阻值發生變化,從而達到調試的目的。
調試的視頻鏈接如下,大家可以看到感光燈的效果:http://v.youku.com/v_show/id_XODU2Mjk1ODYw.html