みかんのゆるふわ技術ブログ

Raspberry PiやIoT関係のことを書き残していきます

Raspberry Piに2ドルの明るさセンサーMAX44009搭載モジュールをつなぐ

中国のお店が中国国外に売る通販モールAliExpressで、安いセンサーをいくつか購入しました。 今回はその中の1つ、明るさ(照度)が測れるMAX44009が搭載されたセンサーモジュールをRaspberry Piにつないでみました。

www.aliexpress.com

見た目的には、Amazon.co.jpで売られているこちらのセンサーと同一のものと思われます。

AliExpressでの私が購入時の値段は、なんと$1.84でした!200円くらいなのでお買い得ですね。

しかもこのセンサーはPythonから簡単にアクセスできるライブラリを公開されている方がいて、繋ぐだけで簡単にセンサーの値が読めます! とても便利ですね🥰早速Raspberry Piにつないでみましょう。

MAX44009とは?

MAX44009とはアメリカの半導体メーカーMAXIMが出している照度センサーです。センサ値はI2Cでデジタルデータで取り出せ、明るさのルクス値を求めることができます。

広いダイナミックレンジで、屋内の暗い場所から屋外の明るい場所まで幅広く使えるもののようですが、既に生産終了が予定されているようです。

Raspberry Piにつないでみよう

MAX44009モジュールの準備

私が買ったMAX44009モジュールはこちらです。

f:id:kimura_khs:20210130182439j:plain

小型のブレイクアウトボードになっています。しかし安いですが、ちゃんと本物のMAX44009が搭載されているんだろうか? 紫色の基板の上に黒い四角い部品がありますが、これがMAX44009で、ここで明るさを検出するようになっています。

マイコンに簡単に繋げられるように、標準ピッチ(2.54mm)のピンヘッダが付属しています。

f:id:kimura_khs:20210130182453j:plain:w320

ピンヘッダをはんだ付けしました。この写真は裏側にあたります。

はんだごてがない方は、こちらのICテストクリップケーブルを使って、端子同士を引っかけてつかうこともできます。ピンヘッダにもスルーホールの穴にもクリップできるので便利です。ただし、ショート⚡️させないよう注意してくださいね。

テイシン ICテストリード小 TLA101

テイシン ICテストリード小 TLA101

  • メディア: Tools & Hardware

Raspberry Piへの接続

f:id:kimura_khs:20200922113215p:plain
画像出典: raspberrypi.org

Raspberry Piのピンヘッダは上図のように機能が割り当てられています。このモジュールはI2Cで通信するので、次のピンに接続します。

RasPiピン番号 RasPi 機能 BME280モジュール 説明
1 3V3 power VIN 電源(3.3V)
6 Ground GND グランド (0V基準電圧)
3 GPIO 2 (SDA) SDA I2Cデータ
5 GPIO 3 (SCL) SCL I2Cクロック

これらをジャンプワイヤーでRaspberry Pi Zero WHに接続すると、次のようになりました。

f:id:kimura_khs:20210130182539j:plain

Raspberry Pi Zero WHの場合、1番ピンはSDカードスロットの横にあたります。

PythonからMAX44009にアクセス

I2Cの有効化

Raspberry Pi OSのインストール直後はI2Cが無効になっています。 有効化するには、raspi-configのメニューから設定できます。

$ sudo raspi-config

で設定画面を起動し、"5 Interfacing Options" → "P5 I2C" → "Yes" を選択してください。

もしくは、同じことが次の1行でもできます。メニューをたどる必要はありません。

$ sudo raspi-config nonint do_i2c 0

I2C接続の確認

続いて、センサーモジュールとI2C通信ができるか確認してみましょう。 i2cdetectコマンドを使うと、I2Cバスをスキャンして、どのアドレスで応答があったかを表示してくれます。

$ sudo apt install i2c-tools
$ sudo i2cdetect -y 1

以下のような応答が返りました。

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- 4a -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

I2Cアドレス0x4Aにセンサーがつながっているようです。 なお、接続が間違っていると、応答が返らずアドレスが表示されません。

Pythonライブラリのインストール

単純なインターフェースなので自作しても良いくらいですが、検索すると既にライブラリを作られている方がいましたので、使わせていただきます。

github.com

PyPIには登録されていないようですので、GitHubからこのリポジトリを取ってきます。

$ sudo apt install git
$ git clone https://github.com/josecastroleon/max44009
$ cd max44009/

続いて、依存ライブラリをインストールします。

$ sudo apt install python3-pip
$ pip3 install smbus-cffi

これで準備が完了です。

動かしてみよう

早速動かしてみましょう。先ほど取ってきたリポジトリのディレクトリ(max44009/)の中で、Pythonを起動します。

$ python3

次のコマンドを入力してみてください。

>>> import max44009
>>> sensor = max44009.MAX44009(1, 0x4A)
>>> sensor.configure()
>>> sensor.luminosity()
587.52

このように、587.52ルクスという結果が取得できました。室内なのでそんなものでしょう。簡単ですね。

以下のファイルを作成して実行することでも動かせます。 max44009.pyと同じディレクトリに置いて実行してください。

import max44009
import time

MAX44009_I2C_BUS = 1
MAX44009_I2C_ADDRESS = 0x4A

# Create sensor instance
sensor = max44009.MAX44009(MAX44009_I2C_BUS, MAX44009_I2C_ADDRESS)

# Configuration
sensor.configure(cont=0, manual=0, cdr=0, timer=0)

# Get Illuminance periodically
while True:
    print(sensor.luminosity())
    time.sleep(1)

センサーを手でふさぐと0になったり、窓際に行くと3000を越えたりと、それらしい数字が出ていました。 明るさに連動して何かをさせるとか、いろんなDIYに使えそうですね。