pg10
テーマ 電子工作とプログラム(Arduino入門)
前振り
・2019年度前期の科目「メディア・アート」でのArduino使用例(動画2作品を紹介)
・「繋げたら光るバイブスでやってる」モテるために電子工作を始めた『ギャル電(@GALDEN999)』 | 藤原麻里菜|エステーQ
https://www.st-sendenbu.com/fujiwara/fujiwara14.html
・コンセプトは「理系男子の夫に受けそうなもの」独自の世界を展開するスピンオフユニット |BreadBoard Baking | IAMAS OB/OGインタビュー
http://interview.iamas.ac.jp/_002/
情報メディア学科3年の学生がインタラクティブメディア(旧科目)で作成した iPad によるプロジェクションマッピング
影絵とレーザーで図書館をハロウィン仕様にする
レーザー光線で図書館の壁に落書きする
パソコンやディスプレイ無しで動くプログラム作品の制作を体験する。
マイコンと電子工作のプログラミングに取り組む。
参考資料: インタラクティブメディア(旧科目)。新科目メディアアート(4年次開講)でもArduinoを扱う予定。
2018年度用シナリオ
動作確認:
ARDUINOプロジェクトブックに従い進める。
P.11 ボード上の部品とピン配置の確認
P.16 セットアップ
USBケーブルで Arduino と PC を接続する。 緑LEDが点灯する。
→ 点灯しない場合。USBに電力が供給されていない。またはArduinoの故障。
ドライバのインストール画面が表示される場合がある。そのまま放置して完了するまで待つ。
開発環境 Arduino IDE を起動する。
スタート → Arduino
接続設定を確認・修正する。
動作確認プログラムを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ケーブルを抜く」
ボードに通電したままで作業すると、配線ミスをした際にショートして動作不具合・故障の原因となる。
2019年度用メモ: ブレッドボード上の部品配置をより初心者向きに変更する。
+左側列 抵抗 中央溝 LED -右側列
の様に、直線的に配置する。
P.24 回路を組み立てる
先ほど作成した赤黒の電源コード以外の部品を外す。
抵抗 LED ジャンパワイヤ
5VとGNDの接続
USBゲーブルをボードに挿して、動作確認する。
動作しない・発熱・発煙 → 直ちにUSBケーブルを抜く
回路がショートしている場合、Arduinoが故障することがあります。
回路がショートすると保護回路が働き、一定の時間Arduinoは動作しなくなります。
USBゲーブルを抜いてしばらく待ち、回路に問題がないか確認してください。
問題が有れば修正して、再びUSBゲーブルを刺して動作確認してください。
実験 LEDの点灯に成功した受講生は、LEDを逆向きに挿して、USBを接続してみよう。
回路の組み立てを始める前にArduinoボードからUSBケーブルを抜く
P.26 回路を組み立てる
※テキストの図の通りに部品を配置した例。この写真の押しボタンスイッチの配置方法では接触不良になりやすいので、下の改良例を参考にするとよい。
USBゲーブルをボードに挿して、動作確認する。
※押しボタンスイッチの反応が悪い場合がある。押しても光らない場合は、 e-f 列を跨がずに、b-e列を跨ぐ位置にスイッチを刺すように変更する。抵抗を斜めに刺して、aと+ をつなぐ。
時間に余裕があるようなら、 P.28 と P.29 の 直列回路 と 並列回路 を作成して動作確認する。
改良例1
押しボタンスイッチの接触不良対策: ボタンを取り付ける列を変更してみる。
改良例2
ジャンパワイヤーを使わずに抵抗とLEDのリード(足)だけで配線してみる。簡単なのでお勧め。
上の写真とは反対側から撮影
実験:
P.33 宇宙船の操縦桿
回路の組み立てを始める前にArduinoボードからUSBケーブルを抜く
P.34 回路を組み立てる
押しボタンスイッチ部分
LED部分
Arduinoのピン側
押しボタンスイッチの接触不良対策:
Arduino IDEからボードにスケッチを書き込む
ファイル → スケッチ例 → 10.StarerKit_BasicKit → p02_SpaceshipInterface
コード解説:
p02_SpaceshipInterface の英語コメントを日本語のコメントに変えたコードを示す。改造する際の参考にするとよい。
※ コードをコピペして利用する場合はブラウザはGoogle Chromeを使用してください。MicrosoftのEdgeではバグる可能性があります。
// 発射スイッチの状態を記録する変数 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ゲーブルをボードに挿して、動作確認する。
課題提出
Webclass に制作した回路の写真やArduinoに書き込んだプログラム(スケッチ)をアップロードする。
問1
使用したArduino Starter Kit の番号を記入(プロジェクトブック と 箱のシール番号)
問2
プロジェクト02 宇宙船の操縦桿
回路を撮影する。
LEDが点灯している状態で撮影すること。
撮影は、iPad か スマフォ か PCのカメラ を利用する。
撮影した写真をアップロードする。
問3
プログラムを修正してみよう。
修正したプログラムの動作を確認する。
Arduino IDE のプログラムをコピペして提出する。
問4
回路を修正してみよう。
修正した回路を撮影し、動作状況が分かるように撮影する。
撮影した写真をアップロードする。
※ヒント
Arduinoのプログラムを変更しなくても動く回路の変更例
・LEDの色を変更する
・回路上のLEDに並列接続でLEDを追加する(抵抗は 220Ω 赤赤茶のものを使用)
次の タイプA か タイプB のどちらかを選んで回答する。
問5 タイプA
Arduinoや電子部品(LED、レーザー、モーター、各種センサー)を利用した
作品を企画する。
または
装置を提案する。
企画や提案は 単純なイラスト を描いて提出すること。タイトルや装置の名前も書いておくこと。
提出方法は、例えば、
紙にイラスト等を描き、撮影 または スキャナーで画像化 してアップロード
Windowsのペイント や iPad の 手書き用アプリ でイラスト等を描いて 画像に保存 してアップロード
問5 タイプB
プロジェクト02 宇宙船の操縦桿 のプログラムを修正して回路にLEDを追加するなどの改造をする。
改造後の回路を撮影し、 改造ポイントを画像に書き加えて アップロードする。
課題が終わったら: 作成した回路を分解して部品を元通り箱にしまう。(次の授業のため)
例)
改造のヒント:
宇宙船の操縦桿にLEDを追加した例)
Arduinoの6番ピンに以下の様にLEDを追加して接続します。
追加したLEDを制御するように変更したコードの例:
赤文字のコードで追加したLEDを制御している。オレンジ色のdelayの数値も変更している。
※ コードをコピペして利用する場合はブラウザは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); // turn the green LED on pin 3 on
digitalWrite(4, LOW); // turn the red LED on pin 4 off
digitalWrite(5, LOW); // turn the red LED on pin 5 off
digitalWrite(6, LOW);
} else {
digitalWrite(3, LOW); // turn the green LED on pin 3 off
digitalWrite(4, LOW); // turn the red LED on pin 4 off
digitalWrite(5, HIGH); // turn the red LED on pin 5 on
digitalWrite(6, HIGH);
delay(125);
digitalWrite(4, HIGH); // turn the red LED on pin 4 on
digitalWrite(5, LOW); // turn the red LED on pin 5 off
digitalWrite(6, LOW);
delay(125);
}
}
問2~問4のヒント
プログラム修正のヒント
・赤LEDの点滅間隔を早く・遅くする。(delayの数値の調整)
・赤LEDを最初から点滅させる。ボタンを押したら点滅が止まる様にする。(ifの判定で、 == を != に変更)
簡単な回路修正のヒント
・LEDを取り替えて別の色にする。色によっては抵抗の変更が必要(変更しない場合、明るさが暗くなる場合がある)。
・LEDを増やす。並列接続で、複数同時に点灯させる(元のLEDと並列接続)。
・セーフティスイッチを追加する。元のスイッチと直列にスイッチを追加する。ボタンを2つ同時押ししないと動作しないようにする。
少し大変な回路やプログラム修正のヒント
・Arduino の未使用のピンを使用して、LEDを追加する。プログラムの修正も必要。
・Arduino のピンの出力をアナログモードに変更する。 HIGH LOW でON・OFFではなく、0~255の256段階で出力。
digitalWrite の代わりに analogWrite を使用するように変更。
以下のプログラムを loop() 関数の内側に加えてみよう。
加える位置によって(先頭のほう、if や else ブロックの中、後ろのほうなど)動作に差が出る。
理由も考えてみよう。
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);
}
・ボタンを押して離す度に、点滅がON・OFFするトグルスイッチをプログラムする。
変数を2つ追加:
mode(スイッチの状態を記録する変数 ONなら 1 OFFなら0) と
click(ボタンを押して話したことを判定するための変数)
int switchstate = 0;
int mode = 0; int click = 0;
赤文字の行の部分の下に1行追加する。
loop() に、ボタンを押して離したらmodeが 0→1→0... と切り替わるコードを追加。
switchstate = digitalRead(2);
if(click == 0 && switchstate == HIGH) { click = 1; }
if(click == 1 && switchstate == LOW) { click = 0; mode++; mode %= 2; }
赤文字の行の下の辺りに追加。
LEDの点滅の切り替えは mode == 0 で判定する様に修正。
if (switchstate == LOW) {
の赤文字の部分を
if (mode == 0) {
に修正。
企画や装置のヒント
ものづくりを楽しむ という観点で、自由に企画する。
便利さや実用性にはこだわらない。
くだらないもの、受け狙いでもOK。
ピックアップ
第20回文化庁メディア芸術祭(2016年)
http://festival.j-mediaarts.jp/download/20jmaf_award_winning_works_jp.pdf
第18回文化庁メディア芸術祭(2014年) http://archive.j-mediaarts.jp/festival/2014/
超電波砲スーパーDX弐号機 メディアインスタレーション
GOCCO ltd. フードビジネス学科の木村先生が経営している会社が制作した展示
2012年の講義サイトから
感覚をだますメディアアート「Shadow touch!!」 http://youtu.be/3itekp9YaAs
Arduinoだけでも動きます
PC接続なしで、モバイルバッテリーなどに接続すれば動作します。
作品にバッテリーとArduinoを組み込んで、PCなしの作品も制作可能。
PCやスマフォを多数利用する代わりに、多数の低価格なArduinoを利用して作品のコストダウンが可能。
Arduinoについて調べてみる
スターターキットは、Arduino UNO 版を使用しています。
性能(スペック)を調べてみましょう。CPUの動作クロック、メモリ(プログラム実行用)、メモリ(プログラム保存用)、入出力(出力ピン数、入力ピン数)
スケッチのプログラム言語について。
Arduinoを利用したインタラクティブ作品について調べてみましょう。
次回 iPad を持参してください。