中国のお店が中国国外に売る通販モールAliExpressで、安いセンサーをいくつか購入しました。 今回はその中の1つ、明るさ(照度)が測れるMAX44009が搭載されたセンサーモジュールをRaspberry Piにつないでみました。
見た目的には、Amazon.co.jpで売られているこちらのセンサーと同一のものと思われます。
AliExpressでの私が購入時の値段は、なんと$1.84でした!200円くらいなのでお買い得ですね。
しかもこのセンサーはPythonから簡単にアクセスできるライブラリを公開されている方がいて、繋ぐだけで簡単にセンサーの値が読めます! とても便利ですね🥰早速Raspberry Piにつないでみましょう。
MAX44009とは?
MAX44009とはアメリカの半導体メーカーMAXIMが出している照度センサーです。センサ値はI2Cでデジタルデータで取り出せ、明るさのルクス値を求めることができます。
広いダイナミックレンジで、屋内の暗い場所から屋外の明るい場所まで幅広く使えるもののようですが、既に生産終了が予定されているようです。
Raspberry Piにつないでみよう
MAX44009モジュールの準備
私が買ったMAX44009モジュールはこちらです。
小型のブレイクアウトボードになっています。しかし安いですが、ちゃんと本物のMAX44009が搭載されているんだろうか? 紫色の基板の上に黒い四角い部品がありますが、これがMAX44009で、ここで明るさを検出するようになっています。
マイコンに簡単に繋げられるように、標準ピッチ(2.54mm)のピンヘッダが付属しています。
ピンヘッダをはんだ付けしました。この写真は裏側にあたります。
はんだごてがない方は、こちらのICテストクリップケーブルを使って、端子同士を引っかけてつかうこともできます。ピンヘッダにもスルーホールの穴にもクリップできるので便利です。ただし、ショート⚡️させないよう注意してくださいね。
Raspberry Piへの接続
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に接続すると、次のようになりました。
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ライブラリのインストール
単純なインターフェースなので自作しても良いくらいですが、検索すると既にライブラリを作られている方がいましたので、使わせていただきます。
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に使えそうですね。