組み込みシステムのベテランであれ、高校生の科学者であれ、好奇心旺盛な人であれ、電子機器の探求はどこかで始めなければなりません。マニュアルでは物足りないという方は、このArduinoの初心者向けガイドをご覧ください。

Arduinoって何?

Arduinoは、Arduino社が開発したオープンソースのマイコンボードのブランドです。

Arduinoといえば、普通はボードのことですよね。Arduinoのボードは、耐久性に優れているのが特徴です。Arduinoのボードは耐久性に優れているので、学生でも、誰でも使うことができます。

もうひとつは、オープンソースであることです。すべてのArduinoボードとシールドのデータシートは、オンラインで入手できます。技術的なノウハウがあれば、自分でArduinoのボードを作ることもできます。

この意味は?

初心者の方にとって、これはどういうことかというと

  1. マイコンを勉強するために回路を自作する必要がない。
    1. 誤って壊してしまわないように、安全機能が付いている。
    1. オープンソースのハードウェアコミュニティは、様々な目的のために幅広い種類のボードを作っています。

Arduinoボードの構造

Arduinoのボードには様々な種類があります。電池のように小さなものから、デジカメのように大きなものまでありますが、共通しているのはいくつかの部品です。

  1. 1.マイクロコントローラユニット
  2. ヘッダーピン
  3. 電源・USBポート
  4. インジケータLED

その他、サードパーティ製のArduinoベースのボードもありますが、通常、これらのボードには共通点があります。

マイクロコントローラーユニット(MCU)

マイクロコントローラユニット、通称MCUは、ボード上のすべての入出力を読み取り、制御します。また、ユーザーが作成したコードを保存して、何かを実行させることもできます。

Arduino Uno R3は、特別に取り外し可能なMCUチップを持っています。こうすることで、その部分が壊れるか摩耗したら、交換することができます。他のボードでは、MCUチップをボード自体にハンダ付けしています。この欠点は明らかですが、通常、ハンダ付けされていないものに比べてはるかに小型で高速に作られています。

ヘッダーピン

側面に、上部に穴のあいたプラスチックの盛り上がった部分があります。これはメス型ヘッダーピンです。そこに電線やオスのジャンパーピンを入れることになっています。

ピンには2種類あります。GPIOピンと電源ピンです。GPIOピンは、入出力の処理を行うことができます。デフォルトでは、Arduinoのピンはすべて入力です。一方、電源ピンはボード上で電気を動かすためのものです。5Vと3.3Vは、その名の通り常に電圧を発しています。GNDは「グランド」を意味し、Vinはそのピンを通してボードに電力を供給することができます。

電源とUSBポート

すべてのArduinoボードには通常、USBポートとDCバレルジャックの2種類のポートがありますが、DCバレルジャックを持たないものもあります。通常、USBポートか電源ピンから電力を得ます。

DCバレルジャックのサイズは2.1×5.5mmで、内側がプラス、外側がマイナスとなるのが一般的。7〜20ボルトの電圧に対応するように設計されていますが、可能な限り9ボルトにこだわってください。

USBポートは、モデルによって異なります。Type-A、Type-B、USBmicro、Type-Cのいずれかを使用することができます。これらを通してボードに電力を供給することができ、また通信ポートとしても機能します。

インジケーターLED

インジケータLED 最後に、ボードの状態を確認できるインジケーターLEDが通常3つあります。

  1. RX (受信)
  2. TX (送信)
  3. L (LED内蔵)
  4. ON (電源オン)

LとONのピンは自明です。1つは制御可能な内蔵LEDで、もう1つは基板に電気が通るたびに点灯します。一方、最初の2つは、Arduinoがシリアル通信で情報を受信したり送信したりするときにオンになります。

アルドゥイーノIDE

初心者は、PlatformIOなどの他のプログラムに移行する前に、Arduino IDEから始めるとよいでしょう。また、これを使えば、物事を失敗する可能性も低くなります。Arduinoボード用に作られたものですからね。

Arduino IDEは、3つの重要な機能を持っています。

  1. 編集
  2. ビルド
  3. アップロード

通常、ビルドとアップロードの機能は手を取り合って動作します。コードの入力と編集が終わったら、すぐにビルドして、すべてをそのままボードにアップロードすることができます。しかし、ビルドするだけで、アップロードする必要がない場合もあります。

Arduino IDEは、Arduinoのウェブサイトからダウンロードできます。

内蔵LEDを点滅させる方法

内蔵LEDの点滅は、Arduino版「Hello World」スクリプトであり、Arduinoが動作しているかどうかをテストする簡単な方法です。コンピュータにすでに点滅していることを伝えることも含め、点滅させるためのさまざまな方法をすべて実演しています。

例1: 基本的なブリンク

まずは基本的なブリンクのスクリプトから。内蔵のLEDを0.5秒点灯させ、さらに0.5秒消灯させるだけです。

  1. Arduino IDEを開いてください。

2. IDEを開くとすぐに新しいスケッチが表示されるはずです。もしそうでなければ、“File -> New “をクリックするか、Ctrl + Nを押してください。

3. IDE上のコードを以下のコードに置き換えます。

void setup() {
  // セットアップコードをここに入れて、一度実行します。
  pinMode(LED_BUILTIN, OUTPUT);
}
 
void loop() {
  // 繰り返し実行するため、メイン コードをここに置きます。
  digitalWrite(LED_BUILTIN, HIGH);
  delay(500);
  digitalWrite(LED_BUILTIN, LOW);
  delay(500);
}
  1. Sketch -> Upload “に移動するか、Ctrl + Uを押してArduinoにコードをアップロードします。

Arduinoのコードは通常、setup()loop()の2つのパートに分かれています。

setup()では、出力と入力を定義することになっています。この例では、pinMode()を使ってLED_BUILTIN` ピンを出力ピンとしています。

LED_BUILTINピンは13番ピンであり、L LEDに直接接続されています。このピンがHIGHになるのに十分な電気を受けると、LEDが点灯します。LED_BUILTINのインスタンスをすべて13に置き換えても、動作します。

setup() については、次の例で詳しく説明します。ここでは、loop()内の1行目からすべてが始まり、Arduinoはその行を実行し、次に2行目、3行目と、最後の行に到達するまで実行します。そして、その後に最初の行に戻ります。これが loop()` と呼ばれる所以です。

この例では、digitalWrite() を使って LED_BUILTINHIGH の電力を供給しています。ここに5Vの電気が通ると、delay(500)で一時的にArduinoが500ミリ秒の間、それ以上コードを読まないようにします。その後、Arduinoは次の行を実行し、LED_BUILTINLOWまで下げます。

実際には、スイッチを入れて半秒待ち、スイッチを切ってさらに半秒待ち、そしてまたスタートラインに戻るというループです。電源に接続されている限り、ずっとループし続けます。

例2:起動時に3回点滅させる

今回は、setup() を使って、内蔵LEDを素早く3回点滅させた後、0.5秒ごとにゆっくり点滅させるように遊んでいます。

    1. 現在のコードで、カーソルを pinMode(LED_BUILTIN, OUTPUT); に移動し、void setup() の下に新しい行を作成します。

2. その行に、以下のコードを貼り付けます。

 digitalWrite(LED_BUILTIN, HIGH);
 delay(1000);
 digitalWrite(LED_BUILTIN, LOW);
 delay(250);
 digitalWrite(LED_BUILTIN,HIGH).
 delay(1000);
 digitalWrite(LED_BUILTIN,LOW).
 delay(250);
 digitalWrite(LED_BUILTIN,HIGH).
 delay(1000);
 digitalWrite(LED_BUILTIN,LOW).
 delay(250);
  1. あなたのコードは次のようになります。
void setup() {
  // セットアップコードをここに入れて、一度実行します。
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW)。
  delay(250);
  digitalWrite(LED_BUILTIN,HIGH).
  delay(1000);
  digitalWrite(LED_BUILTIN,LOW).
  delay(250);
  digitalWrite(LED_BUILTIN,HIGH).
  delay(1000);
  digitalWrite(LED_BUILTIN,LOW).
  delay(250);
}

