Arduinoを使い始める

ハードウェアとソフトウェアツール、Arduino APIを紹介します。


AUTHOR: Karl Söderby、LAST REVISION: 2022/12/07 23:23


Arduinoプラットフォームの開発は2005年に始まり、エレクトロニクスと組み込みデザインの分野においてもっとも認知されているブランドの一つになりました。

しかし、Arduinoの根幹は何でしょうか?ボードとは何で、コードをどうやって書き、自分のプロジェクトを作るために必要なツールは何でしょうか?このガイドの目的は、Arduinoプロジェクトの概要を伝えることです。

i
このガイドでは、Arduinoエコシステムの概要が理解でき、より詳細な記事へのリンクが入手できます。

概要

このガイドは、ハードウェアとソフトウェアツール、Arduino API、クイックリファレンスの4つのパートに別れています。以下のリンクから直接飛ぶこともできます。

Arduinoハードウェア

このセクションでは、エレクトロニクスとArduinoボードの操作の基礎を学ぶことに時間を割きます。

Arduino API

このセクションでは、Arduino APIと、Arduinoボードで動作するコードの書き方を学びます。

Arduinoソフトウェアツール

このセクションでは、開発環境の設定方法と、どういうオプションがあるのかを学びます。

クイックリファレンス

クイックリファレンスは、Arduino API全体から選んだもので、よく使う関数や構造、メソッドを紹介します。

Arduinoハードウェア

何年にもわたり、Arduinoは多くの形態のハードウェアデザインをリリースしてきました。

Arduinoボードの構造

全てのArduinoボードは異なりますが、全てのArduinoに共通する要素がいくつかあります。以下の図を見てください。

Arduinoボードの主な構成要素

Arduinoボードの主な構成要素

  1. マイクロコントローラ(Microcontroller) - Arduinoの頭脳で、プログラムをロードする構成要素です。いくつかのことが実行できるように設計された小さいコンピュータです。
  2. USBポート(USB port) - ArduinoボードをPCに接続するために使われます。
  3. USB-シリアル変換チップ(USB to Serial chip) - USB-シリアル変換チップは、例えばPCからボード上のマイクロコントローラに送信されるデータを変換する為の重要な構成要素 です。
  4. デジタルピン(Digital pins) - デジタルロジック(0/1、LOW/HIGH)を扱うピン。スイッチやLEDをオン・オフするためによく利用されます。
  5. アナログピン(Analog pins) - 10ビット(0-1023)の精度でアナログ値を読むためのピン。
  6. 5V/3Vピン(5V/3V pins) - 外部の回路に電力を供給するためのピン。
  7. GND - グラウンドや陰極、単に - とも呼ばれ、0ボルトの電気レベルで、回路を終端させるために利用されます。
  8. VIN - 外部電源を接続します。

Arduinoボードによっては、もっと多くの構成要素があります。上記のリストはどんなArduinoボードにもある一般的なものです。

基本操作

ほとんどのArduinoボードは、マイクロコントローラ上で一つのプログラムが動作するように設計されています。このプログラムは、LEDを点滅させるなど、ひとつのアクションを行うように設計されています。一サイクルで、何百ものアクションを実行するよう設計することもできます。プログラムによりそのスコープは異なります。

マイクロコントローラにロードされたプログラムは、電源投入後すぐに実行が開始されます。全てのプログラムには"loop"と呼ばれるプログラムがあります。loop関数では、以下のようなことを行うことができます。

  • センサーの値を読む
  • 電気をつける
  • 条件が成立したか調べる
  • 上記全て

ゆっくり動作するよう明示しない限り、プログラムはとても早く動作します。プログラムのサイズやマイクロコントローラの実行時間に依存しますが、通常はマイクロ秒単位(1秒間に百万回)です。

Arduinoの基本動作

Arduinoの基本動作

回路の基本

回路は少なくとも一つの電子部品と、電流を通すための電線などの導電材料で構成されます。Arduinoを使うとき、プロジェクト用に回路を作る場合がほとんどです。

