平成26年度熊本高専arduino講座 第1週 センサーとarduno及びprocessingとの連携

52
Arduino ににににににににににに にに 26 にに にににににににに ににににに

Upload: katsuhiro-morishita

Post on 24-Jun-2015

1.015 views

Category:

Engineering


7 download

DESCRIPTION

熊本高等専門学校が行ったH26年度社会人講座のArduinoによる実用講座 第1週で利用されたスライド資料です。Arduinoを利用した様々な例がソースコードとともに示されています。講義を担当したのはMI科の村山先生です。

TRANSCRIPT

Page 1: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

Arduino によるマイコン実用講座平成 26 年度 熊本高等専門学校 社会人講座

Page 2: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

1. マイコン, Arduino の簡単な紹介2. LED の点滅3. 三色 LED の点灯4. ブザーで音を鳴らす5. LED のホタル灯6. タクトスイッチを使った入力の方法7. CdS セルを使ったセンサーの使い方8. 7 セグ LED の点灯9. 温度センサーを使った温度計測 ( シリアル通信 )

10. Arduino と Processing の連携

本日の内容について ( 予定 )

説明は必要最小限にして,実際に手を動かしながら,ご自身で体験してもらうような形で実施していきたいと思います.

Page 3: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

マイクロコンピュータの略称で,家電製品や電子機器の制御などに使われる,一つの半導体チップにコンピュータシステム全体を集積した LSI 製品のことを指します.

CPU ,メモリ,入出力回路,タイマー回路などを一つの集積回路に格納しており,単体でコンピュータとしての一通りの機能を有しています.

マイコンとは

Page 4: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

何かを制御する ( 自分の思う通りに動かす ) ことができます.

例えば・・・•暗くなったら,自動で灯りがつくような外灯•人が来たら,音で知らせてくれる防犯センサー•線の上を自動で走るロボット•決まった時間に自動でペットに餌をあげるような餌やり器

自分の思い通りに,いろいろな事を実現することができます.

マイコンで何ができるの?

Page 5: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

Arduino は,単純な入出力を備えた基板と Processing/Wiring 言語を実装した開発環境から構成されるマイコンボードの総称で,様々な種類があります.

Arduino とは

Page 6: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

今回実習で使用するボード「 LEONARDO 」は, 2000 円くらいで購入可能です.LEONARDO には 14 個のデジタル入出力ポート ( 一部はPWM にも対応 ) , 6 個のアナログ入力ポート,電源 (+5V とGND) な ど が あ り , 状 態 を 表 示 す る た め の 4 個 のLED(ON , L , TX , RX) と,ボードの動作をリセットするためのスイッチがあります.

Arduino とは

デジタル入出力ポート

アナログ入力ポート電源出力ポート

LED

リセットスイッチ

Page 7: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

Arduinoとパソコンの接続

USB ケーブル

USB ケーブルの小さなコネクタの方を Arduino のコネクタに差し込みます.もう一方の大きい方のコネクタをパソコンの前面にある USB コネクタに差し込みます.

USB ケーブルで PC と接続すると自動的にデバイスドライバが読み込まれます.

Page 8: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

開発環境の設定

次に開発環境の設定をします. Windows のスタートメニュー→すべてのプログラムから Arduino を選択して起動します.

起動したらメニューの「ツール」から「マイコンボード」と「シリアルポート」の設定を変更します.この設定が正しくないとプログラムが Arduino に転送できません.

Page 9: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

LED の点滅まずは青色 LED( Light Emitting Diode) を点滅させてみましょう.図のように接続します.

LED は脚の長い方がプラス ( アノード ) ,短い方がマイナス (カソード ) になります.脚の長い方を 13番に,短い方を GND に接続します.

Page 10: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

ブレッドボードブレッドボードは以下のような形で内部が結線されています.

○×

上下の 2行は横方向に,中央部の 5つの穴は縦方向に結線されています.

Page 11: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

プログラムの記述

Arduino のプログラムを入力します.大文字,小文字に注意して,入力してみてください.入力が終わったら,検証ボタンを押してコンパイルします.「コンパイル終了」と表示されれば OK です.

次に Arudino にこのプログラムを転送します.右矢印ボタンを押してください.

