Arduino環境でAE-TYBLE16のBLEペリフェラルデバイスを作る~明暗判定編~

目的

BLEペリフェラルとして,以下のときにBLEセントラルに通知するデバイスを作る.

  1. ドアが閉まっていること
  2. 部屋の中が暗いこと(≒シーリングライトが消灯)
    ただし,通知するのはドアが閉まっているときのみ

この記事では,上記2.のほうの部屋の明暗判定について記載する.

  1. 事前にSoftDevice書込み等,Arduino IDEで作成したArduinoスケッチが書込みできる環境の整備:
    STM32 Nucleoを用いたnRF51向けのArduino開発環境をつくる
  2. GPIOやADC,シリアルインターフェースの機能確認:
    Arduino環境でAE-TYBLE16のピンファンクションを確かめる
  3. BLEの接続/非接続の確認:
    Arduino環境でAE-TYBLE16のBLEを始める(その1:接続/非接続)
  4. BLE経由のLチカ確認:
    Arduino環境でAE-TYBLE16のBLEを始める(その2:BLE経由のLチカ)
  5. 照度センサー明暗判定原理試作(本記事)
  6. リードスイッチドア開閉判定原理試作:
    Arduino環境でAE-TYBLE16のBLEペリフェラルデバイスを作る~ドア開閉判定編~

結論

フォトトランジスタNJL7302L-F3と1[kΩ]の抵抗で構成した回路で,A/D変換を利用して部屋の明暗判定ができることを確認した.

本記事で紹介するおもな環境は下表のとおり:

