IoTやMakerムーブメントで興味を持って電子工作を始めてはみたけど、Lチカから先に進まなかったという人は多いのではないでしょうか。「キットを買ったきり」である筆者含め、次のステップに進むための、秋の夜長にオススメしたい電子工作超入門記事をお届けします。
Arduinoを引っ張り出して
もう一度チャレンジしてみませんか?
電子工作の難しさは、見た目で分かりにくいことが挙げられます。よくわからない黒いゲジゲジを言われるがままに組み合わせると、よくわからないけど動作する……。もちろん詳しい人には当たり前のことなのでしょうけど、知らない人にとってみれば魔法みたいなもので、説明を聞いたところでチンプンカンプン。そもそも、説明に使われている単語すら分からないことも少なくありません。
しかし、この状況はワンチップマイコンが流行したあたりから大きく変わり、複雑な電子回路を作らなくても、多くの動作が実現できるようになりました。とくにArduinoはマイコンと開発環境がセットになっていて、ハードもソフトもすぐに使い始められるのが強みです。
すでにArduinoを購入し、基板上のLEDを光らせたことがある(Lチカ)という人も多いかと思います。自分でLEDを制御できるのは想像以上に楽しいものですが、このLEDを光らせるという最初のステップから、次のステップにどう行けばいいのかわからず、「LEDが光ったからってナニ?」と考えてしまい、結局、Arduinoを触らなくなってしまう……ということも少なくありません。
筆者も知人が開催してくれた体験教室でArduinoを触り始めたものの、家に持ち帰ってからは箱の中へ……。いつか使おう、いつか使おうと思いながら、随分と時間が経ってしまいました。
この記事は、そんな「始めてはみたけど、Lチカから先に進めなかった組」(筆者含む)でもできるArduino再入門です!
再入門を始める前に
用意したいアイテムを確認
再入門だと意気込んだところで、まったく何もないところからは始められません。ということで、まずは必要なアイテムなどを確認してみましょう。この記事ではLチカから始め、3分タイマーの作成まで行いますので、以下のパーツを使っています。
また、ソフトの開発環境としてArduino IDEをインストールしておきましょう。Arduino.orgから最新バージョンをダウンロードできます。
http://www.arduino.org/downloads
基板上のLEDで「Lチカ」の復習から始めよう!
まずはLチカからおさらいしてみましょう。といっても、スケッチ例として登録されている「Blink」を書き込むだけですので、何も難しいことはありません。これは、「ファイル」-「スケッチの例」-「01.Basics」-「Blink」で呼び出せます。
さて、さっそく内容を見てみます。
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
メイン部分を抜き出すと、このようになっています。起動後1度だけ実行される「setup()」と、繰り返し実行される「loop()」の大きく2つの部分からなり、setup()ではピンの入出力モード設定、loop()ではLEDのオン/オフ動作が書かれています。さらに内容を細かく見てみましょう。
> pinMode(13, OUTPUT);
「pinMode()」は、ピンを入出力どのようなモードで使うのかを設定するものです。この例では、「13番ピンを出力モードとして設定する」という設定になります。このスケッチはLEDを点滅させるものなので出力として使い、「OUTPUT」となるわけです。これをスイッチなどの入力として使うのであれば、「INPUT」などと変わってきます。
続いてloop()を見てみましょう。
> digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
「digitalWrite()」は、指定したピンに対し出力を設定するものです。この例では、13番ピンの状態が「HIGH」(5V)になり、接続されているLEDに電流が流れ、点灯するわけです。
> delay(1000); // wait for a second
「delay()」は待ち時間をミリ秒単位で指定するものです。この例では1000と設定されているので、この1行で1秒間待つことになります。なぜわざわざ待ち時間を入れているかといえば、次の行を見ればわかります。
> digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
ここで13番ピンを「LOW」に設定して、LEDを消灯しています。つまり前の行の待ち時間がなければ、点灯した直後に消灯することになり、肉眼ではわからないほど短時間しか光らないことになります。LEDの点滅がしっかりとわかるための待ち時間だったわけですね。
> delay(1000); // wait for a second
最後の待ち時間も、同じ理由です。Arduinoではloop()で書かれた内容が繰り返されるので、この次に実行されるのは「digitalWrite(13, HIGH)」。この待ち時間がなければ、消灯した直後に点灯することになってしまいます。
実際にBlinkを書き込んでみた例を見てみましょう。基板上のLEDが点滅しているのが分かると思います。
いわゆる「Lチカ」(基板上の)ができましたが、せっかくなので次は自分で用意したLEDを光らせてみましょう。