我們日常生活中有一種狀況是,當車輛開進室內停車場時,如果室內光線不足,很容易就影響駕駛者的視線。如果能在車輛進入較暗的室內時,自動開啟燈光,補足照明,就可以減少碰撞的發生。國內一般比較高級的車款都會配備這項功能,這個實驗我們嘗試以光照度感應的數值,判斷光線不足時,開啟 LED模擬打開車燈。另外一個有趣的實驗是「特雷門」樂器是用震盪頻率的改變來製造聲音。為什麼在這裡提到特雷門呢?因為我想試著用光度的變化來產生不同頻率的聲音。藉由線的變化,發出不同聲音,因為光度比較難掌控,發出來的聲音不夠準確,要演奏的難度很高,但是就當作是個好玩的實驗。
由於音色特殊,早期許多電影的恐怖氣氛都是用它來營造的。
不過因為手的位置沒有明顯的記號可參考,完全靠演奏者的感覺,音準控制不易,操作起來有相當的難度,極少人專精此項樂器。[維基百科]
1勒克斯 = 1 流明/平方米 = 1 燭光·球面度/平方米(1 lx = 1 lm/m2= 1 cd·sr·m2)。
流明(英語:Lumen), 號為lm。是光通 的國際單位制的導出單位(derived unit),是從一光源放射出的可見光的量度。光通量(luminous flux)與輻射通量(radiant flux)不同,輻射通量是所有電磁波發光總功率的量度,而光通量量度則反映了人眼對不同波長光的變化敏感度。如果一個光源發射1燭光的發光強度到1個立體角的範圍裡,則到那個立體角的總發射光通量就是一流明。
• 電源:DC3 ~ 5V
• 感測範圍:1 ~ 65535 Lux
• 感測器內置16bit,AD轉換器直接數位輸出,省略複雜的計算
• 不區分環境光源、接近於視覺靈敏度的分光特性
• 可對廣泛的亮度進行1Lux的高精度測定
• 受到紅外線影響非常小
• 標準NXP IIC通信協定
• 模組內部包含通信電位轉換,與 5v 開發板直接連接
安裝完成後,就有一個 play 程式可播放聲音,透過光的照度變化產生不同聲音:
[特雷門]
特雷門這個樂器是在 1919年發明,樂器包含有兩個像天線的突出構造,一個是長直金屬桿,一個是環狀的水平金屬圈, 垂直桿控制音頻率高低,水平環狀圈控制音量大小。原理是利用手與天線構造的距離遠近,改變其電容之大小,而影響其振盪迴路之振盪頻率。由於音色特殊,早期許多電影的恐怖氣氛都是用它來營造的。
不過因為手的位置沒有明顯的記號可參考,完全靠演奏者的感覺,音準控制不易,操作起來有相當的難度,極少人專精此項樂器。[維基百科]
來源:維基百科
[照度單位]
勒克斯 (Lux,通常簡寫為lx) 是一個標識照度的國際單位制單位,1流明每平方米面積,就是1勒克斯。也就是1勒克斯表示每平方米有1流明。1勒克斯 = 1 流明/平方米 = 1 燭光·球面度/平方米(1 lx = 1 lm/m2= 1 cd·sr·m2)。
流明(英語:Lumen), 號為lm。是光通 的國際單位制的導出單位(derived unit),是從一光源放射出的可見光的量度。光通量(luminous flux)與輻射通量(radiant flux)不同,輻射通量是所有電磁波發光總功率的量度,而光通量量度則反映了人眼對不同波長光的變化敏感度。如果一個光源發射1燭光的發光強度到1個立體角的範圍裡,則到那個立體角的總發射光通量就是一流明。
[GY-30 光照度感測模組]
實驗所用的模組是 GY-30,主要是 BH1750FVI 這個 IC 的功能,模組的特點包括:• 電源:DC3 ~ 5V
• 感測範圍:1 ~ 65535 Lux
• 感測器內置16bit,AD轉換器直接數位輸出,省略複雜的計算
• 不區分環境光源、接近於視覺靈敏度的分光特性
• 可對廣泛的亮度進行1Lux的高精度測定
• 受到紅外線影響非常小
• 標準NXP IIC通信協定
• 模組內部包含通信電位轉換,與 5v 開發板直接連接
[接線圖]
• GY-30 模組連接線路
GY-30模組
|
Raspberry Pi
|
GND Ground
|
Pin 14 GND
|
ADD Address select
|
Pin 6 GND
|
SDA I2C SDA
|
Pin 3 GPIO
2
|
SCL I2C SCL
|
Pin 5 GPIO
3
|
VCC 3.3V
|
Pin 1 3.3V
|
Pin 11 GPIO
17 接 LED
|
[程式一]
當照度值小於300 時,開啟 LED 燈。#!/usr/bin/python import smbus import time import sys import os import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) # Define some constants from the datasheet DEVICE = 0x23 # Default device I2C address ONE_TIME_HIGH_RES_MODE_1 = 0x20 ONE_TIME_HIGH_RES_MODE_2 = 0x21 num = 0 LED = 11 GPIO.setup(LED,GPIO.OUT) bus = smbus.SMBus(1) # Rev 2 Pi uses 1
def convertToNumber(data): # 將 2位元轉成數字 return ((data[1] + (256 * data[0])) / 1.2) def readLight(addr=DEVICE): data = bus.read_i2c_block_data(addr,ONE_TIME_HIGH_RES_MODE_2) return convertToNumber(data) def main(): while True: num = readLight() print "Light Level : " + str(num) + " lx" if num < 300: GPIO.output(LED,GPIO.HIGH) else: GPIO.output(LED,GPIO.LOW) time.sleep(0.2) if __name__=="__main__": main()
[程式一執行結果]
[程式二]
要執行本程式前,需先安裝 sox 套件,執行指令如下:$ sudo apt-get install sox
安裝完成後,就有一個 play 程式可播放聲音,透過光的照度變化產生不同聲音:
#!/usr/bin/python import smbus import time import sys import os DEVICE = 0x23 # Default device I2C address ONE_TIME_HIGH_RES_MODE_1 = 0x20 ONE_TIME_HIGH_RES_MODE_2 = 0x21 bus = smbus.SMBus(1) # Rev 2 Pi uses 1 def convertToNumber(data):# 將 2位元轉成數字return ((data[1] + (256 * data[0])) / 1.2) def readLight(addr=DEVICE): data = bus.read_i2c_block_data(addr,ONE_TIME_HIGH_RES_MODE_2) return convertToNumber(data) def main(): while True: print "Light Level : " + str(readLight()) + " lx"
# 呼叫作業系統程式 play str2 = 'play -n -q synth .07 sin ' + str(readLight()) os.system(str2) # time.sleep(0.1) // Control Speed if __name__=="__main__": main()
張貼留言