RGBジェスチャーセンサー(GY-9960)を使って色別測定モニター機を作ってみた‼(Arduino Nano)(SSD1306)
こんにちは!
今回は色を識別し、それをモニターに表示させる装置を作ってみたいと思います‼
これができると、例えば色によって道を選ぶ装置などが作れ、すごいロボットっぽい物が作れるようになります^^
今回もはんだ付け無し、ブレッドボードのみで作れますので是非‼
①「使う部品」
今回の部品もすべて電子工作ステーションさんので揃えられます。
もちろんすでにお持ちの部品があれば、それを使って節約しましょう!
・RGBジェスチャーセンサーモジュール(GY-9960)
電子工作ステーション 480円(500円以上で送料無料)
※はんだ付けされていない状態です。はんだ付けが必要な方ははんだ付けサービスも同時にご購入をお勧めします。
今回はセンサー面を裏付けします。
・Arduino Nano互換ボード
(今回はブレッドボード1枚で収めたいので、Nanoを使います‼)
電子工作ステーション 1180円(送料無料)
※はんだ付けされていない状態です。はんだ付けが必要な方ははんだ付けサービスも同時にご購入をお勧めします。
・0.96インチOLEDディスプレイモジュール (SSD1306) (ホワイトorブルー)
電子工作ステーション 480円
※今回はホワイトを使用していますが、お好みな方を選んでいただければと思います。
・ブレッドボード 6穴モデル
電子工作ステーション 490円
・ブレッドボード・ジャンパーワイヤー
電子工作ステーション 490円
・LED(白)(1個)
電子工作ステーション 8円
・抵抗(100Ωぐらい)
電子工作ステーション 3円
・Type-Cケーブル(持っていなければ)
電子工作ステーション 330円
合計3461円(2023年5月時点の価格)
(はんだ付けサービスをご利用の方は+500円となります。)
②「回路」
・今回はI2C通信を主にデータの入出力をしていきます。
※I2C通信について詳しく知りたい方は、お手数ですがググってみてください。
・Arduino NanoにはI2C通信に対応しているPinがA4(SDA)とA5(SCL)のみとなっています。
RGBジェスチャーセンサー(GY-9960)とOLEDディスプレイ(SSD1306)はどちらもI2C通信を必要とするため、一つしか接続できないのでは?
と、疑問に思うかもしれません。
しかし、これらのI2C通信をする物はアドレスがあり、そのアドレスが被らない限り、同じPinに接続できるのです‼
なので今回はアドレスが被らない同士なので、同じPinに接続が可能となります‼
ちなみに、RGBジェスチャーセンサー(GY-9960)ではSCL、OLEDディスプレイ(SSD1306)ではSCKと一部呼び方が変わっていますが、
同じSerial Clockを略した呼び方ですので、同じクロック用の信号線の意味と捉えて大丈夫です。SDAはSerial Dataの略で、データ用の信号線です。
GY-9960 | Arduino |
VL (IR LEDへのオプションの電源) | |
GND | GND |
VCC | 3.3V |
SDA | A4 |
SCL | A5 |
INT | 2 |
OLEDディスプレイ | Arduino Nano |
GND | GND |
VDD | 3.3V |
SCK | A5 |
SDA | A4 |
LED(白色) | Arduino Nano |
アノード( + ) | 3.3V |
カソード( – ) | GND |
※GND側に抵抗100Ωを通してます。
6穴ブレッドボードにブレッドボード・ジャンパーワイヤー、各部品を下記のように配置します。
※長めのオレンジ色のジャンパーワイヤーだけ長さが合わず、ペンチで切って長さ調整しました。
↑こんな感じになれば完成です‼
(Arduino Nano互換ボードに付いている黒い物体は、ランプが眩しいので絶縁テープで隠しています。)
③「開発環境」
★まず、Arudino IDEをダウンロードします!(※すでにダウンロード済みの方はスキップしてください。)
Arudino IDEダウンロードリンク→こちら
★次に、OLEDディスプレイモジュール (SSD1306)を簡単に使えるようにするライブラリーを2つ入れます。
Arduino IDEを開き、「ツール」→「ライブラリーを管理…」を押します。
そうするとライブラリーマネージャーが開くので、「Adafruit GFX Library」と検索すると、
「Adafruit GFX Library」というのが出てくるのでそれをインストールします。
同じ手順で「Adafruit SSD 1306」も追加します。
★最後に、RGBジェスチャーセンサー(GY-9960)を使えるようにする、APD9960ライブラリーを入れます。
Arduino IDEを開き、「ツール」→「ライブラリーを管理…」を押します。
そうするとライブラリーマネージャーが開くので、「9960」と検索すると、
「Arduino_APDS9960」というのが出てくるのでそれをインストールします。
これでライブラリーの導入は完了です‼
④「いよいよプログラミング」
APD9960ライブラリーに入っているサンプルプログラムに、OLEDディスプレイモジュール (SSD1306)のプログラムを付け加えただけです‼]
※Arduino IDEでArduino Nano互換ボードをご使用する場合は、プロセッサを「ATmega328P」→「ATmega328P(Old Bootloader)」に変えてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
/* * RGBセンサーモジュール用ライブラリーをインクルード */ #include "Adafruit_APDS9960.h" Adafruit_APDS9960 apds; /* * OLEDディスプレイモジュール用ライブラリーをインクルード */ #include<Wire.h> #include<Adafruit_GFX.h> #include<Adafruit_SSD1306.h> //ディスプレイ変数の宣言 Adafruit_SSD1306 display(0); void setup() { Serial.begin(115200); if(!apds.begin()){ Serial.println("failed to initialize device! Please check your wiring."); } else Serial.println("Device initialized!"); //enable color sensign mode apds.enableColor(true); //ディスプレイの初期化 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); } void loop() { //create some variables to store the color data in uint16_t r, g, b, c; //wait for color data to be ready while(!apds.colorDataReady()){ delay(5); } //get the data and print the different channels apds.getColorData(&r, &g, &b, &c); //一応シリアルモニターでもみれるように。 Serial.print("red: "); Serial.print(r); Serial.print(" green: "); Serial.print(g); Serial.print(" blue: "); Serial.print(b); Serial.print(" clear: "); Serial.println(c); Serial.println(); display.clearDisplay(); //ディスプレイをクリア //赤表示 display.setTextSize(1); //文字サイズを設定 display.setTextColor(WHITE); //文字色を設定 display.setCursor(0, 0); //文字の開始位置を設定 display.print("R:"); display.print(r); //変数nをディスプレイ出力するよう設定 //緑表示 display.setTextSize(1); //文字サイズを設定 display.setTextColor(WHITE); //文字色を設定 display.setCursor(0, 10); //文字の開始位置を設定 display.print("G:"); display.print(g); //変数nをディスプレイ出力するよう設定 // //赤表示 display.setTextSize(1); //文字サイズを設定 display.setTextColor(WHITE); //文字色を設定 display.setCursor(0, 20); //文字の開始位置を設定 display.print("B:"); display.print(b); //変数nをディスプレイ出力するよう設定 display.display(); //上記条件でディスプレイ表示 delay(1000); //1秒間待つ } |
⑤「結果」
RGBシートを使い実際に試した結果↓
結構いい感じに取得することができました‼
このセンサーを応用すれば、ロボット作りやライントレース等、いろんな物に使えそうですね!
以上、ご閲覧ありがとうございました^^