簡単な回路の例はLED回路です。Arduinoのピンから抵抗(高電流からLEDを守る役割があります)を通して電線でつなぎ、最後にグランドピン(GND)に接続します。ピンをHIGH状態にすると、Arduinoボード上のマイクロコントローラは電子回路に電流を流し、LEDを光らせます。ピンをLOW状態にすると、電流が回路に流れなくなり、LEDが消えます。

ArduinoとLED回路

ArduinoとLED回路

回路は通常回路図として表され、回路の設計図になります。下の図は、上の図で示した回路と同じ回路を、回路図として表したものです。

回路図

回路図

電子信号

電子機器間の全てのやりとりは、電子信号を通じて行われます。電子信号には、アナログとデジタルの2種類があります。

アナログ信号

基本的なアナログ信号

基本的なアナログ信号

アナログ信号は通常、範囲が決まっています。Arduinoでの典型的な範囲は、0-5Vと0-3.3Vです。

例えば、可変抵抗(回路で抵抗を変化させるためのアナログ機器)を使うと、この範囲(0-5V)を調整することができます。プログラムでは、これは0-1023の数値で表され、10ビットの精度です。

パルス幅変調(Pulse-Width Modulation: PWM)を使ってアナログ信号を出力するときは、0-255の範囲を使います。これは、8ビットの精度です。

i
詳しくは、アナログ入力ピンPWM(Pulse Width Modulation)の基本を参照してください。

デジタル信号

基本的なデジタル信号

基本的なデジタル信号

デジタル信号は、少し異なる働きをします。2つの状態(0か1)だけで表され、プログラムではHIGHかLOWで表されます。これは現代の技術での典型的な信号の形式です。

Arduinoでは簡単にデジタル信号を読み書きすることができます。例えば、ボタンの状態を読んだり、何かをオン・オフしたりするのに有用です。

デジタル信号は0か1なので簡単に見えますが、実際にはもう少し高度です。例えば、HIGHとLOWを迅速に何回も送ることで、連続したビット列を作ることができます。これは、バイナリシーケンスやビットストリームとして知られています。

二つのバイナリシーケンスを見ていきましょう。

1
2
101101
101110001110011

これらは10進表現では、以下のようになります。

45
23667

これは、HIGHとLOWの信号を速く送ることで、ある地点から他の地点に多くのデータを送信するための賢明な方法です。信号からデータを解釈するためには、シリアル通信プロトコルを使います。

センサーとアクチュエーター

Arduinoを使うには、センサーとアクチュエーター、そして、それらの違いを理解することが重要です。

センサーとは何か?

簡単に言うと、センサーは環境を認識します。つまり、温度のような物理パラメータを取得し、電子信号に変換します。

センサーはボタンのような簡単な形態をとることもあります。状態が変わる(ボタンを押す)と、電子信号がLOWからHIGH(0から1)に変わります。

センサーには多くの種類があり、データの取得方法も多岐にわたります。おそらく簡単に使えるのはアナログセンサーでしょう。Arduinoのアナログピンに入力される電圧の値(通常は0-5V)の範囲によって通信します。これにより0-1023の値(10ビットの精度)が得られます。

デジタルセンサーは、形態によってはもう少し進歩的です。データの送信はシリアル通信プロトコルに依存し、データを変換するには少し複雑な操作が必要です。電子信号で述べたように、データはバイナリシーケンス(例: 101101もしくは45)を使って送信され、ソフトウェアレベルで理解する必要があります。ありがたいことに、多くのセンサーにはソフトウェアライブラリがあり、簡単に値を読むことができます。

ライブラリを使う多くの場合、1行で済みます。

1
sensorValue = sensor.read();

アクチュエーターとは何か

簡単に言うと、アクチュエーターは物理状態を動作させる、もしくは、変更します。いくつかの例を挙げます。

  • LEDのようなライト
  • モーター
  • スイッチ

どのようなコンポーネントを使うかにより、アクチュエーターの制御方法が変わります。もっとも簡単な方法は何かをオン・オフすることです。もう少し複雑な例は、モーターのスピードのように、コンポーネントが受け取る電圧を制御することです。

アクチュエーターの制御には、dgitalWrite()analogWrite()を使うのが一般的です。

