メインページに戻る


1. 電子工作とは

電子工作とは、電子部品や回路を使って、さまざまな装置やシステムを自ら設計・製作する活動のことを指します。電子工作を行う際には、抵抗器やコンデンサ、トランジスタ、マイコンなどの電子部品を使い、それらを適切に組み合わせることで、特定の機能を持つ回路を作り上げます。例えば、LEDを点灯させる簡単な回路から、リモコンやロボットのような複雑なシステムまで、アイデア次第でさまざまな作品を作り出すことができます。

どのような電化製品もまずは、電子工作でのプロトタイピングから始まるといっても過言ではありません。


1.1 プロトタイピング

はじめは、回路変更や修正が容易なブレッドボードを使って、イメージを具現化していく。動作確認できたらユニバーサル基板で安定化、量産したい場合はプリント基板へと移行していく。

・ブレッドボード
ブレッドボードは、電子回路のプロトタイプを作成する際に使用されるツールです。ピンを差し込むだけで簡単に電子部品を接続でき、はんだ付けを必要としないため、試行錯誤しながら回路設計を行う際に非常に便利です。ブレッドボードは再利用可能で、回路の変更や修正が容易であることから、初心者からエンジニアまで幅広く利用されています。

・ユニバーサル基板
ユニバーサル基板は、汎用的な電子基板で、回路設計者が自由に部品を配置し、はんだ付けを行うことができる基板です。基板には規則的に穴が開いており、これを利用して部品同士を電気的に接続します。ユニバーサル基板は、試作品の作成や小規模な回路の製作に用いられ、ブレッドボードよりも頑丈で信頼性の高い回路を構築することが可能です。

・プリント基板
プリント基板(PCB)は、電子回路を固定し、電気的に接続するための基板です。基板上にはあらかじめ銅の配線パターンが形成されており、部品を基板に取り付けてはんだ付けを行うことで、回路を構築します。プリント基板は、製品化される電子機器において最も一般的に使用されており、複雑な回路を効率的かつ高精度に実装することができます。また、量産に適しており、一貫した品質を保つことができるのも特徴です。


2. Arduinoとは

Arduinoは、手のひらサイズのマイコンボードの名称です。このマイコンボードは、マイクロコントローラー(CPU)に必要な機能や部品を一つにまとめたパッケージで、電子工作やプロトタイピングに最適です。

Arduinoは、センサや入力・出力(IO)デバイスを簡単に接続できるよう設計されており、初心者からプロまで幅広い層に利用されています。豊富なライブラリとサンプルコードが揃っているため、複雑なシステムも手軽に構築できます。

このArduinoにプログラムを書き込むために必要なのが、Arduino IDE(Integrated Development Environment、統合開発環境)です。

Arduino IDEとは、統合開発環境と呼ばれ、ソフトウェア開発に必要なプログラムの作成から書き込み、検証までを一つのソフトまとめたものです。Arduino用のプログラムは、Arduino言語と呼ばれるC/C++をベースにした言語で記述されますが、Arduino IDEはこの言語をサポートしており、簡単にコードを書くことができます。

Arduinoのマイコンの中身は最初は空っぽなので、そこに命令を書き込んであげる必要があります。マイコンは1と0だけのデジタル信号しか読めないので、人が書いた文字(プログラミング)を機械語に変換してあげる必要があります。いわゆるコンパイルが必要です。Arduino IDEならワンクリックでコンパイルが可能です。マイコンがどのような動作をしているか、問題なく動作しているかを検証することもできます。

Arduino IDEができることを簡単にまとめると以下の通りです。

  • プログラムを書く: Arduinoボードを動かすためのコード(プログラム)をパソコンで書くことができる。
  • プログラムのチェック: 書いたプログラムに間違いがないかを自動でチェックしてくれる。
  • 機械語に変換する: プログラムをArduinoボードが理解できる機械語に変換してくれる。
  • Arduinoボードに書き込む: 作ったプログラムをボードに送って、実際に動かすことができる。
  • ライブラリの利用: いろいろな機能を簡単に使えるようにするための「ライブラリ」を追加して使うことができる。
  • サンプルプログラムの活用: あらかじめ用意されたサンプルプログラムを使って、簡単にプロジェクトを始めることができる。
  • シリアルモニタでデバッグ: Arduinoボードがどう動いているかを確認するために、パソコン画面にデータを表示して確認できる。


3. Arduino IDEの準備

PCにArduino用のIDEをインストールします。