void loop() { // メインコードをここに入れて、繰り返し実行します。 digitalWrite(LED_BUILTIN, HIGH); delay(500); digitalWrite(LED_BUILTIN, LOW); delay(500); }

  1. コードをアップロードして、Arduino goを見ましょう! Sketch -> Upload” か Ctrl + U でコードをボードに送ることができます。

前の例では、loop()とその動作について説明しました。少し戻って setup() について説明します。

setup()` に配置したものはすべて、あらかじめ書かれたコメントにあるように、一度だけ実行されます。これを使えば、Arduinoが動き出すことを伝えるために、何かをさせることができます。LCDやOLED、AMOLEDの画面であれば、ローディングのアニメーションを表示させることもできます。

また、ここではシリアル通信を確立するような特別なコマンドを起動することになっています。

例3:シリアル通信を利用する

パラレル通信とは異なり、シリアル通信は送信元から送信先に1ビットずつデータを送ります。

今回は、Arduinoがシリアルでいくつかのメッセージを送信し、ステータスのアップデートを行います。

    1. setup() で、pinMode(LED_BUILTIN, OUTPUT); の前に改行して Serial.begin(9600); とタイプします。その下に改行して、少しすっきりさせます。

2. pinMode(LED_BUILTIN, OUTPUT);の後に改行して、その中に Serial.println(“Arduino, starting up!”);` と入力します。この2つの間に改行をしておきます。

3. loop()に移動します。digitalWrite(LED_BUILTIN, HIGH); の下に改行し、Serial.println("LED on"); を入力します。同じように digitalWrite(LED_BUILTIN, LOW); の下に、代わりに Serial.println("LED off"); と入力してください。

4.オプション)最初の delay(500)digitalWrite(LED_BUILTIN, LOW); の間に改行を入れることができます。

5. フルコードは以下のようになります。

void setup() {
  // セットアップコードをここに書いて、一度実行します。
  Serial.begin(9600);
 
  pinMode(LED_BUILTIN, OUTPUT);
 
  Serial.println("Arduino、起動しました!");
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW).DIGITALWRITE(LED_BUILTIN,LOW)です。
  delay(250);
  digitalWrite(LED_BUILTIN,HIGH).
  delay(1000);
  digitalWrite(LED_BUILTIN,LOW).
  delay(250);
  digitalWrite(LED_BUILTIN,HIGH).
  delay(1000);
  digitalWrite(LED_BUILTIN,LOW).
  delay(250);
}
 
void loop() {
  // メインコードをここに入れて、繰り返し実行します。
  digitalWrite(LED_BUILTIN, HIGH);
  Serial.println("LED点灯");
  delay(500);
 
  digitalWrite(LED_BUILTIN, LOW);
  Serial.println("LED消灯");
  delay(500);
}
  1. Sketch -> Upload” または Ctrl + U を使って、コードをアップロードします。
    1. “Tools -> Serial Monitor”、またはキーボードでCtrl + Shift + Mを押してシリアルモニタを開きます。長方形の画面が表示され、Arduinoにプログラムしたすべてのシリアル出力が表示されるはずです。

ソフトウェアがデバッグのためにコンソールを使うように、ハードウェアでも同じようにSerialを使うことになっています。

setup()の中で、Serial.begin(9600);`という行を追加しました。これはArduinoにコンピュータとシリアル通信のためのチャネルを開くように指示しています。その横の数字は、データを送る速さを示しています。

9600`は9600ボーという意味です。これは1秒間に9600ビットのデータを送るという意味です。Arduino IDEでは300から200万ボー以上のボーレートがあります。小さいレートは長い電線(距離は電話線をイメージしてください)、大きいレートは短い電線に適しています。200万ボーというのはやりすぎですが。多くの場合、19200ボーでさえ、最も敏感なホビー用センサーには十分すぎるほどです。

