プログラムと電子回路1
今回の目標
電子回路をプログラムで制御する方法について学び、簡単なプログラムを作れるようになる
Arduinoというマイコンの使い方を簡単に実習します。 少し難しい部分がありますが、2週間かけてなんとなくどんなものかをつかんでください。
説明
マイコン
マイコンはマイクロコンピュータ(Micro computer)の略であり、家電などの組み込み機器に主に使われる小さなコンピュータです。 私たちがふだん使うコンピュータには、WindowsやmacOS, あるいはiOSやAndroidといった基本システム(OS)が入っています。 しかし、マイコンの中にはOSがないことさえあります。それほど単純なコンピュータです。
マイコンは、センサで物理的な何かの値を読み取り、それに応じて機器を制御するために多く使われています。
センサの例:
- 温度センサ
- 加速度センサ
- 距離センサ
- 光センサ
- 音センサ(マイク)
Note
身近な家電(炊飯器や洗濯機など)の内部にはどんなセンサがあり、マイコンはセンサの値によってどんな制御をしているか考えてみましょう。 たとえば、冷蔵庫は扉が開けられて冷蔵室の温度が上がると、温度センサが感知してコンプレッサーの出力を上げていると考えられます。
Arduino
今回はArduinoというマイコンボードを使います。
Arduino is an open-source electronics platform based on easy-to-use hardware and software. It's intended for anyone making interactive projects.
arduino.ccより引用
今回使用するのはArduino UNOというボードです。この他にも、NanoやMegaなどさまざまなボードがあります。
演習の実施方法
この演習では、1人1つ Arduino UNO(の互換機)を含むキットを用意しました。授業ごとに回収予定なので、大事に使ってください。
まずはWeb上のシミュレータであるTinkercadで実機の動作をシミュレーションします。そのあとで、実機で同じことをします。
Note
Arduinoなど技術系の資料は英語のものしかないことがよくあります。専門用語さえ覚えていれば中学レベルの文法で理解できることがほとんどなので、あまり身構えず積極的に英語の情報も吸収してください。
演習の進捗確認
この授業では、皆さんの進捗を確認してサポートするために進捗確認システムを導入しています(田島研究室の5年生が作りました)。
以下のような「💪進捗確認」が出てきたら、該当の場所にチェックをつけてください。
まずは試してみましょう。進捗確認1にチェックしてください。
💪進捗確認
進捗確認1にチェックしてください。
Tinkercadを使ったシミュレーション
シミュレーションの初期設定
まずはLMSにTinkercadへのリンクがありますので、アクセスしてください。ニックネームで参加し、学籍番号(2022e99
のような記号)を入力してください。
ページが開いたら、Tinker→回路を選択してください。
下の方にチュートリアルがあるので、左から順番に始めましょう。
時間のあるかぎり、以下のチュートリアルを進めてください。
- シミュレーションを開始する
- コンポーネントを編集する
- コンポーネントを配線する
- コンポーネントを追加する
回路を配置
まずは新しい回路を作ります。以下の順番でクリックしてください。
Arduinoを配置します。
ビルトインLEDを点灯
まずはLEDを点滅させるプログラムを作りましょう。これはLチカと呼ばれ、マイコンボードにおける最も基本的なプログラムです。
じつはすでにコードが書かれているので、見ていきましょう。コード
をクリックします。
右のほうにブロックを組み合せたようなプログラムが出てきました。これもプログラムといえばプログラムですが、(上級者にとっては)テキスト形式のほうが見やすいのでテキストで見ます。中身は全く同じプログラムです。
Note
ブロックを組みあわせて作るプログラミングをブロックプログラミングと呼びます。教育向けに使われることが多いです。Scratchが最も有名です。
編集モードを文字にします。
すると、プログラムが出てきました。
以下のようなプログラムが書かれています。
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
digitalWrite(LED_BUILTIN, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(LED_BUILTIN, LOW);
delay(1000); // Wait for 1000 millisecond(s)
}
シミュレーションを開始
をクリックすると、Arduinoに内蔵されたLEDが点滅します。
💪進捗確認
LEDが点滅したら、進捗確認2にチェックしてください。
このプログラムはあまり使いやすくないので、少し改良して以下のようにしましょう。
int led = 13;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(led, LOW);
delay(1000); // Wait for 1000 millisecond(s)
}
プログラム全体を通して変わらない数13
をled
という変数に入れておくことで、後でこの数を変えたいときに簡単に変えることができ、コピペのミスも少なくなります。
Note
//
で始まる文はコメントです。プログラムとしては動作しません。ここでは、プログラムが何をしているか説明するためにコメントを使っています。
LEDを接続して点灯
Arduinoにはたくさんのピンがあり、これらのピンから電圧を出力したり、逆に電圧計のように電圧を読み取ることができます。今回は、出力ピンとGNDの間にLEDと抵抗を接続して点灯させます。
下の図に接続を示します。今回は3番ピンを使います。
Note
LEDは必ず抵抗と直列に接続して使います。抵抗がないと、LEDに電流が流れすぎて燃えます。
プログラムの最初の行を変更してください。
int led = 3;
実行するとLEDが点滅しましたか?
💪進捗確認
LEDが点滅したら、進捗確認3にチェックしてください。
Note
LEDをもっと明るくしたい場合、接続した抵抗の抵抗値を小さく(300Ωくらい)してみましょう。
点滅の間隔を短くしたい場合はどうすればよいでしょう?プログラムの適切な数値を書き換えてください。
Note
delay(時間)
関数の時間はミリ秒単位です。
実際の機器を使った演習
ここからは配布したArduinoを使って演習を行います。
ハードウェアの確認
配布した箱から次のものを取り出してください。
- Arduino本体
- USBケーブル
- ブレッドボード
- 炭素皮膜抵抗 1kΩ
- LED(好きな色1つ)
- 配線用ケーブル(2本以上)
Arduinoとパソコンを接続
まずは、Arduino IDEを起動します。
Tip
Arduino IDEはインターネットで配布されているため、自分のパソコンにインストールして使うこともできます。
arduino.cc/en/software
起動したら、上のメニューからツール
→シリアルポート
を選択します。COM○○
という表示がある人もいれば、何も出ない人もいます。この状態をスマホで写真を撮るなどして記録します。
次に、USBケーブルを使って、Arduinoとパソコンを接続します。もう一度ツール
→シリアルポート
を選択すると、正常であればCOM○○
という表示が一つ増えているはずです。増えたものを選択してください。○○
の部分をポート番号といいます。
Note
接続したのにシリアルポートの項目が増えない場合、接続がうまくいっていません。教員を呼んでください。
次に、ツール
→ボード
を"Arduino Uno"に設定します。
これで、Arduinoにプログラムを書き込む準備ができました。
サンプルプログラムを実行
上のメニューからファイル
→スケッチの例
→01.Basics
→Blink
を開きます。
以下のようなプログラムが表示されます。
// 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
}
このプログラムをArduinoに書き込みます。左上に✓
と→
のアイコンがありますが、→
をクリックしてください。
💪進捗確認
LEDが点滅したら、進捗確認4にチェックしてください。
Note
エラーが発生したら教員を呼んでください。
LEDを接続して点灯
シミュレーションと同様に、3番ピンとGNDの間にLEDと1kΩの抵抗を接続してプログラムを書き換え、実行します。
💪進捗確認
LEDが点滅したら、進捗確認5にチェックしてください。