樹莓派基礎(chǔ)實(shí)驗(yàn)13:雨滴探測(cè)傳感器實(shí)驗(yàn)

一汪厨、介紹

?? 雨滴傳感器或雨滴檢測(cè)傳感器,用于檢測(cè)是否下雨以及降雨蜂厅,廣泛用于汽車的雨刷系統(tǒng)匪凡,智能照明系統(tǒng)和天窗系統(tǒng)。


二掘猿、組件

★Raspberry Pi 3主板*1

★樹莓派電源*1

★40P軟排線*1

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

★雨滴傳感器模塊*1

★面包板*1

★跳線若干

三病游、實(shí)驗(yàn)原理

雨滴檢測(cè)傳感器
雨滴檢測(cè)傳感器原理圖

??在雨滴系統(tǒng)中,用雨滴傳感器檢測(cè)降雨量稠通,并轉(zhuǎn)換控制器檢測(cè)到的信號(hào)衬衬。然后根據(jù)這些信號(hào)自動(dòng)設(shè)置雨刮器的時(shí)間隔买猖,以方便地控制雨刮器的電機(jī)。在智能照明系統(tǒng)中滋尉,自動(dòng)檢測(cè)駕駛環(huán)境并調(diào)整照明模式玉控,提高惡劣環(huán)境下的行車安全。在智能天窗系統(tǒng)中狮惜,檢測(cè)是否下雨奸远,如果檢測(cè)到雨滴就自動(dòng)關(guān)閉天窗。
??有兩根金屬線彼此靠近讽挟,但不會(huì)在雨水檢測(cè)板上交叉厢蒜。當(dāng)雨水落在電路板上時(shí),兩根金屬線會(huì)導(dǎo)通综液。因此兩根金屬線之間會(huì)有電壓叉橱。

??控制板上有兩個(gè)指示燈,電源指示燈PWR-LED和輸出信號(hào)指示燈DO-LED眼姐。電源指示燈在通電后常亮诅迷,沒有雨的時(shí)候出信號(hào)指示燈不亮;雨滴上去众旗,候出信號(hào)指示燈亮罢杉。雨滴板和控制板是分開的,方便將線引出贡歧,大面積的雨滴板滩租,更有利于檢測(cè)到雨水。

??控制板上有兩個(gè)輸出利朵,數(shù)字輸出DO律想,模擬輸出AO。接上5V電源電源燈亮绍弟,感應(yīng)板上沒有水滴時(shí)技即,DO輸出為高電平,滴上一滴水樟遣,DO輸出為低電平而叼,刷掉上面的水滴,又恢復(fù)到輸出高電平狀態(tài)豹悬,靈敏度可以通過藍(lán)色的可變電阻調(diào)節(jié)葵陵。

??AO模擬輸出,連接到PCF8591的模擬輸入AIN0口屿衅,通過比對(duì)模擬值轉(zhuǎn)化為的數(shù)字值大小埃难,可以檢測(cè)滴在上面的雨量大小,雨水越大,電阻值越小涡尘,模擬值轉(zhuǎn)化為的數(shù)字值越小忍弛。數(shù)字值的范圍當(dāng)然是0~255, 不同的值對(duì)應(yīng)是降雨量的多少毫米考抄,則需要實(shí)體測(cè)量细疚,雨滴板的放置方式不同結(jié)果都不同,本文不作研究川梅。

四疯兼、實(shí)驗(yàn)步驟

??第1步:連接電路。

樹莓派 T型轉(zhuǎn)接板 PCF8591模塊
SDA SDA SDA
SCL SCL SCL
5V 5V VCC
GND GND GND
雨滴傳感器調(diào)理板 T型轉(zhuǎn)接板 PCF8591模塊
DO G17 *
AO * AIN0
VCC 5V VCC
GND GND GND
雨滴探測(cè)傳感器實(shí)驗(yàn)原理圖
雨滴探測(cè)傳感器實(shí)驗(yàn)實(shí)物接線圖

??第2步:PCF8591模塊采用的是I2C(IIC)總線進(jìn)行通信的贫途,但是在樹莓派的鏡像中默認(rèn)是關(guān)閉的吧彪,在使用該傳感器的時(shí)候,我們必須首先允許IIC總線通信丢早。

打開I2C總線通信

??第3步:開始編程姨裸。這里先編寫一個(gè)PCF8591.py庫(kù)文件,后面再編寫一個(gè)python程序引入這個(gè)庫(kù)文件怨酝。
??PCF8591.py庫(kù)文件就是PCF8591模塊的程序傀缩,單獨(dú)編寫是為了便于重用。在這個(gè)腳本中农猬,我們使用了一個(gè)放大器用于模擬輸入和一個(gè)LED燈用于模擬輸出赡艰,模擬輸入不能超過3.3V!
??該程序也可以單獨(dú)運(yùn)行斤葱,用于測(cè)試3個(gè)電阻模塊的功能慷垮。需用短路帽連接AIN0和INPUT0(電位計(jì)模塊),連接AIN1和INPUT1(光敏電阻模塊)苦掘,以及連接AIN2和INPUT2(熱敏電阻模塊)换帜。
??連接LED燈,AIN0(模擬輸入0)端口用于接收來自電位計(jì)模塊的模擬信號(hào)鹤啡,AOUT(模擬輸出)用于將模擬信號(hào)輸出到雙色LED模塊,以便改變LED的亮度蹲嚣。
??PCF8591的詳細(xì)內(nèi)容請(qǐng)查看樹莓派基礎(chǔ)實(shí)驗(yàn)12:PCF8591模數(shù)轉(zhuǎn)換器實(shí)驗(yàn)递瑰。

