0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Arduino Nanoでミニ電光掲示板(8×8マトリクスLED + MAX7219)を作る #4 基本編

Last updated at Posted at 2017-12-27

1 ソフトウェア インストール編
2 電子パーツ購入編
3 (共通)準備編
4 基本編
5 フルカラーLED編
6 ミニ電光掲示板編(1)
7 ミニ電光掲示板編(2)


基本編です。
外付けLED を光らせたり、光センサーで部屋の明るさを測定してみます。

フルカラーLEDや、ミニ電光掲示板を作りたい方はスキップしても構いませんが、この基本編を行うことで、電子工作に対する理解が深まると思います。

まず、前回の(共通)準備編で、PC と Arduino が USBケーブルで繋がっている場合は、USBケーブルを抜いてください。
以降、ブレッドボードにパーツを抜き差しする時は必ずUSBケーブルを抜いてください。
ケーブルを指したまま(電源が入ったまま)ブレッドボードのパーツを抜き差しすると、電子パーツが破損します。

続いて、下記図を参照して配線してみてください。
image.png
D5 : Arduino Nano の D5 ピン
抵抗 : ベージュ色の抵抗(向きは任意)
LED : 長い足を抵抗側、短い足をアース側に
アース : ブレッドボードの「-」

具体例は下記の通りです。
右半分(写真では上半分)に収めてください。左半分(写真では下半分)は次の工程で使用します。
image.png
写真例では、Arduino はブレッドボードの 1行目から 15行目に刺さっています。
つまり 15行目までは Arduino が使っているので、抵抗やLEDを刺す場合は 16行目以降を使ってください。
Arduino の D5 (写真では8行目)から紫色のジャンパーケーブルで、19行目に逃がしています。
19行目から 23行目に 100Ω の抵抗を刺しています。抵抗に向きはありません。
23行目から 24行目に LED を刺していますが、LED には向きがあります。足の長い方を抵抗側に刺して下さい。
LED の足の短い方は 黄色のジャンパーケーブルで 一番外側の青いライン(-)に繋がっています。

配線が出来たら、開発環境で以前のプログラムを消して、下記の新しいプログラムをロードしてみてください。

#define LED_PIN 13
#define LED_PIN_ADD 5

void setup () {
    pinMode (LED_PIN, OUTPUT);          // 13番ピンをデジタル出力に設定
    pinMode (LED_PIN_ADD, OUTPUT);      //  5番ピンをデジタル出力に設定
}
void loop () {
    digitalWrite (LED_PIN, HIGH);       // LEDを点灯する
    delay (1000);                       // 1秒待機する(1000ミリ秒)
    digitalWrite (LED_PIN, LOW);        // LEDを消灯する
    delay (1000);                       // 1秒待機する
    digitalWrite (LED_PIN_ADD, HIGH);   // LEDを点灯する
    delay (1000);                       // 1秒待機する
    digitalWrite (LED_PIN_ADD, LOW);    // LEDを消灯する
    delay (1000);                       // 1秒待機する
}

これで、Arduino 本体の LED と、外付けの LED が交互に点滅するはずです。
上手くいかなかったら、配線を確認したり、USBのポートを変えてトライしてみてください。
柔らかいジャンパー線は無理に抜き差しすると、内部で断線することがあるので、ちゃんと動かない場合は、他のジャンパー線に変えてみてください。


ここまでの配線を残したまま、反対側に光センサーを付けてみます。
image.png
+5V : ブレッドボードの「+」
CDS : 光センサー
A0 : Arduino Nano の A0 ピン
抵抗 : 水色の抵抗
アース : ブレッドボードの「-」

具体例は下記の通りです。
image.png

一番手前の赤いラインから、19行目に繋いでいます。
19行目から 24行目に 10KΩ の抵抗を刺しています。抵抗に向きはありません。
24行目と A0( 4行名)を、緑色のジャンパー線で繋いでいます。
24行目から2 6行目に CDS を刺しています。CDS にも向きはありません。
CDSのもう一方( 26行目)を青いジャンパー線で青いライン(-)に繋いています。

