ArduinoはLEDなどを接続して使うものだけど、何も接続しなくてもオンボードのLEDを操作することが可能

MEMO

この記事は以前に購入したOSOYOO製のArduino学習キットのレッスン内容について解説した記事です。
OSOYOOの学習キットは複数のグレードがあり、僕が購入したのは「LACC2006AD」という型番のもので低価格帯のグレードのものになります。

公式マニュアル LACC2006AD

OSOYOOはキットの内容を時々変更しているようで、僕が購入したものは品切れになっています。上記のリンクは僕が購入したキットに構成が近い製品です(やや豪華版)

他のレッスンの内容を知りたい場合は、下記のリンク先にまとめていますので、そちらを参照してください。

Arduino互換のスターターキットを買ってみた

Arduinoを触ってみたいけど、何を買ったらいいのか、なにから始めればいいのかわかならない!調べて見れると便利でお得な学習…

いきなり回路組むとか不安しかない件

いきなりブレッドボードで回路組むのとか怖い

ツン子

LEDのように極性が決まっている部品もあるし、ジャンパ線の接続を間違えてショートさせたりしたら破損するかもしれない。そう思うといきなりブレッドボードで回路を組むのは抵抗があるね

ちたまん

実際のところArduinoの場合ショートさせても本体が壊れることはあまり無いようだけど、こちとら天下のど素人。怖いものは怖い!

そんなわけでLEDをブレッドボードに挿す前に、Arduinoのボード上にあるチップLEDを光らせてみよう

オンボードLEDの場所

「L」というラベルがあるLEDが今回が対象。図のようにオレンジ色に光る。

用意するもの

  • Arduino UNO R3互換ボード
  • パソコン
  • USBケーブル

ボード本体とパソコンを繋げるだけなので必要なものは少ない。

スケッチ例を読み込ませる

さてそれではスケッチを書いていこう!

と、通常はなるんだけどこのレッスンではArduino IDEに付属のスケッチ例を使うのでスケッチを書く必要はない。

スケッチ例の開き方
/*
  前半のコメント部分は省略
*/

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

すると自動的に上記のようなスケッチが読み込まれる。

このスケッチの前半の「/* ~ */」の部分はコメントと言われプログラムの動作とは関係ない部分なので、上記コードでは省略している。残りの部分がLEDの点滅に必要なコードになる。

とりあえずこのままUSBでボードを接続し実行してみよう。

そうするとオンボードのLEDが点滅するはずだ。

点滅速度を変更する

レッスンではdelayを変更して点滅速度を変更するように指示があるのでやってみよう

delay(1000) → delay(500)

コードには2か所delayがあるので上記のように変更しよう。

変更出来たらコンパイルし、エラーが無ければ実行してみよう。

すると点滅速度が速くなったはず。最初のdelayが点灯時間で次のdelayが消灯時間。数値はミリ秒になっている。

つまりそれぞれ1秒から0.5秒に減らしたので点滅が速くなった。

レッスンとしてはここまででOK

さてコードを眺めていると気になることがたくさんあるはず。初めてArdiunoに触れたなら目新しいことばかりなのだから当然こと。

例えば、「digitalWriteってなんだろう?」とか・・・。

このLEDの点滅のコードではpinMode()digitalWrite()のが重要になる。この2つの関数はArdiunoを使う上で必須といっても過言ではない。

ただこのレッスンではコードの理解はほとんど求められていない。ここまでやれれば合格点。もしこれらの関数について理解を深めたいなら次のレッスンのほうが理解しやすい。

なのでとりあえず動いたなら、細かいことは気にせずに次のレッスンに進んでOK

13番ピンと内蔵LEDの関係

さてここから先はさらにレッスンを進めたけどよく分からなくなった出戻り組のための内容になる。

見出しでピンっと来た人向け。ピンだけに・・・。

定数:LED_BUILTIN

上記記事でも解説しているとおりpinMode()とは各ピンの入出力を指定するためのコードになる

pinMode(3,OUTPUT);

このようにした場合は3番ピンを出力モードにするという意味になる。LEDを光らせたいなら電圧をかけないといけないので出力モードにし、digitalWrite()で実際に電圧をかければ光るという仕組みになる。

さて今回はオンボードのLEDを光らせたい。ブレッドボードにLEDを挿すならつないだピンの番号を入れるわけだが、オンボードだから何もつないでいない。

pinMode()の部分はどのようになっているだろう?

pinMode(LED_BUILTIN, OUTPUT);

このようにピン指定の部分には「LED_BUILTIN」という定数になっている。

「LED_BUILTINってなんだ?」と疑問に思うはず!?

定数とは変数のように値を入れておくものだが、変数とは違い中身を変更することは出来ないもののことだ。

定数もは自分で作ることもできるが、今回の「LED_BUILTIN」はあらかじめ用意されている定数。

つまり最初から値が入っている。ようするに「LED_BUILTIN」にはピン番号があらかじめセットされていて。それがオンボードのLEDを光らせるためのピン番号というわけだ。

LED_BUILTINは何番ピン?

ではLED_BUILTINという定数に格納されている値はいくつだろう?

これはシリアルモニターで確認すればわかるがネタバレすると答えは13になる。

pinMode(13, OUTPUT);

なのでこのように書いてもまったく同じように動作する。

なるほど13番ピンってのが内部LEDのための専用ピンなんだ!

っと、思うがちょっと違う

オンボードLEDの場所

もう一度この画像を見てみよう。LEDのすぐ上を見てみると「13」と書いてある。これが13番ピン

物理的に存在している・・・。

なんで13番ピンから出力するとLEDが光るの?
意味わかんないんだけど・・・

ツン子

各ピンはボード上のマイコン(図左下の黒いやつ)に基盤を介して接続されている。

この基盤の配線に仕掛けがあって・・・

13番ピンは内部で分岐の図

こんな感じで途中で分岐してLEDに接続されている。

実際はこんな単純な回路ではないけどイメージとしてはこんな感じ。そのため13番ピンに出力しようとするとLEDが光る。

知ってしまえばなんてことないね。

ツン子

単純だよね。
ちなみにアウトプットだけじゃなく、13番ピンからインプットしてもLEDは光るよ

ちたまん

少し先のはなしだけど、レッスン11では13番ピンにインプットしてLEDを光らせる。この内部配線を知らないとそこで躓いてしまうよ(経験者談

MEMO

もし13番ピンにLEDを接続した場合はオンボードのLEDと取り付けたLEDの両方が同時に光る。ただその場合は並列接続になるのでそれぞれで電流を分け合うことになる。電流が足りなければ当然LEDは光らない。

Arduinoを始めるなら学習キットがおすすめ

学習キットならArduino互換ボード本体に加えてLEDやモーターが付いてくるのですぐに実験&学習がスタートできる。

僕が買ったのはOSOYOO製のセットで比較的シンプルなセット。※セット内容は常に変動するため購入当時と同じものは見つからなかった。リンク先は僕が購入したものになるべく近いものを選んでみた。

OSOYOO学習キットのまとめ記事

Arduino互換のスターターキットを買ってみた

Arduinoを触ってみたいけど、何を買ったらいいのか、なにから始めればいいのかわかならない!調べて見れると便利でお得な学習…

まとめ記事ではこの学習キットを選んだ理由や各レッスンの概要とレッスン毎の詳細記事へのリンクをまとめているので、Arduinoを始めたいという人の参考になればと思う