まず、Arduinoのホームページに飛びます。

上タブにある「SOFTWARE」をクリック。

自分のPCのOSに合わせて(Macの場合はチップも要確認)、リンクをクリックしてソフトをダウンロード。例えば、土田の場合は Mac OS Apple Sillicon。
※ Macの方でIntelかApple Siliconかわからないって方は 左上のリンゴマーク => このMacについて を押して、チップがintelかAppleかを確認してください

募金を求められます。払いたい人ははらって下さい。払いたくない人は「JUST DOWNLOAD」をクリック。

次に、メルマガ登録を求められます。必要な方はemailを入力。不必要な方は「JUST DOWNLOAD」をクリック。そうするとダウンロードが開始されます。

Windowsの方:インストール画面が出てきたら、デフォルト設定で、どんどん先に進めて大丈夫です。
Macの方:ダウンロードしたdmgファイルをダブルクリック。アプリをドラッグ&ドロップして下さい。

インストールが完了したら早速開いてみましょう。画面構成は以下の通り。

参考画像:https://karakuri-musha.com/inside-technology/arduino-ide2x-install-and-setting01/

スケッチ画面というところにガリガリコードを書いていきます。
下の方にあるウィンドウはコンソール画面で、書き込み結果やエラーなどが確認できます。


4. Arduino IDE 基本的なルール

Arduino IDEを起動した状態で[ファイル]→[新規ファイル]を選択し、新規スケッチを作成します。すると最初から void setup() void loop() が入力されていることがわかると思います。これらはArduino IDEを使って開発する際には必ず定義されています。

プログラムは基本的には上から順に実行されます。

  • プログラムの開始(電源ON)
    • Arduinoの電源が入るか、リセットされると、プログラムが開始します。
  • void setup()
    • プログラムが最初に実行する関数です。
    • ピンモードの設定、変数の初期化、シリアル通信の開始など、一度だけ実行する必要がある設定を行います。
    • このブロックは一回だけ実行されます。
  • void loop()
    • setup()関数が完了すると、loop()関数に移ります。
    • この関数は、その名の通り繰り返し実行されます。
    • センサーからのデータ読み取り、データの処理、出力の制御など、Arduinoの主要な動作をここに記述します。
    • loop()関数は、Arduinoの電源が切られるかリセットされるまで、半永久的に繰り返されます。
  • //
    • スラッシュ二つでコメントアウトできます。この行は実行されません。メモとして使って下さい。
  • /* この部分はコメントアウト */
    • アスタリスクと組み合わせると、複数行まとめてコメントアウトできます。囲まれた部分は実行されません。

4.1 ショートカットキー

「Command+T」or「Ctrl+T」で自動整形が可能です。覚えておきましょう。

4.2 変数の型

int(整数型)

  • 整数を表す変数の型です。小数点がない数(例:-3, 0, 42)を扱います。
  • 例: int number = 5;

float(浮動小数点型)

  • 小数点が含まれる数を表す変数の型です。小数部分が必要な場合に使います。
  • 例: float temperature = 23.5;

char(文字型)

  • 1文字だけを表す変数の型です。文字や記号を1つだけ扱います。
  • 例: char letter = 'A';

bool(ブール型)

  • 真(true)か偽(false)を表す変数の型です。条件判断によく使います。
  • 例: bool isRaining = false;

String(文字列型)

  • 複数の文字を連ねた文字列を表す型です。単語や文章を扱うときに使います。
  • 例: String name = "Arduino";

一先ずこれ以降の話はあまり深く考えなくて良いです(暴論)
一度「文化情報工学基礎演習 #1」を一通り実行したら戻ってきて以下のコードの動作を確認すると良いでしょう。とりあえずスキップする気持ちを持ちつつサラッと説明を読んでみましょう。

void setup() {
  // シリアル通信を開始
  Serial.begin(9600);
  
  // 変数の宣言と初期化
  int number = 5;          // 整数型
  float temperature = 23.5; // 小数点型
  char letter = 'A';        // 文字型
  bool isRaining = false;   // ブール型
  String name = "Arduino";  // 文字列型
  
  // シリアルモニタに出力
  Serial.println(number);        // 5
  Serial.println(temperature);   // 23.5
  Serial.println(letter);        // A
  Serial.println(isRaining);     // 0(falseは0、trueは1)
  Serial.println(name);          // Arduino
}

void loop() {
  // 繰り返し処理を行う場所(今回は何もしない)
}

余力あれば以下のタスクを実行しておくと、理解が深まります。

