Arduinoで1個のLEDを点滅出来たので次は複数のLEDでやってみよう。 個数が増えると回路の組み方にも工夫が必要だね
Contents
この記事は以前に購入したOSOYOO製のArduino学習キットのレッスン内容について解説した記事です。
OSOYOOの学習キットは複数のグレードがあり、僕が購入したのは「LACC2006AD」という型番のもので低価格帯のグレードのものになります。
OSOYOOはキットの内容を時々変更しているようで、僕が購入したものは品切れになっています。上記のリンクは僕が購入したキットに構成が近い製品です(やや豪華版)
他のレッスンの内容を知りたい場合は、下記のリンク先にまとめていますので、そちらを参照してください。
Arduino互換のスターターキットを買ってみた
Arduinoを触ってみたいけど、何を買ったらいいのか、なにから始めればいいのかわかならない!調べて見れると便利でお得な学習…
用意するもの
- Arduino UNO R3互換ボード
- LED
- 抵抗200オーム
- ブレッドボード
- ジャンパ線
- パソコン
- USBケーブル
上記はキット付属品を使う場合。LEDにあった抵抗を用意しよう
回路図と結線
8LED点滅の回路図
レッスン7の回路を9番ピンまで複製するだけなのでやることとしては簡単
ブレッドボードで回路を作る
では回路図の通りにブレッドボードに部品を配置していこう。
と、なるわけだが実際やってみると中々難しいはず
うー。周りの部品が邪魔で取り付けにくいよ・・・
しかもブレッドボードの穴が小さくてよく見えないし・・・
部品点数が多い場合は少しばかりコツが必要になるね
ちたまんまず1個のLEDの回路だけ作る
まずは図のようにLED1個分の回路を作る。1個だけの場合は回路として成り立っていればブレッドボードにどのように配置してもよかったが、今回は8個取り付けないといけない。そこで1個分の回路は横に広がらないようにしたい。上図では2列に収めている。
黄色線が内部配線でつながっている部分。図のようにeとfで分断されているところを抵抗でつなげると作りやすい。LEDの足を曲げてもよければ1列に収めることも可能だけど、LEDの足は極性がわかりにくくなるので曲げないほうがいい。
この段階で回路として成り立っているか入念にチェックし問題が無ければこれを量産すればよいわけだが・・・
同じ役目の部品をまとめて挿し込む
上図では先にGNDのジャンパをすべて取り付けた。このように同じ部品を等間隔で一気に挿したほうが差し間違えが少なくおすすめ。また奥から作れば作業もしやすい。
次にLEDをすべて取り付ける。LEDは極性があるのでやはりまとめて付ければミスが防げる
同様に抵抗、ジャンパと付けたら完成。
抵抗は極性が無いので向きは気にしなくていいが、揃えるようにすると抵抗値の違うものが混ざった時に気づきやすい。
このように1個目の各部品に対して等間隔に付けることと極性を意識するだけで自然と回路が出来上がる。
スケッチを書く
おさらいでまずは1個の場合のスケッチを見てみよう。
void setup() {
pinMode(2, OUTPUT);
}
とりあえずsetup()だけ。2番ピンをアウトプットにする。ってコードだね。
ちたまん今回は3~9番ピンも同じようにしたいから
ツン子void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
}
こういうことだね!
なんだか同じようなことを何度も書くの面倒だね。
そのとおりだね。そういえばピン番号の部分を変数にしてもいいって話あったね。
変数で置くと・・・
void setup() {
int i = 2;
pinMode(i, OUTPUT);
i = 3;
pinMode(i, OUTPUT);
i = 4;
pinMode(i, OUTPUT);
i = 5;
pinMode(i, OUTPUT);
i = 6;
pinMode(i, OUTPUT);
i = 7;
pinMode(i, OUTPUT);
i = 8;
pinMode(i, OUTPUT);
i = 9;
pinMode(i, OUTPUT);
}
こんな風になるね。変数に2から順番に数値を代入していけば「pinMode」の部分は完全に同一にできるね。
ちたまん上記のコードを言葉で説明するなら
iを2から9まで1ずつ加算させながら「pinMode(i, OUTPUT)」を実行する
と言える。
For文を使った反復処理
今回のように変数の中身を加算しながら同一のコードを繰り返し実行したい場合はFor文を使おう
例えば今回は変数iを2から9まで1ずつ増やしながら「pinMode(i, OUTPUT);」を実行したいので・・・
void setup() {
for(int i=2;i<=9;i++){
pinMode(i, OUTPUT);
}
}
これがFor文だ!
めっちゃスッキリした!?
でもよくわかんないかも・・・
カッコの中に色々書いてあるね。
下記のような意味合いになるよ
for(初期値;条件式;変動式){
繰り返すコード
}
先ほどの「iを2から9まで1ずつ加算させ」の部分が()の中に書かれている。
for(iを2から ; iが9になるまで ; iを1加算)
日本語を当てはめるならこういう感じ
今回はiを2からスタートしたいので初期値は「int i=2」となる。事前に宣言の済んでいるなら「i=2」だけでもOK
条件式の部分は繰り返しの条件を書く。今回は「iが9になるまで」。これをプログラミングっぽく言い換えると「iが9以下ならば」になる。これを式にすると「i<=9」。
最後の「i++」は見慣れない書き方。この部分は「iを1加算」なので、これを式にするなら普通は「i = i + 1」だ。
もちろんこのように書いても良いのだけど、「i=i+1」と書くのが面倒だから「i++」という省略表記が用意されていて、これを利用するのが一般化している。
- i=i+1;
- i++;
- i+=1;
これらは全部「iを+1する」という意味。
ちなみに2ずつ加算したいなら「i+=2」。1ずつ減算したいなら「i–」という風に書ける。また加算減算だけでなく乗算なども可能。
なんとなくわかったけど難しいね
ツン子For文は挫折する人も多い。結局は慣れだからね。繰り返しやるしかない
ちたまん私をFor文で回して欲しい・・・
ツン子ではloop()のほうもFor文にしてみよう
void loop() {
for(int x=2;x<=9;x+=1){
digitalWrite(x, HIGH);
delay(1000);
digitalWrite(x, LOW);
delay(1000);
}
}
「1つのLEDを点灯→消灯」を1セットとして繰り返すからこんな感じだね。変数は「x」にしているけどこれは「i」でも問題ないよ。模範解答がxになっていたからそろえただけ。
さてこれでコンパイルして実行してみよう
順番にLEDが点灯→消灯となればOK!完成だよ。
Arduinoを始めるなら学習キットがおすすめ
学習キットならArduino互換ボード本体に加えてLEDやモーターが付いてくるのですぐに実験&学習がスタートできる。
僕が買ったのはOSOYOO製のセットで比較的シンプルなセット。※セット内容は常に変動するため購入当時と同じものは見つからなかった。リンク先は僕が購入したものになるべく近いものを選んでみた。
OSOYOO学習キットのまとめ記事
Arduino互換のスターターキットを買ってみた
Arduinoを触ってみたいけど、何を買ったらいいのか、なにから始めればいいのかわかならない!調べて見れると便利でお得な学習…
まとめ記事ではこの学習キットを選んだ理由や各レッスンの概要とレッスン毎の詳細記事へのリンクをまとめているので、Arduinoを始めたいという人の参考になればと思う