Arduino初心者編:スケッチ例を使用したハローワールド

Arduino初心者編:スケッチ例を使用したハローワールド

はじめてArduinoを動かす場合、IDEのスケッチ例を使用すると簡単にプログラムが作れます。例えば、LEDの点滅・ボタン・シリアル通信など。Arduinoにはいくつかのモデルがあります。ここではUnoモデルとMegaモデルを取り上げます。両者の最大の違いは、速度、メモリ量、ピンの数と種類です。USBで接続するものはTypeBのUSB接続のものもあれば、TypeBのMicro-USB接続のものもあります。また、リセットボタンやLEDの位置もモデルやバージョンによって異なります。今回は、どのモデルにも共通するピンや機能を使用します。

Arduino Uno

  1. 電源および通信のための USBポート
  2. 代替電源(9V~12V、センターピンは+)
  3. 電源ピン(出力と入力)。
  4. アナログ入力端子(デジタルとして使用可能)
  5. デジタル入力/出力ピン(〜はPWMデジタル出力を意味します)
  6. プロセッサ。
  7. リセットボタン
  8. LED を表示します。RXとTXはシリアル通信(USBポート)、Lは13番ピンの値を示します。

ブレッドボード

ブレッドボードは、部品やジャンパー線を挿して、回路のプロトタイプを開発する時に使用します。

スケッチ例を使用したハローワールド

Arduino IDE(https://Arduino.CC/en/Main/Software)をインストールし、USBケーブルで接続したら、接続されているシリアルポートを選択することから始めます(通常は1つしかないでしょう)。

次に、Arduinoのモデルを選択します。場合によっては(Arduino Megaなど)、バージョンを選択する必要もあります。

Blink

Arduino IDEにはいくつかの例が付属しています。まずは、13番ピンに接続されているLED基板上の内蔵LED(L)を点滅させるBlinkの例から見ていきましょう。この例では、2つの関数を使用しています。

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
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
}

Setup()
この関数では、使用しているハードウェアを初期化します。この関数はArduinoの電源が入っているときに一度実行されます。

Loop()
この関数には、目的の関数を実行するプログラムを入れます。この関数の最後には、再びこの関数が呼び出されます(つまり、無限に繰り返されます)。

プログラムを作成した後、プログラム記述の検証をしなければなりません。検証は、ツールバーのチェックマークのボタンを押すと実行されます。プログラムをArduinoに書き込むには、ツールバーの矢印マーク(→)のボタンを使います。書き込み中は、IDEの下部にいくつかのメッセージが表示され、ボード上のRXとTXのLEDが点滅します。アップロードが完了すると、プログラムは自動的に開始されます。この場合、ボード上のLED Lが点滅します。また、13番ピンGND間に、LEDと10kΩ抵抗を入れると、同様に点滅します。delay()を調整して、LEDの各状態(オン/オフ)の持続時間を変更することができます。delay()の単位はミリ秒です。

Button

ボタンを押してLEDを点灯させる回路を作ります。まず、ボタンと10kΩ抵抗で以下の回路を実装します。ボタンを押していないときは、2番ピンとGNDピンが10kΩ抵抗を通して接続されています(このような抵抗をプルダウン抵抗という)。ボタンが押されたときは、5Vラインと接続されます。

続いてButtonの例を開きます。アップロード後、ボタンが動作してLEDが点灯します。

// constants won't change. They're used here to set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
  } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
}

DigitalReadSerial

先ほどの回路を使用して、USB / シリアル接続を介してボタンの状態をコンピュータに送信します。DigitalReadSerialの例を開きましょう。

// digital pin 2 has a pushbutton attached to it. Give it a name:
int pushButton = 2;

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  // make the pushbutton's pin an input:
  pinMode(pushButton, INPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input pin:
  int buttonState = digitalRead(pushButton);
  // print out the state of the button:
  Serial.println(buttonState);
  delay(1);        // delay in between reads for stability
}

Arduinoにプログラムを送った後、メニューのツール→シリアルポートを使ってUSB / シリアルポートに何が送られてくるか見てみましょう。

この機能は、プログラムをデバッグするときにも利用できます。デバッグテキストを送信する場合は、たとえば、次のような行を追加します(常に大文字と小文字を区別します)。

if ( buttonState ) Serial.println ( "ON" ); 
else Serial.println ( "OFF" );  
delay( 1 ); 

スイッチ

前の回路にリレー(外部機器を制御できるスイッチとして機能する)を追加してみましょう。

関数 setup() の後に追加します。

pinMode ( 12 , OUTPUT );

関数 loop() の後に追加します。

digitalWrite ( 12 , ! buttonState )
// constants won't change. They're used here to set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);

  // Relay
  pinMode ( 12 , OUTPUT );
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // Relay
  digitalWrite ( 12 , ! buttonState );
}

12番ピン(リレー)の値が逆になっているのはなぜでしょうか?これから使用するリレーは、信号ピンが0Vを受信するとアクティブになり、5Vを受信すると(または電源が入っていない)非アクティブになります。すべてのリレーがこのようになるわけではありませんので、使用する前にテストしてみてください。

センサ

前の回路を使用して、ピン A0 にアナログ温度センサーを追加します。次に、サンプルの AnalogReadSerial をロードします。センサーの値を見るために、再びシリアル・モニターを開きます。アナログ・ピンの読み取り(A0、A1など)は、0から1023の間の値を返します(つまり、0Vから5Vの間の直線的な値)。しかし、選択したセンサーは、この範囲の一部の値しか表示しない可能性があります。センサーの最小値と最大値を記録して、プログラムを調整してください。

前の回路を使って、リレーを作動させるためのルールを定義します。例えば、温度センサーを使用している場合、温度が高くなったときに、リレーを有効にしてランプを点灯させたいとします。関数loop()の最後に追加します。

if ( sensorValue > 500 || digitalRead ( 2 )) { // Relay On
 digitalWrite ( 12 , LOW ); 
}
else { // Relay Off
 digitalWrite ( 12 , HIGH ); 
} 
// constants won't change. They're used here to set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin

void setup() {
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);

  // Relay
  pinMode ( 12 , OUTPUT );
}

void loop() {
  int sensorValue = analogRead(A0);

  // Relay
  if ( sensorValue > 100 || digitalRead ( 2 )) { // Relay On
    digitalWrite ( 12 , LOW ); 
  }
  else { // Relay Off
    digitalWrite ( 12 , HIGH ); 
  }
}

閾値(ここでは100)と演算子( >or <)はセンサーによって異なる場合があります。期待した動作をしない場合は、センサーのデータシートで特性を確認し、プログラムを修正してください。

Arduino初心者編カテゴリの最新記事