1
2
3
4
5
digitalWrite(LED, HIGH); //turn on an LED
digitalWrite(LED, LOW);  //turn off an LED

analogWrite(motor, 255); //set a motor to maximum capacity
analogWrite(motor, 25);  //set a motor to 10% of its capacity

入力と出力

センサーとアクチュエーターは、よく、入力と出力とも呼ばれます。プログラムを書くとき、センサーの状態を確認し、何かを動作させるかを決定することが一般的です。

簡単な例はボタンとLEDです。ボタンが押されていればLEDを点灯し、押されていなければLEDを消灯するようなプログラムを書くことができます。Arduinoのプログラムでは、以下のようになります。

1
2
3
4
5
6
7
int buttonState = digitalRead(buttonPin);   //read and store the button state (0 or 1)

if(buttonState == HIGH){        //check if state is high (button is pressed)
    digitalWrite(LED, HIGH);    //turn on LED
} else {
    digitalWrite(LED, LOW);     //turn off LED
}

シリアル通信プロトコル

データの送信に先ほどのデジタル信号を利用するシリアル通信がたくさんあります。最も一般的なのは、UARTとSPI、I2Cです。UARTは、PCとArduinoの間で新しいプログラムをアップロードしたり、Arduinoから直接データを読み取ったりするのに使われます。

SPIとI2Cプロトコルは、内部および外部のコンポーネントとの通信に利用されます。通信は、Arduinoの特定のピンと結びついたシリアルバスと呼ばれるもので扱われます。

I2Cプロトコルを使うと、ひとつのピンに複数のセンサーを接続し、正確にデータを取得することができます。各デバイスには、データを取得するためのアドレスがあり、プログラムで指定する必要があります。

i
詳細はArduino SPIガイドとArduino I2Cガイドを参照してください。

メモリ

「標準的な」Arduinoは通常SRAMとフラッシュメモリの2種類のメモリを持っています。

SRAM(Static Random-Access Memory: ランダムアクセスメモリ)は、例えば、ブール値の状態のような変数の値を格納しています。電源を切るとこのメモリはリセットされます。

フラッシュメモリは、主にメインプログラム、すなわち、マイクロコントローラに対する命令を格納します。電源を切ってもこのメモリは消えません。このため、これらのマイクロコントローラに対する命令は、電源を入れるとすぐに実行されます。

Arduinoで利用できるメモリ量は、ボードによって異なります。例えば、Arduino UNOは、32kBのフラッシュメモリと2kBのSRAMを搭載しています。Nano 33 IoTは、256kBのフラッシュメモリと32kBのSRAMを搭載しています。これらの情報は、Arduinoのハードウェアドキュメントの、それぞれの製品のドキュメントに記載されています。

i
Arduinoのメモリに関してより深く学ぶには、Arduinoメモリガイドを参照してください。

内蔵センサー

Nano RP2040接続ボード上のIMU(Inertial Measurement Unit: 慣性慣性計測装置)

Nano RP2040接続ボード上のIMU(Inertial Measurement Unit: 慣性慣性計測装置)

多くの新しいArduinoボードにはセンサーが内蔵されています。例えば、Nano 33 BLE Senseは、わずか45x18mmの大きさで、7つのセンサーを内蔵しています。これらはすべて上述のI2Cプロトコル経由で接続され、異なるアドレスが割り当てられています。

モノのインターネット(Internet of Things: IoT)

最近のほとんどのArduinoボードは無線通信を行うための無線モジュールが搭載されています。無線モジュールには、いくつかの種類があります。Wi-Fi、Bluetooth®、LoRa®、GSM、NB-IoTなどです。市場で利用可能なさまざまな技術を使って通信するよう設計されています。

Nano RP2040接続ボード上のu-blox NINA-W102 Wi-Fi / Bluetooth®モジュール

Nano RP2040接続ボード上のu-blox NINA-W102 Wi-Fi / Bluetooth®モジュール

最も普及していて安価なモジュールは、Wi-FiとBluetooth®モジュールです。Wi-Fiモジュールはボードをルーターに接続し、インターネット経由でデータを送受信します。インターネット上で様々なデータを要求するPCと同じように動作しますが、その規模が小さいということです。

