Arduinoスケッチプログラミング

-1-Arduinoスケッチプログラミング 作成:米田 文彦 1.⽬的 Arduino【アルドゥイーノ】の基本構成、機能を理解し、簡単な...

10 downloads 459 Views 669KB Size
付録1 実習テキスト「Arduinoスケッチプログラミング」

Arduinoスケッチプログラミング

Arduinoス ケ ッ チ プ ロ グ ラ ミ ン グ 作成:米田

文彦

1.⽬的 Arduino【 ア ル ド ゥ イ ー ノ 】 の 基 本 構 成 、 機 能 を 理 解 し 、 簡 単 な ス ケ ッ チ * を 行 え る 能 力 を身につける。また、パソコンの標準的なキーボードやマウスといった入出力デバイスで はなく、センサやモータのような物理的な情報を扱える入出力デバイスを用いた制御をす る こ と で 、 よ り 対 話 的 な "フ ィ ジ カ ル コ ン ピ ュ ー テ ィ ン グ "を 体 験 す る こ と を 目 的 と す る 。 *

Arduino で は プ ロ グ ラ ム の こ と を ス ケ ッ チ と い う

2.使⽤機器 ・パソコン ・ Arduino ・ Arduino 実 習 Shield ・ Arduino IDE(開 発 環 境 )

3 . オ ー プ ン ソ ー ス プ ラ ッ ト フ ォ ー ム Arduino Arduino(図 1)は 、 単 純 な 入 出 力 を 備 え た 基 板 と 開 発 環 境 (Arduino IDE、 図 2)か ら 構 成 さ れるオープンソースプラットフォームである。 Arduino に は 、 ATMEL 社 の ワ ン チ ッ プ マ イ コ ン ATmega168 が 載 っ て い る 。 こ の ATmega168 で で き る こ と は 、 Arduino で も ほ と ん ど 実 現 可 能 で あ る 。

図1

Arduino

(図 1: Arduinoで マ イ コ ン し よ う !! , http://k-tai.impress.co.jp/cda/article/stapa/40638.html

より転載)

図2 -1-

Arduino IDE

付録1 実習テキスト「Arduinoスケッチプログラミング」

Arduinoスケッチプログラミング

①ワンチップマイコンとは 下図はコンピュータが必ず持っている5つの構成要素である。

制御装置

演算装置

入力装置

出力装置

記憶装置 ワ ン チ ッ プ マ イ コ ン は 、 コ ン ピ ュ ー タ が 持 つ 構 成 要 素 を ひ と つ の IC チ ッ プ 上 に 搭 載 し た 処 理 装 置 の こ と で あ る 。 パ ソ コ ン ほ ど の 処 理 を 行 う こ と は で き な い が 、 小 さ な IC 回 路 のみで特定機能の処理を一手に行うことができる。そのためコンピュータ制御を必要とす る 装 置 (炊 飯 器 な ど の 家 電 製 品 や 自 動 車 )の 多 く に 組 み 込 ま れ て い る 。 要素

パソコン

Arduino

CPU

CPU

記憶装置

RAM、 HDD、 SSD

RAM

入力装置

キーボード、マウス

ス イ ッ チ 、 セ ン サ (光 、 音 、 熱 な ど )

出力装置

モニタ

LED、 LCD な ど

制御装置 演算装置

図3

マ イ ク ロ チ ッ プ 社 PIC16F84

図4

ATMEL社 ATMEGA168

