M5StackGrayでM5Stack_LIGHT_UNIT(光センサ)の動作テスト

2021.7.9 Coskx Lab  

1 はじめに

M5Stack GrayにM5Stack_LIGHT_UNIT(光センサ)を接続して周囲の明るさを測定します。

M5Stack_LIGHT_UNITはCDSセルを使用していて,M5StackのGrovePortB接続専用として販売されています。そのためM5Stack Gray(PortBがない)には直接接続できないことになっています。しかし工夫して接続します。
CDSセルは照射されている光の強さに応じて電気抵抗が低下する素子です。固定抵抗と直列につないで,電圧を加えると,抵抗値の変化が分圧ととして取り出せます。
M5Stack_LIGHT_UNITでは,この分圧電圧を出力(アナログ出力)します。出力は0から3.3Vになるように調整されています。
M5Stack_LIGHT_UNITでは,コンパレータを使って,ある明るさ以上か以下かを判定して HまたはLの信号をデジタル出力もしています。
(すなわち信号線はアナログ出力とデジタル出力の2本になっています。)

2 使用環境

3 接続

M5Stack GrayにはPortBコネクタがないため,直接接続できないことになっています。PortBと言ってもADコンバータ入力のGPIO35とbit入力用にGPIO25が使われているだけなので,PortBソケットが無くても直接接続することが出来ます。 付属のケーブルを加工してもよいのですが,Groveケーブルがあったので,それを加工して,次のようなケーブルを作りました。


そうすると,次のようにM5Stack_LIGHT_UNITとM5Stackを接続することができます。




ところで,Groveケーブルとして販売されているケーブルと,M5Stack_LIGHT_UNITに付属しているケーブルでは,コネクタの形状は同じですが,線の被覆色の順番が異なっています。販売されている製品がこれでは困るのですが,仕方がないので注意して使いましょう。
市販Groveケーブル   黒,橙,白,黄
付属しているケーブル 黒,橙,黄,白
(ひどいですよね,私はこれに騙されました。)


4 テストプログラム

https://github.com/m5stack/M5Stack/tree/master/examples/Unit/LIGHT
を参考にさせていただきました。
ADコンバータ出力は0から4095までです。
明るい方が,大きな値になるように反転して表示しています。
また,半固定抵抗で調整した明るさより明るいときに1になるように反転して表示しています。

  動作テスト用プログラム本体(センサは常時稼働)

//LightSensorTest01.ino//

#include <M5Stack.h>

const int LightSensorAnlgPin = 36;
const int LightSensorDgtlPin = 26;


void setup() {
  M5.begin();
  M5.Power.begin();
  //disable the speak noise
  dacWrite(25, 0);

  //M5.Lcd.setTextColor(YELLOW);
  M5.Lcd.setTextSize(2);
  M5.Lcd.setCursor(65, 50);
  M5.Lcd.printf("Light_Unit Test\n");
  pinMode(LightSensorDgtlPin, INPUT);
  M5.Lcd.setCursor(80, 80);
  M5.Lcd.print("AnlgData: ");
  M5.Lcd.setCursor(80, 100);
  M5.Lcd.print("DgtlData: ");
}

uint16_t analogRead_value = 0;
uint16_t digitalRead_value = 0;

void loop() {
  analogRead_value = 4095 - analogRead(LightSensorAnlgPin);
  digitalRead_value = 1 - digitalRead(LightSensorDgtlPin);
  //M5.Lcd.setTextColor(YELLOW);
  M5.Lcd.setCursor(200, 80);
  M5.Lcd.printf("%5d", analogRead_value);
  M5.Lcd.setCursor(200, 100);
  M5.Lcd.printf("%5d\n", digitalRead_value);
  delay(500);
}

5 まとめ

センサを手にもって,周囲に向けたところ,明るさを検出している様子が確認できました。


追加記事 ADC単体テスト

光センサは明るさを電圧に変換して,その電圧をM5Stackが読み取っています。
読み取りにはADコンバータ(アナログデジタル変換器)が使われています。
ADコンバータは,電圧を数値に変換します。
M5StackのADコンバータは0Vから3.3Vまでの電圧を0から4095までの値に変換します。
ADコンバータに,電圧を与えることになっているので,可変抵抗で様々な電圧を与えてテストしました。
プログラムは光センサのプログラムをそのまま使っています。




(ADコンバータには3.3V以上の電圧を与えないようにして下さい。)
可変抵抗を変化させると,0から4095までの値が読み取れました。