さて、次は「Serial.println();」について説明します。このコマンドは "print, line new" の略で、()` の中にあるものを表示した後に改行します。

Serial.println()`は、文字列か文字列を含む変数を受け付けます。その中に数字を入れると、特に0から始まる場合は変な挙動をします。

シリアルモニタの結果を見てみると、「Arduino, starting up!” と一度だけ出力していることにも気づくはずです。一方、“LED on” と “LED off” はブリンク周期ごとに繰り返し出力されています。これが setup()loop() の大きな違いです。

実は、setup()のコードをloop()に入れることもできますが、これは通常、悪い習慣です。入力ピンを出力ピンに変えてしまい、マイコンチップを壊してしまう可能性があります。

例4: For-Loopを使ったブリンク処理

これはとても役に立ちます。for-loopを使うと、与えられた回数で終了するミニループ()`ができます。

複数のfor-loopを使って、複雑な点滅パターンを作ってみましょう。最初の読み込みでは、LEDは13回点滅し、500msの間点灯し、250msの間消灯し、1回だけ点灯するはずです。その後、ループして4回点滅、1000ms点灯、1000ms消灯し、さらに2回点滅、500ms点灯、250ms消灯するはずです。

    1. setup() で、LED_BUILTINHIGH または LOW にするコードのブロックを削除してください。また、delay()関数も削除してください。

2. そのコードを以下のように置き換えます。

for (int i = 0; i < 12; i++) { (int i = 0; i < 12; i++) { (int i = 0; i < 12; i )
  digitalWrite(LED_BUILTIN, HIGH);
  delay(500);
  digitalWrite(LED_BUILTIN, LOW);
  delay(250);
}
  1. loop()`で、すべてを削除し、以下のコードに置き換えます。LEDを1000ms点灯、1000ms消灯をそれぞれ4回ずつ行います。
for (int i = 0; i < 4; i++) { {...
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
  Serial.println("LEDを1秒間点灯させる");
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
  Serial.println("LED消灯、1秒");
}
  1. 改行して、LEDを500ms点灯、250ms消灯をそれぞれ2回ずつ行う以下のコードを追加します。
for (int i = 0; i < 2; i++) { { {...
  digitalWrite(LED_BUILTIN, HIGH);
  delay(500);
  Serial.println("LEDを0.5秒点灯させる");
  digitalWrite(LED_BUILTIN, LOW);
  delay(250);
  Serial.println("LED消灯 0.25秒");
}
  1. コードをアップロードして、シリアルモニタを開いてください。2種類のミニループを実行する前に、LEDの点滅を13回までカウントし始めるはずです。

この例では、次のようになります: for-loopはシンプルでありながら、習得しやすいツールです。for, (int i = 0; i < x; i++), そして { }` の中にあるものです。

  • forは Arduino IDE に for-loop 関数であることを知らせます。他にもwhile, if, switch` などがあります。
  • (int i = 0; i < x; i++) は条件です。これは、0 の整数 ix の値より小さい間、 i++ を行い、関数を実行する、というものである。i++i + 1 の省略形です。i + x に置き換えることもできます。x は任意の数で、"-" 演算子を使ってカウントダウンさせることもできます。
  • { } には、ループが行うすべての処理を記述します。最後に ; をつける必要はない。そのままにしておけばいいのです。

まとめ

この簡単なArduinoの初心者向けガイドで、自分だけのライトエフェクトやクリスマスライトを作り始めることができます。

もちろん、まだまだ学ぶべきことはありますが、やりながら覚えていくのがよいでしょう。モーター、センサー、リレー、その他いろいろなものを試してみてください。Raspberry Piを使ってArduinoのプログラミングに挑戦してみるのもいいかもしれませんね。

Akira
Akiraは情熱的なゲーマーであり、製品レビュアーです。ゲームをしていないときは、最新のゲーミングアクセサリーを試したり、製品のレビューをしていることが多い。彼の分かりやすいスタイルは、ゲーマーが自分のニーズに最も適した製品を簡単に判断できるようにするものです。また、技術的な問題にも精通しており、その解決方法も知っている。