2021年4月14日水曜日

Raspberry Pi ZeroとCDSとMCP3425で明るさを測る

Raspberry Piはアナログ入力を持っていないので、MCP3425というアナログ電圧をデジタルに変換するICを利用します。
MCP3425で変換した電圧はI2Cインターフェイスで取得する事が出来ます。

〇Raspberry Pi ZeroとCDSとMCSP3425を接続した写真

実装手順

Raspberry Pi ZeroとCDSとMCP3425で明るさを測るには、以下の手順を実行します。
1. 部品の用意と配線
以下の部品を用意して、下記回路図に基づいて接続します。

・MCP3425
MCP3425(16Bit ADC I2C 基準電圧内蔵)搭載モジュール
https://akizukidenshi.com/catalog/g/gK-08018/

・CDS
CdSセル 5mmタイプ
https://akizukidenshi.com/catalog/g/gI-00110/

・1KΩ抵抗
カーボン抵抗(炭素皮膜抵抗) 1W1kΩ (100本入)
https://akizukidenshi.com/catalog/g/gR-07980/

・ユニバーサル基板
勿論、他のサイズでも問題ないです。
両面スルーホールガラスコンポジット・ユニバーサル基板 Fタイプ
https://akizukidenshi.com/catalog/g/gP-12731/

〇回路図

Raspberry Pi Zeroと回路図は以下の様に接続します
Raspberry Pi 3.3Vピン(ピン1) -> 回路図の3.3Vへ
Raspberry Pi GPIO 2/SDAピン(ピン3) -> 回路図のSDAへ
Raspberry Pi GPIO 3/SCLピン(ピン5) -> 回路図のSCLへ
Raspberry Pi Groundピン(ピン9) -> 回路図のGNDへ

2. i2cの有効化
raspi-configコマンドなどを使用してi2cを有効化します。

※i2cの有効化については、以下の記事を参照してください。
Raspberry Pi ZeroにBME680を接続して、温度・気圧・湿度・ガスの値を取得する
https://serverarekore.blogspot.com/2021/03/raspberry-pi-zerobme680.html

3. デバイスの認識の確認
以下のコマンドを実行してアドレス0x68のデバイスが認識されていることを確認します。
i2cdetect -y -1

4. pipenvの導入
pipenvをインストールしていない場合は、以下のコマンドを実行します。
sudo apt-get update

sudo apt-get -y install python3-pip python3-distutils python3-dev

sudo pip3 install --upgrade pip

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

5. smbus用の仮想環境作成
pipenvを使用する場合は以下のコマンドで、smbus用の仮想環境を作成します。
mkdir -p ~/smbus

cd ~/smbus

pipenv --python 3

pipenv install smbus

pipenv shell

6. プログラムの作成と実行
以下のプログラムをファイルに保存して、実行します。

test_mcp3425.py
import smbus
import time

i2c = smbus.SMBus(1)
addr_mcp3425=0x68

FIELD_PGA_GAIN_1X = 0x00 # gain 1X
FIELD_SAMPLE_RATE_15SPS_16BIT = 0x08 # 15SPS 16bit sampling
FIELD_CONV_MODE = 0x00 # one-shot
FIELD_READY = 0x80

# Initialize

def read_cds():
  i2c.write_byte(addr_mcp3425, FIELD_PGA_GAIN_1X | FIELD_SAMPLE_RATE_15SPS_16BIT | FIELD_CONV_MODE| FIELD_READY)
  time.sleep(0.15)
  dat = i2c.read_i2c_block_data(addr_mcp3425, 0x00, 3)
  val = (dat[0] << 8) | dat[1]
  return val

while True:
  val= read_cds()
  print("cds:{}".format(val))
  time.sleep(1)

・実行コマンド
以下のコマンドでプログラムを実行し、明るさが画面に表示されることを確認します。止める時はCtrl+Cをクリックします。
python3 test_mcp3425.py

0 件のコメント:

コメントを投稿