子供と一緒に始める マイコンプログラム Arduino 入門 RGBダイオード制御編 Lesson 04

arduino Arduino入門編
スポンサーリンク
「子供と一緒に始める マイコンプログラム Arduino 入門 RGBダイオード制御編 Lesson 04」

「Arduino」を使ったマイコンのプログラミングを子供と一緒に学習するブログ。

少しずつ、子供と一緒に楽しみながら気長にアップしてく予定です。

本日はLesson 04 RGBダイオード制御編です。

 

スポンサーリンク

はじめに

Lesson 04では、RGBダイオード(以下RGB LED)を利用して色の変化を楽しみます。

RGB LEDは赤、緑、青のLEDが一つになったLEDです。

この3色の輝度を変更することにより、色の変化を確認することができます。

このLessonを実践することで、テレビの原理も子供に理解してもらうことが可能かと思います。

ぜひ子供と一緒に、実験感覚でやってみることをお勧めします。

 

Lesson 04目標

RED LEDを使い、RED LEDの各輝度を変更する作業を通して、RED LEDの色が3色以外の色になっていることを確認します。

また、輝度の変更はパルス幅変調(PWM)にて制御します。

難しい言葉がでてきましたが、簡単に説明すると、「LEDがONしている時間を制御する」ということです。

この、PWMについても理解することが目標となります。

また、楽しんで遊ぶことも目標の1つです。

 

準備

さっそく、準備にとりかかりましょう。

 

必要なもの

 

使用部品説明

使用部品の説明をしていきます。

 

ブレッドボード

ブレッドボードを使用することで、半田を使用することなく穴に素子を挿すことで接続ができます。

ブレッドボードの詳細はLesson 03を参照してください。

 

RGB LED

赤、緑、青の3色のLEDが一つになったLEDです。

下図に示すように4本のリード線があります。

3本のリード線が、それぞれ青、緑、赤となりANODE(+極)となります。

残りの一本がCATHODE(陰極)になります。

 

RGB-LED

 

Lesson 03でも説明しましたが、LEDは大電流を流すと、焼き切れてしまいます。直接電源に接続することはしないようにしましょう。必ず、抵抗などで電流を制限して使いましょう。

 

手持ちがないかたは以下からどうぞ。

 

抵抗

名前の通り、抵抗は電流の流れを妨げる働きがあります。

本Lessonでは220Ωの抵抗を使います。

抵抗の詳細な説明に関しては、Lesson 03を参照してください。

カラーコードの説明があります。

 

抵抗のセット

 

Jumper wire(配線)

UNOの電源ポートとブレッドボードの接続や素子どうしを接続に使います。

 

Jumper wireセット

できれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。

 

PWM制御の説明

PWMのパルスは下に示すような、周期的なパルスのことです。

本Lessonではこのパルスの5Vになっている期間、0Vになっている期間を制御します。

 

PWM

 

PWM制御

PWM信号の周波数は約490Hzです。

時間に直す場合は、逆数を取れば良く「時間=1/周波数」の関係があります。

よって、1/490=0.00204・・・

約0.002秒(1/500秒)

となります。

下に示すように、1/500秒ごとに同じパルスを繰り返します。

その時に5Vになっている期間、0Vになっている期間を制御することでLEDの点滅のスピードが変わります。

この変化が人間の目には明るさが変わっているように見えることになります。

「analogWrite」関数には0~255の値を設定することができ、この値によって1/500秒の間の5Vの期間、0Vの期間を制御できるようになっています。

 

PWM

 

使用する関数とピン番号

UNOは「analogWrite」関数を使用することによって、指定したピンからアナログ値(PWM波)を出力します。

LEDの明るさを変えたいときや、モータの回転スピードを調整したいときに使えます。

UNOのボードでは、デジタルピン「3、5、6、9、10、11」でこの機能が使えます。

 

実践

さっそく、接続して実践していきましょう。

 

接続

図に示すように、ブレッドボードを使用してUNO、RGB LED、抵抗を配線で接続しましょう。

使用するポートは、「3、5、6、9、10、11」です。

今回は、「3(青)、5(緑)、6(赤)」としたいと思います。

穴に挿入しづらいときは、ラジオペンチなどを使用すると良いかもしれません。

 

arduino

 

コードの書き込み

接続が終わったら、USBケーブルを使用してUNOにコードを書き込んで行きましょう。

メーカーHPの製品Super Starter Kitから、チュートリアル入手していれば、その中にコードが梱包されています。

本Lessonでは、チュートリアルのコードを利用していきたいと思います。

チュートリアルの入手方法については「Arduino 入門編」を参照ください。

 

IDE統合環境の「ファイル」⇒「開く」で梱包されているコードを開きます。

ファイル名は「RGB_LED.ino」

開いたら、編集しても良いように「ファイル」⇒「名前を付けて保存」で保存しておきましょう。

今回は「04_RGB_LED」と名前をつけて保存しました。

 

ここで「マイコンボードに書き込み」をクリックすれば下記で説明するコードが書き込まれます。

色々な色に変化するのがわかると思います。

 

コマンドの説明

これまでのLessonにでてきていないコマンドについて説明します。

コマンド説明
#define 定数名 値プログラム中の定数に対して名前を付けることができます。
例:#define BLUE 3
の場合、BLUEと記述されているところが全て3という値に置き換えられます。
int-32768から32767の値の範囲を取る整数型を意味します。
例:int redValue;
redValue上記値の範囲での整数型と定義するということです。
for (初期化; 条件式; 加算) {
//実行される文;
}
{ }で囲まれたブロックを繰り返し実行します。
analogWrite(pin, value)指定したピンからアナログ値(PWM波)を出力します。Unoのボードでは、デジタルピン3、5、6、9、10、11でこの機能が使えます。

 

