在樹莓派上利用MCP3008讀取類比訊號

樹莓派本身並不支援類比輸入,想要取得類比裝置或感測器(例如光線感測器或是聲音感測器等)的值,需要使用額外的AD轉換器(Analog to Digital Conveter)才行,這一類的解決方案包括可以簡單地使用一顆IC完成,或是利用一個附加的模組電路板。在本文中,我們使用前者,也就是一顆IC MCP3008來解決。

MCP3008是一顆具有8通道10bit解析度,使用SPI介面傳輸的ADC IC,它的詳細規格可以參考以下這個連結:

https://datasheetspdf.com/pdf/439989/MicrochipTechnology/MCP3008/1

在網路上也可以很輕易地搜尋到它的接腳用途。這顆IC總共有16支接腳,左右各8支,它的接腳用途分別如下:

左側編號用途右側編號用途
1CH016VDD–工作電源(2.7V~5.5V)
2CH115VREF–參考電壓,直接接到VDD即可
3CH214AGND–類比信號地線,直接接到GND
4CH313CLK–時脈信號
5CH412DOUT–資料輸出(MISO)
6CH511DIN–資料輸入(MOSI)
7CH610CS/SHDN–晶片選擇(接CE0#或CE1#)
8CH79DGND–接地

在樹莓派的GPIO中(請留意,不是實際腳位,而是GPIO腳位)的GPIO 07 ~ 11是用來作為SPI介面使用的,它的模式如下:

樹莓派的GPIO接腳 — 實際腳位模式
GPIO 07 — 26CE1 #
GPIO 08 — 24CE0 #
GPIO 09 — 21MISO
GPIO 10 — 19MOSI
GPIO 11 — 23SCLK

根據上述的腳位配置,我們的實際連接線如下:

MCP3008腳位連接到樹莓派
VDD5V
VREF5V
AGNDGND
DGNDGND
CLKGPIO 11
DOUTGPIO 09
DINGPIO 10
CSGPIO 08

至於類比裝置的連接就比較簡單了,因為有8個通道分別是CH0~CH7,這些都可以連接類比感測器模組的AO輸出連接線。以光感測模組為例:

它有4個接腳,分別是VCC、GND、DO、AO,其中VCC也是接到樹莓派的5V電源,而GND則是接到樹莓派的GND,DO不用,AO接到CH0即可。其它像是聲音感測模組也是類似的接法。

連接完成之後,MCP3008的有一個專屬的模組可以使用,它放在gpiozero套件中,因此在設計程式之前,請使用以下的指令安裝gpiozero模組:

pip install gpiozero

順利安裝完成之後,使用以下的程式碼即可順利地讀出感測器上的類比數值了:

from gpiozero import MCP3008
import time

light = MCP3008(0)
sound = MCP3008(1)

for i in range(100):
    print("Sound:{}, Light:{}".format(sound.value, light.value))
    time.sleep(0.5)

以下是節錄的輸出結果:

Sound:0.34733756717147046, Light:0.4929164631167562
Sound:0.5661944308744504, Light:0.6287249633610161
Sound:0.40693698094772834, Light:0.6345872007816316
Sound:0.5867122618466047, Light:0.6394723986321447
Sound:0.47239863214460187, Light:0.6150464093795798
Sound:0.5212506106497312, Light:0.595505617977528
Sound:0.5808500244259893, Light:0.650219833903273
Sound:0.4460185637518319, Light:0.6765999022960429
Sound:0.5691255495847583, Light:0.6453346360527601
Sound:0.4382022471910112, Light:0.32975085490962375

以下是電路連線的樣子(照片中的SSD1306是前一篇文章中的例子,在本例中並未使用):

One thought on “在樹莓派上利用MCP3008讀取類比訊號

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *