樹莓派本身並不支援類比輸入,想要取得類比裝置或感測器(例如光線感測器或是聲音感測器等)的值,需要使用額外的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支,它的接腳用途分別如下:
左側編號 | 用途 | 右側編號 | 用途 |
1 | CH0 | 16 | VDD–工作電源(2.7V~5.5V) |
2 | CH1 | 15 | VREF–參考電壓,直接接到VDD即可 |
3 | CH2 | 14 | AGND–類比信號地線,直接接到GND |
4 | CH3 | 13 | CLK–時脈信號 |
5 | CH4 | 12 | DOUT–資料輸出(MISO) |
6 | CH5 | 11 | DIN–資料輸入(MOSI) |
7 | CH6 | 10 | CS/SHDN–晶片選擇(接CE0#或CE1#) |
8 | CH7 | 9 | DGND–接地 |
在樹莓派的GPIO中(請留意,不是實際腳位,而是GPIO腳位)的GPIO 07 ~ 11是用來作為SPI介面使用的,它的模式如下:
樹莓派的GPIO接腳 — 實際腳位 | 模式 |
GPIO 07 — 26 | CE1 # |
GPIO 08 — 24 | CE0 # |
GPIO 09 — 21 | MISO |
GPIO 10 — 19 | MOSI |
GPIO 11 — 23 | SCLK |
根據上述的腳位配置,我們的實際連接線如下:
MCP3008腳位 | 連接到樹莓派 |
VDD | 5V |
VREF | 5V |
AGND | GND |
DGND | GND |
CLK | GPIO 11 |
DOUT | GPIO 09 |
DIN | GPIO 10 |
CS | GPIO 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是前一篇文章中的例子,在本例中並未使用):
請問使用樹梅派與MQ氣體感測器做整合應用需要使用邏輯電瓶轉換器做降壓嗎