工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

カラーセンサーのプロトタイプ:オブジェクトから色の名前を検出する

コンポーネントと消耗品

>
Arduino UNO
× 1
RGB拡散共通アノード
一般的なカソードまたはアノード...お持ちのものを使用してください
× 1
フォトレジスター
× 1
Adafruit標準LCD-16x2白地に青
LiquidCrystalArduinoライブラリで使用できるもの
× 1
抵抗10kオーム
タクタイルスイッチとCdSセル用
× 2
>
抵抗100オーム
RGBLEDの赤のピンの場合は150オーム、緑と青のピンの場合は2x100オーム
× 3
SparkFunプッシュボタンスイッチ12mm
× 1
ジャンパー線(汎用)
× 1
ブレッドボード(汎用)
× 1

アプリとオンラインサービス

MLPトポロジワークベンチ
ArduinoのNeuronaライブラリで使用するためにニューラルネットワークを再トレーニングするために使用されるツール。

このプロジェクトについて

これは、このプロジェクトの複製を簡単に行えるように、簡単にするために記事全体を簡略化したものです。実装の詳細については、私のブログでこのプロジェクトも確認してください。

この記事は、右側のメニューにリストされているセクションに分かれています。技術的な詳細にジャンプしたい場合は、右側の目次を確認するか、GitHubリポジトリでコードをダウンロードしてください。読み続ける前に、プロジェクトビデオをチェックして、このプロジェクトの実際の内容を確認してください:)

プロジェクトの概要

人間の目の色覚と同様に、光に基づいているだけでなく、 RGBモデルは1600万色以上で構成されています 3D空間に配置されています 、ここで、0から255の範囲のコンポーネントR(赤)、G(緑)、およびB(青)の整数値は、この空間の座標を構成します。このモデルから、色の検出と認識は、光関連の電子部品と機械学習メカニズムを使用して実行されました。;これは基本的に、RGB LEDとCdSセル(光センサー、またはLDR)の組み合わせであり、どちらも周囲光から分離されています 。このようなコンポーネントはそれぞれ、特定の色のオブジェクトから反射された各光(赤、緑、青)の強度を放出して感知します。

多層パーセプトロン

多層パーセプトロン(MLP)は、人工ニューラルネットワークのフィードフォワードアーキテクチャであり、入力(非ニューラル)層、非表示層、および出力層を備えています。このネットワークは、バックプロパゲーションアルゴリズムによってトレーニングされ、教師あり学習(例による学習)を実行します。

<図>

このカラーセンサーの場合、上記のニューラルネットワークは 3つの入力(RGB値)を受け取ります 、1つの 6つのニューロンを持つ隠れ層 10個のニューロンを持つ出力層 -思い出してください。2値化された出力の場合、出力レイヤーには同じ数のクラス(この場合は色)が必要です。このチュートリアルでは、ネットワークはすでにトレーニングされており、色を認識できます:)。トレーニング手順とそれに使用されるサンプルデータセットの詳細については、ブログの投稿全体をご覧ください。

色認識

このタスクは、トレーニング済みのMLPネットワークを使用して実行できます。これにより、空間的に分離可能なパターンの分類と認識が可能になります。この場合は非常に便利です。トレーニングステップ中に、ネットワークは以下に示すRGB色空間の領域をマッピングしました。これにより、超平面によって分離されたすべての領域が色を表します 。したがって、すべての新しいRGBカラーパターン(3Dポイントとして表される)は特定の領域に分類され、それぞれの色として分類されます。

<図> <図>

RGBパターンを適切に認識するためのMLPによる一般化を取得する目的で、トレーニングセット(上記の3D空間からの目的の出力を持つ色の例)をトレーニングステップのためにネットワークに提示する必要があります。このプロジェクトで使用されるトレーニングセットは、プロジェクトの GitHub で入手できます。 リポジトリ。ニューラルネットワークに熱心な場合は、このセクションを読み続け、私が開発したこのプレイグラウンドをチェックしてください。データセットを使用してネットワークを自分でトレーニングし、コードで使用できます:)。それ以外の場合は、 Implemetationの詳細にスキップ

