LoginSignup
3
4

More than 5 years have passed since last update.

カラーセンサー[S11059-02DT]で取得した色データを、RGBにしてみる

Posted at

目標

カラーセンサーを使用して、環境の色をRGB値として取得したい

知識材料

利用環境

今後、取得した色をサーバに送信したかったので、WROOM-02 を使いました。
Arduino Uno などでも動きます。

今回のゴール

カラーセンサーの 「赤」「青」「緑」を、なんとなくRGB値として出力

実践

接続

マイコンとセンサーを接続する。

Arduino PIN DST
3V3 3.3V
GND GND
IO14 [S11059] SDA
IO13 [S11059] SCL

Arduino 側ソースコード

I2Cコマンドを参考にさせていただいた

あらかじめ、センサーに「赤いライト」「青いライト」「緑色のライト」を近づけて、
一番大きかった「赤の値」、「青の値」、「緑の値」を
RGBの 0xFF として得られるように map()関数を設定。

s11059.ino
#include <Wire.h>

#define I2C_SDA 14
#define I2C_SCL 13

#define S11059_ADDR 0x2A

void setup() {
  Serial.begin(74880);
  Serial.println("start");

  // Init I2C 
  Wire.begin(I2C_SDA, I2C_SCL);

  // 0x00 = Control 
  // 0x8B = ADC-Reset + High Gain + 179.2ms
  Wire.beginTransmission(S11059_ADDR);
  Wire.write(0x00);
  Wire.write(0x8B);
  Wire.endTransmission();

  // 0x00 = Control 
  // 0x0B = ADC-Run + High Gain + 179.2ms
  Wire.beginTransmission(S11059_ADDR);
  Wire.write(0x00);
  Wire.write(0x0B);
  Wire.endTransmission();
}

void loop() {
  delay(720);

  int h,l ,r,g,b,a;
  // 0x03 Read Data
  Wire.beginTransmission(S11059_ADDR);
  Wire.write(0x03);
  Wire.endTransmission();

  Wire.requestFrom(S11059_ADDR,8);
  if(Wire.available()){
    // Red
    h = Wire.read();
    l = Wire.read();
    r = h << 8|l;
    Serial.print(" r:");
    Serial.print(r);
    // Green
    h = Wire.read();
    l = Wire.read();
    g = h << 8|l;
    Serial.print(" g:");
    Serial.print(g);
    // Blue
    h = Wire.read();
    l = Wire.read();
    b = h << 8|l;
    Serial.print(" b:");
    Serial.print(b);
    // Infra red
    h = Wire.read();
    l = Wire.read();
    a = h << 8|l;
    Serial.print(" a:");
    Serial.print(a);

    // It converted to RGB?
    int rr, gg, bb;
    Serial.println(" ");
    rr = map(r, 30, 56000, 0, 255);
    gg = map(g, 30, 41000, 0, 255);
    bb = map(b, 30, 56000, 0, 255);
    Serial.print(rr, HEX);
    Serial.print(" ");
    Serial.print(gg, HEX);
    Serial.print(" ");
    Serial.print(bb, HEX);
    Serial.println("");
  }
  Wire.endTransmission();

}

実行と結果

動画内に表示される
r:xxxxx g:xxxxx b:xxxxx a:xxxx の行は、センサーの値をそのまま出力。
その次の HEX 行は、それぞれ R/G/B に変換した結果。

S11059

まとめ

何に使うかはさておき、
適当なRGB変換処理にしては、それっぽい色味を得られていたと思う。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4