• 検索結果がありません。

情報処理演習 II 第二回目

N/A
N/A
Protected

Academic year: 2021

シェア "情報処理演習 II 第二回目"

Copied!
62
0
0

読み込み中.... (全文を見る)

全文

(1)

情報処理演習II

(2)

本日の講義内容

本校講義の概要

インタラクティブ・デバイスについて

• Arduino

について

前回の復習

ブレッドボードの理解

演習1

–タクトスイッチでLEDを点灯させる

演習2

–タクトスイッチでLEDを点灯させる

• 抵抗によるLEDの輝度の制限 • トグル機能の実装

課題

–タクトスイッチにより2個のLEDを交互に点灯させよ

(3)

情報処理演習IIの目標

マイクロコンピュータのハードウェアを直接操作するプログラム

を記述することにより,プログラミング手法とコンピュータ

アーキテクチャについて理解を深めます.

–独自のインタラクティブ・デバイスの「中身」を作る技術を学ぶ

電子回路

マイクロコントローラ(マイコン)プログラミング

– Arduino

独自のデバイス(の中身)を作る

本講義の予習・復習などは以下のサイトを参照すること

http://hope.c.fun.ac.jp/course/view.php?id=458

以下のサイトも参考に

http://www.musashinodenpa.com/wiki/

(4)

製品開発と情報処理演習IIの関連

• 製品のデザインプロセス

–コンセプト設定

• 市場調査,

顧客要求,

顕在ニーズ,

潜在ニーズの分析

–ユーザの観察,ユーザの設定ペルソナ作成(ユーザモデル)

–ブレーンストーミング, アイデア生成

–プロトタイピング

• ペーパプロトタイピング,

インタフェースモデリング

ワーキングプロトタイプ

, 3Dプロトタイピング

–評価

• プロトタイプを使って評価,問題を発見,新機能を発想

(5)

モックアップの作成

製品評価に重要な役割

実際に使用して判明

反応が実感できるシステム

–センサ(ボタン,加速度センサ)

–表示装置(LED, Display)

–アクチュエータ

マイコンボード, I/Oボードを用いる

–いくつかのバリエーションを経験する

この技術をもっていれば,なにかと

有利

–C/C++ ベースにより実際に動くものを制作

センサやカメラなどからの情報取得,ロボットや計測システムなどの

組み込みシステムの制御などに応用可能

情報処理演習

Ⅱでは

Arduinoを使用

(6)

インタラクティブ・デバイスとは

情報処理機能/入出力機能を備えた

単体動作するハードウェア

–ユーザと直接インタラクションが可能

iPhone

Fitbit Ultra

Wifi Body Scale

(7)

インタラクティブ・デバイスの構成要素

「情報」「電子回路」「構造」の3要素

情報: 演算機能(コンピュータ)

電子回路: 入出力機能(センサ/アクチュエータ)

(8)

インタラクティブ・デバイスの構成要素

「情報」「電子回路」「構造」の3要素

情報: 演算機能(コンピュータ)

電子回路: 入出力機能(センサ/アクチュエータ)

構造: 筐体/機構機能(外装)

ハードウェア

ソフトウェア

(9)

製品例: iPhone 5

情報: CPU(ARM),OS(iOS6 or iOS7)

電子: 静電式タッチパネル,ディスプレイ,マイク,

スピーカー,振動モーター,カメラ,

各種センサ(後述)

構造: アルミニウム(嵌め合せ,特殊ネジ)

(10)

製品例:

iPhone

のセンサ(加速度)

• 3

軸加速度センサ

–機能: 重力加速度/加速度の取得

–用途: 画面縦横反転/行動認識

(11)

製品例:

iPhone

のセンサ(ジャイロ)

• 3

軸ジャイロセンサ

–機能: 角速度の取得

–用途: 回転動作を利用したゲームコントローラ

(12)

製品例: iPhoneのセンサ(位置/方位)

• GPS

&地磁気センサ

–機能: 絶対位置/方位取得

(13)

講義の目的

独自のインタラクティブ・デバイスを作る

– ユーザがインタラクティブに操作可能

– 筐体に組み込み,単体動作

iPhone

ではアプリは作れても

新しいデバイスは難しい

Arduinoで独自のインタラクティブ・

デバイスを作る

(14)

Arduino

とは

情報/電子回路をまたぐプロトタイピングを支援する

プラットフォーム

• Arduino

デバイスとPC上のプログラミング環境から構成

–Atmel AVR マイコン、入出力ポートを備えた基盤

• AVR

マイコン: ATmega328P

(15)

用語定義

• Arduino

デバイス → Arduino

• Arudino

IDE →

開発環境 or IDE

–(スケッチ → プログラム)

(16)

デバイス構成(メイン)

入出力ピン

USB

コネクタ

