はじめに
Arduinoをはじめたはいいけど、なにをどうやればいいのかわからない、ということになります。
電子工作は基本的に「こういうのが欲しい」となってからが本番ですが、そのタイミングで出来ることと出来ないことを知っておくのは大切です。
プログラミングでは、まず初めの第一歩としてそのプログラミング言語で「Hello World」を表示させる、というならわし?があります。
ArduinoにおいてはこのHello Worldにあたる初めの第一歩は「Lチカ」と呼ばれるもので、多くの参考書やサイトで見ることができます。
と、言うわけで今回はこの「Lチカ」に挑戦しましょう。
Lチカとは
Lチカとは「LED点滅」のことで、Arduinoに繋げたLEDをチカチカと点滅させるという、ただそれだけのことです。ただそれだけとは言うものの基本的なことがしっかりと学べるので疎かにしてはいけませんね。
実はLチカのコードはArduino IDEに初期設定としてスケッチ例にあるので、スケッチ例から呼び出すだけで動かすことができます。
//コメントアウトは記載せず
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
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
}
Blinkのスケッチ例を呼び出すとはじめのコメントアウトにいろいろとかいてありますが、その中に、「https://www.arduino.cc/en/Tutorial/Blink」でチュートリアルが読めるよというものがあるので、そこを読めば基本的には終わりますね。
Lチカを実践
用意するもの
Arduino本体 (今回はArduino Uno互換機)
Akizuki : http://akizukidenshi.com/catalog/g/gM-07385/
LED(今回は青色LED)
Akizuki : http://akizukidenshi.com/catalog/g/gI-01321/
抵抗(220Ω)
Akizuki : http://akizukidenshi.com/catalog/g/gR-25221/
ブレッドボードとケーブル
Akizuki : http://akizukidenshi.com/catalog/g/gP-00315/
Akizuki : http://akizukidenshi.com/catalog/g/gC-05371/
Arduinoボード
Arduinoボードの13番ピンとGNDにLEDを差し込みます。
LEDには電流の流れる方向が決まっていて、足の長い方から足の短いほうへと流れます。長い方をAnode(アノード)、短い方をCathode(カソード)と呼びます。
今回は13番ピンに5Vの電圧を印加し、GND(0V)と電位差を生じさせてLEDに電流を流してLEDを光らせるというわけです。
ここで、LEDをArduinoに直接さしただけでも次のコードを入れれば基本的には動きます。
しかし、LEDを使う場合には基本的に抵抗も挟む必要があるので、LEDと抵抗どちらもArduinoに繋ぎたいです。
そういう場合にはブレッドボードと呼ばれる開発用のボードを使用します。LEDと抵抗を上のように繋いでやると13番ピンからGNDピンまでを抵抗とLEDが両方繋がるようになります。
このようにブレッドボードを使えば半田付けなどをしなくてもある程度の開発が行えるので、ブレッドボードとワイヤーケーブルは幾分かもっていると便利です。
ブレッドボード上で行う開発のことを「プロトタイピング」と呼んだりします。
Arduino IDE
はじめに
ArduinoのコードはC言語とC++言語をベースにした独自の言語です。独自と言ってもほとんどC言語やC++言語と同様に扱えるので気になる方はこういった言語にも興味を持って見てもいいかもしれません。
Arduinoで使われる命令は公式のリファレンスガイド ( https://www.arduino.cc/reference/en/ )や、有志で作られた?日本語のリファレンスガイド ( http://www.musashinodenpa.com/arduino/ref/ )などを利用することで理解度が上がるかと思います。
Arduinoの基本は3つで、「変数と定数の宣言」「setup()関数」「loop()関数」からなります。
変数とはプログラム内で変更できる数値や文字など、定数は変更できないもの、といえばわかりやすいかと思います。「例えばスイッチが押されているかどうか」みたいなものを決めたりするのに変数が使われたりします。
setup()
とloop()
はArduinoにおいて、メインとなる関数で、setup()
はArduinoに電源を通して起動した際に初めに一度だけ呼ばれる関数、loop()
はsetup()
が処理しきった後に繰り返し呼ばれる関数です。つまりsetup()
内にArduinoの初期設定に関することをさせ、loop()
内で実際の実行する処理(今回はLチカ処理)をさせるのが一般的です。
実際にコーディングしていきましょう。
コードの全体
//Blink
int const LED = 13;
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(LED, LOW);
delay(1000);
}
変数の宣言
int const LED = 13;
まずはじめに変数の宣言です。これは「LED
」という変数(今回は定数)に「13
」を当てはめる。というものです。
int
はデータの型の宣言。以下の変数に入るのは整数値です、という宣言。(他のデータ型が気になる人はリファレンスガイド参照)
const
は変数の定数化。今後この変数は値を変えることはありませんよ、という宣言
LED = 13
は「LED
」という箱に「13
」という初期値を格納するということ。通常変数や定数を宣言するときには、変数の場合は小文字、定数の場合は大文字で表すのが習わしです。ので、今回はLED
と大文字で表記しました。
コーディングは命令の最後に「;
」をつけます。これがないと改行しても改行とはみなされず、次の行にも命令が続いていると認識されています。一つの命令が書き終わったら必ず、「;
」をつけるようにします。
ので、全体としてみると、「LEDという定数を宣言し13という整数を格納する」という命令になりますね。
setup()
void setup() {
pinMode(LED, OUTPUT);
}
先述の通り、Arduinoのコードはsetup()
とloop()
からなります。setup()
関数には通常、一度だけ処理されれば良い命令を書きます。
void
はデータ型。特に関数と呼ばれるものに使われます。関数のデータ型は複数ありますが、setup()
やloop()
に関しては通常void
が使われます。void
は戻り値を取らない関数です。戻り値に関しては今回は触れません。
関数には引数と呼ばれるものがあり通常引数は()
内に書きます。今回は引数を取らない関数なので、()
内には何も書きませんが、()
は必ず必要です。引数に関しても今回は触れません。
関数処理は{}
で囲まれた範囲に有効です。今回はpinMode()
という命令だけをsetup()
内で処理するということです。
pinMode(LED, OUTPUT);
pinMode()
関数はArduinoボード上にあるI/Oピンを入力用にするのか出力用にするのかを設定するArduino独自の関数です。
第一引数にはArduinoのPin番号。今回はLED
と書いてますが、LED
は13
を格納しているので、今回はPin番号13に対して処理します。
第二引数にはこのピン番号をどのように処理するかを書きます。設定できるものはOUTPUT
、INPUT
、INPUT_PULLUP
の3種類です。OUTPUT
はLEDなどを繋げるようなArduino側から操作するためのものです。INPUT
やINPUT_PULLUP
は逆にスイッチやフェーダーなどのようなものからArduinoを操作するためのものです。プルアップに関しては今回は触れません。
ので、今回は「Pin番号「LED(13)」を出力用ピンとして設定する」
という命令になりますね。
pinMode()
は明示的に宣言しない場合、INPUT
として扱われます。
loop()
void loop() {
digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(LED, LOW);
delay(1000);
}
loop()
関数も同様にvoid
型で宣言します。
Arduinoはloop()
関数の処理が終わるとloop()
関数のはじめに戻ります。
ので、今回は4行の命令をひたすらに繰り返す、ということになりますね。
digitalWrite(LED, HIGH);
digitalWrite(LED, LOW);
digitalWrite()
はArduinoのI/Oピンに電圧を印加するための命令です。HIGH
は5Vの印加、LOW
は0Vの印加(?)になるので、HIGH
にするとLED
(13番ピン)に電圧がかかりLEDが光るようになり、LOW
にすると電圧がかからなくなりLEDが光らなくなるわけですね。
delay();
delay()
関数は与えられた数字分の時間(単位はms)だけArduinoの処理を止めます。
ので、今回はdigitalWrite()
ののちに1秒間(1000ms)だけ処理を止める、ということになりますね。
このdelay()
関数の値をいろいろと変えてみることで、LEDの点滅速度がいろいろと変わるので試して見てください。
ここでdelay()
関数は手軽で便利なのですが、delay()
の処理中はArduinoのほとんどの処理が止まってしまう(入力も受け付けなくなる)ので、高度なプログラムになるほどdelay()
は使われなくなることを覚えておいてください。
以上でLEDの点滅が起きているというわけです。
まとめ
ArduinoでHello World
とても簡単でしたね。