Bluetooth®は、近傍のデバイスと通信を行うために使われ、高速・高信頼の接続を維持するのに有用です。例えば、実環境のアプリケーションで、Bluetooth®技術は、ワイヤレスヘッドフォンやスピーカーで利用されています。

シリアルプロトコル同様に、無線モジュールは通信のために、HTTPやMQTT、UPDといった独自のプロトコルを利用します。

Arduino API

i
Arduinoリファレンスに、全てのArdino APIが記載されています。

Arduino APIもしくはArduinoプログラミング言語は、C/C++言語を基にした、関数と変数、構造から構成されます。

主要構成要素

Arduino APIは、関数と変数、構造の3つの分けることができます。

  • 関数: Arduinoボードの制御や計算を行います。例えば、デジタルピンの状態を読み書きする、値を割り当てる、シリアル通信を利用する、などです。
  • 変数: Arduinoの定数やデータ型、変換などです。例えば、intbooleanarrayがあります。
  • 構造: Arduino(C++)コードの要素です。以下のようなものがあります。
    • スケッチ(loop()setup())
    • 制御構造(ifelsewhilefor)
    • 算術演算(かけ算、足し算、引き算)
    • 比較演算子(==(等しい)、!=(等しくない)、>(大きい))

Arduino APIは、C++プログラミング言語を単純化したもので、Arduinoハードウェアを制御するための多くの機能が付加されています。

プログラム構造

Arduinoプログラムが必要とする最低限の関数は、void setup()void loopの2つです。“void"は、実行結果を返さないことを意味します。

  • void setup() この関数は、Arduinoに電源が入れられたときに一度だけ実行されます。ここでは、ピンのモード(入力か出力)やシリアル通信のボーレート、ライブラリの初期化などを行います。
  • void loop() この関数には、継続して実行するコードを記述します。例えば、入力によってランプをオン・オフしたり、X秒ごとにセンサーの値を読み取るなどです。

Arduinoスケッチでは、上記の関数は必須です。長いプログラムを書くときには、さらに関数を追加することも、もちろんできます。

スケッチ

Arduinoプロジェクトでは、プログラムは「スケッチ」と呼びます。プログラムが書かれたファイルがスケッチです。スケッチは、.inoという拡張子を持ち、常に同名のフォルダ内に配置されます。

フォルダには、スケッチに含めるヘッダファイルなどの他のファイルを置くこともできます。

スケッチ例

以下は、いくつかのよく使われるArduinoのプログラム要素を持つ、標準的なArduinoスケッチの例です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/* 
This is a comment at the top of a program, 
it will not be recognized as code. Very good 
to add an explanation of what your code does 
here.

This sketch shows how to read a value from a
sensor connected to pin A1, print it out in 
the Serial Monitor, and turn on an LED connected
to pin number 2 if a conditional is met.
*/

int sensorPin = A1; //define pin A1 (analog pin)
int ledPin = 2; //define pin 2 (digital pin)
int sensorValue; //create variable for storing readings

//void setup is for configurations on start up
void setup() { 
    Serial.begin(9600); //initialize serial communication
    pinMode(ledPin, OUTPUT); //define ledPin as an output
}

void loop() {
    sensorValue = analogRead(sensorPin); // do a sensor reading
    
    Serial.print("Sensor value is: "); //print a message to the serial monitor
    Serial.println(sensorValue); //print the value to the serial monitor
    
    //check if sensorValue is below 200
    if(sensorValue < 200) { 
        digitalWrite(ledPin, HIGH); //if it is, turn on the LED on pin 2.
    }
    //if sensorValue is above 200, turn off the LED
    else{ 
        digitalWrite(ledPin, LOW);
    }
}

ライブラリ

Arduinoライブラリは、標準的なArduino APIの拡張です。公式およびコミュニティによって寄贈された何千ものライブラリがあります。

