經過本系列博客的前幾篇文章,咱們已經掌握了樹莓派應用開發的基本方法。不少時候,樹莓派能夠作什麼更多的取決於咱們的創造力。本篇博客,咱們將經過實踐來學習在樹莓派開發中經常使用的兩個開關元件:傾斜傳感器與震動傳感器。python
傾斜傳感器和震動傳感器都是一種開關元件,其能夠經過外界的物理變化來改變狀態。在生活中的不少報警系統中都有應用。試想一下,若是咱們使用到的某個設備須要避免傾斜和震動,就可使用這兩種傳感器作報警電路。markdown
本次實驗自己的邏輯代碼沒有什麼難度,所須要使用到的知識都是以前有涉及過的。在開始編寫代碼和進行實驗以前,咱們先來了解下傾斜傳感器與震動傳感器的工做原理。ide
傾斜傳感器又稱爲傾斜開關,其能夠對元件相對與重力方向的傾角作出感應。早期的傾斜傳感器多采用貢傾斜傳感器,其管體內部使用汞做爲導電介質,當有傾斜發生時,金屬汞會流動到管體末端,從而接通電路。汞傾斜傳感器的優勢是耐用壽命長,但其對環境有害,目前已經不多使用。函數
當下比較流行的是球形傾斜傳感器,這種傳感器設計簡單,管體內放入金屬球,當發生傾斜時,金屬球滾動接通電路。本次實驗,咱們採用SW520D型號的傾斜傳感器,以下圖所示:學習
其頭部的管體就是傾斜開關,其搭載的功能板子分解以下:編碼
此傳感器有3個引腳,其中VCC須要接3.3-5V的電壓,中間引腳接地,DO引腳是信號輸出引腳,咱們經過其進行傾斜感應。如上圖所示,此傳感器自帶電源和開關兩個LED燈,接通電源後,電源LED燈發光,當傳感器觸發傾斜時,開關LED燈發光。對於DO引腳,當開關LED發光時,其輸出低電平,表示開關打開,當開關LED燈不亮時,其輸出高電平,表示開關斷開。用其咱們能夠很方便的實現傾斜斷電保護功能。如上圖中,此傳感器還提供了一個靈敏度的電位調節單元,其工做原理電路圖以下所示:設計
震動傳感器與傾斜傳感器的工做原理基本一致,不一樣的地方只在於開關的觸發方式,震動傳感器感應外界的震動從而觸發電路的導通。經常使用的震動開關有滾珠式和彈簧式兩種,以彈簧式爲例,當發生震動時,彈簧與電極接觸,從而導通電路,本次實驗咱們使用的震動傳感器以下圖所示:3d
能夠看到,其搭載的功能板與上面介紹的傾斜傳感器徹底一致,這裏咱們就再也不贅述。code
對於本次實驗,咱們將傾斜傳感器與震動傳感器做爲模擬警告開關來使用,當設備發生震動或傾斜時,經過輸出Log信息來作提示。首先咱們先確認要使用到的GPIO引腳,對於電源和負極直接鏈接便可,咱們暫定使用BCM編號爲GPIO5和GPIO6的兩個引腳,其對應的物理引腳分別爲29和31。物理29引腳咱們接震動傳感器的信號引腳,物理31引腳咱們接傾斜傳感器的信號引腳。筆者這裏使用擴展板連線以下圖所示。若是不使用擴展板,直接鏈接物理引腳便可。blog
舒適提示:能夠經過線的顏色參考示意圖中的連線。
咱們使用GPIO引腳的INPUT功能來監聽傳感器的狀態,示例代碼以下:
#coding:utf-8 # 導入GPIO控制薄塊 import RPi.GPIO as GPIO # 設置使用的引腳編碼模式 GPIO.setmode(GPIO.BOARD) # 定義震動開關引腳 BCM5 swi_shake = 29 # 定義傾斜開關引腳 BCM6 swi_slop = 31 # 進行開關引腳的初始化,設置爲輸入引腳,且默認爲高電平 GPIO.setup(swi_shake, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(swi_slop, GPIO.IN, pull_up_down=GPIO.PUD_UP) # 定義狀態變化的回調函數 def switch_shake(channel): # 低電平爲開關打開狀態 if not GPIO.input(channel): print("注意,發生了震動!") def switch_slop(channel): # 低電平爲開關打開狀態 if not GPIO.input(channel): print("注意,發生了傾斜!") # 添加輸入引腳電平變化的回調函數 GPIO.add_event_detect(swi_shake, GPIO.FALLING, callback=switch_shake, bouncetime=200) GPIO.add_event_detect(swi_slop, GPIO.FALLING, callback=switch_slop, bouncetime=200) while True: pass
上面的代碼比較簡單,運行上面代碼,經過觸發傳感器的震動與傾斜,能夠觀察程序的打印輸出信息,同時傳感器上的開關指示燈也能夠提示傳感器的接通狀態。
本次實驗很是簡單,可是咱們能夠發揮創造力,經過這兩個傳感器作出一些有意思的東西,盡情想象吧!
專一技術,懂的熱愛,願意分享,作個朋友
QQ:316045346