はじめに
私は電子工作とは、なんらかの情報を取り込み加工した結果を目に見える形で”表現”する手段だと思っています。”表現”とは、役に立つもの、面白いもの、芸術的なものなど何でもかまいません。
”表現”を具現化するために、近頃の電子工作ではインプットとアウトプットの間にはマイコンが使用されることが多く、マイコンを中心に電子部品を周辺回路として接続する設計が多くなされています。
使用する電子部品としては、我々を取り巻く環境を計測する場合、例えば温度計測するためには温度センサーであったり、ある物体までの距離を計測するためには測距センサーであったりします。また、物体を動かす場合であればモーターなどのアクチュエータをマイコンに接続します。
マイコンに接続した電子部を制御するには少なからずプログラムが必要になるのですが、私は電子工作でよく使用しているArduino言語について、まだまだ理解できていない事が多いですが、これまで学習してきたことを復習の意味で整理してみようと思います。
なぜArduinoなのか
電子工作界隈ではいくつかのプログラミング言語が使われますが、よく利用されているArudino言語でプログラムを記述すれば、センサーやアクチュエータをマイコンを使用して比較的簡単に制御する事ができる環境が整っているためこれを利用しない手はありません。
電子部品の製造元からはユーザーが電子部品を容易に使用できるように、予めArduinoに対応したライブラリーと呼ばれる電子部品を簡単に取り扱うための仕組み、および使い方の一例を示したサンプルプログラムが提供されていることが多く、自身で作成するプログラミングに取り込んで活用することが出来ます。
またインターネットには沢山の電子工作界隈の先人たちがおられ、その方々の偉大なるお知恵を拝借する事もできます。
さらに、多くの優良な書籍やマニュアル本も発売されているので、理解度を確認したり系統だった学習が可能です。
兎にも角にも、電子工作を趣味として楽しめばよく、格好良いプログラミングテクニックはさて置き、基本的なところを理解しつつ、読みやすいプログラムの記述になるように注意しながら電子工作をまず始めてみることをおすすめします。色々と電子工作を進めていくうちに疑問に思ったことやプログラム言語の応用的なところは必要に迫られて少しずつ理解できるようになるでしょう。
Arduinoプログラムの基本構成
Arduinoプログラム(スケッチ)は、主に以下の要素で構成されます。
1.基本構造
Arduinoスケッチは、2つの主要な関数を中心に構築されます。
- setup() : プログラム開始時に1回だけ実行される初期設定用の関数。
- loop() : プログラムが繰り返し実行されるメイン処理用の関数。
この2つの関数は必ず必要なもので、仮に記述するコードが無くても省略する事はできません。記述は次の通りです。
void setup() {
// 初期化コード
}
void loop() {
// 繰り返し実行されるコード
}
それぞれの関数の中に以下のような役割を記述します。
・setup()
・ピンのモード設定(例: pinMode())
・シリアル通信の開始(例:Serial.begin(9600))
・センサーやモジュールの初期化
・loop()
・センサー値の読み取り
・アクチュエータ(モーターやLED)の制御
・データ処理や通信
2.その他の構成要素
Arduinoプログラムには、必要に応じて以下の要素が追加されます。
(1) グローバル変数と定数
・プログラム全体で使用する変数や定数を、setup()やloop()の外で定義します。
int ledPin = 13; // LEDピン番号の定義
const float PI = 3.14; // 定数
setup(){
・・・
・・・
}
(2) ライブラリのインクルード
・外部ライブラリを使用する場合、ファイル冒頭にインクルードします。
#include <Servo.h>; // サーボモーターライブラリ
Servo myServo; // サーボオブジェクト
(3) カスタム関数
・再利用可能な処理を独自の関数として定義可能です。
void blinkLED(int pin, int delayTime) {
digitalWrite(pin, HIGH);
delay(delayTime);
digitalWrite(pin, LOW);
delay(delayTime);
}
(4) コメント
・コードの説明やメモを記述しておきます。プログラミングを行っている間は良く内容を理解していますが、時間がたってからプログラムを見返す場合に、内容を忘れていることも多く役立ちます。
// 1行コメントは"//"を使用します
/* 複数行にわたる
コメントは"/*"と"*/"で挟んで記載します */
プログラムの流れ
記述したプログラムの一連の動作は次の通りです。
- コンパイル時にグローバル変数やライブラリが処理。
- setup()が1回実行され、初期化が完了。
- loop()が無限ループで実行され、プログラムが継続的に動作。
注意点
色々な注意点があると思いますが、電子工作では特に次の3点を上げておきます。
- データ型: Arduinoはメモリが限られているため、適切なデータ型(int, byte, floatなど)を選択。
- 時間管理: delay()は処理を停止するため、非同期処理にはmillis()を使用。
- デバッグ: Serial.print()やSerial.println()で変数や状態を確認。
サンプルスケッチ
最後にArduinoプログラムの全体像をイメージするために、LEDを点滅させる基本例を記載します。
// 動作保証無しサンプルプログラムです
#include <Aruduino.h> // このプログラムではこの行は無くても動きます
int ledPin = 13; // 内蔵LEDピン
void setup() {
pinMode(ledPin, OUTPUT); // ピンを出力に設定
}
void loop() {
digitalWrite(ledPin, HIGH); // LEDオン
delay(1000); // 1秒待機
digitalWrite(ledPin, LOW); // LEDオフ
delay(1000); // 1秒待機
}
まとめ
Arduinoプログラムは、setup()とloop()と言う2つの関数を基盤に、変数、ライブラリ、カスタム関数を組み合わせて構成されます。シンプルな構造ながら、センサーやアクチュエータの制御を柔軟に実現可能です。メモリ制約や非同期処理に留意しながら、目的に応じたコードを記述します。
コメント