Nano 33 BLE Senseで色を検出
i
このチュートリアルは、すでに製品ライフサイクルの終了(EOL)を迎えた製品を対象としています。

Nano 33 BLE Senseの内蔵RGBセンサーを用いて、物体のおもな原色を視覚化する方法を学びます。


Author:Fabricio TroyaLast revision:2024/07/17

このチュートリアルでは、内蔵APDS9960センサーを使い、環境にある物体から投射される光の主成分を測定するのに、Arduino Nano 33 BLE Senseボードを使います。

目的

このプロジェクトの目的は以下の通りです。

  • APDS9960センサーがどのように動作するかを学びます。
  • APDS9960ライブラリを使用します。
  • Arduino Nano 33 BLE Senseから生のセンサーデータを出力する方法を学びます。
  • 近接検出モニターを作ります。
  • 近接データの値を使い、RGB LEDを制御する方法を学びます。

必要なハードウェアとソフトウェア

  • このプロジェクトでは、外部のセンサーや機器を利用しません。
  • このチュートリアルでは、ボードのプログラムを記述するのに、Arduino Cloudエディタを利用します。

APDS9960センサー

APDS9960センサーは、高度なジェスチャー検出、近接検出、デジタル周辺光検出(ALS: Ambient Light Sense)、色検出(RGBC)を提供する多目的デバイスです。APDS9960センサーの非常に人気のあるアプリケーションは、スマートフォン内にあり、ユーザーがスマートフォンを耳に使づけるとスクリーンを消すのに使われています。

APDS9960センサーモジュールの詳細を知りたければ、こちらを参照してください。

カラーセンサ―

白色は、実際には虹の全ての色で構成されていて、すべての波長を含んでいるので、多色光と説明されます。カラーセンサーは4つの異なるチャネル(赤と緑、青、透明光強度)に別れています。各チャネルには、紫外線と赤外線のブロックフィルターと同時にデータを読むためのデータ変換器で構成されます。

以下の機能を提供します。

  • 4つの異なるチャネルから異なる色データを取得する
  • 16ビットデータを同時に生成する
  • 周辺光と認識光の正確な測定

プログラム作成

  1. 設定

Arduino Cloudエディタを開き、Librariesタブをクリックし、APDS9960ライブラリを探します。その後、> Examplesで、ColorSensorスケッチを開きます。開いた後は、Light_compositionという名前に変更します。

  1. ボードを接続する

次に、Arduino Nano 33 BLE SenseをPCに接続し、Cloudエディタが認識することを確認します。すると、ポートとボードが以下の図で示すように現れます。現れない場合は、指示に従いエディタがボードを認識するためのプラグインをインストールしてください。

  1. コードウォークスルー

APDS9960ライブラリをインクルードする必要があります。これにより、センサー制御が可能となります。このためには、以下のコードをsetup()関数の前に追加します。

1
#include <Arduino_APDS9960.h>

setup()部分はそのままにして、さらに、APDS.begin()if文の中に書きます。これは、カラーセンサーを初期化し、センサーが正常に初期化されなければ、シリアルモニターにメッセージを表示します。表示する文字列は任意に設定してください。

1
2
3
4
5
6
7
8
void setup() {
  Serial.begin(9600);
  while (!Serial);

  if (!APDS.begin()) {
    Serial.println("Error initializing APDS9960 sensor.");
  }
}

loop()では、colorAvailable()関数を使い、センサーが取得可能な色データを検出したか確認します。そして、APDS.readColor()を使い、色データをrgbという変数に格納します。APDS.readColor()関数の後、光の主成分が何かを知るために、if...else文を使う必要があります。それに従い、digitalWrite()関数で、RGB LEDを点灯します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
if (r > g & r > b)
  {
    digitalWrite(LEDR, LOW);
    digitalWrite(LEDG, HIGH);
    digitalWrite(LEDB, HIGH);
  }
  else if (g > r & g > b)
  {
    digitalWrite(LEDG, LOW);
    digitalWrite(LEDR, HIGH);
    digitalWrite(LEDB, HIGH);
  }
  else if (b > g & b > r)
  {
    digitalWrite(LEDB, LOW);
    digitalWrite(LEDR, HIGH);
    digitalWrite(LEDG, HIGH);
  }
  else
  {
    digitalWrite(LEDR, HIGH);
    digitalWrite(LEDG, HIGH);
    digitalWrite(LEDB, HIGH);
  }

最後に、Serial.print()Serial.println()を使い、測定した色をシリアルモニタに表示します。

  1. 完全なコード
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
  APDS9960 - Color Sensor

  This example reads Color data from the on-board APDS9960 sensor of the
  Nano 33 BLE Sense and prints the color RGB (red, green, blue) values
  to the Serial Monitor once a second.

  The circuit:
  - Arduino Nano 33 BLE Sense

  This example code is in the public domain.
*/

#include <Arduino_APDS9960.h>

void setup() {
  Serial.begin(9600);
  while (!Serial);

  if (!APDS.begin()) {
    Serial.println("Error initializing APDS9960 sensor.");
  }
}

void loop() {

  // check if a color reading is available
  while (! APDS.colorAvailable()) {
    delay(5);
  }
  int r, g, b;

  // read the color
  APDS.readColor(r, g, b);

  if (r > g & r > b)
  {
    digitalWrite(LEDR, LOW);
    digitalWrite(LEDG, HIGH);
    digitalWrite(LEDB, HIGH);
  }
  else if (g > r & g > b)
  {
    digitalWrite(LEDG, LOW);
    digitalWrite(LEDR, HIGH);
    digitalWrite(LEDB, HIGH);
  }
  else if (b > g & b > r)
  {
    digitalWrite(LEDB, LOW);
    digitalWrite(LEDR, HIGH);
    digitalWrite(LEDG, HIGH);
  }
  else
  {
    digitalWrite(LEDR, HIGH);
    digitalWrite(LEDG, HIGH);
    digitalWrite(LEDB, HIGH);
  }


  // print the values
  Serial.print("Red light = ");
  Serial.println(r);
  Serial.print("Green light = ");
  Serial.println(g);
  Serial.print("Blue light = ");
  Serial.println(b);
  Serial.println();

  // wait a bit before reading again
  delay(500);
}

テスト

スケッチの検証とボードへのアップロードが成功したら、左側のメニューからシリアルモニタを開きます。以下の図のように新しい値が表示されていきます。

動作しているかをテストしたければ、異なる色の物体にボードを近づけて、値が増減したり、RGB LEDの色が変わるか確認します。

トラブルシュート

エラーが起きることもあります。コードが動作しないときはいくつかの共通の問題があり、解決できます。

  • 括弧やセミコロンが抜けている。
  • Arduinoボードが認識されなければ、CreateプラグインがPC上で適切に動作していることを確認する。
  • 部屋が暗すぎる。

おわりに

このチュートリアルでは、APDS9960ライブラリを使い、APDS9960センサーから、色の値を読み取る方法と、Arduino Nano 33 BLE Sense内蔵のセンサーを使い、環境の色の値を測定しシリアルモニタに表示し、これらの値をRGB LEDに反映し、主成分となる原色を表示する方法を学びました。

オリジナルのページ

https://docs.arduino.cc/tutorials/nano-33-ble-sense/rgb-sensor/

最終更新日

August 16, 2026

inserted by FC2 system