一般化はトレーニングセットを構成するドメインで行われるため、最小値と最大値に注意を払う価値があります スペースの各コンポーネントの!このドメイン外のパターンをネットワークにフィードしないでください。そうしないと、出力が正しく機能しないことが期待されます。

<図>

データセット(すべての例)には、0〜1の範囲のカラーパターンの75個のインスタンスが含まれています。最初は0〜255の範囲で、これらのインスタンスは、0 <=x1、x2、x3 <=1となるように、各値を255で除算するだけで再スケーリングされました。 。データセットに見られるように、出力層の1つのニューロンのみが1を出力する必要があり、残りのニューロンは0を出力する必要があることを指摘することが重要です。トレーニングされたネットワークがフロート値を出力するという事実により、後処理は次のように行われます。

<図>

ここで、yiはi番目のニューロンの出力であり、max(y)は最大の出力値です。実際には、最大の出力を持つニューロンは出力として1を与え、残りのニューロンは0を与えます。そのように単純です。

電子回路

オブジェクトから発生するすべての検出手順は、Arduinoボードに接続されているAtmega328で実行される計算アクティビティを含む電子回路で行われます。以下の回路図から配線を確認してください。

<図> <図>

コードは、共通アノードを使用する上記のスキームに従います。 RGBLED。そうは言っても、 RGB LEDが共通のアノードでもあるかどうかを確認してください。そうでない場合は、コードのロジックを逆にしてください

もう1つの重要な詳細は、RGBLEDで1つの抵抗のみを使用していることです。一度に1つの色が点灯するので、抵抗器を共通のアノードに配置します。抵抗器の平均抵抗は本来あるべきでした。 陰極で-それは怠惰です、私は知っています、そしてごめんなさい!プロジェクトパーツを購入したとき、必要なものがすべて揃っていませんでしたが、コンピューターのRGB値に対して収集されたRGB値を忠実に再現するには、カソードに正しい抵抗を使用することが非常に重要です。パターンが歪んでいないので、私がした方法はそれほど悪くはありません。それらは、コンピューターの画面で(そして人間の目で捉えたものとして)見られるのと同じ色ではありません。

回路図から、RGBLEDとCdSセル間の隣接関係を確認できます。これは、周囲光から隔離する必要があるため(オールディーズの黒いフィルムチューブが最適です)、キャリブレーション(プログラミングで説明)と認識を実行できます。 プロジェクトビデオをチェックして、そのようなコンポーネントが周囲光から隔離されていることを確認してください。

色彩理論

電子回路によって実行される色知覚は、色理論の概念に基づいています。レンズは(まだ)含まれていないため、不透明な(そしてマットな)素材のオブジェクトのみを検討する必要があります 、LEDの鏡面反射に対処することを避けます。一方、拡散反射は、ライトで色を検出するための鍵です。入射光から、それは不規則な表面で反射され、CdSセルの機能を損なうような光沢のある効果を生み出しません。

実際の色彩理論に戻ると、(特定の色の)光がオブジェクトに到達すると、そのオブジェクトの色のプロパティに従って反射されます。たとえば、黄色のオブジェクトに到達する赤い光は、その黄色の構成に存在する赤の量に応じて反射されます。覚えておいてください。私たちは光について話しているのです。 -したがって、多くの赤色光が反射されることが予想されます。これは、黄色(基本的には赤と緑)のRGB構成を考えると理にかなっています。ただし、青色の光が黄色のオブジェクトに到達すると、色の構成に青色が含まれないため、強い反射は予想されません。

<図>