#!/usr/bin/env python
#------------------------------------------------------
#
#       您可以使用下面語(yǔ)句將此腳本導(dǎo)入另一個(gè)腳本:
#           “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   #在程序中導(dǎo)入“smbus”模塊
import time

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

#在樹莓派上查詢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ā)送一個(gè)控制字節(jié)到設(shè)備
    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)         # 從設(shè)備讀取單個(gè)字節(jié)隙畜,而不指定設(shè)備寄存器抖部。
    return bus.read_byte(address)  #返回某通道輸入的模擬值A(chǔ)/D轉(zhuǎn)換后的數(shù)字值

def write(val):
    temp = val  # 將字符串值移動(dòng)到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ù)字值轉(zhuǎn)化成模擬值從AOUT輸出

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

??若想深入學(xué)習(xí)模/數(shù)轉(zhuǎn)換等模電知識(shí),強(qiáng)烈推薦以下書籍俯萎,國(guó)外大學(xué)最經(jīng)典模電教程傲宜,比國(guó)內(nèi)教程生動(dòng)有趣更易懂。掃碼購(gòu)買或者點(diǎn)擊下面的鏈接夫啊。

模擬電子基礎(chǔ)

《模擬電子基礎(chǔ)》點(diǎn)擊購(gòu)買:https://u.dangdang.com/OIVk

??第4步:編寫雨滴探測(cè)程序函卒。感應(yīng)板上沒有水滴時(shí),DO輸出為高電平撇眯,數(shù)字輸出指示燈DO-LED滅 报嵌,打印 * Not raining *。滴上一滴水熊榛,DO輸出為低電平锚国,數(shù)字輸出指示燈DO-LED亮,打印 * Raining玄坦! *血筑。刷掉上面的水滴,又恢復(fù)到輸出高電平狀態(tài)营搅。

#!/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 Print(x):
    if x == 1:
        print ''
        print '   ***************'
        print '   * Not raining *'
        print '   ***************'
        print ''
    if x == 0:
        print ''
        print '   *************'
        print '   * Raining!! *'
        print '   *************'
        print ''

def loop():
    status = 1   #初始狀態(tài)為無水云挟,高電平,所以為1
    while True:
        print ADC.read(0)  #打印模擬輸出的值轉(zhuǎn)化為的數(shù)字值(0~255)
        print GPIO.input(DO)  #打印數(shù)字輸出DO的值(無雨為1转质,有雨為0)
        tmp = GPIO.input(DO)
        if tmp != status:      #滴水時(shí)DO輸出為低電平园欣,無水時(shí)為高電平
            Print(tmp)         # tmp != status即遇狀態(tài)變化時(shí),打印情況
            status = tmp
        
        time.sleep(2)

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

??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末休蟹,一起剝皮案震驚了整個(gè)濱河市沸枯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赂弓,老刑警劉巖绑榴,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異盈魁,居然都是意外死亡翔怎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門杨耙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赤套,“玉大人,你說我怎么就攤上這事珊膜∪菸眨” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵车柠,是天一觀的道長(zhǎng)剔氏。 經(jīng)常有香客問我塑猖,道長(zhǎng),這世上最難降的妖魔是什么谈跛? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任羊苟,我火速辦了婚禮,結(jié)果婚禮上币旧,老公的妹妹穿的比我還像新娘践险。我一直安慰自己,他們只是感情好吹菱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布巍虫。 她就那樣靜靜地躺著,像睡著了一般鳍刷。 火紅的嫁衣襯著肌膚如雪占遥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天输瓜,我揣著相機(jī)與錄音瓦胎,去河邊找鬼。 笑死尤揣,一個(gè)胖子當(dāng)著我的面吹牛搔啊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播北戏,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼负芋,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了嗜愈?” 一聲冷哼從身側(cè)響起旧蛾,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蠕嫁,沒想到半個(gè)月后锨天,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剃毒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年病袄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赘阀。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡陪拘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纤壁,到底是詐尸還是另有隱情,我是刑警寧澤捺信,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布酌媒,位于F島的核電站欠痴,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏秒咨。R本人自食惡果不足惜喇辽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望雨席。 院中可真熱鬧菩咨,春花似錦、人聲如沸陡厘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)糙置。三九已至云茸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谤饭,已是汗流浹背标捺。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留揉抵,地道東北人亡容。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像冤今,于是被迫代替她去往敵國(guó)和親闺兢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容