前回の記事では、さまざまな種類の Arduino ハードウェアを Mac に接続する方法について説明しました。ここでは、それらでプログラミングを開始して独自のプロジェクトを作成する方法を説明します。
はじめる
Arduino をプログラムするには、Arduino IDE (統合開発環境) が必要です。arduino.ccWebサイト。 IDE をダウンロードしてインストールする方法については前の記事で説明しましたが、ここでも繰り返します。
Mac で、次の場所に移動します。arduino.ccをクリックしてください"ソフトウェア"をクリックし、[ダウンロード オプション] セクションで、Intel または Apple Silicon の Mac バージョンのリンクをクリックします。
現在の開発バージョンを探索したくない場合を除き、しないでください「Nightly Builds」セクションの下にリンクが必要です。 Nightly ビルドは不安定でバグが含まれている可能性があります。
ダウンロード ページには Arduino オンラインへのリンクもあります。ウェブエディター、プログラムを次の場所に保存できます。Arduinoのクラウド。
IDE をダウンロードしたら、IDE で Mac に Arduino を接続してセットアップする方法の詳細については、前の記事を参照してください。 IDE から Arduino にコードをアップロードするには、接続が必要です。
基本
Arduino をプログラムするには、基本的なプログラミング スキルのみが必要です。 Arduino の C に似たプログラミング言語を使用することも、またはパイソン、しかしここでのみ使用しますC以下の例では。
Arduino プログラムでは、と呼ばれますスケッチ、基本的に、特定のタスク用に Arduino をセットアップするコードを作成し、Sketch が Arduino デバイスにアップロードされると、Arduino マイクロコントローラーによって繰り返し呼び出される連続ループを実行します。このループは通常、センサーまたはユーザーからの入力を待ち、制御信号をセンサーやデバイスに送り返して、何らかの出力を表示します。
ループ コードはインターネットに接続し、インターネットと通信することもできます。
IDE のライブラリ マネージャーを使用して、さまざまなセンサー デバイスやシールドをサポートするサードパーティのライブラリをインストールすることもできます。ライブラリ マネージャーにアクセスするには、スケッチ ウィンドウを作成するか開いて、左側にある本のセットのように見えるアイコンをクリックします。
ペインが表示され、上部で 2 つのポップアップ メニューのいずれかをクリックして、タイプとトピック別に利用可能なライブラリを参照できます。
を選択して、インストールされているライブラリの更新を確認することもできます。「更新可能」からの"タイプ:"メニュー。
[ライブラリ マネージャー] ペインでは、公式およびサードパーティのライブラリをダウンロードできます。ライブラリは、特定の機能またはデバイスのサポートを IDE に追加するコード バンドルです。
たとえば、特定のブランドの非汎用センサーを使用する場合は、最初にそのライブラリをダウンロードしてインストールする必要があります。
ライブラリマネージャーウィンドウの上部にある「トピック」ポップアップメニューをクリックすると、ライブラリのさまざまなカテゴリを表示できます。
ほとんどの Arduino スケッチはシンプルで短く、Arduino IDE で指定された「Sketchbook」フォルダーに保存されます。設定ウィンドウ。ここで をクリックすると、IDE がスケッチを保存する場所を変更できます。ブラウズ「スケッチブックの場所」の横にあるボタン:
スケッチのファイル拡張子は「革新」を表す .ino です。
ここでテキスト エディターとコンパイラーの設定を変更することもできます。サポートされていない Arduino をお使いの場合は、ウィンドウの右下にある書類の束のように見える小さなアイコンをクリックして、そのボード サポート ファイルまたは URL を追加できます。
をクリックしてください「非公式ボードのサポート URL のリストについては、ここをクリックしてください。」[追加のボード マネージャー URL] ウィンドウのテキストを入力して、膨大な数のボードArduino の GitHub でサポートされています。
Arduino IDE を初めて開くと、テキスト ウィンドウに簡単なプログラムの概要を含むサンプル スケッチが表示されます。
また、膨大な数のコードサンプルが以下にあります。ファイル -> 例サブメニュー項目。サンプルはメニューの「Built-In」と「UNO Examples」ごとに整理されています。カスタムインストールされたライブラリでも例が提供される場合があります。
最初のスケッチ例
最初の例では、組み込みのまばたき例。開くには、選択しますファイル -> 例 -> 0.1Basics -> Blinkサブメニュー項目。
数秒後、新しいエディタ ウィンドウが開き、Blink の例が表示されます。 IDE のエディタ ウィンドウの上部にある接続ポップアップ メニューから Arduino ボードとポートが選択されていることを確認してください。
Blink の役割は 1 つあり、Arduino の内蔵 LED を点滅させます。サンプルの説明は、エディター ウィンドウの上部とオンラインのコメントにあります。
コードでは、コメントプログラマーがコードの動作を説明するために残すメモです。コメントはコンパイル中に無視されます。
IDE エディタ ウィンドウでは C スタイルのコメントが使用されます。コンパイラ/* と */ で囲まれたものはすべて無視されます。単一行のコメントは // で始まりますが、1 行のみにする必要があります。 // 以降は無視されます。
大きいところをクリックすると、確認するエディターの左上隅にあるチェックマーク アイコンの付いたボタンをクリックすると、IDE はそのウィンドウでコードをコンパイルします。
コンパイル中、エディタ ウィンドウの下部に出力ペインが黒色で表示され、進行状況が示されます。エラーがない場合は、次のようなメッセージが表示されます。
"Sketch uses 924 bytes (2%) of program storage space. Maximum is 32256 bytes. Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for local variables. Maximum is 2048 bytes."
またはそれに似たもの。
エラーがある場合は赤いテキストで表示され、エラーがなくなるまでコードを修正する必要があります。一部のエラーは重大ではなく、スケッチは問題なく実行されますが、他のエラーによりスケッチがまったく実行されなくなる場合があります。
[出力] ペインの右上隅にある小さなアイコンをクリックすると、出力メッセージをクリアできます。エディタ ウィンドウの右下隅にある小さな四角形のアイコンをクリックすると、出力ペインを完全に非表示にできます。
をクリックすると、アップロードの横にあるボタン (大きな右矢印アイコンのあるもの)確認するボタンを押すと、IDE はコンパイルされたバイナリ プログラムを指定したポートの Arduino にアップロードします。 Arduino マイクロコントローラーがそこから引き継ぎ、Arduino 上でコードを実行します。
アップロード中、Arduino に RX (受信) LED が内蔵されている場合は、スケッチ データを受信すると LED が急速に点滅するのが見えるはずです。
何らかの理由でスケッチをアップロードできなかった場合、出力ペインに説明とその理由がリストされます。
C ベースの言語について一言
C が発明されたのは、ベル研究所1969年にブライアン・ケヒニガン、デニス・リッチー、 そしてケン・トンプソン。コンパイルされた C は非常に高速で、ほとんどの TCP/IP ネットワーク スタックとオペレーティング システム カーネルは C で書かれています。
C には ISO 標準もあります。ISO/IEC 9899:2018
C はオペレーティング システムの言語です。 1980 年代後半から 1990 年代の初期の Mac アプリの一部は、C またはその後期バージョンのいずれかで書かれていました。C++。
Arduino IDE プログラミング言語は、C に似た構文に基づいています。
ほとんどの C 系言語では、すべてのコード行が「;」で終わります。 — セミコロンがないとコードはコンパイルされず、エラーが発生します。
ほとんどの C ベース言語では、事前定義されたコード テキスト ファイルも使用されます。ヘッダー、通常は「.h」ファイル拡張子が付いています。
.h ファイルは、プロトタイプと呼ばれる、関数にアクセスする方法を記述する事前定義されたコードのセットと考えてください。各プロトタイプは、関数名、関数に渡されるパラメーター (括弧内)、および戻り値の型これは関数の終了時に関数から返されます。
Sketch コードでライブラリまたは組み込み関数を呼び出す (アクセスする) 場合、各関数の呼び出し方法は、どこかの .h ファイルで定義されているプロトタイプと一致する必要があります。ライブラリも同様に機能します。
たとえば、プロトタイプで、関数が 2 つの入力パラメーター (括弧内) と特定の種類の戻り値 (関数名の前にリストされている) を受け取る必要があると指定されている場合、その関数をまったく同じ方法で呼び出す必要があります。それ以外の場合は、コンパイル中にエラーがスローされます。
ヘッダー ファイルには、「define」と呼ばれる C スタイルの構成要素を含めることもできます。定義では、数値やテキストなどの別のコード式としてラベルを作成します (弦C)、計算、またはその他の関数。
定義を作成するには、#define C を使用します。プリプロセッサ指令。例えば:
#define FALLING 2
このコードは、ラベル「FALLING」を値 2 として定義します。コード内で FALLING を使用する場合は、コンパイル時に数値 2 が置き換えられます。 #define は非常に複雑になる可能性がありますが、コードを短くして読みやすくすることができます。
Arduino IDE は #defines を使用して、I/O ピン番号、モード、その他のものを定義します。
独自のヘッダーと #define を作成することもできます。
ヘッダーは、他のファイル (他の .h ファイル、またはスケッチ自体) に含めることができます。インクルードされた各 .h ファイルの内容は、コンパイル時に、インクルードされているファイルの先頭に挿入されます。
別のファイルにヘッダーを挿入するには、#include C ディレクティブを使用します。たとえば、Arduino.h の上部には次のように表示されます。
#include "binary.h"
これは、コンパイル時に「binary.h」という別のヘッダー ファイルを Arduino.h の先頭にインクルードします。
上に示したスクリーンショットを見ると、サンプル スケッチに 2 つの .h ファイルが含まれていることがわかります。
EEPROM.h Ethernet.h
最初はこれらすべてが混乱するように思えるかもしれませんが、実際は非常に簡単です。関数プロトタイプと #define を .h ファイルに配置すると、他の多くのファイルで使用できるようになります。次に、それらを他のファイルに #include すると、コンパイラはコンパイル中に指定された場所にそれらを挿入します。簡単。
定義を個別のヘッダーに整理すると、次のことが可能になります。コードの再利用。
.h ファイルは定義として、Sketch ファイルはそれを使用するプログラムとして考えてください。
Apple のような最新のプログラミング言語迅速そしてマイクロソフトのC#簡素化のため、ヘッダー ファイルは廃止されました。
まばたきの例に戻る
Blink サンプルの setup() 関数には、次の 1 行のコードがあります。
pinMode(LED_BUILTIN, OUTPUT);
LED_BUILTIN と OUTPUT はどちらも Arduino ヘッダーによって定義された #define です。上で見たように、Arduino のメイン ヘッダー ファイルの名前は Arduino.h です。
Mac キーボードの Command キーを押したまま、エディタ ウィンドウで任意の #define をダブルクリックすると、対応する .h ファイル内の定義にジャンプできます。同じエディタ ウィンドウに新しいタブが開き、一致する .h ファイルが表示されます。
LED_BUILTIN は pins_arduino.h で「13」として定義されています。
#define LED_BUILTIN 13
これは、Arduino のピン コネクタ (ヘッダとも呼ばれます) のデジタル ピン 13 を示します。
しかし同時に LED_BUILTIN は、Arduino 回路基板自体に実際に組み込まれている LED を使用するように Arduino に指示します。接続すると、ジャンパー線Arduino ヘッダーの D13 をピンに接続し、それを LED に接続します。ブレッドボード、その LED も点滅します。
pinMode' は、Arduino 上の特定の I/O ピンの動作 (入力または出力) を設定する組み込み Arduino 関数です。この場合、Arduino に LED_BUILTIN (13) ピンを出力ピンとして使用するように指示しています。
Wiring_digital.h ヘッダー内の pinMode() のプロトタイプの戻り値の型は「void」であるため、この関数は値を返しません。 「void」は「何もない」を意味する C データ型です。 「void」戻り型を持つすべての C 関数は何も返しません。
コンパイルされた Blink スケッチが Arduino 上で実行されると、最初に setup() が実行されてハードウェアがセットアップされ、その後、loop() が永久に繰り返し実行されます。 Blink の例では、loop() は単純にピンのオンとオフを 1 秒の遅延で切り替えます。
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000);
電気工学用語では、「高」と「低」は単に「オン」と「オフ」を意味します。
digitalWrite() は、指定されたデジタル U/O ピンを単純にオンまたはオフにする組み込みの Arduino 関数です。この場合、接続されている Arduino ピン D13 または LED_BUILTIN は何であれ。
late() は、指定された間隔が経過するまでさらなる処理を停止する遅延関数です。 late() は、ミリ秒単位の単一の時間値を受け取ります。値「1000」は 1 秒です。
先に進み、アップロードBlink Sketch IDE ウィンドウのボタンをクリックします。
それでおしまい。これで、最初のスケッチをコンパイルして実行できました。すべてがうまくいけば、Arduino の内蔵 LED が点滅するのがわかります。
ほとんど盾また、Arduino の内蔵 LED と同じ動作をする LED も内蔵されています。
ブレッドボードの例
Blink の例の動作を確認したので、同じことを行います。ただし、今回はブレッドボード上の外部 LED を同時に点滅させます。この例では、以下が必要になります。
まず、2 本のジャンパー線を対応する Arduino ヘッダーの「D13」または「13」と「GND」の穴に差し込みます。
「D13」ワイヤのもう一方の端をブレッドボード内部の 1 列目の任意の場所 (外端の「+」および「-」電源レールを除く任意の位置) に差し込みます。
次に、LED の長い (+) 脚が同じ位置になるように LED をブレッドボードに取り付けます。水平取り付けたばかりの「D13」ワイヤーとして列に接続します。
LED を横に向けて、穴 3 つほど離れたブレッドボードの長い端に向かって短い脚が穴に挿入されるようにします。
次に、220 オームの抵抗器を、短い LED の脚と同じ水平の列に、ボードの反対側の電源レールに向かって挿入します。ボードの中央を横切ると完璧に機能します。
抵抗器のもう一方の端を、穴 3 つほど離れた同じ方向の別の穴に挿入します。
これで、「D13」ワイヤ、LED、および抵抗器が、引き伸ばされた「Z」の形をしたパターンになっているはずです (下の写真を参照)。
ブレッドボードの反対側の電源レール前の最後または最後から 2 番目の穴に、「GND」ジャンパー ワイヤのもう一方の端を挿入します。最終的なアセンブリは次のようになります。
ブレッドボードのすべての穴の下に金属レールのグリッドがあることを忘れないでください。コンポーネントがブレッドボード上でどの方向に配置されていても、回路を完成させるには、コンポーネント間、Arduino 間、およびジャンパー ワイヤによる接続を常に形成する必要があります。
すでに点滅サンプルを Arduino にアップロードしている場合は、LED が点滅し始めるのが確認できるはずです。 Arduio 上の LED とブレッドボード上の LED の両方が同時に点滅するはずです。そうでない場合は、戻ってすべての接続をもう一度確認してください。
LEDなどの一部の電子部品は、極地: 電流は一方向にのみ正しく流れることができます。ほとんどの抵抗器などの他のコンポーネントは無極性であり、電流はどちらの方向にも同じように流れることができます。
late() 関数に渡されるタイミング値をいじって、LED の点滅速度を速くしたり遅くしたりすることができます。大きな値と小さな値を試して、何が起こるかを観察してください。
スケッチにdigitalWrite() ステートメントとlay() ステートメントをさらに追加すると、点滅パターンを変更できます。たとえば、LED を点滅させることができます。モールス信号。
最後の例: 信号機シミュレーター
Arduino の LED を点滅させる方法を理解したところで、最後にもう少し複雑な例を 1 つ使用します。サードパーティの UNO ブレークアウト ボードと外部信号センサー ボードを使用して、3 色の交通をシミュレートします。ストップライト。
実際、このようなストップライト センサーは数多くあります。eBay5ドル未満で。さえありますジェイクから入手可能な4ウェイのものの上プリント基板ウェイさんのプロジェクトページ。
または、次の方法を見つけることもできます。一時的なものPCBWayにもカウントダウンタイマーLCDが付いています。
この例では、最も単純な 3 つの光センサーを使用し、実際の信号機と同じように、短い間隔で色を変更します。
これらの信号機ボードには通常、各色の LED に 1 つと GND に 1 つずつ、合計 3 つまたは 4 つのピンがあります。このコードは Blink に似ていますが、1 つを除くすべてのライトをオフにし、delay() を使用して待機し、そのライトをオフにし、次のライトを順番にオンにする点が異なります。
まず、信号機センサーを、Arduino UNO にインストールした一般的なブレークアウト シールドに接続します。ブレークアウト シールドは、アナログ ピンとデジタル ピン、GND ピン、Bluetooth、およびシリアル ケーブル コネクタのバンクを含むシールドです。
当社の信号機センサーには、R、G、Y、GND の 4 つのピンがあります。デジタル ピン 9、10、11 をそれぞれ R、G、Y に接続し、4 番目のピン GND をシールドの GND ピンに接続します。
次に、Arduino IDE を開いて、新しいスケッチを開始します。まず、スケッチの先頭の setup() の上で必要なものをいくつか定義します。
まず、1 秒が何ミリ秒であるかを定義して、delay() に渡す秒数を指定できるようにします。
#define kMillisecondsInSec 1000
次に、黄色のライトを何秒間点灯させるかを定義します。
#define kSecondsForYellow ( kMillisecondsInSec * 4 )
次に、Arduino の赤、黄、緑にどの 3 つのピンを使用するかを定義します。定義を使用する代わりに、ピンの値をそれぞれに割り当てます。グローバル変数、この場合は int 型の変数 (C によって定義されます):
int RED = 9; int YELLOW = 10; int GREEN = 11;
考えてみましょう変数名前付きコンテナとして、その内容 (値) をいつでも変更できます。変数には、タイプどのような種類の値を保持できるかを指定するためです。グローバル変数には、プログラム内のどこからでもアクセスできます。
関数内で宣言された変数が呼び出されます地元変数であり、1 つの関数内でのみ使用できます。これはと呼ばれます変数スコープ。
次に、グローバル変数を定義し、それらに計算を割り当てて、秒とミリ秒、および緑、赤、黄色のライトの遅延値を秒単位で計算する方法を簡素化します。この場合、「unsigned long int」と呼ばれる変数タイプを使用します。これは int に似ていますが、より大きな値を保持できます。
unsigned long int millisecondsInMinute = ( kMillisecondsInSec * 12 ); // # of milliseconds in 1 min. unsigned long int minutesForGreenAndRed = ( 1 * millisecondsInMinute ); // number of minutes to leave green, red lights on. unsigned long int yellowDelay = kSecondsForYellow; // Time to leave yellow light on. Yellow delay is shorter than red/green.
次に、setup() で、上で定義したピンのピン モードを、赤、黄、緑に 1 つずつ定義します。
void setup( void ) { pinMode( RED, OUTPUT ); pinMode( YELLOW, OUTPUT ); pinMode( GREEN, OUTPUT ); }
これにより、これら 3 つのピンを出力値 (この場合はオンまたはオフ) に使用することが Arduino に指示されます。
LOOP() では、まず赤/黄のライトをオフにし、緑のライトをオンにしてから、onDelay 秒間待機します。
void loop( void ) { // Green - Start digitalWrite( RED, LOW ); digitalWrite( YELLOW, LOW ); digitalWrite( GREEN, HIGH ); delay( onDelay );
onDelay の後、緑色のライトがオフになり、黄色のライトがオンになり、 yellowDelay 秒間待機します。
digitalWrite( GREEN, LOW ); digitalWrite( YELLOW, HIGH ); delay( yellowDelay );
yellowDelay の後、黄色のライトをオフにし、赤色のライトをオンにして、onDelay 秒間待ちます。
// Red digitalWrite( YELLOW, LOW ); digitalWrite( RED, HIGH ); delay( onDelay );
最後に、onDelay が経過した後、赤色のライトをオフにして、シミュレーションを効果的にリセットします。
digitalWrite( RED, LOW ); }
次回ループが実行されるときは、緑色のライトから始まる同じシーケンスが繰り返されます。このループは停止するまで永久に実行されます。これで、動作する信号機シミュレーターが完成しました。
スケッチを Arduino にアップロードしたら、Arduino の DC バレル ジャックに外部電源を接続し、USB ケーブルを取り外しても、シミュレーションは引き続き実行されます。
これは Arduino の利点の 1 つです。マイクロコントローラーをプログラムすると、ホスト コンピューターから独立してプログラムを実行できるようになります。
Arduino には、センサーとして機能し、情報を表示し、入力を待ち、音を出し、カメラを使用して他のデバイスに画像を送り、状態を監視し、モーターを駆動するなど、ほぼ何でもできるようになります。
Arduino の C 系言語を学習するために読む価値のある入門書がいくつかあります。
- Arduino プログラミング: スケッチを始める
- Arduinoの必需品
- Arduino のビギニング C
- Arduino のための C の学習
- Arduino テクニカルリファレンス
- Arduino クックブック
- Arduinoをマスターする
これらの簡単な例は、Arduino のプログラミングを始めるのに役立ちます。プログラミング スキルを高めて自信が持てるようになると、より大きな例に拡張できるようになります。
今後の記事では、Arduino デバイス、シールド、I2C や SPI などのバスのプログラミング、および複雑なデバイス環境の作成について説明します。