pg11
テーマ 電子工作とプログラム(Arduino入門)
事例紹介(学外編)
電子的な制御装置を用いた作品の紹介
・ギャル電(@GALDEN999)
・コンセプトは「理系男子の夫に受けそうなもの」独自の世界を展開するスピンオフユニット |BreadBoard Baking | IAMAS OB/OGインタビュー
http://interview.iamas.ac.jp/_002/
文化庁メディア芸術祭 歴代受賞作品
第18回(2014年)超電波砲スーパーDX弐号機 GOCCO ltd. フードビジネス学科の木村先生が経営している会社がイベント用に制作した作品
感覚をだますメディアアート「Shadow touch!!」 http://youtu.be/3itekp9YaAs
Arduinoについて
Arduinoはコンピュータです。ワンボードマイコンと呼ばれるタイプの製品です。
パソコンやスマフォなどと異なりマウスやディスプレイなどの入出力装置は付属していません。
入力装置はボタンやセンサーなどが1個から数個、出力装置はLEDやモーター、スピーカーなどが1個から数個を接続して利用します。
入出力装置を電子工作で自作して作品制作に利用します。
OSは入っていません。制御用のプログラムをパソコンからArduinoのメモリに書き込んで実行させます。
Arduinoの制御プログラムをスケッチと呼び、開発用のプログラム言語はC言語とC++言語を元にしたものです。
開発のジャンルは組み込みソフトウェア開発です。
パソコンと接続しなくてもモバイルバッテリーを電源にして動作します。作品にバッテリーとArduinoを組み込んで作品も制作できます。
Arduinoはパソコンやスマフォよりも低価格です。
今回利用するスターターキットの Arduino は Arduinno UNO です。
Arduinoを利用した作品について調べてみましょう。
2020年度用シナリオ
動作確認:
ARDUINOプロジェクトブックに従い進める。
P.11 ボード上の部品とピン配置の確認
P.16 セットアップ
USBケーブルで Arduino と PC を接続する。 緑LEDが点灯する。
→ 点灯しない場合。USBに電力が供給されていない。またはArduinoの故障です。その場合、スターターキットの交換を申し出てください。
ドライバのインストール画面が表示される場合がある。そのまま放置して完了するまで待つ。
開発環境 Arduino IDE を起動する。
スタート → Arduino
メニューの ツール からボードとシリアルポートの接続設定を確認する。
以下の画像の赤枠の2か所と同じになっているか確認。異なる場合は、▼メニューから選んで設定し直す。
動作確認プログラムをArduino に書き込む。
ファイル → スケッチ例 → 01.Basics → Blink
新しく表示されたIDEの マイコンボードに書き込む ボタン 「→」 を押す。
ボードへの書き込みが完了しました。と表示される。
→ 表示されない場合は一つ前の段階の 接続設定の確認・修正 をする。
ボードのオレンジ色のLEDが点滅する。
動作確認OK
→ 点滅しない場合はスターターキットを交換します。
P.21 新しい道具を手に入れよう
P.23 ブレッドボードの使い方の確認。どの列とどの行が中で繋がっているか把握する。
P.24 実体配線図 と 回路図 Arduinoのピン 5V GND(グランド) 記号(抵抗・スイッチ・LED)
P.25 今回使う部品の確認
押しボタンスイッチ: 四角い箱に丸ボタンが付いている。押している間はスイッチON、押さない状態でOFF。向きに注意。
LED: リード(金属の足)が2本。足が長い方がアノード(+側)、短い方がカソード(-側)。リードはアノード側を外に少し広げて使用する。
抵抗: カラーコード赤赤茶金の220Ω(オーム) と カラーコード茶黒橙金の10KΩ の値の2種類を今回使用する。リードはブレッドボードに挿せるようにコの字型に曲げておく。
抵抗の個数が不足していたら必要な本数をテープから外して使用する。
ジャンプパワイヤ と 配線
ジャンパワイヤの色はプロジェクトブックの回路図と異なる場合があります。
その場合は、図の長さを確認して同等の長さのものを使用して回路を作成する。
回路の組み立てを始める前にArduinoボードからUSBケーブルを抜く
他のクラスの受講生がボードに部品を挿したまま返却している場合があります。
ボードに通電したままで作業すると配線ミスをした際にショートして動作不具合や故障の原因となるのでUSBケーブルを抜いて作業すること。
練習
P.24 の回路を組み立てる
動作確認が出来たら次の実験の準備のために赤黒の電源コード以外の部品(抵抗 と LED と ジャンパワイヤ)を外す。
P.24の作成例
(ヒント)部品配置を初心者向きに変更する。
+左側列 抵抗 中央溝 LED -右側列
と直線的に配置してもよい。
5VとGNDの接続部分のクローズアップ
USBゲーブルをボードに挿して動作確認をする。
動作しない・発熱・発煙 → 直ちにUSBケーブルを抜く
回路がショートしている場合、Arduinoが故障することがあります。
回路がショートすると保護回路が働き一定の時間Arduinoは動作しなくなります。
USBゲーブルを抜いてしばらく待ち回路に問題がないか確認してください。
問題が有れば修正して再びUSBゲーブルを刺して動作確認してください。
実験 LEDの点灯に成功した受講生はLEDを逆向きに挿してUSBを接続してみよう。
回路の組み立てを始める前にArduinoボードからUSBケーブルを抜く
課題1
P.26 の回路を組み立てる
テキストの図の通りに部品を配置した例
ジャンパワイヤーなしで簡単接続
抵抗とLEDのリード(足)だけで配線
中央の写真の反対側から撮影
USBケーブルをボードに挿して動作確認する。
課題1の提出
P.26の回路のボタンを押してLEDが光っている状態の写真を撮影する。撮影した写真をWebclassの問2にアップロードする。
課題2
P.33 の宇宙船の操縦桿の作成に取り組む
回路の組み立てを始める前にArduinoボードからUSBケーブルを抜く
P.34 の回路を組み立てる
黄とLEDの長い脚が繋がる
LED部分
2に緑。345に黄。
Arduinoのピン側
スイッチの向きに注意
押しボタンスイッチの接触不良対策
Arduino IDEからボードにスケッチを書き込む
ファイル → スケッチ例 → 10.StarerKit_BasicKit → p02_SpaceshipInterface
コード解説:
p02_SpaceshipInterface の英語コメントを日本語のコメントに変えたコードを示す。改造する際の参考にするとよい。
このコードを入力する必要はありません。
// 発射スイッチの状態を記録する変数 switchstate を準備
int switchstate = 0;
// 設定初期化。Arduino 起動時に1回だけ実行される。
void setup() {
// 3,4,5番ピンを出力モードに設定。3,4,5番ピンは LED に接続されている。
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
// 2番ピンを入力モードに設定。2番ピンは発射スイッチに接続されている。
pinMode(2, INPUT);
}
// 実行ループ。Arduino の起動中、ずっと繰り返し実行される。
void loop() {
// 2番ピンの電圧を読み取る。スイッチが押されていたら HIGH、押されていないなら LOW になる。
// 読み取った結果を switchstate 変数に記録する。
switchstate = digitalRead(2);
// 発射スイッチが押されていない場合に実行する処理
if (switchstate == LOW) {
digitalWrite(3, HIGH); // 3番ピンの出力をHIGHにする。緑LEDを点灯させる。
digitalWrite(4, LOW); // 4番ピンの出力をLOWにする。赤LED1を消灯させる。
digitalWrite(5, LOW); // 5番ピンの出力をLOWにする。赤LED2を消灯させる。
} else {
// 発射スイッチが押されている場合に実行する処理
digitalWrite(3, LOW); // 3番ピンの出力をLOWにする。緑LEDを消灯させる。
digitalWrite(4, LOW); // 4番ピンの出力をLOWにする。赤LED1を消灯させる。
digitalWrite(5, HIGH); // 5番ピンの出力をLOWにする。赤LED2を点灯させる。
delay(250); // 0.250秒 一時停止。つまり 赤LED1を0.250秒点灯。
digitalWrite(4, HIGH); // 4番ピンの出力をHIGHにする。赤LED1を点灯させる。
digitalWrite(5, LOW); // 5番ピンの出力をLOWにする。 赤LED2を消灯させる。
delay(250); // 0.250秒 一時停止。つまり 赤LED2を0.250秒点灯。
}
}
USBケーブルをボードに挿して動作確認する。
課題2の提出
プロジェクト02 宇宙船の操縦桿のボタンを押してLEDが光っている状態の写真を撮影する。撮影した写真をWebclassの問3にアップロードする。
課題一覧
Webclass に制作した回路の写真やArduinoに書き込んだプログラム(スケッチ)をアップロードする。
問1
使用したArduino Starter Kit の番号を記入(プロジェクトブック と 箱に貼ったシールの番号)
問2
課題1 P.26の回路のボタンを押してLEDが光っている状態の写真
問3
課題2 プロジェクト02 宇宙船の操縦桿の回路を撮影する。LEDが点灯している状態で撮影すること。
問4
課題3 回路を改造する。またはプログラムを改造してみよう。改造した回路の写真、またはArduino IDE のプログラムをスクショして提出する。
プログラムの修正だけで回路の修正は無しの例
・赤LEDの点滅間隔を早く・遅くする。(delayの数値の調整)
・赤LEDを最初から点滅させる。ボタンを押したら点滅が止まる様にする。(ifの判定で、 == を != に変更)
回路の修正だけでプログラムの修正は無しの例
・LEDの色を変更する
・回路上のLEDに並列接続でLEDを追加する(抵抗は 220Ω 赤赤茶のものを使用)
課題が終わったら
作成した回路を分解して部品を元通り箱にしまう。(次の授業のため)
改造のヒント1
宇宙船の操縦桿にLEDを追加する。
Arduinoの6番ピンに以下の様にLEDを追加して接続します。プログラムも修正します(下に記載例あり)
LEDの色を交換して4個目を追加した。
6番ピンに黄を追加。
追加したLEDを制御するように変更したコード:
太字のコードで6番ピンに追加したLEDを制御している。delayの数値も小さくした。修正前の2倍の速度で点滅する。
※ コードをコピペして利用する場合はブラウザはGoogle Chromeを使用してください。MicrosoftのEdgeではバグる可能性があります。
int switchstate = 0;
void setup() {
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(2, INPUT);
}
void loop() {
switchstate = digitalRead(2);
if (switchstate == LOW) {
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
} else {
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
delay(125);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
delay(125);
}
}
改造のヒント2
Arduino のピンの出力をHIGHとLOW でONとOFFするのではなく、アナログモードの0~255の256段階で出力するように変更する。
以下のプログラムを loop() 関数の内側に加える。
3番ピンのLEDを徐々に点灯させるコードの例。
for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {
analogWrite(3, fadeValue);
delay(30);
}
3番ピンのLEDを徐々に消灯させるコードの例。
for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {
analogWrite(3, fadeValue);
delay(30);
}
ifやelseのブロック({ }の内側の部分のこと)の、
digitalWrite(3, HIGH);
や
digitalWrite(3, LOW);
のコードを削除して代わりにアナログモード出力のコードと置き換えてもよい。