ハードウェア名称 規格 製造会社 備考
BLEモジュール AE-TYBLE16 秋月電子通商 購入時1,280JPY
太陽誘電製EYSGJNAWY-WX(SoCはNordic Semiconductor製nRF51822)
デバッガー NUCLEO-L053R8STSW-LINK009 2.0.2 STMicroelectronics タダ
201X年にSTの営業が会社に来たときのもの,ST-Link/V2-1として使用する
BLEモジュール用ソケット 2227P-16G-03 寬德 購入時100JPY
ハンダ不要でブレッドボード挿入に使える
ブレッドボード BB-801 万捷电子 ブレッドボードなら何でもよい
ジャンパーケーブル(オス・メス) DG01032-0024-RD-015など 協威亞洲 間違えないように色をわけたほうがよい
C-17228のほうが安い
USBケーブル(mini B) LDUC1011-1.5m EverU Electronics 充電専用でなければ何でもよい
黄緑色LED OSNG5113A,2.0[V],20[mA] OptoSupply 購入時500JPY
フォトトランジスタ NJL7302L-F3 日清紡マイクロデバイス(旧:新日本無線 購入時45JPY
照度検出用抵抗 CF25J1KB,1[kΩ],1/4[W]
ホストPC マザーボードB450 AORUS M,CPU:Ryzen 7 3700X,メモリー:32[GB] -
IDE Arduino IDE 1.8.19 ARDUINO
nRF5ライブラリー Nordic Semiconductor nRF5 Boardsパッケージ Sandeep Mistry
BLEライブラリー BLEPeripheralパッケージ 0.4.0 Sandeep Mistry
Nordic SoftDevice S130 2.0.1 Nordic Semiconductor BLEプロトコルスタック
ホストPCのOS Windows 10 Pro 64ビット版 Microsoft 英語版(インターナショナル)

また,nRF5ライブラリーの設定は以下のとおり:

項目名 設定値 備考
ボード Generic nRF51
Chip 32kB RAM, 256kB flash (xxac) データシートよりEYSGJNZWYは32kB
SoftDevice S130
Low Frequency RC Oscillator データシートよりEYSGJNZWYは水晶振動子が未実装で内蔵RC発振回路で代替指示
ポート COMn 環境による
Programmer ST-Link V2-1 (ST-Link On-Board) ☞以前の私の記事参照

詳細

ハードウェア

照度センサーを使用して,暗くなったらLEDを点灯させる,明るくなったらLEDを消灯させる動作を確認する.

照度センサーとして,入手性がよい日清紡マイクロデバイス製フォトトランジスタNJL7302L-F3を使用した*1.この部品は,明るさ[lux]に応じた電流が流れ,明るさに従ってその電流(光電流)が大きくなる.

光電流と明るさ,コレクター・エミッタ間電圧のグラフ

設計においては,最大の明るさを決めて,そのときの光電流値を抵抗に流したときの電圧がA/D変換入力値の許容範囲内(≒ICの電源電圧)に収まっていればよいと考えられる.

明るさの目安のひとつは,以下のとおりで,今回はオフィス内の室内を想定しているため,1,000[lux]以内とする.また,データシート上の光電流と明るさのグラフにおいても,1,000[lux]までの記載となっている.

照度[lux] 明るさの目安
>100,000 雪山・真夏の海岸
100,000 晴天昼太陽光
65,000 晴天午前10時太陽光
25,000 曇天午前10時太陽光
2,000 曇天日出1時間後太陽光
1,000 晴天日入1時間前太陽光,パチンコ店内
700 百貨店売場
500 蛍光灯照明事務所
300 日出入時,30[W]蛍光灯2灯使用8畳間
200 夜のアーケード
100 街灯下
15 ライター(30[cm]),ろうそく(20[cm])
1 月明かり

光電流と明るさのグラフより,明るいときを1,000[lux],暗いときを5[lux]とすると,下表のとおりの電流値が読み取れる*2

部屋の状態 明るさ[lux] 電流[μA]
明るい 1,000 2,000
暗い 5 10

また,これらの電流値より,明るいときの2,000[μA]のときに,その電流を抵抗に流して両端に生じる電圧が3.3[V](≒A/D変換入力値の許容範囲内)に収まっていればよいため,おおよそ1~1.5[kΩ]が適切となる.実在する抵抗値と合わせると,以下のとおりである.今回は手元にあった1[kΩ]を選んだ.

抵抗値[kΩ] 端子間電圧[V] 備考
1.0 2.0 E12,E24系列
1.1 2.2 E24系列
1.2 2.4 E12,E24系列
1.3 2.6 E24系列
1.5 3.0 E12,E24系列
1.6 3.2 E24系列

最終的に,照度センサー部の回路は以下のとおりとして,AE-TYBLE16との結線は以下の写真のとおりとした.

照度センサー部回路構成

結線写真 結線図
TBD

ソフトウェア

Arduinoプログラムは以下のとおりで,本当にシンプルな構成としている(上記,結線写真も参照のこと).

void setup() {
  Serial.begin(115200);
  pinMode(5, OUTPUT);             /* DIP9(P0.05) */
  pinMode(4, INPUT);              /* DIP11(P0.04,AIN5) */
  analogReference(AR_DEFAULT);    /* 0~VDD[V]の範囲 */
  analogReadResolution(10);       /* 分解能10ビット(0~1023) */
}

void loop() {
  int adval = analogRead(4);
  digitalWrite(5, (20 >= adval) ? HIGH : LOW);    /* 20は本当にテキトーな値 */
  Serial.println(adval);
  delay(500);    /* 500もテキトーな値 */
}

私の部屋では,advalの値は以下のとおりとなった

advalの概略値 シーリングライトの状態
150 全点灯(≒白色・電球色両方)
80 白色または電球色のみ
10 全消灯

なお,UARTのシリアル出力のためには,%USERPROFILE%\AppData\Local\Arduino15\packages\sandeepmistry\hardware\nRF5\0.7.0\variants\Generic\variant.hの以下の記載を,使用したい任意のピンに割り付けるように設定する必要がある.

/*
 * Serial interfaces
 */
// Serial
#define PIN_SERIAL_RX       (0) // P0.00
#define PIN_SERIAL_TX       (1) // P0.01

データシート等

  1. 秋月電子通商AE-TYBLE16商品添付カード,2017/10/23発行
  2. 日清紡マイクロデバイス照度センサNJL7302L-F3/F5,2014/12/22発行

参考文献

  1. 国野亘ほか:超特急Web接続!ESPマイコン・プログラム全集[CD-ROM付き],pp.60-63,CQ出版,2019

参考サイト

  1. 大阪市立博物館:こよみハンドブック 2006.4~2008.4,照度と明るさの目安

リンク先はすべて2023/01/22現在のもの

*1:一昔前であれば間違いなくCdSを使用していた

*2:ただし,グラフよりVceは5[V]だが今回は3.3[V]のため,コレクター・エミッタ間電圧のグラフより数[μA]小さくなるが,大きく振れるほうではないので問題なしとする