サンプルコード

チュートリアルのコードには、詳細説明がありません。

各コードの脇に、日本語の説明をつけました。

参考にしていみてください。

// Define Pins
#define BLUE 3 //BLUEという変数を3にする
#define GREEN 5 //GREENという変数を5にする
#define RED 6 //REDという変数を6にする

void setup()
{
 pinMode(RED, OUTPUT); //RED(3番ピン)をOUTPUTと認識
 pinMode(GREEN, OUTPUT); //GREEN(5番ピン)をOUTPUTと認識
 pinMode(BLUE, OUTPUT); //BLUE(6番ピン)をOUTPUTと認識
 digitalWrite(RED, HIGH); //REDをONしなさい
 digitalWrite(GREEN, LOW); //GREENをOFFしなさい
 digitalWrite(BLUE, LOW); //BLUEをOFFしなさい
}

// define variables
int redValue; //整数型で定義
int greenValue; //整数型で定義
int blueValue; //整数型で定義

// main loop
void loop()
{
 #define delayTime 10 // fading time between colors 変数に10を設定
 redValue = 255; // choose a value between 1 and 255 to change the color. 変数に255を設定
 greenValue = 0; //変数に0を設定
 blueValue = 0; //変数に0を設定


 for(int i = 0; i < 255; i += 1) // fades out red bring green full when i=255
 {
  redValue -= 1; //変数を-1
  greenValue += 1; //変数を+1
  analogWrite(RED, redValue); //REDをredValueに設定
  analogWrite(GREEN, greenValue); //GREENをgreenValueに設定
  delay(delayTime); //delayTime=10なので0.01秒待つ
 }

//以下基本は同じ。輝度を変えるLEDが異なるだけ。
  redValue = 0;
  greenValue = 255;
  blueValue = 0;

 for(int i = 0; i < 255; i += 1) // fades out green bring blue full when i=255
 {
  greenValue -= 1;
  blueValue += 1;
  analogWrite(GREEN, greenValue);
  analogWrite(BLUE, blueValue);
  delay(delayTime);
 }

//以下基本は同じ。輝度を変えるLEDが異なるだけ。
  redValue = 0;
  greenValue = 0;
  blueValue = 255;

 for(int i = 0; i < 255; i += 1) // fades out blue bring red full when i=255
 {
  blueValue -= 1;
  redValue += 1;
  analogWrite(BLUE, blueValue);
  analogWrite(RED, redValue);
  delay(delayTime);
 }
}

 

コードの内容を説明すると

初期設定した後に下記を実行
①    赤(255⇒0)、緑(0⇒255)をループ内で実行
②    緑(255⇒0)、青(0⇒255)をループ内で実行
③    青(255⇒0)、赤(0⇒255)をループ内で実行
の順番に輝度を変更して色の変化がわかるコードになっています。
※0はOFF、255は輝度最大となります。

いかがでしょうか。赤、緑、青の輝度の変化によって、色々な色に見えるのがわかったでしょうか?

 

redValue、greenValue、blueValueの数値を変えて色々と試してみると良いと思います。

数値を変更する場合は、255または0に変えてみてください。

例えば、最後のfor文の手前の設定を下記のように変えてみてください。

redValue = 0;

greenValue = 255;

blueValue = 255;

また、違った色の変化が見られると思います。

 

実際に光らせた状態がこちら

arduino

arduino

arduino

 

赤、緑、青によって色々な色が再現できるのはテレビと同じです。

 

もし、小型の除ける顕微鏡などありましたらテレビ画面をのぞいてみてください。

液晶画面が赤、緑、青のかたまりが一つあり、画面上にそのかたまりがたくさん並んでいるのが見えるはずです。

こんな感じに見えるはずです。

RGB

 

もし手元になければ、ぜひ一台あった方が良いと思います。

子供も色々と遊べます。

 

お勧めの携帯型顕微鏡を記載しておきます。

Kenko 顕微鏡 Do・Nature 60-120倍 LEDライト内蔵 コンパクト携帯型 STV-120M

特徴
外へ手軽に持っていける携帯型顕微鏡

・ズーム機能で対象物に合わせて観察できる
・LEDライト内蔵で見やすい
・電源の心配なく外で使用可能
・倍率:60-120倍
・電源:単4形アルカリ乾電池1本(別売)
・重量:約30g(電池含まず)

値段もお手頃で、使いやすいです。

 

まとめ

今回は以下の内容について理解してもらいました。

赤、緑、青の輝度の違いにより、RGB LEDの色が3色以外の色になっていることを確認しました。

輝度の変更はパルス幅変調「PWM」にて制御することを確認しました。

今回は、この「PWM」というのを理解することがポイントです。

また、楽しんで遊ぶことも目標の1つでした。

 

今回のLessonも子供には、とても楽しいと感じられると思います。

Lesson 04 RGBダイオード制御編はここまで。

ぜひ、みなさんも子供と一緒にやられてみることをお勧めします。

 

次回はLesson 05はプッシュボタンスイッチ編です。

デジタル入力について理解できる内容となっています。

子供と一緒に始める マイコンプログラム Arduino 入門 プッシュボタンスイッチ編 Lesson 05
このLessonでは、機械的にスイッチを使ってLEDをオン、オフさせるわけではありません。スイッチを「押した」「押してない」という行為をデジタル信号としてUNOに認識させるということです。それによって、UNOから電源が供給されLEDのオン、オフが制御されます。

 

本Lessonで使用しているUNOはAmazonにて購入できます。

Amazon ベストセラーNo.1
ELEGOO UNO キット レベルアップ  チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用

 

上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。

コメント

タイトルとURLをコピーしました