ライブラリは複雑なコードの利用を簡潔にします。センサーやモーターの制御、インターネットへの接続などに使われます。全てのコードを自分で書くのではなく、ライブラリをインストールし、コードの最初でインクルードすれば、ライブラリの全ての機能を利用することができます。全てのArduinoライブラリはオープンソースで、無料で利用することができます。

ライブラリを使うには、下記のように、コードの最初でインクルードします。

1
#include <Library.h>

ほとんどのライブラリには、ライブラリの利用に役立つスケッチ例が付属しています。

i
ライブラリリファレンスで、公式およびコミュニティによって寄贈されたライブラリを閲覧することができます。

コアAPI

全てのArduinoボードは、「コア」あるいは「パッケージ」が必要で、これらはプログラミングのためにインストールする必要があります。全てのパッケージには標準Arduino APIが含まれ、さらに、特定のボードで利用できる特定のAPIも含まれます。

例えば、昔からあるArduinoCore-avrパッケージには、EEPROMSoftwareSerialライブラリが含まれ、追加のインストールを行うことなく自由に利用することができます。このパッケージには、Arduino UNOやNano、Mega2560などが含まれます。

他の例は、ArduinoCore-mbedパッケージで、40以上のライブラリを含み、以下のような特定のボード向けの機能が設計されています。

  • PDM Nano 33 BLE SenseとNano RP2040 Connectに搭載されているマイクからオーディを信号のサンプリングに使われます。
  • Ethernet Portenta Visionシールド用のEthernet機能が利用できます。
  • GSM Portenta Cat. M1/NB IoT GNSSシールド上のGSM機能が利用できます。

これらの機能は各製品のランディングページに記載されています。全てのハードウェアのリストは、docs.arduino.ccに記載されています。

Arduinoソフトウェアツール

i
Arduino IDEはソフトウェアダウンロードページから無料でダウンロードすることができます。

Arduinoエコシステムのもう一つの構成要素は、ソフトウェアツールです。

通常Arduino IDEと呼ばれるのは、統合開発環境です。では、正確にはどういう意味でしょうか?

ボードでプログラムを作成するには、プログラムを書き、機械語にコンパイルし、最後に、新しいプログラムをボードに転送する必要があります。

Arduino IDEは、1行目のコードを書くことから、Arduinoボード上のマイクロコントローラで実行させるところまでの全ての機能を持っています。Arduino IDEは、ダウンロードできる(オンラインバージョンもあります)プログラムもしくはアプリケーションで、コード開発の全てを行うことができます。以前は、エレクトロニクスとコンピュータサイエンスの知識が多く要求される複雑なプロセスでした。今は、Arduino IDEのおかげで、誰でもこれらのことを学ぶことができます。

現在、Arduino IDEには、以下の3種類があります。

  • Arduino IDE 1.8.x(クラシック)
  • Arduino IDE 2.x(新しい)
  • Arduino Web Editor(オンライン)

典型的な作業の流れ

IDEを使ってコードをArduinoにアップロードするには、通常以下のことを行います。

  1. ボードをインストールする ボード用の正しいパッケージをインストールすることを意味します。パッケージがないとボードを利用できません。IDE内で、簡単な操作ですぐに、ボードをインストールできます。
  2. 新しいスケッチを書く スケッチはプログラムファイルです。マイクロコントローラ上で実行したい命令セットを書きます。
  3. スケッチをコンパイルする 書いたプログラムは、Arduinoにアップロードする際には異なった形式になっています。コードをコンパイルするということは、エラーがないことを確認し、0と1で構成されるバイナリファイルに変換することを意味します。何かに失敗すると、エラーコンソールにその旨が表示されます。
  4. スケッチをアップロードする コンパイルに成功すると、コードをボードにアップロードできるようになります。このとき、ボードとPCを物理的に接続し、正しいシリアルポートを選択します。
  5. シリアルモニタ―(オプション) ほとんどのArduinoプロジェクトでは、ボード上で何が起こっているのかを知ることが重要です。シリアルモニターはすべてのIDEで利用可能で、ボードからPCにデータを送信できます。

Arduino IDE 1.8.x

クラシックなArduino IDE

クラシックなArduino IDE

