樹莓派基礎實驗19:光敏傳感器實驗

一叽讳、介紹

?? 該傳感器實際上是一個光敏電阻,它隨著光強的變化而改變其電阻,它可以用來制作光控開關绷杜。


二、組件

★Raspberry Pi主板*1

★樹莓派電源*1

★40P軟排線*1

★PCF8591模數(shù)轉換器模塊*1

★光敏傳感器模塊*1

★面包板*1

★跳線若干

三濒募、實驗原理

光敏傳感器
光敏電阻模塊原理圖

??隨著光強度的增加鞭盟,光敏電阻的電阻將降低,因此輸出電壓降低瑰剃。由光敏電阻收集的模擬信號通過PCF8591轉換為數(shù)字信號齿诉。然后將這些數(shù)字信號傳輸?shù)綐漭刹⒋蛴≡谄聊簧稀?/p>

??光敏電阻傳感器有兩個LED指示燈。PWR-LED是電源指示燈晌姚。DO-LED是數(shù)字輸出指示燈粤剧,當光弱時熄滅,DO輸出高電平挥唠;當光強時燈亮抵恋,DO輸出低電平。而判定光強弱的臨界值可以通過旋轉中間藍色元件上的十字螺絲調節(jié)猛遍。


光敏傳感器

四馋记、實驗步驟

??第1步:連接電路号坡。

樹莓派 T型轉接板 PCF8591模塊
SDA SDA SDA
SCL SCL SCL
5V 5V VCC
GND GND GND
聲音傳感器模塊 T型轉接板 PCF8591模塊
AO * AIN0
DO G17 *
VCC 5V VCC
GND GND GND
光敏傳感器實驗電路圖
光敏傳感器實驗實物接線圖

??第2步:PCF8591模塊采用的是I2C(IIC)總線進行通信的,但是在樹莓派的鏡像中默認是關閉的梯醒,在使用該傳感器的時候宽堆,我們必須首先允許IIC總線通信。

打開I2C總線通信

??第3步:開始編程茸习。這里先編寫一個PCF8591.py庫文件畜隶,后面再編寫一個python程序引入這個庫文件。
??PCF8591.py庫文件就是PCF8591模塊的程序号胚,單獨編寫是為了便于重用籽慢。在這個腳本中,我們使用了一個放大器用于模擬輸入和一個LED燈用于模擬輸出猫胁,模擬輸入不能超過3.3V箱亿!
??該程序也可以單獨運行,用于測試3個電阻模塊的功能弃秆。需用短路帽連接AIN0和INPUT0(電位計模塊)届惋,連接AIN1和INPUT1(光敏電阻模塊),以及連接AIN2和INPUT2(熱敏電阻模塊)菠赚。
??連接LED燈脑豹,AIN0(模擬輸入0)端口用于接收來自電位計模塊的模擬信號,AOUT(模擬輸出)用于將模擬信號輸出到雙色LED模塊衡查,以便改變LED的亮度瘩欺。
??PCF8591的詳細內(nèi)容請查看樹莓派基礎實驗12:PCF8591模數(shù)轉換器實驗

#!/usr/bin/env python
#------------------------------------------------------
#
#       您可以使用下面語句將此腳本導入另一個腳本:
#           “import PCF8591 as ADC”                
#   
#   ADC.Setup(Address)  # 查詢PCF8591的地址:“sudo i2cdetect -y 1”
# i2cdetect  is  a  userspace  program to scan an I2C bus for devices.
# It outputs a table with the list of detected devices on the specified bus.
#   ADC.read(channal)   # Channal范圍從0到3 
#   ADC.write(Value)    # Value范圍從0到255
#
#------------------------------------------------------
#SMBus (System Management Bus,系統(tǒng)管理總線) 
import smbus   #在程序中導入“smbus”模塊
import time

# for RPI version 1, use "bus = smbus.SMBus(1)"
# 0 代表 /dev/i2c-0拌牲, 1 代表 /dev/i2c-1 ,具體看使用的樹莓派那個I2C來決定
bus = smbus.SMBus(1)         #創(chuàng)建一個smbus實例

#在樹莓派上查詢PCF8591的地址:“sudo i2cdetect -y 1”
def setup(Addr):
    global address
    address = Addr

def read(chn): #channel
    if chn == 0:
        bus.write_byte(address,0x40)   #發(fā)送一個控制字節(jié)到設備
    if chn == 1:
        bus.write_byte(address,0x41)
    if chn == 2:
        bus.write_byte(address,0x42)
    if chn == 3:
        bus.write_byte(address,0x43)
    bus.read_byte(address)         # 從設備讀取單個字節(jié)俱饿,而不指定設備寄存器。
    return bus.read_byte(address)  #返回某通道輸入的模擬值A/D轉換后的數(shù)字值

