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

- 電源および通信のための USBポート
- 代替電源(9V~12V、センターピンは+)
- 電源ピン(出力と入力)。
- アナログ入力端子(デジタルとして使用可能)
- デジタル入力/出力ピン(〜はPWMデジタル出力を意味します)
- プロセッサ。
- リセットボタン
- 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 <)はセンサーによって異なる場合があります。期待した動作をしない場合は、センサーのデータシートで特性を確認し、プログラムを修正してください。
コメントを残す