現在はレガシーなエディタと考えられている、Arduino IDE 1.8.xあるいはJava IDEは、Arduinoができたときにリリースされたエディタです。

i
詳しくはArduino IDE 1のドキュメントを見てください。

Arduino IDE 2.0.x

新しいArduino IDE

新しいArduino IDE

2021年に、Arduino IDE 2.0がリリースされました。新しいIDEはクラシックIDEの機能に加え、自動補完やでバッギングといった機能をサポートします。

i
詳しくはArduino IDE 2のドキュメントを見てください。

Webエディタ

Webエディタ

Webエディタ

Arduino Web EditorはオンラインIDEで、Arduino Cloud suiteの一部です。機能は似ていますが、このエディタは完全にWebベースで、他の機能やオンラインストレージも備えています。Webエディタを使うには、Arduinoアカウントを登録する必要があります。

i
詳しくはWebエディタのドキュメントを見てください。

Arduino IoTクラウド

Ardino IDEクラウド

Ardino IDEクラウド

Arduino IoTクラウドでは、設定からプログラム、デバイスの制御・監視をWebベースのアプリケーションで行うことができます。モノあるいはデジタルツインを使い、ダッシュボードから変数を直接制御することができます。このサービスでは、WebフックやAmazon Alexaのような他のサービスとの統合がサポートされています。

クラウドはだれでも使うことができ、開始するのに事前の経験をあまり必要としません。

ライブラリマネージャー

IDE 1.8.xとIDE2.0.xのライブラリマネージャ―

IDE 1.8.xとIDE2.0.xのライブラリマネージャ―

すべてのバージョンのIDEには、Arduinoソフトウェアライブラリをインストールするための、ライブラリマネージャがあります。何千もの公式ライブラリや寄贈されたライブラリを直接ダウンロードすることができます。ダウンロードすると、各ライブラリのスケッチ例も利用できます。

i
詳しくはArduinoライブラリのページを見てください。

Arduino CLI

Arduino CLI(コマンドラインインターフェイス)

Arduino CLI(コマンドラインインターフェイス)

Arduino CLIは、コードをコンパイルやボードにアップロードするために利用されるコマンドラインツールです。GUIはありませんが、自動化には有用です。熟練したユーザ向けに設計されています。

CLIを適切に利用すると、通常のIDEよりもはるかに速く実行するので、開発期間を短縮することができます。

i
詳しくはArduino CLIのドキュメントを見てください。

クイックリファレンス

このセクションでは、標準のArduino APIの共通要素のいくつかを説明します。これによりいくつかの共通要素を視ることができます。

すべてのArduino APIを知るには、Arduinoとコミュニティにより維持されているArduinoリファレンスを参照してください。数百の項目があり、コード例や詳細な説明が記載されています。

一般機能

setup()

setup()関数は、プログラムの設定を行うための関数です。

void setup() {
    //program configurations here
}

loop()

loop関数は、メインプログラムを格納する場所です。ボードに電源が入っている間、実行され続けます。

void loop() {
    //main program here
}

delay()

delay()関数は指定したミリ秒だけプログラムを停止させます。

blinkのコードを以下に示します。

1
2
3
4
5
6
7
8
void loop() {

   digitalWrite(LED, HIGH); //turn on an LED
   delay(1000); //as program is paused, with the LED on
   digitalWrite(LED, LOW); //program is unpaused, and the LED is turned off
   delay(1000); //program is paused, with the LED off

}
delay()関数はとても有用な関数で、ほとんどすべてのスケッチ例で利用されています。しかし、delay()の間Arduino花にもできなくなるので、コードの効率性という意味では、最適な選択肢というわけではありません。

このため、millis()関数を使うことができます。

millis()

millis()関数は少し先進的ですが、非常に有用な関数です。プログラムを止めることなく、複数のイベントを同時に扱うことができます。プログラムが開始されてからの時間(ミリ秒)を計測することで、実現します。

処理の実行間隔と、最後のイベントの発生時刻の記録を用いて、プログラムを止めることなく、特定の時刻にイベントが発生させる単純なアルゴリズムを作成できます。