白と黒がそれぞれすべての色の存在と不在である加法色システムを検討します(詳細はこちら )、色付きのオブジェクトに到達するRGB LEDからの各光の最大反射と最小反射を(CdSセルで)測定できます。とはいえ、回路に含まれる電子部品の校正を行うことは可能です。これは、検出の忠実度を確保し、パターンの安定した検出を保証する(外れ値を回避する)ためのもう1つの鍵です。これがゴールデンチップです。 :キャリブレーション後、電子部品(特にブレッドボードに配置されている場合)も、周囲光から部品を分離するために使用している部品(使用する必要があります)も動かしたり触れたりしないようにしてください。

> US_plugins_acrobat_en_motion_education_colorTheory.pdf

プログラミング

キャリブレーションと認識のために、色付きのオブジェクトがRGB LEDとCdSセルに露光されると、カラーセンサーは3回の反復を実行します。最初の反復では、赤い光がオブジェクトに当たり、プログラムはCdSセルがその検知を安定させるのを待ちます。次に、アナログ入力が読み取られ、赤色光の反射が保存されます。プログラムは、緑と青の色をさらに2回繰り返します。色彩理論に示されている図は、この反復プロセスを視覚的に説明しています。

キャリブレーションに関しては、上記の反復プロセスが2回実行されます。1回は黒色、もう1回は白色です。色彩理論で説明されているように、これは最大値と最小値を検出するためのものです。最初はゼロに近いからです。 1024付近 、読み取り解像度に応じて-赤、緑、青の光の反射、間隔[0、255](情報提供の目的で)および[0、1](ニューラルネットワークに供給する実際の入力)に適切に再スケーリングするための真の範囲を取得します。

待機時間 光センサーの読み取りを確立するために変化する可能性があります 各電子部品に応じて、安定したセンシングを確保するために十分な遅延を与えるのは良いことです。私の場合、500ミリ秒の遅延を与えましたが、最初はより大きな値を使用し、その後、不安定な動作が発生するまで値を小さくする価値があります。

検出では、収集されたRGB値(0から1の範囲)がMLPにフィードし、実際の色認識を実行します。 Arduinoで実行されているMLPには、 Neurona を使用しています。 -arduinoでANNを簡単に使用するために作成したライブラリ。これは、ライブラリマネージャーを使用してArduinoIDEからインストールできます。 この投稿も確認してください 詳細については。

前述のように、ネットワークはすでにトレーニングされており、プロジェクトコードで検出できるようになっています。これは、私が開発したPlaygroundを使用してトレーニングされ、調整された重みがコードに埋め込まれているため、Neuronaライブラリによってネットワークが動作できるようになります。

テスト

情報を提供する目的で、データセットからいくつかの色を抽出して、いくつかの認識テストを実行しました。

<図>

図の外側の数字は識別に使用され、図の内側の数字は誤分類を示し、代わりにどの色が分類されたかを示します。これらの色は、インクジェットプリンターを使用して亜硫酸塩紙で印刷されました。この投稿の冒頭にあるビデオの小さな紙の四角を確認してください。したがって、オブジェクト 色検出に適した不透明な素材で構成されています。

コード

カラーセンサーのプロトタイプ
arduinoに送信するコードはcolorSensorフォルダー内にあります。提示された回路図に従って電子回路が構築されていること、およびNeuronaライブラリが正しくインストールされていることを確認してください(Arduino Library Managerからインストールできます)。https://github.com/moretticb/ColorSensor/

回路図

LCDディスプレイの指示に従って押しボタンを使用します

製造プロセス

  1. 抵抗器のカラーコード
  2. 喉の渇き警報プラント警報
  3. イタリア語の単語時計
  4. Arduinoを搭載したシンプルな障害物センサー
  5. SigfoxkWhメーター
  6. Bluetooth温度モニター
  7. ジェスチャー制御ロック
  8. コンパニオンIC
  9. USBMIDIアダプター
  10. Arduino用の絶縁アナログ入力
  11. 反応時間を測定する