付録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 -