Arduino UNOを購入し、プログラミングしてみました

こんにちはー、ニアです。

Arduinoを使ったプログラミングに興味があり、先日Arduino UNOを購入してきました。

今回は、Arduinoでのプログラミングに必要な環境構築と、いくつかプログラミングをしていきます。

1. 購入したもの

  • Arduino UNO R3
  • Arduino用クリアケース
  • USBケーブル(Type-A ⇔ Type-B)
  • Elecrow Starter Kit for Arduino

Arduinoのボードはいくつか種類がありますが、今回はオーソドックスなUNOにしました。

2. Arduino IDEのインストール

Arduinoで動かすためのプログラムの開発環境として、Arduino IDEをインストールします。

Arduino IDEの公式サイト(https://www.arduino.cc/en/software)にアクセスします。

Windowsへインストールする場合、「Windows Win 10 and newer, 64 bits」を選択します。

Support the Arduino IDEの画面が表示されたら、「JUST DOWNLOAD」を選択し、インストーラーをダウンロードします。(Arduinoへ寄付したい場合は、「CONTRIBUTE & DOWNLOAD」ボタンを押します。)

ダウンロードしたインストーラーを起動します。

ライセンス条件を確認し、「同意する」ボタンを押します。

インストールオプションを選択し、「次へ」ボタンを押します。今回は、このコンピューターのすべてのユーザー向けにインストールします。

Arduino IDEのインストール先を選択し、「インストール」ボタンを押します。

インストールが完了したら、「完了」ボタンを押して、インストーラーを閉じます。

Arduino IDEの初回起動時は、ドライバーやコンポーネントをダウンロードしインストールされます。

Windowsの場合、以下のドライバーやコンポーネントのインストール確認ダイアログが表示されるので、確認し、「インストール」ボタンを押します。

  • Arduino Industries LLCポート(COMとLPT)
  • Arduino USB Driver
    • 発行元がArduino srlとArduino SAの2種類
  • Genunino USB Driver
  • Lininoポート(COMとLPT)
  • libsub-win32

ドライバーやコンポーネントのインストールが完了したら、セットアップ完了です。

3. Arduinoでプログラミング

Arduinoのプログラミング言語は、C言語やC++をベースにしたArduino言語です。また、Arduinoではソースコードのことをスケッチ(Schetch)と呼んでいます。

最小限のプログラムは、setup関数とloop関数の2つで構成されていて、前者はプログラムの開始時に1回だけ実行、後者は繰り返し実行されます。

void setup() {
  // プログラムの開始時に、1回だけ実行されます。
}

void loop() {
  // 以降、これを繰り返し実行されます。
}
Arduinoのプログラムのフローチャート
Nia-TN-SDfs-normal2.png
プログラムの構造が、まるでUnityのスクリプトみたいですな

3.1. Arduino内蔵のLEDを点滅させる

まずは、Arduino内蔵のLEDを点滅させてみましょう。

メニューから「File」→「Examples」→「01.Basics」→「Blink」を選択します。

ArduinoとPCをUSBケーブルで接続します。

「Select Board」から「Arduino Uno」を選択します。

「Upload」ボタンを押してスケッチをコンパイルし、プログラムをArduinoに書き込むと、Arduino内蔵のLEDが1秒ごとに点滅します。

基盤内に「L」と書かれた部分のLEDが、Arduino内蔵のLEDです

3.1.1. 点滅間隔を調整してみよう

先ほどのLED点滅のプログラムの中身を見てみましょう。

pinMode関数は、指定したピンを「入力(INPUT)」や「出力(OUTPUT)」として使用するようにします。
LED_BUILTINは、Arduino内蔵のLED(Arduino Unoでは、デジタルの13番ピン)の定義です。

digitalWrite関数は、指定したピンに電圧を出力します。
HIGH1の定義、LOW0の定義で、Arduino内蔵のLEDのピンにHIGHを出力するとLEDが点灯し、LOWを出力するとLEDが消灯します。

delay関数は、指定した時間(ミリ秒単位)プログラムを停止します。

setup関数内のpinMode関数でArduino内蔵のLEDのピンを出力モードに設定し、loop関数にて1秒ごとにdigitalWrite関数でArduino内蔵のLEDを点灯・消灯を繰り返すことで、LEDを点滅させています。

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);  // Arduino内蔵のLEDのピンを出力モードに設定
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);  // Arduino内蔵のLEDを点灯
  delay(1000);                     // 1秒待機
  digitalWrite(LED_BUILTIN, LOW);   // Arduino内蔵のLEDを点灯
  delay(1000);                     // 1秒待機
}

そこで、7行目と9行目のdelay関数のパラメーターを500にしてArduinoに書き込むと、Arduino内蔵のLEDは0.5秒ごとに点滅するようになります。

3.2. ArdunioにLEDを接続して、LEDを点滅させる

せっかくなので、ArduinoにLEDを接続して、そのLEDを点滅させるプログラムを作成してみましょう。

3.2.1. 追加で使用するもの

  • ブレッドボード
  • LED
  • 抵抗器(220Ω×1(カラーコード: 赤赤茶(4線)、赤赤黒黒(5線)))
  • ジャンパーワイヤー