こ れ で , こ の プ ロ グ ラ ム がArduino に転送されて,その動作がおこなわれます.

Page 12: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

プログラムの変更

次に,矢印の部分の括弧内の数字を変更してみましょう.例えば 100 に変更して,右矢印ボタンを押してみてください.

点滅の間隔を簡単に変更することが出来ます.上の方の数値が点灯している時間,下の方の数値が消灯している時間になります.

1000だと 1秒, 100だと 0.1秒になります.

色々と数値を変更して,そのプログラムを転送してみてください.

Page 13: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

Arduino の使い方の流れ

1.回路を組みます.  Arduino と各部品を接続します.

2.プログラムを書きます. 組んだ回路に沿って,正しく動作するようにプログラムを書きます.

3.プログラムを Arduino に転送します. 書いたプログラムを Arduino にアップロードします.

※1番と 2番の順序は,ご自身のやり易い方でよろしいかと思います.

Page 14: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

Arduino   Leonardo について

デジタル入出力ポート

アナログ入力ポート電源出力ポート

LED

リセットスイッチ

0〜 13の 14個のデジタル入出力ポート(その内3,5,6,9,10,11,13はアナログ出力可能 )•デジタル入力ポート・・・電圧が来ているかどうかを検知•デジタル出力ポート・・・ 5V の電圧を出力 (LED の点滅 )•アナログ出力ポート・・・ 0〜 5V までを約 0.02V刻みで出力

A0〜 A5の 6個のアナログ入力ポート( 定義すればデジタル入出力ポートとしても使用可能 )•5V までの電圧を約 0.005V刻みで検知

その他, 5V と 3.3V の電源出力等が搭載されている.

Page 15: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

プログラムの説明

先ほど入力したプログラムを見ながら,Arduino のプログラムについて説明します.

プログラムには,大きく分けて

void setup(){・・・}

void loop(){・・・}

の2つのセクションがあります.

led

Page 16: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

プログラムの説明

void setup(){・・・}

は arduino の初期設定の内容を書きます.この部分は実行時,最初の 1 回だけ実行されます.

void loop(){・・・}

に実際の動作についてのプログラムを書きます.この部分は上から下へ順に実行されていき,最後まできたら,また最初に戻るという動作が繰り返されます.

Page 17: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

プログラムの詳細

次に細かくみていきましょう.

int led =13;   → led は 13 と同じという意味.

pinMode(led,OUTPUT); →13 ポートを出力ポートに設定.

digitalWrite(led,HIGH);→13 ポートに 5V を出力.

delay(100); →プログラムを 100m秒 (=0.1秒 )止める.

digitalWrite(led,LOW);→13 ポートを 0V にする.

setup()

loop()

Page 18: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

三色 LED の点灯次は三色 LED を点滅させてみましょう.以下の回路図を参考に接続します.

一番長い脚がマイナス (カソード ) になりますので,一番脚の長い箇所を GND に,その他の脚を 11 , 12 , 13 に接続します.

Page 19: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

三色 LED の点灯図のような接続になります.

一番長い脚がマイナス (カソード ) になりますので,一番脚の長い箇所を GND に,その他の脚を 11 , 12 , 13 に接続します.

Page 20: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

プログラムの作成

Arduino のプログラムを入力します.先ほどの青色 LED を点滅するのプログラムが三つ分あることになります.

int led =13;   → led は 13 と同じという意味.

pinMode(led,OUTPUT); →13番ポートを出力ポートに設定.

digitalWrite(led,HIGH);→13番ポートに 5V を出力.

delay(1000); →プログラムを 1000m秒 (=1秒 )止める.

digitalWrite(led,LOW);→13番ポートを 0V にする.

rgb_led

Page 21: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

プログラムの変更

先ほどの青色 LED を点滅させた時のプログラムを変更したのと同様に, delay(1000) の数値を変更してみましょう.

Page 22: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

音を鳴らす次は音をならしてみましょう.圧電ブザーを以下のように接続します.圧電ブザー

圧電ブザーの脚の短い方を 13 に,長い方を GND に接続します.

Page 23: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