(17)

デバイス構成(メイン)

入出力ピン

USB

コネクタ

電源コネクタ

PC

に接続

プログラミング/ 通信/給電

電源に接続

※単体動作時のみ

電子回路に接続

デジタル入出力/ アナログ入出力

(18)

デバイス構成(サブ)

LED(

電源)

LED(

通信)

リセットボタン

LED(

テスト)

マイコン

(19)

入出力コネクタの構成

デジタル入力/出力

アナログ入力

GND

GND

VCC

(20)

Arduino

の使い方(情報)

• PC

上でプログラム作成

–C/C++ ベース

• PC

とUSBケーブルで接続してプログラム書き込み

PC (Win/Mac)

Arduino

USBケーブル プログラム書込

(21)

前回の復習

演習

–総合開発環境の(IDE)のインストール

–Arduinoの基盤のLEDを点滅させる

(22)

Arduino

の使い方(電子回路)

ブレッドボード上にセンサ/電子部品を配置

(23)

Arduino

の基盤のLEDを点滅させる

&

Arduino

にLEDを取り付けて点滅させる

(24)

Arduino

の基盤のLEDを点滅させる

&

Arduino

にLEDを取り付けて点滅させる

void setup() {

pinMode(

13

, OUTPUT);

}

void loop() {

digitalWrite(

13

, HIGH);

delay(500);

digitalWrite(

13

, LOW);

delay(500);

}

デジタル入出力[0-13]

(25)

setup()

, loop()の説明

• Arduino

のプログラムは必ずsetup()とloop()という2つの特別

な関数を持っている

–Setup()はスタート時に1度だけ呼び出される

ピンモードやライブラリの初期化といった処理に使用

–Loop()関数はプログラムの心臓部であり、繰り返し実行

内部に無限の繰り返しを入れないこと

– for(;;)やwhile(1)

int main()

{

init();

setup();

for(;;)

loop();

return 0;

}

実際の処理の概要

(26)

ブレッドボード(ソルダーレス・ブレッドボード)とは

はんだ付けが不要な,実験,評価,試作に用いる基板

–各種電子部品やジャンパ線を差し込むだけで電子回路を組める

ボード内部に導体が埋め込まれている

(27)

ブレッドボード(ソルダーレス・ブレッドボード)とは

はんだ付けが不要な,実験,評価,試作に用いる基板

–各種電子部品やジャンパ線を差し込むだけで電子回路を組める

ボード内部に導体が埋め込まれている

(28)

ブレッドボードの仕組み

ブレッドボードはどの穴とどの穴が

繋がるという仕組みが決まっている

両側の赤線/青線の穴は

縦一直線

に全部つながっている

–2本の赤線同士はつながっていない

–2本の青線同士もつながっていない

中央の1~30の穴は

横一直線

繋がっている

–ただし,中央の溝を挟んで

左側/右側で分かれる

各数字のa~eとf~jの

5

穴ずつ

(29)

(デジタル)テスタとは

電気的な測定値をディスプレイに数字で

表示する計測器

–ディスプレイ/各種スイッチ/リードから構成

–アナログ-デジタル(A/D)変換回路を利用

電圧 / 電流 / 抵抗の測定

ブザーにより通電状態を確認

(30)

ブレッドボードの通電確認

両側の赤線/青線の穴の通電

チェック

–赤線/青線縦一列

–左右の赤線同士は未接続

中央の1~30の穴の通電チェック

–a~eとf~jの

5

ずつ

–中央の溝を挟むと未接続

(31)

演習1:タクトスイッチでLEDを点灯させる

ブレッドボード上にタクトスイッチを配置

• Arduino

の入出力ピンとブレッドボードを接続

–ミニマムなインタラクティブ・デバイス

1-1

ブレッドボード

1-2

プログラム

1-3

コンパイル&

アップロード

1-4

動作確認

(32)

入出力ピンはこれ

(33)

入出力ピンの詳細

デジタル入出力

アナログ入力

GND

GND

VCC

(34)

1-1

ブレッドボードに部品を挿す

プッシュスイッチを

中央の溝に沿って配置

向きに注意!

足が届く方向に.

• Arduino

に接続

–7番ピンとGNDピン

GND

(35)

1-2:

プログラムを書く

const int SW = 7;

// Pushbutton Pin

const int LED = 13;

// LED Pin

int state = 0;

void

setup()

{

pinMode(LED, OUTPUT);

pinMode(SW , INPUT);

digitalWrite(SW, HIGH);

//おまじない

}

void

loop()

{

state = digitalRead(SW);

if (state == HIGH) {

digitalWrite(LED, HIGH);

}

else {

digitalWrite(LED, LOW);

}

}

定数・変数

条件分岐

(if文)

const: constant (

定数)

int: integer (

整数)