int型に小数を入れてみる:

  • int number = 2.5; のようにしてみて、どうなるか確認する(結果として2が入ることを確認)。整数型は小数点以下を切り捨てることが理解できます。

float型に整数を入れてみる:

  • float temperature = 30; としてみて、シリアルモニタに表示される値が30.0になることを確認する。小数点型は整数も扱えるが、小数点が付くことが理解できます。

char型に複数文字を入れてみる:

  • char letter = 'AB'; としてみて、エラーが発生することを確認する。文字型は1文字しか扱えないことが理解できます。

bool型に数字を入れてみる:

  • bool isRaining = 10; としてみて、シリアルモニタに1が表示されることを確認する。0以外の数字はすべてtrueとして扱われることが理解できます。

String型に1文字だけ入れてみる:

  • String name = 'A'; としてみて、エラーが出ることを確認する。文字列型は一つの文字でもダブルクォーテーションで囲む必要があることが理解できます。

4.3 if文

if文とは?
 if文は、プログラムの中で条件をチェックして、その条件が「真(true)」の場合に特定の処理を実行するためのものです。簡単に言うと、「もし〜ならば、この処理をする」という命令です。

基本の形
 if文の基本的な書き方は次のようになります。

if (条件) {
// 条件が真の場合に実行される処理
}

具体的な例
 例えば、次のように使います。

int temperature = 30;

if (temperature > 25) {
// もし temperature が 25 より大きければ、次のメッセージを表示する
Serial.println("暑いですね!");
}

この例では、temperatureという変数の値が25より大きい場合、「暑いですね!」というメッセージがシリアルモニタに表示されます。もしtemperatureが25以下なら、このメッセージは表示されません。

else文との組み合わせ
 if文には「else文」というものを組み合わせることもできます。これは、「条件が真ではない場合に何をするか」を指定するためのものです。

int temperature = 20;

if (temperature > 25) {
// もし temperature が 25 より大きければ
Serial.println("暑いですね!");
} else {
// そうでなければ(25以下なら)
Serial.println("涼しいですね!");
}

この場合、temperatureが25より大きいと「暑いですね!」が表示され、25以下だと「涼しいですね!」が表示されます。

4.4 for文

for文とは?
 for文は、特定の処理を何回も繰り返し実行したいときに使う命令です。たとえば、同じことを10回繰り返したり、リストの中の全ての要素に順番にアクセスしたりする場合に便利です。

基本の形
 for文の基本的な書き方は次のようになります。

for (初期化; 条件; 増減) {
// 繰り返し実行したい処理
}
  • 初期化: 繰り返しを始める前に一度だけ実行される部分です。通常はループカウンタの初期値を設定します。
  • 条件: 繰り返しを続けるかどうかを決める条件です。この条件が真(true)の間、ループが続きます。
  • 増減: ループを一回実行するたびに、この部分が実行されます。通常はループカウンタを増やしたり減らしたりします。

初期化 => 条件チェック => 実行 => 増減 => 条件チェック => 実行 => 増減 => 条件チェック => … (以降繰り返し)

具体的な例
 次の例は、数字を1から4まで順番に表示するものです。

for (int i = 0; i < 5; i++) {
Serial.println(i);
}
  • 初期化: int i = 0; で、iという変数を0に初期化します。
  • 条件: i < 5; で、iが5未満の間ループが続きます。
  • 増減: i++ で、ループが一回終わるたびにiを1増やします。

このコードを実行すると、シリアルモニタには次のように表示されます。

0
1
2
3
4

以下はより具体的な動作の中身です。

4.5 ローカル変数/グローバル変数

ローカル変数とは?
 ローカル変数は、プログラムの特定の範囲(関数やブロックの中)でだけ使える変数です。関数やブロックが終わると、ローカル変数は消えてしまいます。

例:

void setup() {
int number = 10; // これはローカル変数
Serial.println(number); // ここではnumberが使える
}

void loop() {
// ここではnumberを使えない
}
  • numberという変数はsetup()の中でしか使えません。loop()の中では、このnumberは存在しないため使えません。

グローバル変数とは?
 グローバル変数は、プログラム全体で使える変数です。関数の外で宣言されるため、どの関数からでもアクセスできます。

例:

int number = 10;  // これはグローバル変数

void setup() {
Serial.println(number); // ここでもnumberが使える
}

void loop() {
Serial.println(number); // ここでもnumberが使える
}
  • numberという変数は、プログラムのどこからでも使えます。