このプロジェクトでは、RaspberryPiでTCS3200カラーセンサーモジュールを使用して色を検出します。ここでは、Raspberry PiのPythonコードを使用して、TCS3200センサーを使用して色を検出しました。RGB LEDを使用した色検出を示すために、このRGB LEDは同じ色で点灯し、そのオブジェクトはセンサーの近くに表示されます。現在、赤、緑、青の色のみを検出するようにRaspberryPiをプログラムしています。ただし、すべての色はこれらのRGBコンポーネントで構成されているため、RGB値を取得した後に任意の色を検出するようにプログラムできます。最後にデモビデオを確認してください。
以前、Arduinoで同じTCS3200を使用して色のRGB値を読み取って表示しました。先に進む前に、TCS3200カラーセンサーについてお知らせください。
TCS3200カラーセンサー:
TCS3200は、適切なプログラミングで任意の数の色を検出できるカラーセンサーです。 TCS3200には、RGB(赤緑青)アレイが含まれています。顕微鏡レベルの図に示されているように、センサーの目の内側の四角いボックスを見ることができます。これらの四角いボックスは、RGB行列の配列です。これらの各ボックスには、赤、緑、青の光強度を感知するための3つのセンサーが含まれています。
つまり、同じレイヤーに赤、青、緑の配列があります。したがって、色を検出している間、3つの要素すべてを同時に検出することはできません。これらのセンサーアレイのそれぞれは、色を検出するために次々に別々に選択されます。モジュールは、特定の色を感知し、他の色を残すようにプログラムできます。これには、後で説明するその選択のためのピンが含まれています。フィルタモードではない4番目のモードがあります。フィルタモードがない場合、センサーは白色光を検出します。
このセンサーをRaspberryPiに接続し、色に応じて適切な応答を提供するようにRaspberryPiをプログラムします。
必要なコンポーネント:
ここでは 、Raspbian JessieOSでRaspberryPi2モデルBを使用しています。すべての基本的なハードウェアとソフトウェアの要件については前に説明しましたが、必要なものを除いて、RaspberryPiの概要とRaspberryPIのLEDの点滅で調べることができます。
- OSがプリインストールされたRaspberryPi
- TCS3200カラーセンサー
- CD4040カウンターチップ
- RGB LED
- 1KΩ抵抗(3個)
- 1000uFコンデンサ
回路図と接続:
カラーセンサーをRaspberryPiに接続するために行われる接続を以下の表に示します。
センサーピン |
ラズベリーパイピン |
Vcc |
+ 3.3v |
GND |
接地 |
S0 |
+ 3.3v |
S1 |
+ 3.3v |
S2 |
PIのGPIO6 |
S3 |
PIのGPIO5 |
OE |
PIのGPIO22 |
アウト |
CD4040のCLK |
Raspberry Piを使用したCD4040カウンターの接続を以下の表に示します。
CD4040ピン |
ラズベリーパイピン |
Vcc16 |
+ 3.3v |
Gnd8 |
gnd |
Clk10 |
センサーのOUT |
リセット11 |
PIのGPIO26 |
Q0 |
PIのGPIO21 |
Q1 |
PIのGPIO20 |
Q2 |
PIのGPIO16 |
Q3 |
PIのGPIO12 |
Q4 |
PIのGPIO25 |
Q5 |
PIのGPIO24 |
Q6 |
PIのGPIO23 |
Q7 |
PIのGPIO18 |
Q8 |
接続なし |
Q9 |
接続なし |
Q10 |
接続なし |
Q11 |
接続なし |
以下は、カラーセンサーとRaspberryPiのインターフェースの完全な回路図です。
作業説明:
すべての色は、赤、緑、青(RGB)の3色で構成されています。そして、任意の色のRGBの強度がわかれば、その色を検出できます。以前、Arduinoを使用してこれらのRGB値を読み取りました。
TCS3200カラーセンサーを使用すると、赤、緑、青の光を同時に検出できないため、1つずつ確認する必要があります。カラーセンサーが感知する必要のある色は、2つのピンS2とS3によって選択されます。これらの2つのピンを使用して、どの色の光強度を測定するかをセンサーに伝えることができます。
赤の色の濃さを感知する必要がある場合は、両方のピンをLOWに設定する必要があるとします。赤色光を測定した後、S2LOWとS3HIGHを設定して青色光を測定します。S2とS3のロジックを順番に変更することで、以下の表に従って、赤、青、緑の光の強度を測定できます。
S2 |
S3 |
フォトダイオードタイプ |
低 |
低 |
赤 |
低 |
高い |
青い |
高い |
低 |
フィルターなし(白) |
高い |
高い |
緑 |
センサーがRGBコンポーネントの強度を検出すると、次の図に示すように、値がモジュール内の制御システムに送信されます。アレイによって測定された光強度は、モジュール内の電流から周波数へのコンバーターに送られます。周波数変換器は、周波数がアレイから送信された値に正比例する方形波を生成します。ARRAYからの値が高いほど、電流から周波数へのコンバーターはより高い周波数の方形波を生成します。
カラーセンサーモジュールによる出力信号周波数は、4つのレベルに調整できます。これらのレベルは、下図に示すように、センサーモジュールのS0とS1を使用して選択されます。
S0 |
S1 |
出力周波数スケーリング(f0) |
L |
L |
パワーダウン |
L |
H |
2% |
H |
L |
20% |
H |
H |
100% |
この機能は、このモジュールを低クロックでシステムに接続するときに役立ちます。Raspberry Piでは100%を選択します。ここで、日陰の下で、カラーセンサーモジュールが各色の最大周波数が2500Hz(100%スケーリング)の方形波出力を生成することを覚えておいてください。
このモジュールは、周波数がその表面に当たる光の強度に正比例する出力方形波を提供しますが、このモジュールで各色の光の強度を計算する簡単な方法はありません。ただし、色ごとに光の強度が増加しているか減少しているかはわかります。また、赤、緑、青の値を計算して比較し、モジュールの表面にプリセットされている光の色やオブジェクトの色を検出することもできます。つまり、これは光強度センサーモジュールというよりもカラーセンサーモジュールです。
ここで、この方形波出力をRaspberry Piに供給しますが、Raspberry Piには内部カウンターがないため、PIに直接与えることはできません。したがって、最初にこの出力をCD4040バイナリカウンターに渡し、100ミリ秒の周期的な間隔でカウンターから周波数値を取得するようにRaspberryPiをプログラムします。
したがって、PIは、赤、緑、青の各色について、2500/10 = 250maxの値を読み取ります。また、以下に示すように、画面に光の強度を表すこれらの値を出力するようにRaspberryPiをプログラムしました。値はデフォルト値から差し引かれ、ゼロになります。色を決めるときに重宝します。
ここでのデフォルト値は、センサーの前にオブジェクトを配置せずに取得したRGBの値です。これは周囲の光の状態によって異なり、これらの値は周囲によって異なる場合があります。基本的に、標準の読み取り値に合わせてセンサーを校正しています。したがって、最初にオブジェクトを配置せずにプログラムを実行し、読み取り値をメモします。センサーをどこに置いても、センサーには常に光が当たるので、これらの値はゼロに近くなりません。次に、これらの読み取り値を、テストするオブジェクトを配置した後に取得する読み取り値で減算します。このようにして、標準の測定値を取得できます。
Raspberry Piは、R、G、Bの値を比較して、センサーの近くに配置されたオブジェクトの色を決定するようにもプログラムされています。この結果は、RaspberryPiに接続された光るRGBLEDによって示されます。
つまり、一言で言えば、
1.モジュールは、表面近くに配置されたオブジェクトによって反射された光を検出します。
2.カラーセンサーモジュールは、ピンS2およびS3を介してRaspberryPiによって順番に選択されたRまたはGまたはBの出力波を提供します。
3. CD4040カウンターは波を受け取り、周波数値を測定します。
4. PIは、100msごとに各色のカウンターから周波数値を取得します。毎回値を取得した後、PIは次の値を検出するためにカウンターをリセットします。
5. Raspberry Piはこれらの値を画面に印刷し、これらの値を比較してオブジェクトの色を検出し、最後にオブジェクトの色に応じて適切な色でRGBLEDを点灯させます。
Pythonコードでは上記のシーケンスに従いました。完全なプログラムは、デモンストレーションビデオとともに以下に示されています。
ここで、Raspberry Piは3色のみを検出するようにプログラムされています。それに応じて、R、G、Bの値を一致させて、好みの色をさらに検出することができます。