(36)

1-3:

コンパイル&アップロード

エラーが出たら,エラー箇所を修正

–分からない場合はTAに質問すること

コンパイル中

成功

失敗

コンパイル中

アップロード中

成功

(37)

1-4:

動作確認

ボタンを押している間だけLEDが光るように

–下記部分を修正

state = digitalRead(SW);

if (state ==

LOW

) {

digitalWrite(LED, HIGH);

}

else {

digitalWrite(LED, LOW);

}

(38)

参考: プログラムの説明

const int SW = 7; //タクトスイッチはデジタルピン7に接続 const int LED = 13; //LEDはデジタルピン13に接続

int state = 0; //スイッチの状態を格納する変数 void setup() {

pinMode(LED, OUTPUT); // LEDのピンを「出力」に設定 pinMode(SW , INPUT); // スイッチのピンを「入力」に設定 digitalWrite(SW, HIGH); //おまじない

}

void loop() {

state = digitalRead(SW); //スイッチの状態を「state」に格納 if (state == HIGH) { //スイッチの入力がHIGHの時

digitalWrite(LED, HIGH); //LEDを点灯 }

else { //スイッチの入力がLOWの時 digitalWrite(LED, LOW); //LEDを消灯

} }

(39)

参考: 関数リファレンス(1)

• pinMode(pin, mode)

–ピンの動作を入力か出力に設定

• [パラメータ]

– pin: 設定したいピンの番号

– value: INPUTかOUTPUT

• [戻り値] – なし

• digitalWrite(pin, value)

–HIGHかLOWを指定したピンに出力

• [パラメータ]

– pin: 出力するピンの番号

– value: HIGHかLOW

• [戻り値] – なし

(40)

参考: 関数リファレンス(2)

• delay(ms)

–プログラムを指定した時間だけ止める

• [

パラメータ]

– ms:一時停止する時間.単位はミリ秒

• digitalRead(pin)

–指定したピンの値を読み込む.結果は

HIGHかLOWとなる

• [

パラメータ]

– pin: 読みたいピンの番号

• [

戻り値]

– HIGHかLOW

(41)

参考: 回路図

LED

(42)

演習2:抵抗によるLEDの輝度の制限

• LED

をブレッドボード上に配置する

–LEDには抵抗をセットでつける

電流制限(明るさ抑制)用

– 330Ω(橙橙茶金)

–GNDを両端の穴を使って共通化

• Arduino

とブレッドボード間の配線を減らす

• LEDに大きな電流が流れると壊れる  抵抗を入れて電流を調整

(43)
(44)

抵抗の値の読み方

カラーコード(4本の線)で値を表す

判別しにくく,覚えにくい

–「抵抗 カラーコード」で検索する

–テスターで調べる

数値 位取り 誤差

(45)

抵抗の理解

キット内の抵抗を付け替えてみる

–270Ω抵抗(赤紫茶金) x 1

–330Ω抵抗(橙橙茶金) x 1

–1kΩ抵抗(茶黒赤金) x 3

–10kΩ抵抗(茶黒橙金 ) x 2

キット内のLEDも付け替えてみる

(46)

参考: オームの法則

𝐼𝐼 =

𝑉𝑉

𝑅𝑅

※I

=電流 (A),V= 電圧(V),R=抵抗(Ω)

– 抵抗が高くなると,流れる電流が減る

– 流れる電流が減ると,LEDが暗くなる

状態提示用途では通常10~20mA程度

1KΩ 10KΩ 100KΩ

(47)

参考: 回路図

LED

プッシュスイッチ

(48)

演習2: トグル機能の実装

タクトスイッチを「押すたび」にLEDの点灯/消灯を切り替える

(49)

トグルのソースコード

(簡易版)

const int SW = 7; const int LED = 13;