Arduino のプログラムを入力します.大文字,小文字に注意して,入力してみてください.tone と delay の命令の繰り返しなので,コピーと貼り付けで入力すると楽です.

入力が終わったら,検証ボタンを押してコンパイルします.「コンパイル終了」と表示されれば OKです.

次に Arudino にこのプログラムを転送します.右矢印ボタンを押してください.

音階を鳴らす

buzzer_2

Page 24: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

tone の括弧にある数値が音階になります. 262 はド, 294 はレ,330 はミ・・・になります.

duration は音の長さになり,プログラムの一番最初で 500 という数値に設定されています.これで 0.5秒間音が出ます.

tone関数

Page 25: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

int pin = 13;int duration = 130;

void setup(){pinMode(pin,OUTPUT);}

ある効果音のプログラム何の効果音かわかりますでしょうか.

void loop() { tone(pin,1047,duration) ; // ミ delay(duration) ; tone(pin,1319,duration) ; // ソ delay(duration) ; tone(pin,2637,duration) ; // ミ 2 delay(duration) ; tone(pin,2093,duration) ; // ド 2 delay(duration) ; tone(pin,2349,duration) ; // レ 2 delay(duration) ; tone(pin,3136,duration) ; // ソ 2 delay(duration) ; delay(3000) ; // 3秒後に繰り返す}

soundeffect

Page 26: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

void loop(){ tone(pin,262,duration); delay(duration); tone(pin,262,duration); delay(duration); tone(pin,392,duration); delay(duration); tone(pin,392,duration); delay(duration); tone(pin,440,duration); delay(duration); tone(pin,440,duration); delay(duration); tone(pin,392,duration); delay(duration); delay(500);

tone(pin,349,duration);delay(duration);tone(pin,349,duration);delay(duration);tone(pin,330,duration);delay(duration);tone(pin,330,duration);delay(duration);tone(pin,294,duration);delay(duration);tone(pin,294,duration);delay(duration);tone(pin,262,duration);delay(duration); delay(1000);}

int pin = 13;int duration = 500;

void setup(){pinMode(pin,OUTPUT);}

きらきら星のプログラム課題フォルダにプログラムを置いてますので,コピーして使っていただいて構いません.

kirakiraboshi

Page 27: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

青色 LED でホタル灯一番始めに作った青色 LED の点滅回路をもう一度作ります.

LED は脚の長い方がプラス ( アノード ) ,短い方がマイナス (カソード ) になります.脚の長い方を 13番に,短い方を GND に接続します.

Page 28: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

青色 LED でホタル灯

次にプログラムを入力します.

for(i=0;i<255;i++){・・・}→i が 0 から始まって, { ・・・ } を実行し て ,終わ っ た ら i に 1 を足し て ,{ ・・・}を実行するという動作を, i が255 になるまで繰り返します.

analogWrite(ledpin,i)→i の値によって, 13番ポートで出力される電圧が変化します.i が 0 の時は 0V , i が 255 の時は 5V を出 力 し ま す . i が 1 増え る ご と に約0.02V 電圧が大きくなります.

hotaru

Page 29: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

Arduino Leonardo のアナログ出力について

analogWrite(ledpin,i)→i の値によって, 13番ポートに出力される電圧が変化します.i が 0 の時は 0V , i が 255 の時は 5V を出 力 し ま す . i が 1 増え る ご と に約0.02V 電圧が大きくなります.

0V

5V

0

255

255刻み例:値が 128 のとき0.02×128=2.5 V

5÷255 = 0.01960784313‥     ≈  0.02

実際には PWM 出力として, 5V の電圧を高速に ON , OFF して,その時間幅の比率で擬似的なアナログ出力の電圧を作り出しています.アナログ出力ができるのはデジタル IO ポートの 3,5,6,9,10,11,13番ポートのみです.

V0 = 5V

Thigh+Tlow ≈ 2ms(約 490Hz)( 5,6※ 番ポートだけ1ms)

Page 30: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

タクトスイッチを使った入力スイッチを使った入力の方法について確認するため,以下の回路を作ります.

Page 31: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

次にプログラムを入力します.

digitalRead(button)→button=7 なので, 7番ポートに入ってくる 電圧を検知 し て , 電圧が 来 て い れ ば「 HIGH 」,来ていなければ「 LOW 」という値を返します.

if(val == HIGH){・・・}

else{・・・}→val の値が HIGH と等しければ,すぐ後の{ ・・・ } の中を,等しくなければ else の{ ・・・ } の中を実行します.

タクトスイッチを使った入力

tactswitch

Page 32: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

タクトスイッチを使った入力スイッチが押されているか,そうでないかを, Arduino に検知させる仕組みを説明します.

抵抗の電圧は

スイッチを押していない時→  0V

スイッチを押した時→  5V

この電圧を 7番ポートで読み取って,ボタンが押されているか,そうでないかを見分けています.

タクトスイッチ 抵抗

GND5V

抵抗の電圧をデジタル入力ポートに入力

Page 33: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

では,ボタンを押していない時は, LED が点灯していて,ボタンを押すと LED が消灯するように,プログラムを変更してみましょう.また,プログラムは変更せずに,回路を変更することで,逆の動作をさせるにはどうしたらよいでしょうか.

タクトスイッチを使った入力の方法

Page 34: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

CdS セルを使ったアナログ入力アナログ入力について確認するため,  Cds セルを使って以下の回路を作ります.

Page 35: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

CdS セル (光量によって抵抗値が変化する ) と抵抗で分圧された電圧のうち,抵抗の電圧値をアナログ入力ポートに入れています.

CdS セル 抵抗

GND5V

抵抗の電圧値をアナログ入力ポートに入力

CdS セルを使ったアナログ入力

Page 36: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

CdS セルを使ったアナログ入力

次にプログラムを作成します.

analogRead(0)→アナログ入力の 0番ポートに入ってくる電圧を読み取り, 0V の時は 0 , 5V の時は 1023 という値を返します.電圧を読み取る精度は約 0.0049 V刻みです.

0V

5V

0

1023

1023刻み

5÷1023=0.004887585  ≈ 0.0049

例:値が 512 のとき512×0.005=2.5088 V

cds

Page 37: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

7 セグ LED の点灯

↓1

↓2

↓3

4↑

5↑

6↑

7↑

|↓

GND

7 セグ LED と Arduino を以下の通りに配線します.

Page 38: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

7 セグ LED の点灯

↓1

↓2

↓3

4↑

5↑

6↑

7↑

|↓

GND

7 セグ LED を使って数字を表示させるためには,どこを点灯させれば良いか考えましょう

0 の場合→ a,b,d,f,g,i

次に a,b,d,f,g,i を点灯,jを消灯するためのプログラムを書いてみましょう.

seg_0

Page 39: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

7 セグ LED の点灯

↓1

↓2

↓3

4↑

5↑

6↑

7↑

|↓

GND

同様にして 1 〜 9 までの数字を順に表示するプログラムを作ってみましょう.

それぞれの数字を表示する プ ロ グ ラ ム の 間 にdelay() を入れることで,表示する速度を変えることができます.

seg_1

Page 40: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

温度センサーを使った温度計測温度センサーを使って温度を測定する回路を作ってみましょう.

外観

ピンアサイン

+Vs に 4-20V を加えると, Voutから 1℃ につき 10mV が出力される.

Page 41: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

温度センサーを使った温度計測温度センサーを使って温度を測定する回路を作ってみましょう.

Page 42: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

温度センサーから出力される電圧をシリアルモニターで表示するプログラムを作ってみましょう.

シリアルモニターの使い方

void setup() の { } 内に

Serial.begin(9600);

と記述し,

void loop() の { } 内に

Serial.println( 変数 );

と記述します.

int val = 0;

void setup(){ Serial.begin(9600); }

void loop(){

val = analogRead(0);Serial.println(val);delay(500);

}

プログラム例

シリアル通信

lm35_0

Page 43: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

温度センサーから出力される電圧を温度に変換して,シリアルモニターで温度を表示するプログラムを作ります.

analogRead(0)→アナログ入力の 0番ポートに入ってくる電圧を読み取り, 0V の時は 0 , 5V の時は 1023 という値を返します.電圧を読み取る精度は約 0.0049 V刻みです.

0V

5V

0

1023

1024刻み

5÷1024=0.004887585 =0.049

例:値が 512 のとき512×0.0049=2.5088 V

今回の温度センサーでは, 0℃ で0V が出力され, 1℃増えるごとに10mV(=0.01V) 出力が増加します.

例 え ば 20℃ の場合, 出 力 電圧Vout は

Vout = 0.01×20   = 0.2 [V]

が出力されます.

この関係と analogRead() で読み取る値から,温度を算出して,シリアルモニターで表示させるように,プログラムを変更します.

温度センサーを使った温度計測

Page 44: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

温度センサーから出力される電圧を温度に変換して,シリアルモニターで温度を表示するプログラムを作成します.

温度を入れる変数を temp と定義すると

temp   = (5.0/1024.0)*val / 0.01

となります.

この temp をシリアルモニターで表示させるように,プログラムを変更します.

int val = 0;float temp = 0.0;

void setup(){ Serial.begin(9600);}

void loop(){

val = analogRead(0);temp = (5.0 / 1024.0) * val / 0.01;Serial.println(temp);delay(500);}

温度センサーを使った温度計測

lm35

Page 45: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

Processing とは,主にヴィジュアルデザインに特化したプログラミング言語で, Arduino のプログラミング言語の元となったものです.そのため, Arduino と PC を簡単に連携させることができます.最後に簡単な例を試してみましょう.

Processing との連携

可変抵抗を使って,左のような回路を作成してください.回路としては CdS セルを使った回路と同じで,可変抵抗のつまみを廻すことで変化する電圧値を,アナログ入力の 0 番ポートで読み取ります.

lm35

可変抵抗

GND5V

この電圧値をアナログ入力ポートに入力

つまみを廻すことで移動

Page 46: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

Arduino のプログラムを作成します.

Processing との連携

int val=0;int val_m=0;

void setup(){ Serial.begin(9600);}

void loop(){ val=analogRead(0); val_m=map(val,0,1023,0,255); Serial.write(val_m); delay(100);}

Page 47: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

次に Processing のプログラムを作成します.

Processing との連携

import processing.serial.*;Serial myPort;

int val;

void setup(){ size(400,300); myPort = new Serial(this,"COM5",9600);}

void draw(){ background(val);}

void serialEvent(Serial p){ val = myPort.read();}

※Arduino が接続されているポート番号

Page 48: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

次の Processing のプログラムを試してみましょう.

Processing との連携

import processing.serial.*;Serial myPort;

int val;

void setup(){ size(400,300); myPort = new Serial(this,"COM5",9600);}

void draw(){ background(255); ellipse(200,150,val,val);}

void serialEvent(Serial p){ val = myPort.read();} ※Arduino が接続されているポート番号

Page 49: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

もう一つ Processing のプログラムを試してみましょう.

Processing との連携

import processing.serial.*;Serial myPort;int val;float val_r;

void setup(){ size(400,300); myPort = new Serial(this,"COM5",9600);}void draw(){ background(0); val_r=map(val,0,255,0,400); ellipse(val_r,150,30,30); text(val,10,20);}void serialEvent(Serial p){ val = myPort.read();} ※Arduino が接続されているポート番号

Page 50: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

最後に可変抵抗を温度センサーと取り替えて,以下のプログラムをArduino に転送します.

Processing との連携

int val = 0;

void setup(){ Serial.begin(9600); }

void loop(){

val = analogRead(0);Serial.write(val);delay(1000);

}

Page 51: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

次に Processing で以下のプログラムを試してみましょう.

Processing との連携

import processing.serial.*;Serial myPort;int val;String temp;

void setup(){ size(350,150); myPort = new Serial(this,"COM5",9600);}

void draw(){ temp = nf((5.0 / 1024.0) * val * 100,2,1); background(0); textSize(100); text(temp+" C",20,120);}

void serialEvent(Serial p){ val = myPort.read();}

※Arduino が接続されているポート番号

Page 52: 平成26年度熊本高専Arduino講座 第1週  センサーとArduno及びProcessingとの連携

お疲れ様でした

次回は湯治先生が講師になります.

長い時間,お疲れ様でした.本日はどうもありがとうござい

ました.来週もよろしくお願いいたします.

お気をつけてお帰りください.