def write(val):
    temp = val  # 將字符串值移動到temp
    temp = int(temp) # 將字符串改為整數(shù)類型
    # print temp to see on terminal else comment out
    bus.write_byte_data(address, 0x40, temp) 
    #寫入字節(jié)數(shù)據(jù)们拙,將數(shù)字值轉化成模擬值從AOUT輸出

if __name__ == "__main__":
    setup(0x48) 
 #在樹莓派終端上使用命令“sudo i2cdetect -y 1”稍途,查詢出PCF8591的地址為0x48
    while True:
        print '電位計   AIN0 = ', read(0)   #電位計模擬信號轉化的數(shù)字值
        print '光敏電阻 AIN1 = ', read(1)   #光敏電阻模擬信號轉化的數(shù)字
        print '熱敏電阻 AIN2 = ', read(2)   #熱敏電阻模擬信號轉化的數(shù)字值
        tmp = read(0)
        tmp = tmp*(255-125)/255+125 
# 125以下LED不會亮,所以將“0-255”轉換為“125-255”砚婆,調節(jié)亮度時燈不會熄滅
        write(tmp)
        time.sleep(2)

??若想深入學習模/數(shù)轉換等模電知識械拍,強烈推薦以下書籍,國外大學最經(jīng)典模電教程装盯,比國內(nèi)教程生動有趣更易懂坷虑。掃碼購買或者點擊下面的鏈接。

模擬電子基礎

《模擬電子基礎》點擊購買:https://u.dangdang.com/OIVk

??第4步:編寫控制程序埂奈。打印在屏幕上的有兩個數(shù)據(jù):GPIO.input(DO) 是數(shù)字輸出信號迄损,光強輸出低電平,光弱輸出高電平账磺,而光強弱判定的臨界值可以通過旋轉十字螺絲調整芹敌;ADC.read(0)是光敏傳感器的模擬信號輸出痊远,通過PCF8591A/D轉換后得到的0~255的值,光強值低氏捞,光弱值高碧聪。

#!/usr/bin/env python
import PCF8591 as ADC
import RPi.GPIO as GPIO
import time

DO = 17
GPIO.setmode(GPIO.BCM)

def setup():
    ADC.setup(0x48)
    GPIO.setup(DO, GPIO.IN)


def loop():
    status = 1
    while True:
        print '#######################'
        print 'Digital output: ',GPIO.input(DO)  #光強輸出低電平,光弱輸出高電平
        print 'Value: ', ADC.read(0)   #光強值低液茎,光弱值高
        print '#######################'
        time.sleep(0.5)

if __name__ == '__main__':
    try:
        setup()
        loop()
    except KeyboardInterrupt: 
        pass    


??

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逞姿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子捆等,更是在濱河造成了極大的恐慌滞造,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栋烤,死亡現(xiàn)場離奇詭異谒养,居然都是意外死亡,警方通過查閱死者的電腦和手機班缎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門蝴光,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人达址,你說我怎么就攤上這事〕煤模” “怎么了沉唠?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長苛败。 經(jīng)常有香客問我满葛,道長,這世上最難降的妖魔是什么罢屈? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任嘀韧,我火速辦了婚禮,結果婚禮上缠捌,老公的妹妹穿的比我還像新娘锄贷。我一直安慰自己,他們只是感情好曼月,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布谊却。 她就那樣靜靜地躺著,像睡著了一般哑芹。 火紅的嫁衣襯著肌膚如雪炎辨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天聪姿,我揣著相機與錄音碴萧,去河邊找鬼乙嘀。 笑死,一個胖子當著我的面吹牛破喻,可吹牛的內(nèi)容都是我干的虎谢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼低缩,長吁一口氣:“原來是場噩夢啊……” “哼嘉冒!你這毒婦竟也來了?” 一聲冷哼從身側響起咆繁,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤讳推,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后玩般,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體银觅,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年坏为,在試婚紗的時候發(fā)現(xiàn)自己被綠了究驴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡匀伏,死狀恐怖洒忧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情够颠,我是刑警寧澤熙侍,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站履磨,受9級特大地震影響蛉抓,放射性物質發(fā)生泄漏。R本人自食惡果不足惜剃诅,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一巷送、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧矛辕,春花似錦笑跛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至杨刨,卻和暖如春晤柄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背妖胀。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工芥颈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惠勒,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓爬坑,卻偏偏與公主長得像纠屋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子盾计,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355