DIY智慧型家居安全掛鐘(1/3)

想像一個場景,當全家人準備出門旅遊,一家大小興高采烈在休旅車坐定準備出發,而最後出門的老婆準備帶上大門之前,不忘按下了掛鐘上的Security按鈕才鎖上房門,然後一家安心快樂地出遠門而去。

女主人所按下的那個按鈕,位在一具面對著偌大客聽的掛鐘上,就在一家人外出五分鐘之後,這具木製的貓頭鷹造型掛鐘,它的頭部眼睛上的LED燈顏色轉成為紅色的外出模式,代表著安全警示任務的開始。在這個模式下,掛鐘除了定時回報家中各種感測狀況外,它尾巴上的紅外線PIR亦隨時環視整個客聽,包括那隻溜過客聽一角、羞怯謹慎的小鼠也逃不過它的法眼。

而此刻正前往礁溪泡溫泉享受兩日假期的一家人,每隔一小時便會收到來自家中一封讓人心安的簡訊和Email訊息報告家中狀況:無瓦斯外洩可能、有記得關燈、溫溼度正常,最重要的是沒有宵小前來串門子的疑慮,此外隨email附上的相片佐證,更是讓他們安心不少。

一)系統功能說明:

分為居家與外出兩種模式,可透過掛鐘上的按鈕切換。

居家模式:開機後的預設模式,此模式執行平日有人在家時的實用功能,可自訂所要播放的訊息,例如氣象播報、室內溫溼度、預約事項提醒及其它自訂的訊息等等。

外出模式:以Email及簡訊定時的回報家中情況。當偵測到溫度過高、煤氣外洩、外人入侵時,則會立即發出Email及簡訊通知。

自動模式:在特定的時間自動切換為外出模式,其它時間則回到居家模式。例如我們可以設定半夜22:00~05:00自動進入外出模式,可嚇阻小偷在一家人睡夢中入侵。

A)功能:

  • 語音功能:整點報時、唸靜思語(因為老婆愛聽,只好成全她)、室內外氣象環境狀況播報、異常狀況提醒。
  • 攝影功能:拍攝照片、即時上傳供瀏覽。
  • 通知功能:發送手機簡訊、發送Email,並夾帶即時拍攝的相片。
  • 偵測功能:天然氣偵測、紅外線PIR偵測、溫溼度偵測。
  • 嚇阻功能:外出模式下,固定時間播放電視聲以及人聲以便偽裝成有人在家的情境。若偵測到外人入侵時,於拍攝相片並上傳後,會播放已自動播號通知警察局的聲音以驚嚇歹徒離開。

B)材料準備:

  1. 掛鐘 x 1:選擇內部有多餘的空間可擺放一片樹莓派及感測模組和揚聲器的掛鐘。

 

  1. Raspberry PI:樹莓派 x 1
    http://www.icshop.com.tw/product_info.php/products_id/22304 
  2. 時鐘模組 x 1:校正時間
    http://www.icshop.com.tw/product_info.php/products_id/15865 
  3. 三色LED x 2:指示燈,安裝於眼部
    http://www.icshop.com.tw/product_info.php/products_id/19419 
  4. 光照度模組TEMP6000 x 1:探測目前室內的亮度
    http://www.icshop.com.tw/product_info.php/products_id/12420 
  5. MQ4 sensor x 1:甲烷Methane (CNG) gas sensor
    http://www.icshop.com.tw/product_info.php/products_id/12488 
  6. 樹莓派專用相機 x1(具廣角鏡頭更好):
    http://www.icshop.com.tw/product_info.php/products_id/10591 
  7. PIR模組 x 1:紅外線偵測器
    http://www.icshop.com.tw/product_info.php/products_id/18909 
  8. MCP3008 ADC x 1
    http://www.icshop.com.tw/product_info.php/products_id/10946 
  9. DHT22 x1:溫溼感應器
    http://www.icshop.com.tw/product_info.php/products_id/12478 
  10. 8歐姆喇叭 x 1
    http://www.icshop.com.tw/product_info.php/products_id/12957 
  11. LM386 module x 1:音頻放大模組
    http://www.icshop.com.tw/product_info.php/products_id/19333 

C)AD Converter的使用

由於掛鐘內部的空間有限,因此我們不想要多裝一塊Arduino來讀取Sensor analog數值,因此我們必須讓樹莓派直接access這些sensors。