Nia-TN-SDfs-smile1.png
ブレッドボードは、大学での実験でよく使っていましたな~

3.2.2. 回路を構成

まず、ArdunioとLEDを結線します。

  1. Arduinoのデジタル12番ピンとLEDのアノード(線が長い方)を接続します。
  2. LEDのカソード(線が短い方)と抵抗を接続します。
  3. 抵抗とArduinoのGNDピンを接続します。
Nia-TN-SDfs-wink.png
Arduinoを使った回路図は、Tinkercadで作成しています

3.2.3. プログラム作成

次にプログラムを作成します。

#define LED_EXTERNAL 12

void setup() {
  pinMode(LED_EXTERNAL, OUTPUT);
}

void loop() {
  digitalWrite(LED_EXTERNAL, HIGH);
  delay(1000);
  digitalWrite(LED_EXTERNAL, LOW);
  delay(1000);
}
Nia-TN-SDfs-normal2.png
使用するピンの番号を#defineやconstで定義しておくと、プログラムがより分かりやすくなります

コンパイルしてArduinoに書き込むと、Arduinoに接続したLEDが1秒おきに点滅します。

3.3. ボタンを押している間だけ、LEDを点灯させる

今度はボタンを追加して、ボタンを押している(スイッチON)間だけLEDを点灯させるプログラムを作成していきます。

3.3.1. 追加で用意するもの

  • ブレッドボード
  • LED
  • ボタン
  • 抵抗器
    • 220Ω×1(カラーコード: 赤赤茶(4線)、赤赤黒黒(5線))
    • 10kΩ×1(カラーコード: 茶黒橙(4線)、茶黒黒赤(5線))
  • ジャンパーワイヤー

3.3.2. 回路を構成

まず、ArdunioとLED、ボタンを結線します。

  1. Arduinoのデジタル12番ピンとLEDのアノード(線が長い方)を接続します。
  2. LEDのカソード(線が短い方)と抵抗を接続します。
  3. 抵抗(220Ωの方)とArduinoのGNDピンを接続します。
  4. Arduinoの5Vピンとボタンを接続します。
  5. ボタンと抵抗(10kΩの方)を接続します。
  6. 抵抗(10kΩの方)とArduinoのGNDピンを接続します。
  7. Arduinoのデジタル2番ピンとボタンを接続します。

3.3.3. プログラム作成

次にプログラムを作成します。

setup関数で、LEDを接続したピンをOUTPUTに、ボタンを接続したピンをINPUTにします。

loop関数では、digitalRead関数でボタンからの入力値を読み取り、値がHIGHの時はLEDを点灯させ、そうでない時はLEDを消灯させます。

const int ledExternal = 12;
const int button = 2;

void setup() {
  pinMode(ledExternal, OUTPUT);
  pinMode(button, INPUT);  // プッシュボタンのデジタルピンを入力モードにします
}

void loop() {
  int buttonState = digitalRead(button);

  if (buttonState == HIGH) {
    digitalWrite(ledExternal, HIGH);
  } else {
    digitalWrite(ledExternal, LOW);
  }
}

コンパイルしてArduinoに書き込むと、ボタンを押している間だけLEDが点灯するようになります。

3.3.4. プルダウン抵抗とプルアップ抵抗

3.3.2.のように、ボタンとGNDの間にある抵抗をプルダウン抵抗といい、ボタンを押していない(スイッチOFF)時はArduinoへの入力がLOWに、押している(スイッチON)時はArduinoへの入力がHIGHになります。

一方、以下の回路図のように、電源とArduinoの入力ピンの間ににある抵抗はプルアップ抵抗といい、ボタンを押していない(スイッチOFF)時はArduinoへの入力がHIGHに、押している(スイッチON)時はArduinoへの入力がLOWになります(プルダウン抵抗の時と逆です)。

スイッチOFF時スイッチON時
プルダウン抵抗LOWHIGH
プルアップ抵抗HIGHLOW

ちなみに、Arduinioの内部にもプルアップ抵抗が搭載されており、pinMode関数の第2パラメーターにINPUT_PULLUPを指定することで、利用できます。

pinMode(<PIN>, INPUT_PULLUP);
Nia-TN-SDfs-normal2.png
これならプルアップ抵抗のために、10kΩの抵抗器を用意する手間が省けて、回路もよりシンプルになりますね

4. おわりに

今回は、Arduino UNO R3を購入し、Arduino IDEでいくつかプログラミングをしてみました。

今回購入したスターターキットには、他にも7セグメントディスプレイやセンサーなどのパーツがあるので、これらを使ったプログラムも作ってみたいと思います。

そういえば、5月下旬にArduino UNOの新型のR4が登場するみたいで、これも楽しみです。

32bit Armコア採用で大幅性能向上の「Arduino UNO R4」
Arduinoは25日、新型マイコンボード「Arduino UNO R4」を発表した。追加装備なしの「UNO R4 Minima」と、Espressif S3 Wi-Fiモジュールを追加した「UNO R4 WiFi」の2種類を用意しており、...

[END]

タイトルとURLをコピーしました