MCP3008 ADCでRaspberry Piにアナログセンサーを読み取る
Raspberry PiのGPIOピンはデジタルのみのため、アナログセンサーの接続は課題です。安価な解決策がMCP3008で、8チャネル10ビットのアナログ・デジタルコンバータとしてPiのSPIバスに直結し、追加部品不要で動作します。
このガイドでは、MCP3008をRaspberry Piに配線し、光依存抵抗(LDR)とTMP36温度センサーを接続、シンプルなPythonスクリプトでデータを読み取る手順を解説します。
必要なもの
- Raspberry Pi(GPIOヘッダー搭載の任意モデル)
- MCP3008 8チャネルADC
- 光依存抵抗(LDR) - 例:NORPS-12
- TMP36温度センサー
- 10kΩ抵抗(LDR回路用)
PiでSPIを有効化
SPIインターフェースはデフォルト無効。Raspberry PiでSPIインターフェースを有効化するの手順に従い、SPIをアクティブ化しspidev Pythonライブラリをインストール。
回路接続
MCP3008にはPiの40ピンヘッダー上で4つのGPIOピンが必要。以下を接続(ピン番号はヘッダーのP1番号):
VDD 3.3V VREF 3.3V AGND GROUND CLK GPIO11 (P1-23) DOUT GPIO9 (P1-21) DIN GPIO10 (P1-19) CS GPIO8 (P1-24) DGND GROUND
MCP3008のCH0〜CH7ピンがそれぞれアナログ入力になります。以下の例ではCH0をLDR、CH1をTMP36に使用、残り6チャネルは将来のセンサー用に確保。
光依存抵抗(LDR)
LDRの抵抗は強光下で約10kΩ、暗闇で数MΩまで上昇。10kΩ抵抗と分圧回路を形成することで、MCP3008は明るいときに0V近く、暗いときに3.3V近くの電圧を読み取ります。
TMP36温度センサー
TMP36は3ピンのアナログ温度センサー。3.3Vで駆動しVOUTピンを読み取ります。25°Cで0.750V出力、傾きは10mV/°C。したがって0°Cで0.500V、100°Cで1.500V。
Pythonでデータ読み取り
MCP3008は0〜1023の10ビット値を出力、0V〜3.3Vに線形マッピング。TMP36の場合、約-50°C〜+280°Cの温度範囲に対応。
spidevライブラリでチャネル0と1を読み取る最小例:
import spidev
import time
spi = spidev.SpiDev()
spi.open(0, 0) # bus 0, device 0
spi.max_speed_hz = 1350000
def read_channel(channel):
# MCP3008プロトコル: スタートビット、シングル/ディフ、チャネル(3ビット)、ダミービット5
adc = spi.xfer2([1, (8 + channel) & 0x0F << 4, 0])
data = ((adc[1] & 3) << 8) + adc[2]
return data
while True:
ldr_val = read_channel(0)
temp_val = read_channel(1)
temp_c = (temp_val * 3.3 / 1023) * 100 - 50 # °Cに変換
print(f'LDR: {ldr_val}, Temp: {temp_c:.2f}°C')
time.sleep(1)
センサーレイアウトに合わせてチャネル番号を置き換えてください。スクリプトはLDRの生ADC値と計算された摂氏温度を継続的に出力します。
このセットアップで、フォトダイオード、圧力トランスデューサー、湿度プローブなどの追加アナログセンサーをCH2〜CH7に配線し、Pythonコードを拡張するだけで対応可能です。
Happy hacking!
製造プロセス
- 5ドルI2C温度センサーで作るRaspberry Pi温度ロガー
- Python、SQLite、LabVIEWによるRaspberry Pi高精度温度プロファイリング
- 複数DS18B20 1-WireセンサーをRaspberry Pi接続で精密温度監視
- Raspberry Pi 2でDS18B20温度センサー読み取りガイド
- Raspberry PiとDS18B20によるプロフェッショナルな温度監視
- Raspberry PiでMaxim 1-WireセンサーとDS2482 I2Cブリッジを用いた温度測定
- Raspberry PiでTMP006赤外線温度センサーを使う – Pythonライブラリとセットアップガイド
- Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
- Raspberry Piでサーバークローゼットの温度を正確に監視
- Raspberry Pi 3とPubNubでリモート気象監視
- TI SensorTagをNode-RED経由でBlynkと統合 – Raspberry Pi Zero編