以下の例を見てください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
unsigned long previousMillis_1 = 0; //store time for first event
unsigned long previousMillis_2 = 0; //store time for second event

const long interval_1 = 1000; //interval for first event
const long interval_2 = 2000; //interval for second event


void setup(){

}

void loop() {

//check time since program started, and store in "currentMillis"
unsigned long currentMillis = millis();

   //conditional that checks whether 1 second has passed since last event
   if (currentMillis - previousMillis_1 >= interval_1) {
        previousMillis_1 = millis();
       //execute a piece of code, every *1 second*
   }

   //conditional that checks whether 2 seconds have passed since last event
   if (currentMillis - previousMillis_2 >= interval_2) {
        previousMillis_2 = millis();
    //execute a piece of code, every *2 seconds*
   }

}

millis()関数はdelay()関数よりも先進的な概念ですが、早い段階から慣れておいたほうがいいでしょう。

関数

i
詳しくはArduinoの関数を見てください。

実行してリターンするだけの関数や、結果を返す関数を自作することができます。

何も返さないvoid関数の例です。

1
2
3
4
5
6
7
8
9
int x;

void loop(){
    thisFunction(); //execute the function
}

void thisFunction() {
    x++; //increase x by 1 each time function is run.
}

整数値を返すint関数の例です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
int value;

void setup(){

}

void loop(){
    value = returnFunction();
}

int returnFunction() {
    int returnValue = 5 + 2;
    return returnValue;
}

変数定義

変数は、局所的(ローカル)にも大域的(グローバル)にも作成できます。loop()の中で定義される変数は局所的で、スケッチの先頭で定義される変数は大域的です。

1
2
3
4
5
6
7
8
9
int sensorReading = x; //global variable

void setup(){

}

void loop(){
    int sensorReading = x; //local variable
}

データ型

i
詳しくはArduinoリファレンスを見てください。

いくつかのデータ型が利用できます。よく使うものを以下に示します。

1
2
3
4
5
6
7
8
9
bool 
byte
char
double
float
int
long
short
String

int(整数)型のデータを格納する例です。

1
int exampleNumber = 25;

float(実数)型のデータを格納する例です。

1
float exampleNumber = 22.2123002;

文字列を格納するには、Stringを使うことができます。

1
String exampleSentence = "This is a string!";

単純なスイッチやtrue/falseでは、ブーリアンを使います。

1
bool exampleSwitch = true; // true/false

シリアル通信

i
詳しくはシリアルクラスを見てください。

ボードで何が起こっているのかを知るための最も簡単な方法として、シリアル通信はArduinoプログラムに不可欠なものです。

このために、Serialクラスを利用することができます。

Serial.begin()

ボードとPC間のシリアル通信を初期化します。これは、void setup()関数で定義します。このとき、ボーレート(通信速度)も指定します。

1
2
3
void setup() {
    Serial.begin(9600);
}

Serial.print()

シリアルポートにデータを書き出します。書き出したデータは、Arduino IDEのシリアルモニターで見ることができます。

1
2
3
void loop() {
    Serial.print();
}

Serial.read()

入力されるシリアルデータを読みます。

1
2
3
void loop() {
    int incomingByte = Serial.read();
}

GPIO/ピン管理

Arduinoのデジタルピン・アナログピンの状態の管理や読み込みを行います。

pinMode()

デジタルピンを入力もしくは出力として動作するよう設定します。void setup()関数の中で設定します。

1
2
3
pinMode(pin, INPUT); //configures pin as an input
pinMode(pin, OUTPUT); //configures pin as an output
pinMode(pin, INPUT_PULLUP); //enables the internal pull-up resistor
i
詳しくはデジタルピンを見てください。

digitalRead()

デジタルピンの状態を読みます。例えば、ボタンのクリックを検出するのに使います。

1
int state = digitalRead(pin); //store the state in the "state" variable

digitalWrite()

HIGHもしくはLOWの状態を書き出します。コンポーネントをオン・オフするのに使います。

1
2
digitalWrite(pin, HIGH); // writes a high (1) state to a pin (aka turn it on)
digitalWrite(pin, LOW); // writes a low (0) state to a pin (aka turn it off)