配線が出来たら、開発環境で以前のプログラムを消して、下記の新しいプログラムをロードしてみてください。

int ledPin = 5;                         // LEDをデジタルピン5に接続
int analogPin = 0;
int val = 0;                            // 読み取った値を格納する変数
int low_nm = 150;                       // 低い値
int high_nm = 450;                      // 高い値

void setup(){
  pinMode( ledPin, OUTPUT );            // ピン5を出力に設定
  Serial.begin( 9600 );                 // シリアル通信の初期化
}
void loop(){
  int threshold;
  threshold = ( low_nm + high_nm ) / 2; // 閾値をlowとhighの間に設定
  val = analogRead( analogPin );        // アナログピンを読み取る
  Serial.println( val );                // デバッグ用に送信
  if( val >= threshold ){
    digitalWrite( ledPin, HIGH );       // LEDをオンに
  } else {
    digitalWrite( ledPin, LOW );        // LEDをオフに
  }
  delay ( 1000 );                       // 1秒待機する
}

プログラムのロードが終わったら、ツール → シリアルモニタ を選択してください。
image.png
なにもしないで CDS に光が当たっている時と、CDS に指を当てて光をさえぎった時で、値が大きく変わると思います。
この値は部屋の明るさによりますので、光を当てた時の値と、光を遮った時の値をメモしてください。

int low_nm = 150;                       // 低い値
int high_nm = 450;                      // 高い値

そして、プログラムの 4行目と 5行目の値を、その値で書き換えてください。
書き換えたら、再度プログラムをロードします。
これで、光を当てた時と、遮った時で、LED を付けたり消したりすることができます。

つまり、CDS から入力された情報で、LED に結果を出力しているわけです。
この原理がわかれば、入力側を、スイッチや各種センサーに、出力側をブザーやモーターに変えることで、色々な装置を作ることができます。


光センサーのオマケ。
配線は上記のままで、プログラムを下記のものに差し替えてください。

int ledPin = 5;                         // LEDをデジタルピン13に接続
int analogPin = 0;
int val = 0;                            // 読み取った値を格納する変数
int low_nm = 150;                       // 低い値
int high_nm = 450;                      // 高い値

void setup( ) {
    pinMode( ledPin, OUTPUT );            // ピン13を出力に設定
    Serial.begin( 9600 );                 // シリアル通信の初期化
}
void loop( ) {
  int threshold_1, threshold_2, threshold_3, threshold_4, threshold_5;
  int wait;

  threshold_1 = low_nm - 10;
  threshold_5 = high_nm + 10;
  threshold_3 = ( threshold_1 + threshold_5 ) / 2;
  threshold_2 = ( threshold_1 + threshold_3 ) / 2;
  threshold_4 = ( threshold_3 + threshold_5 ) / 2;
  val = analogRead( analogPin );        // アナログピンを読み取る
  Serial.println( val );                // デバッグ用に送信
  if ( val < threshold_2 ) {            // 閾値2以下
    wait=1000;                          // 遅い点滅
  }
  else if ( val < threshold_3 ) {       // 閾値3以下
    wait=500;                           // やや遅い点滅
  }
  else if ( val < threshold_4 ) {       // 閾値4以下
    wait=200;                           // やや早い点滅
  }
  else {                                // 4より大きい
    wait=100;                           // 早い点滅
  }
  digitalWrite( ledPin, HIGH );         // LEDをオンに
  delay ( wait );
  digitalWrite( ledPin, LOW );          // LEDをオフに
  delay ( wait );
}

4~5 行目を書き換えるのを忘れないようにしてください。今回はこの値がとても重要です。
今度は光を当てないと、LED がゆっくり点滅していると思いますが、指で CDS を隠すと、点滅が早くなります。
ゆっくり指を離してみてください。点滅のスピードが 4段階で変わる筈です。

基本編は以上で終了です。


次へ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?