2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

カラーセンサS9706を使ってみる

Posted at

S9706というカラーセンサをArduinoで使ってみます。

S9706とは

浜松ホトニクス製のカラーセンサです。
12bitでRGBの値が読めます。
秋月電子のリンク

浜松ホトニクスのリンク

配線

S9706はI2Cなどではないため普通のデジタル入出力ピンで使えます。

S9706のピン配置は以下のようになっています。(データシートより)

image.png

1,4,5,6をデジタルピンに、2を5Vまたは3.3Vに、3をGNDに接続してください。

表面実装部品ですが、1.27mmのSOP変換基板などを使えばブレッドボード上で使えます。

image.png

S9706の上下に気を付けてください。二本線のようなものが見える方が上です。

プログラム

以下のようなプログラムを書きます。

データの読み取りの仕組みについてはデータシートの「タイミングチャート」というところをご確認ください。

S9706.ino
#define RANGE 2
#define GATE  3 
#define CK   4 
#define DOUT 5 

int red, green, blue; // RGB値を格納する変数

int tg = 50; // 積分時間

void setup() {
  pinMode(RANGE, OUTPUT);
  pinMode(GATE, OUTPUT);
  pinMode(CK, OUTPUT);
  pinMode(DOUT, INPUT);
  Serial.begin(9600);
}

void loop() {
  digitalWrite(GATE, LOW);
  digitalWrite(CK, LOW);
  delayMicroseconds(2000);

  // 感度設定
  digitalWrite(RANGE, HIGH);

  // 光量の積算を開始
  digitalWrite(GATE, HIGH);
  
  delay(tg + 1); // 積分時間だけ待つ

  // 光量の積算を終了
  digitalWrite(GATE, LOW);
  delayMicroseconds(4); 

  // 測光データを取得
  red = readColor();
  green = readColor();
  blue = readColor();


  digitalWrite(GATE, HIGH);


  Serial.print(red);
  Serial.print(" ");
  Serial.print(green);
  Serial.print(" ");
  Serial.println(blue);


}

// 12ビットのデータを読み取る
int readColor() {
  int result = 0;
  for (int i = 0; i < 12; i++) {
    digitalWrite(CK, HIGH);
    delayMicroseconds(1);
    result |= (digitalRead(DOUT) << i);
    digitalWrite(CK, LOW);
    delayMicroseconds(1);
  }
  delayMicroseconds(3);
  return result;
}

これでRGB値を取得することができました!

適切な積分時間・感度を探してみてください!

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?