受限於單板電腦特性及成本要求,樹莓派並不像Arduino擁有豐富的GPIO支援,尤其是主板本身並沒有內建類比輸入的電路,因此,如果打算將一些Arduino常用的模組安裝到樹莓派上,例如MQ-2、LDR、可變電阻…等等,必須得額外加裝一顆ADC IC,將這些模組的類比輸出轉換成數位資訊之後,才能由樹莓派讀取。由於這個居家安全掛鐘我們希望能有溫溼度和光照度的功能,而這些sensor module所提供的都是類比的資訊,因此,我們必須讓樹莓派能夠讀取它們。

前幾篇知識文件中,我的方式是讓Arduino與樹莓派兩者透過UART與USB方式結合,由Arduino負責sensors資訊的搜集,再交由樹莓派來接收與處理則,這種方式雖然可充份發揮兩者的專長優勢,但操作使用上還是比較複雜,而且不適用於某些要求體積或電源耗用的場合。(請參考http://dc.sunplusit.com/SearchResult.aspx?KeyWord=x4wKiuiQ0

ADC IC

實際上,只要替樹莓派加裝一顆ADC IC,就能讓它讀取類比資訊了。

目前市面上可以找到一些ADC IC,例如ADC0804、MCP3208、MCP3008、MCP3204、MCP3004等等,它們彼此間的差異主要在於輸入腳位數及轉換精度(bit)上,例如MCP3208為12bit而MCP3008則為10bit,MCP3004支援4個輸入腳位而MCP3008則為8個。

C:\Users\CHE7C6~1.TSE\AppData\Local\Temp\x10sctmp125.png

以我目前手上這顆常見的MCP3008為例,它是一顆10bit 8-Channel的ADC,可同時輸入8組類比資料,並傳回介於0~1023之間的10bit的數字。

SPI(Serial Peripheral Interface)

大部份的ADC IC都是使用SPI介面。這是一種高速、全雙工、同步的資料傳輸技術,最早由摩托羅拉所提出,可以讓MCU與各種周邊設備以串列方式進行通信與資料交換。

它需要四條線(少部份僅需要三條):

A)兩條控制線:

1. CS(Slave Select)目標對象選擇

2. SCLK(Serial Clock)時脈

B)兩條資料線:

1. MISO(Master Input, Slave Output):對於樹莓派Master來說,算是資料輸入。

2. MOSI(Master Output, Slave Input):對於樹莓派Master來說,算是資料輸出。

連接樹莓派與MCP3008

MCP3008 A/D Converter的腳位功能如下,其中CLK指的是SCLK ,DIN是MISO,DOUT則是MOSI。

C:\Users\CHE7C6~1.TSE\AppData\Local\Temp\x10sctmp126.png

        回到樹莓派的GPIO,其所支援SPI介面的腳位分別是GPIO7 ~ 10。

        把它們連接起來:

MCP3008使用測試

下方的範例中使用了一個TEMT6000環境光源感測模組作為示範,,該模組是類比輸出,當入射光線越亮輸出電壓便越大。接好並測試之後,剛好用在我們的居家安全掛鐘。

https://cdn.sparkfun.com/assets/parts/1/8/5/9/08688-01.jpg

啟用樹莓派的SPI介面:

使用SPI前,務必先啟用SPI介面,否則在執行程式時會出現錯誤訊息。

SPI介面可透過raspi-config指令,進入Advanced Options選項中啟用。

C:\Users\CHE7C6~1.TSE\AppData\Local\Temp\x10sctmp130.png

使用SPI Python Class:

網路上有很多SPI相關的class可參考使用,省卻自行撰寫的功夫和時間,在這裏我使用的是https://github.com/ArmlessJohn404/RPi_mcp3008/blob/master/mcp3008.py這版,請將其程式碼下載後放置於特定目錄下,檔名改為mcp3008.py。

程式撰寫:

請將MCP3008與樹莓派依上述的方式連接好,再將TEMT6000的SIG腳位接到MCP3008的CH0:

import mcp3008

import time

try:

while True:

adc = mcp3008.MCP3008()

print adc.read([mcp3008.CH1])         # prints raw data [CH0]

adc.close()

time.sleep( 0.5 )

except Exception,e:

print str(e)

執行後,程式每隔0.5秒便會印出目前的環境光量:

C:\Users\CHE7C6~1.TSE\AppData\Local\Temp\x10sctmp131.png

        相同方式,請自行試著接上更多的類比輸出模組到MCP3008試看看,例如MQ系列的氣體偵測模組MQ4,這個天然氣偵測模組也是我們居家安全掛鐘使用到的。

瞭解了ADC的使用之後,在下一篇當中我們將開始實際DIY這個居家安全掛鐘。

廣告

發表迴響

Please log in using one of these methods to post your comment:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s