analogRead()

アナログピンの電圧を読み、0-1023(10ビットの分解能)の数値を返します。アナログコンポーネントの値を読みます。

1
sensorValue = analogRead(A1); //stores reading of A1 in "sensorValue" variable

analogWrite()

0-255(8ビットの分解能)の値を書きます。ライトの明るさを調整したりモーターのスピードを設定するのに使います。PWMやパルス幅変調とも呼ばれます。

1
2
digitalWrite(pin, HIGH); // writes a high (1) state to a pin (aka turn it on)
digitalWrite(pin, LOW); // writes a low (0) state to a pin (aka turn it off)

PWMは、"~“の印がついている特定のピンで利用できます。

構造

Arduino APIの構造はC++に基づいていて、プログラムの構成要素となります。

条件分岐

条件分岐はどのようなプログラムでも利用される要素です。Arduinoでの、典型的な条件分岐は、ifelseです。

1
2
3
4
5
6
if(variable == true){
    //do something
}
else {
    //do something else
}

コード内で、複数のif/else文を使うことができます。

ループ/繰り返し

指定した回数や条件が成立している間、コードブロックを実行するには、forwhileループがよく使われます。

whileを使ってvariableがtrueの間コードブロックを実行する基本的な方法を以下に示します。

1
2
3
while (variable == true) {
    //do something
}

forを使って指定した回数(この場合は10回)だけコードブロックを実行する基本的な方法を以下に示します。

1
2
3
for (int x = 0; x < 10; x++) {
      //do something 10 times
  }

ループを抜けるには、breakを使います。以下の例では、条件が成立する(variableがtrueになる)と、ループを抜けます。

1
2
3
4
5
for (int x = 0; x <= 10; x++) {
      if(variable == true) {
          break;
      }
  }

算術演算

算術演算は、足し算・引き算・かけ算・割り算や、他の数学計算に使います。

1
2
3
4
5
6
int x = 5;
int y = 2;

x + y; //result is 7
x * y; //result is 10
x - y; //result is 3

比較演算子

比較演算子はある値と他の値を比べるのに使います。条件文で鍵となる要素です。

1
2
3
4
5
6
!= //not equal to
< //less than
<= //less than or equal to
== //equal to
> //greater than
>= //greater than or equal to

条件分で使う例を以下に示します。

1
2
3
if(value > 10) {
    //do something
}

論理演算子

論理演算子(論理否定 !、論理積 &&、論理和 &&)はより高度な比較で使うことができます。

論理積 && を使う例です。

1
2
3
if(value > 10 && otherValue > 10){
    //do something if only if *both* conditions are met
}

論理和 || を使う例です。

1
2
3
if(value > 10 || otherValue > 10){
    //do something if a one *or* the other condition is met
}

論理否定 ! を使う例です。

1
2
3
if(!value){
    //do something if value is false (!)
}

複合演算子

複合演算子は2つのオペレータからなり、ひとつの文で2つの演算を同時に実行します。例えば、足し算(+)と代入(=)を同時に行います。

いくつかの例を示します。

1
2
3
4
5
6
7
8
9
x = 5;
y = 2;

x++; //increase by one, so x is now 6
x--; //decrease by one, so x is now 4

x += y; //x is now 7 (add and assign)
x -= y; //x is now 3 (subtract and assign)
x *= y; //x is now 10 (multiply and assign)

おわりに

このガイドでは、いくつかのArduinoの基本を説明しました。ハードウェアとソフトウェアツール、Arduino APIとは何か、それらの導入です。このガイドは主にArduinoの紹介で、基本概念の理解を目的としています。

さらに学ぶには、ArduinoドキュメントArduinoリファレンスを見てください。詳細なチュートリアルやスケッチ例、APIや他の情報が記載されています。

Arduinoボードの購入は、Arduinoストアを見てください。

Arduino IDEをダウンロードするには、Arduinoソフトウェアのページを見てください。

オリジナルのページ

https://docs.arduino.cc/learn/starting-guide/getting-started-arduino

最終更新日

December 11, 2022

inserted by FC2 system