(図 3~ 4: 秋 月 電 子 通 商 , http://akizukidenshi.com/よ り 転 載 ) 図 3 や図 4 のように、処理速度や容量、ピン数など様々なものが各メーカーから販売さ れ て い る 。 通 常 は こ れ ら に CPU を 動 作 さ せ る た め の ク ロ ッ ク を 与 え る 発 振 素 子 と 、 電 源 を 接 続 し な け れ ば 使 う こ と は で き な い 。 Arduino は 発 振 素 子 や 電 源 な ど ワ ン チ ッ プ マ イ コ ンを利用するために必要な環境が揃った状態で販売されている。 -2-

付録1 実習テキスト「Arduinoスケッチプログラミング」

Arduinoスケッチプログラミング

② Arduino の 特 徴 Arduino は 16k バ イ ト の RAM、 1k バ イ ト の デ ー タ メ モ リ を 持 つ 。 14 本 の デ ジ タ ル I/O ピ ン (pin0 ~ 13) 入力または出力として利用することができる。 → 内 6 本 は ア ナ ロ グ OUT ピ ン に 設 定 可 能 (pin3,5,6,9,10,11) 6 本 の ア ナ ロ グ IN ピ ン (pin0~5) 0 か ら 1023 ま で の 値 で 、 ア ナ ロ グ 値 を 得 る こ と が で き る 。 ピン配列は図 5 に示す。

図5

Arduinoピ ン 配 列

4.スケッチしてみよう LED の 点 滅 プ ロ グ ラ ム を 作 っ て み ま し ょ う 。 ①回路設計 Arduino の デ ジ タ ル I/O ピ ン の 13 番 と GND を LED で つ な ぎ ま す 。

-3-

付録1 実習テキスト「Arduinoスケッチプログラミング」

Arduinoスケッチプログラミング

②スケッチ Arduino IDE を コ ピ ー し た フ ォ ル ダ を 開 き 、 Arduino ア イ コ ン を ダ ブ ル ク リ ッ ク し 、 立 ち 上げる。 ※ 開 発 環 境 (Arduino IDE)は http://www.arduino.cc/か ら 無 料 で 手 に 入 れ る こ と が で き る 。 Stop Verify

Open New

Upload

Save

Serial Monitor

ここにスケッチを⼊⼒します

図7

Arduino IDE

Arduino IDE の 画 面 説 明 は 図 7 の 通 り で あ る 。 それでは次のスケッチを打ち込んでみましょう。 example01 001 void setup() 002 { 003

C 言 語 と 同 じ く 、 関 数 の 終 わ り に ; (セ ミ コ ロ pinMode(13,OUTPUT);

ン )を 打 つ 。

004 } 005

大文字と小文字に気をつけること。

006 void loop() 007 { -4-

付録1 実習テキスト「Arduinoスケッチプログラミング」 008

digitalWrite(13,HIGH);

009

delay(1000);

010

digitalWrite(13,LOW);

011

delay(1000);

Arduinoスケッチプログラミング

012 } 打ち込み終わったら、 「 Verify」ボ タ ン を ク リ ッ ク す る 。 「 Done compiling(コ ン パ イ ル 完 了 )」 と い う メ ッ セ ー ジ が で れ ば ス ケ ッ チ に 誤 り は な く 、 Arduino が 実 行 可 能 な も の に 翻 訳 を し 終えたということである。 ③ Arduino へ の 書 き 込 み パ ソ コ ン と 接 続 し 、 Arduino に プ ロ グ ラ ム を 書 き 込 む 。 パ ソ コ ン と の 接 続 は USB ケ ー ブ ル で 行 う 。 Arduino の 電 源 は USB か ら 供 給 さ れ る が 外 部 電 源 を 接 続 す る こ と に よ り 、 単 体 で動作させることもできる。 USB ケ ー ブ ル を つ な い だ ら 、 Arduino IDE の 「 Upload」 ボ タ ン を ク リ ッ ク す る 。「 Done uploading(ア ッ プ ロ ー ド 完 了 )」 と い う メ ッ セ ー ジ が で れ ば 、 Arduino へ の 書 き 込 み が 完 了 。 LED を 点 滅 さ せ る こ と が で き ま し た か ? こ ん な に も 簡 単 に 、 LED を 制 御 す る こ と が で き る の で す 。 スケッチの解説を下記に記載する。 example01 の 解 説 001 void setup() 002 { 003

pinMode(13,OUTPUT);

//13 番 ピ ン を 出 力 と し て 利 用 す る こ と を 宣 言

004 } 005 006 void loop() 007 { 008

digitalWrite(13,HIGH);

//13 番 ピ ン に 5V を 流 す

009

delay(1000);

//1 秒 待 つ

010

digitalWrite(13,LOW);

//13 番 ピ ン を 0V に

011

delay(1000);

//1 秒 待 つ

LED を 点 け る

LED を 消 す

012 } Arduino の ス ケ ッ チ は 必 ず 、void setup()、void loop()の 2 つ が な け れ ば な ら な い 。void setup ()に は 何 番 ピ ン を 出 力 も し く は 入 力 に 利 用 す る か な ど を 記 述 す る 。 void loop()に は 実 際 の 動 作 (LED を 点 滅 さ せ る 等 )を 記 述 す る 。 void loop()は 名 前 の 通 り 、 電 源 を 入 れ て い る 限 り 無限に繰り返される。

-5-

付録1 実習テキスト「Arduinoスケッチプログラミング」

Arduinoスケッチプログラミング

pinMode(pin,mode) ピンの動作を入力か出力かに設定する。 [パラメータ] pin: 設 定 し た い ピ ン の 番 号 mode: INPUT(入 力 )か OUTPUT(出 力 ) digitalWrite(pin,value) HIGH ま た は LOW を 指 定 し た ピ ン に 出 力 す る 。 [パラメータ] pin: 出 力 す る ピ ン の 番 号 value: HIGH か LOW delay(ms) プログラムを指定した時間だけ停止する。 [パラメータ] ms: 一 時 停 止 す る 時 間 。 単 位 は ミ リ 秒 。 1 秒 は 1000 ミ リ 秒 。

5 . Arduino実 習 Shield Arduino に は Shield と 呼 ば れ る 、 機 能 を 拡 張 し 、 よ り 高 度 な 動 作 を 容 易 に 実 現 さ せ る た め の ボ ー ド が 販 売 さ れ て い る 。 各 種 モ ー タ を 制 御 す る た め の Motor Shield や 、 LCD デ ィ ス プ レ イ を 搭 載 す る た め の Color LCD & Joystick shield 等 が あ る 。 本 実 習 で は 、Arduino 実 習 Shield(図 6)を 使 っ て 学 ん で い く 。Arduino 実 習 Shield に は LED(4 個 )、 ス イ ッ チ (4 個 )、 光 セ ン サ (1 個 )、 可 変 抵 抗 (1 個 )、 モ ー タ ー 制 御 用 の IC(2 個 )が 接 続 さ れ て い る 。 Arduino と の ピ ン 接 続 は 以 下 の 通 り で あ る 。 デ ジ タ ル I/O

ア ナ ロ グ IN

0

0 可変抵抗 1 光センサ

1 2 (IN)

スイッチ 0

2

3 (IN)

スイッチ 1

3

4 (IN)

スイッチ 2

4

5 (IN)

スイッチ 3

5

6 (OUT)

LED0

7 (OUT)

LED1

8 (OUT)

LED2

9 (OUT)

LED3

10 (OUT)

モータ右逆転

11 (OUT)

モータ右正転

12 (OUT)

モータ左逆転

13 (OUT)

モータ左正転

-6-

CdS セ ル

付録1 実習テキスト「Arduinoスケッチプログラミング」

図6

Arduinoスケッチプログラミング

Arduino実 習 Shield

6.実習 ◆ 課 題 01

フ ァ イ ル 名 : problem01

LED0 か ら LED3 す べ て を 点 灯 さ せ な さ い 。

◆ 課 題 02

フ ァ イ ル 名 : problem02

LED0 を 0.5 秒 ご と に 点 滅 さ せ な さ い 。

①スイッチ 次に、スイッチの入力を利用してみましょう。 example02 001 void setup() 002 { 003

pinMode(2,INPUT)

//2 番 ピ ン を 入 力 と し て 利 用 す る こ と を 宣 言

004

pinMode(6,OUTPUT);

//6 番 ピ ン を 出 力 と し て 利 用 す る こ と を 宣 言

005 } 006 007 void loop() 008 { 009

if(digitalRead(2)==HIGH) //if 文

010

{

011

2 番ピンの値を読み取り、条件分岐

digitalWrite(10,HIGH); //2 番 ピ ン が HIGH な ら 10 番 ピ ン の LED を 点 け る

012

}

013

else -7-

付録1 実習テキスト「Arduinoスケッチプログラミング」 014

{

015 016

Arduinoスケッチプログラミング

digitalWrite(10,LOW); //2 番 ピ ン が LOW な ら 10 番 ピ ン の LED を 消 す }

017 }

digitalRead(pin) 指 定 し た ピ ン の 値 を 読 み 込 む 。 結 果 の 値 は HIGH か LOW と な る 。 [パラメータ] pin: 読 み た い ピ ン 番 号

◆ 課 題 03

フ ァ イ ル 名 : problem03

ス イ ッ チ 0 が オ ン の 時 、 LED0 が 0.5 秒 間 隔 で 点 滅 し 、 ス イ ッ チ 0 が オ フ の 時 、 LED0 が 1 秒 間 隔 で 点 滅 さ せ な さ い 。

②アナログ⼊⼒ 次に、可変抵抗の入力を利用してみましょう。 ス イ ッ チ は HIGH か LOW だ が 、 可 変 抵 抗 の 値 は 小 刻 み に 変 化 す る 。 小 刻 み な 値 を 取 得 す る た め に は digitalRead の digital を analog に 変 え る と 良 い 。 ま た 、 3,5,6,9,10,11 番 ピ ン は PWM(パ ル ス 幅 変 調 )と い う 方 法 で 、 256 段 階 で 調 節 す る こ と が で き る 。 こ れ も digitalWrite の digital を analog に 変 え る と 良 い 。 ※ analogRead で 取 得 で き る 値 は 、 0 ~ 1023 の 1024 段 階 で あ る 。 analogWrite で は 0 ~ 255 ま で の 256 段 階 な の で 、 analogRead の 値 を 利 用 す る に は 4 で 割 ら な け れ ば な ら な い 。

analogWrite(pin,value) 指定したピンからアナログ値を出力する。 [パラメータ] pin: 出 力 す る ピ ン の 番 号 value: 0 ~ 255 の 値 analogRead(pin) 指 定 し た ア ナ ロ グ ピ ン の 0 ~ 1023 ま で の 値 を 読 み 込 む 。 [パラメータ] pin: 読 み た い ピ ン 番 号

◆ 課 題 04

フ ァ イ ル 名 : problem04

可 変 抵 抗 の 値 (ア ナ ロ グ IN 0 番 ピ ン )を 読 み 込 み 、 そ の 値 に 応 じ て LED0 の 明 る さ を 変 化 させよ。 -8-

付録1 実習テキスト「Arduinoスケッチプログラミング」

Arduinoスケッチプログラミング

様々なセンサが売られているが、大抵はオンかオフのデジタル情報を伝えるものか、温 度 や 明 る さ な ど を 小 刻 み な 電 圧 の 変 化 で ア ナ ロ グ 情 報 を 伝 え る も の で あ る 。 Arduino の digitalRead や analogRead を 使 い こ な す と 、 様 々 な セ ン サ か ら 、 様 々 な 情 報 を 簡 単 に 得 る こ と ができる。 次 は 、 ア ナ ロ グ IN 1 番 ピ ン の 光 セ ン サ CdS セ ル の 情 報 を 使 っ て み ま し ょ う 。 CdS セ ル も 可変抵抗と同じく、アナログ情報を出力するセンサです。

◆ 課 題 05

フ ァ イ ル 名 : problem05

CdS の 値 (ア ナ ロ グ IN 1 番 ピ ン )を 読 み 込 み 、 そ の 値 に 応 じ て LED0 の 明 る さ を 変 化 さ せ よ 。 CdS の 値 を そ の ま ま LED0 の 明 る さ の 値 に 使 う と 大 き す ぎ る こ と に 注 意 す る こ と 。

◆ 課 題 06

フ ァ イ ル 名 : problem06

CdS の 値 (ア ナ ロ グ IN 1 番 ピ ン )を 読 み 込 み 、 そ の 値 に 応 じ て LED0 の 点 滅 ス ピ ー ド を 変 化 さ せ よ 。 点 滅 ス ピ ー ド は 、 CdS の 値 を そ の ま ま 使 っ て よ い 。

③モータ 最後に、モーターを制御してみましょう。 10 番 ピ ン を 出 力 す る と モ ー タ 右 が 逆 転 、 11 番 ピ ン を 出 力 す る と モ ー タ 右 が 正 転 、 12 番 ピ ン を 出 力 す る と モ ー タ 左 が 逆 転 、 13 番 ピ ン を 出 力 す る と モ ー タ 左 が 正 転 し ま す 。 Arduino 実 習 Shield の 1 ~ 6 の ソ ケ ッ ト に 、 モ ー タ カ ー か ら 出 て い る 1 ~ 6 の 線 を つ な い でください。これでモータを制御できているか確認できます。

◆ 課 題 07

フ ァ イ ル 名 : problem07

車を 5 秒間、前進させてください。

◆ 課 題 08

フ ァ イ ル 名 : problem08

CdS の 値 が 100 以 上 な ら 車 を 前 進 、 99 以 下 な ら 停 止 さ せ な さ い 。

-9-

付録1 実習テキスト「Arduinoスケッチプログラミング」

Arduinoスケッチプログラミング

7.おわりに ラ イ ト レ ー サ と い う の を 知 っ て い ま す か ? ラ イ ン ト レ ー サ は 黒 く 引 か れ た 線 (ラ イ ン )を 赤外線などで照らし検出し左右のモータを制御することによってライン上を走らせる物で す。本実習を通して、モータの出力、そしてセンサから値を読み込むことが可能となりま し た 。 課 題 08 は ほ と ん ど ラ イ ン ト レ ー サ の よ う な も の で す 。 セ ン サ の 数 を 増 や し 、 精 度 を上げることで左右を認識し、線の上を走らせることができるはずです。 ま た 、 ラ イ ン ト レ ー サ に 限 ら ず 、 様 々 な セ ン サ を Arduino に 接 続 す る こ と で 、 温 度 計 や リモコンなどに変身させることが可能です。私たちの身の回りにある家電製品もマイコン によって制御されています。鍋に温度センサを仕掛け、クッキングヒーターを制御するこ とができれば、炊飯器も作ることができるかもしれません。

- 10 -