M5Stick-Cで光センサユニット LIGHTを試す

M5Stack-Cで、光センサーのユニットLIGHTを試してみました。

LIGHT UNITの光センサは、フォトレジスタ(CdSセル)が組み込まれているモジュールで、光の強さをアナログおよびデジタルで読み取れます。

公式リファレンスのページ: Light – M5Stack Docs

プログラムは、上記の公式リファレンスのページで紹介されているサンプルを修正してみました。

Github: M5Stack/examples/Unit/LIGHT/LIGHT.ino

公式リファレンスのM5Stack Coreを利用した例と同じ様に、LIGHT UNITから読み取ったアナログとデジタルの値をLCDに表示します。


LIGHT UNITの特徴

フォトレジスタは光の強さに依って抵抗が変化する抵抗器で、部品単体では秋月電子通商ではGL5528あたりを安く入手できますが、LIGHT UNITはフォトレジスタを使う際に必要な周辺の回路などが予め組み込まれています。

また、デジタルで出力する回路も用意されてるあたりも便利です。

ケースにスッキリ収まってGroveポートで扱えるというだけではなく350円にしてはなかなか便利なパーツです。

分圧用の抵抗(10kオーム)

フォトレジスタを単体で使う場合は、通常以下のように分圧用の抵抗を直列につなぎます。

LIGHT UNITは、内部に10Kオーム抵抗の抵抗が実装されていて、少しだけ手間が省けます。

デジタル出力

LIGHT UNITは、デジタル出力に対応しています。

アナログ-デジタルの変換は、デュアル作動コンパレータLM393が回路に組み込まれていて、フォトレジスタからの電圧とバリスタの電圧を比較した値を出力します。


説明にはバリスタと書いてありますが、回路図だと可変抵抗器ですね。

しきい値は、中央のつまみを回して調節できます。

値は明るいときは「0」、暗いときは「1」が出力されます。

対応しているM5Stackシリーズ

LIGHT UNITはI2Cではなく、M5Stack BASICは使えないので注意です。

M5Stick-C、M5Stack Core2などなら利用可能です。

プログラム

公式のサンプルプログラムを以下の様にM5Stick-C用に修正してみました。

#include <M5StickC.h>

void setup() {
  M5.begin();
  M5.Lcd.setRotation(1);
  M5.Lcd.setCursor(10, 10);
  M5.Lcd.printf("UNIT_LIGHT EXAMPLE\n");
  pinMode(32, INPUT);
  M5.Lcd.setCursor(20, 30);
  M5.Lcd.print("GPIO33:");
  M5.Lcd.setCursor(20, 50);
  M5.Lcd.print("GPIO32:");
}

uint16_t analogRead_value = 0;
uint16_t digitalRead_value = 0;
void loop() {
  // put your main code here, to run repeatedly:
  M5.Lcd.setCursor(64, 30);
  M5.Lcd.setTextColor(BLACK);
  M5.Lcd.printf("%d\n", analogRead_value);
  M5.Lcd.setCursor(64, 50);
  M5.Lcd.printf("%d\n", digitalRead_value);
  analogRead_value = analogRead(33);
  digitalRead_value = digitalRead(32);
  M5.Lcd.setTextColor(YELLOW);
  M5.Lcd.setCursor(64, 30);
  M5.Lcd.printf("%d\n", analogRead_value);
  M5.Lcd.setCursor(64, 50);
  M5.Lcd.printf("%d\n", digitalRead_value);
  delay(10);
}

以下、修正ポイントです。

M5Stick-CのGroveポートの番号

M5Stick-C GroveポートはGPIO32とGPIO33につながっています。

また、M5Stick-Cに積まれているESP32-PICO-D4のGPIO32とGPIO33はどちらもアナログ入力、デジタル入力が可能です。

参照: ESP32-PICO-D4 Datasheet

LIGHT UNITのデジタル出力はGPIO32、アナログ出力はGPIO33で読みとります。

ディスプレイを横向きに使う

M5Stick-Cのディスプレイは、M5Stack Coreよりも小さいので横向きに使います。

ディスプレイを横向きにするには、M5.Lcd.setRotation に「1」をセットします。

M5.Lcd.setRotation(1);

参考: M5Displayクラスの使い方

補足

MacOSのCatalina以降M5Stick-Cが書き込みに失敗するようになっていました。
対処方法は以下の記事が詳しいです。

参考: macOS CatalinaのArduino IDEでM5StickCに書き込みができない問題の解決方法 – Fusic Tech Blog