Arduino 入門
Lesson 67
【カラーセンサ】
こにんちは、管理人のomoroyaです。
センサーの使い方の基本を学習する入門編。
久しぶりに、入門編更新・・・。
世の中には、まだまだ色々なセンサーがあります。
これからも、色々なセンサーで遊んでいきます。
本記事はLesson 67 【カラーセンサ】です。
名前の通り色を判別できるセンサ。
カラー光周波数コンバータチップTCS3200D(TCS230)を搭載したセンサモジュールとなります。
「カラーセンサ」は8×8からなるフォトダイオードのアレイが組み込まれたチップにて光を検知。
フォトダイオードで得られたRGBデータは周波数に変換されて出力されます。
その周波数の違いによって色を識別するセンサとなります。
以下が同等品。
※prime対応品ではありません
カラーセンサはAmazonでは購入しずらいかもしれません。
Arduino入門編の解説にて使用しているArduinoは互換品です。
互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
正規品(Arduino UNO R3)の本体単品がほしい方はこちらとなります。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
はじめに
本Lessonで使用する「カラーセンサ」は「カラー光周波数コンバータチップTCS3200D(TCS230)」が実装されたモジュール。
TCS3200、TCS230にて検索すればデータシートはすぐに見つけることができると思います。
使用用途としては、自動で色分けするために使うなどに使えそうです。
Lesson 67 目標
本Lessonの目標は以下です。
2.カラーセンサの仕組みを理解する(理解しなくてもOKです)
3.カラーセンサを動かすスケッチを描く
4.カラーセンサを動かして遊ぶ
いつものように、遊ぶことが重要です。
「カラーセンサ」ですが、Arduinoでの制御はそれほど難しくなりません。
周波数をArduinoで取得すればよいので、「pulseIn()関数」利用できます。
準備
ではLessonの準備に取り掛かりましょう。
電子部品は「カラーセンサ」のみ。
Processingと組み合わせて検出した色をパソコン画面に視覚的に表示するのも面白いかもと思います。
必要なもの
- USB接続用のPC(IDE統合環境がインストールされたPC)
→管理人が勝手に比較したBTOメーカーを紹介しています。 - UNO R3(以下UNO)、おすすめUNO互換品(ELEGOO)
- PCとUNOを接続するUSBケーブル
- ブレッドボード安価(大)、ブレッドボード安価(中)
※おすすめブレッドボード(大)、おすすめブレッドボード(中) - M-M Jumper wire(UNOと部品をつなぐための配線)
- M-F Jumper wire(UNOと部品をつなぐための配線)
- M-F M-M F-F セット Jumper wire(UNOと部品をつなぐための配線)
※ブレッドボードはセンサとUNOを直接つなぐ場合不要です。
※ジャンパワイヤーは「M-M」「M-F」を必要に応じて使い分けてください。
Jumper wire、抵抗は今後も頻繁に利用します。
Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。
短めが使いやすい場合も。
抵抗も単品で揃えるよりはセットをおすすめします。
抵抗、LEDなどを個別でセット品を購入しても、そんなに使わない!
という方は、「電子工作基本部品セット」が使い勝手が良い。
使用部品説明
「カラーセンサ」について説明していきます。
カラーセンサ 実物写真
下の写真が「カラーセンサモジュール」の実物写真です。
本Lessonで使用するものは、TCS3200のチップが実装されたモジュール。
はずれを引いたのか?
信号ピンの名前が印字されていません・・・。
上側(左から):GND、OE、S1、S0
下側(左から):VCC、OUT、S2、S3
だと思います。
カラーセンサ 回路図
「カラーセンサ」の回路図を示します。
回路に興味がないかたは必ず飛ばし読みしてください。
■アレイ構成
下図に示すようにTCS3200のチップに64個のフォトダイオードがアレイとして実装されています。
R、G、B、クリアが、それぞれ16個×4の64個構成のアレイとなっています。
■ブロックダイアグラム
フォトダイオードの電流を周波数に変換して出力します。
■詳細回路図
気が向いたらおっかけて掲載予定。
回路図作成中
カラーセンサ 仕様
遊び、学習で使う分には気にする特性はとくにありません。
■仕様抜粋(一例:ものによります・・・)
項目 | 仕様 |
---|---|
供給電圧 | 2.7V ~ 5.5V(normal 5.0V) |
動作電流 | TYP:1.4mA(power on) / MAX:0.1μA(power down) |
応答に対する温度係数 | λ ≦ 700nm , -25℃ ≦ Ta ≦ 70℃ |
動作温度 | -40℃ ~ 70℃ |
■Terminal Function
Terminal Name | I/O | Description |
---|---|---|
GND | ー | GND |
OE | I | Enable (Active Low) |
OUT | O | 出力 |
S1、S2 | I | 出力周波数のスケーリング割合設定 |
S3、S4 | I | フォトダイオードの選択設定 |
VDD | ー | VDD |
■S0、S1 出力の接続先(マイクロコントローラなど)にあわせて最適化
S0 | S1 | 出力周波数スケーリング |
---|---|---|
L | L | Power down |
L | H | 2% |
H | L | 20% |
H | H | 100% |
■S2、S3 フォトダイオードの選択
S2 | S3 | 選択されるフォトダイオード |
---|---|---|
L | L | Red |
L | H | Blue |
H | L | Clear(no filter) |
H | H | Green |
TCS3200、TCS230にて検索すればデータシートはすぐに見つけることができると思います。
本Lessonは遊び、学習を想定しています。
Arduinoの仕様範囲内で使用していれば問題になることもありません。
遊び、学習以外での使用用途をお考えの場合はデータシートを必ず確認しましょう。
実践 回路作成とコード作成
最初に回路図を確認してください。
次に、回路図に合わせて部品を接続します。
最後にコードを書いて、「カラーセンサ」を動かしていきましょう。
Arduinoのピン配置を確認したい方は番外編02を参照してください。
回路図
Arduinoの使用ピンは以下。
- デジタル入力:11
- デジタル出力:3、5、7、8
- 5V、GND
回路図がこちら。
「カラーセンサ」のFriztingパーツがないので自作予定です。
自作の過程を記事にしようかと思案中!
こちらがブレッドボード図。
回路図は「fritzing」を利用しています。
「fritzing」の使い方は下記を参照してください。
接続
下図に示すように、用意した部品を使用して接続しましょう。
部品は「カラーセンサ」のみとなります。
部品はわずかであるため接続は簡単です。
「カラーセンサ」が少々大きいため、ブレッドボードを2つ使いました。
使用するポートは
- デジタル入力:11
- デジタル出力:3、5、7、8
- 5V、GND
穴に挿入しづらいときは、ラジオペンチなどを使用してください。
コードの書き込み
接続が終わったら、USBケーブルを使用してUNOにプログラムを書き込んで行きましょう。
コードを書き終えたら、いつでも利用できるように「ファイル」⇒「名前を付けて保存」で保存しておきましょう。
本LesssonのpulseIn()で値を取得するというのは下記を参考にしています。
コマンド説明
本Lessonでは、pulseIn()関数を使用します。
念のため、復習しておきましょう。
関数名 | |
pulseIn(pin, value, timeout) | pin:パルスを入力するピンの番号 value:測定するパルスの種類(High/Low) timeout:タイムアウトまでの時間(単位:μs)省略可 戻り値:パルスの長さ(μs)例 パルスのH期間取得 xxx = pulseIN(pin, HIGH); |
サンプルコード
本LessonのスケッチはpulseIn()とmap関数が重要。
カラーセンサの範囲が0~255とぴったりにはなりませんので、キャリブレーションする必要があります。
まず、初めに下記の部分はコメントアウトしておきます。
コメントアウトした状態で、実行。
白色と、黒色をかざしてRGBのminとmaxの値を取得してください。
//b = map(r, maxR, minR, 0, 255); //RGBをマッピングしなおし
//g = map(r, maxR, minR, 0, 255); //RGBをマッピングしなおし
minとmaxを取得できたら下記の部分を設定してください。
//一回目の測定で下記を設定後map関数でRGBを設定しなおし
//White setting
int minR = 0;
int minG = 0;
int minB = 0;
//Black setting
int maxR = 255;
int maxG = 255;
int maxB = 255;
上記の設定が終わったら下記のコメントアウトを削除して再実行。
上記過程にてRGBの範囲をキャリブレーションしています。
g = map(r, maxG, minG, 0, 255); //RGBをマッピングしなおし
b = map(r, maxB, minB, 0, 255); //RGBをマッピングしなおし
//Lesson 67 Color Sensor //Color Sensorで色を識別 //https://omoroya.com/ const int S0 = 3; //S0変数に3を設定 const int S1 = 5; //S1変数に5を設定 const int S2 = 8; //S2変数に8を設定 const int S3 = 7; //S3変数に7を設定 const int OutPut = 11; //OutPut変数に11を設定 //RGBのminとMaxの設定 //一回目の測定で下記を設定後map関数でRGBを設定しなおし //White setting int minR = 21; int minG = 21; int minB = 18; //Black setting int maxR = 196; int maxG = 210; int maxB = 163; void setup() { pinMode(S0, OUTPUT); //S0をOUTPUT指定 pinMode(S1, OUTPUT); //S1をOUTPUT指定 pinMode(S2, OUTPUT); //S2をOUTPUT指定 pinMode(S3, OUTPUT); //S3をOUTPUT指定 pinMode(OutPut, INPUT); //OutPutをINPUT指定 //初期値はClear(no filter設定) digitalWrite(S0,HIGH); digitalWrite(S1,LOW); //シリアル通信のデータ転送レートを9600bpsで指定 Serial.begin(9600); } void loop() { //Red取得 S2S3:LL digitalWrite(S2,LOW); digitalWrite(S3,LOW); int r = pulseIn(OutPut, LOW); //REDのLowのパルス幅取得 //r = map(r, maxR, minR, 0, 255); //RGBをマッピングしなおし delay(100); //Green取得 S2S3:HH digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); int g = pulseIn(OutPut, LOW); //BLUEのLowのパルス幅取得 //g = map(g, maxG, minG, 0, 255); //RGBをマッピングしなおし delay(100); //Blue取得 S2S3:LH digitalWrite(S2,LOW); digitalWrite(S3,HIGH); int b = pulseIn(OutPut, LOW); //BLUEのLowのパルス幅取得 //b = map(b, maxB, minB, 0, 255); //RGBをマッピングしなおし delay(100); //シリアルモニタ表示 Serial.print("R="); Serial.print(r); Serial.print(",G="); Serial.print(g); Serial.print(",B="); Serial.println(b); }
動作確認
では、さっそく動作を確認していきます。
「カラーセンサ」のセンサ部分に遮蔽物を置いてみてください。
- 赤
- 緑
- 青
■色とシリアルモニタとカラーセンサの状態
色 | シリアルモニタ | カラーセンサの状態 |
---|---|---|
赤 | ![]() |
![]() |
緑 | ![]() |
![]() |
青 | ![]() |
![]() |
まとめ
本Lessonは、以下を目標としました。
2.カラーセンサの仕組みを理解する(理解しなくてもOKです)
3.カラーセンサを動かすスケッチを描く
4.カラーセンサを動かして遊ぶ
「カラーセンサ」は色を検出できるセンサ。
工夫次第では色々と遊ぶことができるセンサかなと思います。
Lesson 67 【カラーセンサ】 はここまで。
疑問点、質問などありましたら気軽にコメントください。
次回、Lesson 68は【GPSモジュール】です。

最後に
疑問点、質問などありましたら気軽にコメントください。
この電子部品の解説をしてほしい!などなどなんでもOKです。
リンク切れ、間違いなどあればコメントいただけると助かります。
Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。
Arduino入門編、Arduino入門編2で使用しているUNOはAmazonにて購入可能です。
Arduino入門編では互換品を使用。
Arduinoはオープンソース。
複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
学習用、遊び用、お試し用には安価な互換品がおすすめです。
ELEGOO UNO キット レベルアップ チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用
上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
Amazonでお得に買う方法
Amazonでお得に購入するならAmazon Mastercard、Amazonギフト券がおすすめです。
時期により異なりますが、様々なキャンペーンを実施しています。
\Amazonギフト券/
Amazonギフトカード キャンペーン
\Amazon Mastercard お申込み/
Amazon Mastercard 申し込み
いずれの場合もプライム会員である方がお得!!
\Amazon Prime 30日間の無料会員を試す/
無料会員登録
コメント