boolean state = 0; boolean ledState = 0; void setup() { pinMode(LED, OUTPUT); pinMode(SW, INPUT); digitalWrite(SW, HIGH); //おまじない } void loop(){ state = digitalRead(SW); if (!state) { ledState = !(ledState); } if (ledState) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } }

int: Integer

(整数)

boolean: (

真偽値,1 or 0)

(50)

プルアップ抵抗・プルダウン抵抗

マイコンの入力にHIGHかLOW信号を確実に伝える為に

取り付ける

抵抗がない場合はHIGH/LOWの状態が不安定となる

–HIGHなのにLOWとなったり、LOWなのにHIGHとなったりして

マイコンが誤動作を起こす

プルアップ抵抗 プルダウン抵抗

(51)

Aruduino

でのプルアップ抵抗

プルアップ抵抗を有効にする

–pinMode(SW, INPUT_PULLUP);

次でも同様の効果

–pinMode(SW, INPUT);

–digitalWrite(SW, HIGH);

(52)

スイッチ入力の安定化

前回の回路の復元

–スイッチを押したときの通電箇所をテスターでチェック

330Ω

13

7

GND

(53)

簡易版トグルの問題点

• LED

の状態が不安定

–プッシュスイッチの機構の問題

スイッチを押してから,接点が

安定するまでに時間がかかる

–マイコンの動作速度はかなり高速

• 16MHz = 1

命令 62.5 ns

– 1sec = 1000msec = 1000000usec

10~50 μsec

チャタリング

スイッチの接点がバウンドする

現象

–押した瞬間/放した瞬間に生じる –簡単なフィルタ処理が必要

(54)

トグルのソースコード 1

const int SW = 7; const int LED = 13; boolean state = 0; boolean statePre = 0; boolean ledState = 0; void setup() { pinMode(LED, OUTPUT); pinMode(SW, INPUT_PULLUP); } void loop(){ state = digitalRead(SW); if (state && !(statePre)) {

ledState = !(ledState); delay(10); } statePre = state; if (ledState) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } }

pinMode(SW , INPUT);

digitalWrite(SW, HIGH);

pinMode(SW, INPUT_PULLUP);

(55)

キー処理

押している間の処理

–if (!state)

押した瞬間の処理

SW_OFF SW_ON ON OFF SW_OFF SW_ON ON OFF

(56)

チャタリングによる誤動作の防止

–簡単なフィルタ処理

チャタリングの処理

SW_OFF

SW_ON

1 1 0 0 1 void loop(){ state = digitalRead(SW); if (state && !(statePre)) {

ledState = !(ledState);

delay(10);

}

(57)

フラグを使用したキー処理

if (!state) {

if (!flag) {

処理を記述

}

flag = 1;

}

else

flag = 0;

SW_OFF SW_ON ON OFF 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 flag

(58)

トグルのソースコード 2

const int SW = 7; const int LED = 13; boolean state = 0; boolean flag = 0; boolean ledState = 0; void setup() { pinMode(LED, OUTPUT); pinMode(SW, INPUT_PULLUP); } void loop(){ state = digitalRead(SW); if (!state){ if (! flag ){ if (ledState ){ ledState = 0; } else{ ledState = 1; } flag = 1; } } else{ flag = 0; } if (ledState) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } }

(59)

トグルのソースコード 2

const int SW = 7; const int LED = 13; boolean state = 0; boolean flag = 0; boolean ledState = 0; void setup() { pinMode(LED, OUTPUT); pinMode(SW, INPUT_PULLUP); } void loop(){ state = digitalRead(SW); if (!state){ if (! flag ){ if (ledState ) ledState = 0; else ledState = 1; flag = 1; } } else flag = 0; if (ledState) digitalWrite(LED, HIGH); else digitalWrite(LED, LOW); }

(60)

チャタリングによる誤動作の防止

–簡単なフィルタ処理

チャタリングの処理

SW_OFF

SW_ON

SW_OFF

SW_ON

0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 2 3 4 5 6 7 8 9 10 0 0 0 0 0

(61)

トグルのソースコード 3

const int SW = 7; const int LED = 13; boolean state = 0; int flag = 0; boolean ledState = 0; void setup() { pinMode(LED, OUTPUT); pinMode(SW, INPUT_PULLUP); } void loop(){ state = digitalRead(SW); if (!state){ if ( flag < 250 ) flag ++; if ( flag = = 200 ){ if (ledState ) ledState = 0; else ledState = 1; } } else flag = 0; if (ledState) digitalWrite(LED, HIGH); else digitalWrite(LED, LOW); }

(62)

課題

タクトスイッチにより2個のLEDを交互に点灯させよ

参照

関連したドキュメント

●お使いのパソコンに「Windows XP Service Pack 2」をインストールされているお客様へ‥‥. 「Windows XP Service

Q-Flash Plus では、システムの電源が切れているとき(S5シャットダウン状態)に BIOS を更新する ことができます。最新の BIOS を USB

When the device is operating as a sink and it receives a Hard Reset or a Power Role Swap, the automatic discharge circuitry and SNK output will be disabled by the host processor

(1)高圧ケーブル及び公称断面積 60mm 2 以上の低圧ケーブルの端末処理は、JCAA 規格の材料を用いること。. ただし、 60mm 2

 右上の「ログイン」から Google アカウント でログインあるいは同じ PC であると⼆回⽬以

Google マップ上で誰もがその情報を閲覧することが可能となる。Google マイマップは、Google マップの情報を基に作成されるため、Google

3 主務大臣は、第一項に規定する勧告を受けた特定再利用

QRされた .ino ファイルを Arduino に‚き1む ことで、 GUI |}した ƒ+どおりに Arduino を/‡((スタンドアローン})させるこ とができます。. 1)