Arduino UNO
の使い方
森下 拓哉 廣安 知之 山本 詩子
2015
年
2
月
25
日
IS Report No.
Report
Medical Information
System Laboratory
Abstract
本稿では, フィジカルコンピューティングのためのマイコン
(
マイクロ・コンピュータ
)
を搭載した
オープンソースプラットフォームの一つである,
Arduino
プロジェクトが製造
/
販売する
Arduino
の
基礎知識とその使用方法及び
Bluetooth
モジュールを使用した
Bluetooth
通信,モータシールドを使
用したモータ制御,ライブラリを使用した時系列並列処理方法を紹介する.
キーワード
: Arduino
,
Arduino UNO
,
Arduino IDE
,
micro computer
,
LED
,モータシールド,時
系列並列処理
目 次
第
1
章 はじめに
. . . .
2
第
2
章
Arduino
について
. . . .
3
2.1
Arduino UNO R3 . . . .
4
2.2
シールド
. . . .
7
2.3
ライブラリ
. . . .
7
第
3
章
Arduino IDE
の使い方
. . . .
8
3.1
ソフトウェアのダウンロード
. . . .
8
3.2
デバイスドライバのインストール
. . . .
9
3.3
スケッチを書く
. . . .
9
3.4
コードの意味
. . . .
12
3.5
シリアル通信を行う
. . . .
13
第
4
章
Bluetooth
によるシリアル通信
. . . .
15
4.1
Arduino
の電源
. . . .
15
4.2
Bluetooth
通信モジュールを使う
. . . .
16
第
5
章 モータシールドによるモータ制御
. . . .
17
第
6
章 ライブラリ:
Metro
による時系列並列処理
. . . .
19
第
7
章 まとめ
. . . .
21
第
8
章 コード付録
. . . .
22
第
1
章 はじめに
実験などで光刺激を与える際,多くはパソコンのモニタを使用するだろう.しかし,定時速度の関係
ではモニタのリフレッシュレートが追い付かず,正しい刺激が与えれない場合がある.そこで,マイ
コンを使い,実際に
LED
で刺激を提示することでモニタのリフレッシュレートによる問題を解決で
きるかもしれない.本稿で紹介するのはフィジカルコンピューティングのためのマイコンを搭載した
オープンソースプラットフォームのである
Arduino
の中の
Arduino UNO
である.フィジカルコン
ピューティングとはマイコンによってエレクトロニクスを制御,実際に物理的な計算や仕事を行う
「インタラクティブ・オブジェクト」を設計することである
1).
第
2
章
Arduino
について
前章でも上げたように
Arduino
はオープンソースプラットフォームである.これは普通のマイコン
開発ボードとは違い,物理的な製品であるにも関わらず,製品仕様から設計まですべての情報が提
示されており入手出来るようになっている.また,
Arduino
はプリント基板の図面まで公開されてい
る.その為,
Arduino
と同じものを作ることが可能であるので,市場には
Arudino
互換製品が多くあ
る.
Arduino
はボードだけが
Arduino
というわけではなく,開発環境を含めて
Arduino
とされている.
Arduino
のソフトウェアは
Fig. 2.1
のようなもので,
Java
ベースの統合開発環境
(IDE
:
Integrated
Development Environment)
で,こちらもオープンソースとなっている.プログラムの記述に使われ
る言語は
C/C++
がベースとなっているが,
Arduino
の独自の記述方法が使われている.特徴的なの
は
Arduino
ではプログラムの事を ”スケッチ ”と呼ぶことである.
2)2.1Arduino UNO R3
第
2
章
Arduino
について
2.1
Arduino UNO R3
本稿で使用説明には,多くの種類がある
Arduino
の中でも標準的な
Arduino
として使われている
Arduino UNO
の
Arduino UNO R3(Fig. 2.2)
を使用していく.
Arduino UNO R3
の仕様を
Table.
2.1
に記す
3).
Fig. 2.2
Arduino UNO R3
Table. 2.1
Arudino UNO R3
の仕様
項目
説明
マイコン
ATmega328
動作電圧
5V
入力電源電圧
(
推奨範囲
)
7
∼
12V
入力電源電圧
(
最大範囲
)
6
∼
20V
デジタル
I/O
ピン
14
本
(
うち
6
本は
PWM
として使用可能
)
アナログ入力ピン
6
本
I/O
ピンの最大
DC
電流
40mA
3.3V
ピンの最大
DC
電流
50mA
フラッシュメモリー
32KB(ATmega328)
,その内
0.5 KB
が
bootloader
に使われる.
SRAM
2KB(ATmega328)
EEPROM
1KB(ATmega328)
クロック周波数
16MHz
2.1Arduino UNO R3
第
2
章
Arduino
について
次にボード上のピンの説明をしていく.まずは
Fig. 2.3
に示した
POWER
と
ANALOG IN
を説明す
る
2).
Fig. 2.3
POWER
と
ANALOG IN
•
無表記
何も接続されていない.
• IOREF
ボードの
+5V
と繋がっており,
+5V
が出力される.
• RESET
ボードのリセット入力.
• POWER
– 3.3V
3.3V
の電源出力.
– 5V
5V
の電源出力.
– GND
グラウンド
(0V)
.
– Vin
DC
ジャックから入力された電源がそのまま出力される.逆に,
DC
ジャックに何も接続し
ないで,
Vin
から
Arudino
に電源供給を行うことも可能.
• ANALOG IN
A0
∼
A5
までの
6
チャンネルあり,入力された電圧をデジダル変換して読み取ることが出来る.
入力はアナログ入力とされているが,設定によってデジタル入出力として使うことも可能.デ
ジタルピンが足りない時に使用できる.
2.1Arduino UNO R3
第
2
章
Arduino
について
次に
Fig. 2.4
に示した
DIGITAL IN
を説明する
2).
Fig. 2.4
DIGITAL IN
• SCL
I2C
で使用するクロック信号.
• SDA
I2C
で使用するデータ信号.
• AREF
アナログをデジタルに変換する際の基準電圧入力.通常は何も接続しない.
• GND
グラウンド
(0V)
• DIGITAL IN
– 0
汎用のデジタル入出力だが,シリアルの
RX(Receiver Crystal)
信号と繋がっており,
Ar-duino
がパソコンと通信するのにも使われる.シリアル通信を行う場合にもこのピンは使
えない.
– 1
汎用のデジタル入出力だが,シリアルの
TX(Transmitter Crystal)
信号と繋がっており,
Arduino
がパソコンと通信するのにも使われる.シリアル通信を行う場合にもこのピンは
使えない.
– 2
∼ 12
汎用のデジタル入出力.ピンナンバーの横に
”
∼
”
が書かれたものは
8
ビット
(0
∼
255)
の
パルス幅変調
(PWM
:
Pulse Width Modulation)
の出力として使用できる意味を表して
いる.
– 13
2.2
シールド
第
2
章
Arduino
について
2.2
シールド
Arduino
の特徴として
”
シールド
”
というものがある.これは
Arduino
本体の上に搭載することで
機能を拡張したり,他の機器と接続したりするオプションのようなものである.一般的にはこのよう
なスタイルをドータ・ボードと呼ばれているが,
Arduino
ではシールドと呼ぶ.
Arduino
用のシール
ドは様々なものがあり,キットや完成品がある.また,シールドのユニバーサル基板も売られており,
自分でシールド回路を作ることも可能である
2).
Fig. 2.5
に示すのは
Arduino UNO R3
に
Arduino
Motor Shield
を搭載したものである.
Arduino Motor Shield
の使い方についてはまた後で詳しく説
明する.
Fig. 2.5
Arduino Motor Shield
2.3
ライブラリ
Arduino IDE
には標準で入っているライブラリの他に,自分で新しくライブラリを追加することが
出来る
(Fig. 2.6)
.今回は時系列並列処理ライブラリ
”Metro”
を使用した複数の
LED
フラッシュを紹
介する.
Metro
の使い方についてはまた後で詳しく説明する.
第
3
章
Arduino IDE
の使い方
3.1
ソフトウェアのダウンロード
まずはじめに
http://www.arduino.cc/
にアクセスし,
Download
より使用するパソコンに応じた
ソフトウェアをダウンロードする
(Fig. 3.1)
2).本稿では
Windows7
の例のもとに解説を行う.
Fig. 3.1
Arduino IDE
のダウンロード
ソフトウェアはインストール作業を必要とせず,圧縮ファイルを展開するだけで良い.展開すると
arduino-
⃝
.
⃝
.
⃝
(
⃝はバージョン番号
)
というフォルダが出来る.このファルダが作業ディレクトリ
となるため,ホームディレクトリなど任意の場所に移動して置くと便利である.フォルダの中は
Fig.
3.2
の様になっており,赤枠で示すのが
Arduino
の実行プログラムである.
3.2
デバイスドライバのインストール
第
3
章
Arduino IDE
の使い方
3.2
デバイスドライバのインストール
次に
Arduino UNO
を使用するため,デバイスドライバのインストールを行う.先ほどのフォルダ
の中にセットアップ情報が含まれている
Drivers
フォルダがある
(Fig. 3.3)
.
Fig. 3.3
Arduino
のデバイスドライバ
Arduino
をパソコンに接続すると
Windows7
の場合,ドライバの自動インストールが作動するが,
ドライバが無いためエラーとなる.その為,ドライブマネージャーを起動し,ほかのデバイスの中
にある不明なデバイスを右クリックしプロパティを開く.次にドライバの更新をクリックし,
「コン
ピューターを参照してドライバーソフトウェアを検索します」を選択し,
Fig. 3.3
に示したドライバ
のフォルダを選択し,次へをクリックする.インストールするかどうかを聞かれるので「インストー
ル」をクリックする.インストールが完了すると
Arduino
が使用する仮想
COM
ポートが表示される
ので確認しておく.また,この
COM
ポートはデバイスマネージャーのポートからも確認できる.
3.3
スケッチを書く
とにかくスケッチを書いて
Arduino
を動かしてみる.
2.1
で紹介した
Arduino
の動作確認に使うデ
ジタルの
13
番に繋がれた
LED(Fig. 3.4)
を使用する.
Fig. 3.4
デジタル
13
番の
LED
3.3
スケッチを書く
第
3
章
Arduino IDE
の使い方
Fig. 3.2
の実行プログラムを起動させると
Fig. 3.5
に示す起動画面が表示される.
Fig. 3.5
Arduino IDE
の起動画面
次に
Arduino
の動作を確認するためのテストスケッチ
(
リスト
3.1)
を
Arduino IDE
に書く.使用
しているコードの説明は後で行う.コードに使用する大文字・小文字はそれぞれ意味を持っているの
で打ち間違えないようにする.
リスト
3.1
テストスケッチ
1 v o i d s e t u p () { 2 p i n M o d e (13 , O U T P U T ); 3 } 4 5 v o i d l o o p () { 6 d i g i t a l W r i t e (13 , H I G H ); 7 d e l a y ( 5 0 0 ) ; 8 d i g i t a l W r i t e (13 , LOW ); 9 d e l a y ( 5 0 0 ) ; 10 }3.3
スケッチを書く
第
3
章
Arduino IDE
の使い方
スケッチが書けたら正しく書けているかの検証を行う.
Arduino IDE
の左上にあるチェックマーク
が検証である.このチェックマークをクリックし,正しくスケッチが記述さてれいれば「コンパイル後
のスケッチサイズ
...
」と表示される
(Fig. 3.6(a))
.間違った記述があるとエラー箇所がハイライト表示
になる
(Fig. 3.6(b))
.
Fig. 3.6(b)
に示すエラーは
”digitalWrite”
と記述するところを
”DigitalWrite”
としたものである.
(a)
正しいスケッチ(b)
誤ったスケッチFig. 3.6
スケッチの検証
スケッチが正しく書けたら,パソコンと
Arduino UNO
を接続し,
Arduino IDE
の
”
ツール
”
から
”
マイコンボード
”
を選び
”Arduino Uno”
を選択する.次に
”
シリアルポート
”
を選択し,
3.2
で確認した
COM
ポートを選択する.
Arduino
にスケッチを転送する準備が出来たので
Fig. 3.7
に示す赤枠の
”
3.4
コードの意味
第
3
章
Arduino IDE
の使い方
Fig. 3.7
Arduino
へ書き込み
転送が完了すると「マイコンボードへの書き込みが完了しました」と出る.検証は上手くいくが,
転送がうまく出来ない場合はポートの設定,あるいはマイコンボードの設定が正しくされていないと
考えれるためもう一度設定を見直す.
Arduino
にスケッチを転送し,
Fig. 3.4
の
LED
がゆっくり点
滅すると正しいスケッチが行えている.正しいスケッチが行えたらこのスケッチを保存しておく.ス
ケッチの保存は
Arduino IDE
のメニューにある
”
ファイル
”
から
”
保存
”
をクリックすることで行える.
保存場所を指定しない限り,保存はマイドキュメントの下にある
Arduino
フォルダに保存される.ま
たスケッチごとにフォルダが作成され,保存される.
3.4
コードの意味
リスト
3.1
に示したコードを解説する.
Arduino
の処理で最低限必要なコードは
setup
と
loop
であ
る.これらの処理は戻り値を返さないため
void
型で記述する.
まずは
void setup()
の部分を解説する.
void setup()
は使いたい機能の初期化を行うコードである.
リスト
3.1
では
pinMode(13, OUTPUT);
と記述している.これは
Arduino
の
13
番ピンを出力とし
て使用するという設定である.
次に
void loop()
の部分を解説する.
void loop()
は繰り返される処理を記述する.リスト
3.1
では
dig-italWrite
と
delay
を使用している.まずは
digitalWrite
を説明する.
digitalWrite
は
digitalWrite(
ピ
ン番号
,HIGH/LOW);
と記述することで指定したピンに信号を送る
(HIGH)
か送らないか
(LOW)
を
指定できる.ここで指定するピン番号は
void setup()
で初期化したピン番号でなければならない.次
に
delay
を説明する.
delay
は遅延を表し,単位はミリ秒である.今回使用したのは
delay(500);
であ
るので次の処理までに
0.5
秒待機するというものである.
これらのコードにより,先ほど
Arduino
に転送したスケッチは
13
番ピンに
0.5
秒ごとに信号を送
る,送らないを繰り返しているため,
LED
が点滅を繰り返していたのである.
3.5
シリアル通信を行う
第
3
章
Arduino IDE
の使い方
いた.しかし,この様なスケッチの書き方だとほかのピンを使いたいときに一つ一つ書き換えなけれ
ばならない.その為,少しスケッチを変更しリスト
3.2
の様にする.
C
言語の様に
int
を用いること
で変数定義を行うことができ,ピン番号や遅延時間の設定を
LED PIN
や
time
の数値を変更するだ
けでスケッチ内に反映されるので汎用性が高くなり,書き換えの間違いも少なく出来る.
リスト
3.2
変数を用いたスケッチ
1 int L E D _ P I N = 1 3 ; 2 int t i m e = 5 0 0 ; 3 v o i d s e t u p () { 4 p i n M o d e ( LED_PIN , O U T P U T ); 5 } 6 7 v o i d l o o p () { 8 d i g i t a l W r i t e ( LED_PIN , H I G H ); 9 d e l a y ( t i m e ); 10 d i g i t a l W r i t e ( LED_PIN , LOW ); 11 d e l a y ( t i m e ); 12 }3.5
シリアル通信を行う
少し発展して,
Arduino
に標準で備わっている機能の一つであるシリアル通信を行ってみる.まず,
先ほどのスケッチをリスト
3.3
の様に変更する.
リスト
3.3
シリアル通信
1 int L E D _ P I N = 1 3 ; 2 int b a u d R a t e = 9 6 0 0 ; 3 v o i d s e t u p () { 4 p i n M o d e ( LED_PIN , O U T P U T ); 5 d i g i t a l W r i t e ( LED_PIN , LOW ); 6 S e r i a l . b e g i n ( b a u d R a t e ); 7 } 8 9 v o i d l o o p () { 10 if ( S e r i a l . a v a i l a b l e () >0) 11 { c h a r c = S e r i a l . r e a d (); 12 if ( c == ’ h ’ ) 13 { 14 d i g i t a l W r i t e ( LED_PIN , H I G H ); 15 S e r i a l . w r i t e ( " LED ON " ); 16 } 17 if ( c == ’ l ’ ) 18 { 19 d i g i t a l W r i t e ( LED_PIN , LOW ); 20 S e r i a l . w r i t e ( " LED OFF " ); 21 } 22 } 23 }3.3
を見てみると新しく
Serial
関係のコードがある.これはシリアル通信を行うものである.
void
setup()
を見ると,ピンを出力,信号を送らないと設定し,
Serial.begin(baudRate);
で
Arduino
のシリ
アルポートを
9600bps
で初期化している.シリアルポートの初期化に必要なのはこの
Serial.begin(
通
信速度
)
のみである.次に
void loop()
を見ていく.
Serial.available()
はシリアルポートに何バイトの
3.5
シリアル通信を行う
第
3
章
Arduino IDE
の使い方
Serial.read ();
は受信したデータを読み込む.
3.3
では受信したデータを
char
型の変数に格納し,特
定の文字が入力されることで
LED
の
ON/OFF
を行っている.最後に
Serial.write();
はシリアルポー
トにバイナリデータを出力する.
”LED ON”
や
”LED OFF”
の様に文字列を出力することが出来る.
数値として出力したい場合は
Serial.print()
を用いる.
スケッチが正しく書けたら
Arduino
に書き込みを行い,実際に操作してみる.
Fig. 3.8(a)
の赤枠に
示したアイコンをクリックすると
Fig. 3.8(b)
の様な画面が表示される.
Fig. 3.8(b)
右下に示した赤
枠は通信速度の設定であり,この値はスケッチに書き込んだ値と同じにしなければいけない.今回使
用したのは
9600bps
の為,
9600baud
を選択する.通信速度の設定が完了したら
Fig. 3.8(b)
上部の赤
枠に
”h”
または
”l”
を打ち込みエンターキーもしくは送信ボタンを押し,
LED
の変化を確認する.
”h”
を送信した時に
LED
が点灯し,
”LED ON”
の文字列が受信される,または
”l”
を送信した時に
LED
が消灯し,
”LED OFF”
の文字列が受信されたなら正しいスケッチとシリアル通信が行えている.
(a)
シリアルモニタの表示(b)
データの送信第
4
章
Bluetooth
によるシリアル通信
前章では
Arduino
とパソコンを繋いで行うシリアル通信を紹介した.しかし,常にパソコンと繋がっ
ている状態だと製品設計や実験設計に制約が出来てしまう.そこで
Arduino
とパソコンの通信を無線
化する.本稿では
Bluetooth
を用いた無線通信を紹介する.
4.1
Arduino の電源
まずはパソコンとの接続を断つため,
Arduino UNO
を動かすための電源が必要となる.
Arduino
の電源供給口は
Fig. 4.1
に示す
USB
コネクタや
AC
アダプターから行うことが出来る.ま
た,
Vin
ピンからの供給も可能である.
Fig. 4.1
電源供給口
AC
アダプターから
9V
電池による供給も可能であるが,電池を用いると交換によるコストがかか
る.そして
Arduino UNO
の動作電圧は
5V
である為,今回はスマートフォン用のモバイルバッテリー
(Fig. 4.2)
を用いる.また,一般の
100V
のコンセントからスマートフォン用充電器を用いて動作さ
せることも可能である.
Fig. 4.2
モバイルバッテリーによる電源供給
4.2Bluetooth
通信モジュールを使う
第
4
章
Bluetooth
によるシリアル通信
4.2
Bluetooth 通信モジュールを使う
次に
Bluetooth
によるシリアル通信を行うためライトニングエレクトロニクスが販売する
”PIC24FJ
64GB004
小型マイコン基板
SBDBT”(Fig. 4.3)
を本稿では使用する.この
Bluetooth
通信モジュー
ルはピンヘッダが実装されているものとされていないものが販売されているが,ハンダ付け等の作業
が困難であるならば実装済みの購入を勧める.この
Bluetooth
通信モジュールの動作電圧は
3.3V
の
為,
Arduino
の
Power
ピンの
3.3V
から電源供給を行う.
Arduino
と
Bluetooth
通信モジュールの接
続回路図を
Fig. 4.4
に示す.
Fig. 4.3
Bluetooth
通信モジュール
Fig. 4.4
Arduino
と
Bluetooth
通信モジュールの接続回路図
回路の接続が完了したら,通信に使用するパソコンと
Bluetooth
通信モジュールの両方に
Bluetooth
端子を付け,ペアリングを済ませる
(PIN
コードの入力が求められたら
”0000”
と入力する
)
.これでシ
リアル通信を行う準備は完了である.
スケッチはパソコンと直接繋いでいた時のままでシリアル通信が行える.前章で行ったシリアル通
信の方法と同様にシリアルモニタを表示させ,
LED
の制御が実行できたら成功である
(
回路もスケッ
チもあっているが動作しない時は通信速度を
4800
に下げて通信を試す
)
.
第
5
章 モータシールドによるモータ制御
本章では,シールドの例として
Arduino Motor Shield
を使用したモータ制御を説明する.このモー
タシールドでは
2
個の
DC
モータもしくは
1
個のステッピングモータの方向と速度を制御出来るよう
にするものである.使用方法も簡単で,
Arduino
のピンとモータシールドのピンをはめ合わし,モー
タシールドの
Fig. 5.1
に示す部分にモータの線をつなげるだけである.
またモータシールドはピンごとに役割を持っており,その役割に沿ってスケッチを書く.モータシー
ルドを用いたスケッチの例をリスト
5.1
に示す.リスト
5.1
に示した様にデジタルピン
12
・
13
番が回
転方向,
8
・
9
番がブレーキ,
3
・
11
番が速度制御となっており,回転とブレーキは
HIGH/LOW
で操
作を行い,速度は
256
段階で調節が行える.今,回転方向の
HIGH
を正転とした場合,出力を
LOW
にすると逆転方向に回転を行う.また,ブレーキは
HIGH
にすることで動作を行う.このスケッチの
組合せで様々な動きをさせることが可能になる.前章の
Bluetooth
通信と組み合わせることで自作の
ロボットを作成することも可能である.
取り扱いの注意として電源供給がある.
Arduino
からの電源供給でモータシールドも動作するが,
供給量によってはモータが正しく動作しない場合がある.その為,モータシールドのみ別の電源をつ
なげることも可能であるが,その際モータや
Arduino
に掛かる負荷を考慮しなければ
Arduino
の破
損に繋がるため注意が必要である.
Fig. 5.1
モータ配線取り付け位置
リスト
5.1
モータシールドスケッチ例
1 v o i d s e t u p () { 2 // モ ー タ A の 制 御 用 ピ ン 設 定 3 p i n M o d e (12 , O U T P U T ); // 回 転 方 向 ( HIGH / LOW ) 4 p i n M o d e (9 , O U T P U T ); // ブ レ ー キ ( HIGH / LOW ) 5 p i n M o d e (3 , O U T P U T ); // P W M に よ る ス ピ ー ド 制 御 ( 0 - 2 5 5 ) 6 7 // モ ー タ B の 制 御 用 ピ ン 設 定 8 p i n M o d e (13 , O U T P U T ); // 回 転 方 向 ( HIGH / LOW ) 9 p i n M o d e (8 , O U T P U T ); // ブ レ ー キ ( HIGH / LOW ) 10 p i n M o d e (11 , O U T P U T ); // P W M に よ る ス ピ ー ド 制 御 ( 0 - 2 5 5 ) 11 }第
5
章 モータシールドによるモータ制御
12 13 v o i d l o o p () { 14 // モ ー タ A : 正 転 モ ー タ B : 正 転 15 d i g i t a l W r i t e (12 , H I G H ) , d i g i t a l W r i t e (13 , H I G H ); 16 d i g i t a l W r i t e (9 , LOW ) , d i g i t a l W r i t e (8 , LOW ); 17 a n a l o g W r i t e (3 , 255) , a n a l o g W r i t e (11 , 2 5 5 ) ; 18 }第
6
章 ライブラリ:
Metro
による時系列並列処理
本章では時系列並列処理ライブラリ
”Metro”
を使用した複数の
LED
フラッシュについて説明する.
今回使用するライブラリ
”Metro”
は標準では
Arduino IDE
には含まれていないライブラリのため
http://playground.arduino.cc/Code/Metro
より
Fig. 6.1
に示す
zip
ファイルをダウンロードする.
Fig. 6.1
Metro
のダウンロード
ダウンロードした
zip
ファイルを解凍し,その中に含まれている
”Metro”
と書かれたフォルダを
Arduino
フォルダ内部の
”libraries”
に移動させる.これでライブラリの追加は完了である.また,新
しいライブラリを追加する時
Arduino IDE
を開いている場合は一度閉じてから追加をする.
次にスケッチの仕方を説明する.
Arduino IDE
を起動させ,ウィンドウ上部のスケッチをクリック
し,ライブラリの使用をたどるとユーザ提供の中に
Metro
が追加されているのでそれをクリックす
る.クリックするとスケッチ内に
#include <Metro.h>
が追加される.そしてリスト
6.1
に示すスケッ
チが実際に
Metro
を使用したスケッチ例である.このスケッチは
3
番ピンに繋がれた
LED
が
8Hz
と
5
番ピンに繋がれた
LED
が
10Hz
でフラッシュを行うものである.
Metro
のコード定義は
”Metro
変
数名
= Metro(
ミリ秒
);”
で行う.そして
loop()
で
”if (Metro
変数名
.check() == 1)”
で定義の時に指
定した時間の時に
Metro
変数名のチェック判定が
1
となり実行される.
リスト
6.1
Metro
スケッチ例
1 # i n c l u d e < M e t r o . h > 2 3 M e t r o M e t r o 1 = M e t r o ( 1 0 0 0 / ( 2 * 8 ) ) ; 4 M e t r o M e t r o 2 = M e t r o ( 1 0 0 0 / ( 2 * 1 0 ) ) ; 5 6 int s t a t e 1 =255 , s t a t e 2 = 2 5 5 ; 7 int p i n 1 =3 , p i n 2 =5; 8 int f l a g 1 =0 , f l a g 2 =0; 9 10 v o i d s e t u p () {第
6
章 ライブラリ:
Metro
による時系列並列処理
11 p i n M o d e ( pin1 , O U T P U T ); 12 a n a l o g W r i t e ( pin1 , s t a t e 1 ); 13 p i n M o d e ( pin2 , O U T P U T ); 14 a n a l o g W r i t e ( pin2 , s t a t e 2 ); 15 } 16 17 18 v o i d l o o p () { 19 if ( M e t r o 1 . c h e c k () == 1) { 20 if ( f l a g 1 = = 0 ) 21 { a n a l o g W r i t e ( pin1 , s t a t e 1 ); f l a g 1 =1; } 22 e l s e 23 { a n a l o g W r i t e ( pin1 , 0); f l a g 1 =0; } 24 } 25 if ( M e t r o 2 . c h e c k () == 1) { 26 if ( f l a g 2 = = 0 ) 27 { a n a l o g W r i t e ( pin2 , s t a t e 2 ); f l a g 2 =1; } 28 e l s e 29 { a n a l o g W r i t e ( pin2 , 0); f l a g 2 =0; } 30 } 31 }第
7
章 まとめ
今回,オープンソースプラットフォームのである
Arduino
を用いそのスケッチ方法,通信方法,シー
ルド・ライブラリの使用について述べた.本稿で述べたスケッチやシールドは一部分であるため,ぜ
ひこのレポートを参考にさらなる技術向上へとつながることを期待する.
第
8
章 コード付録
今回紹介したコードを使ったスケッチを付録として記載する.
リスト
8.1
周波数発生プログラム
1 # i n c l u d e < M e t r o . h > 2 M e t r o M e t r o 1 = M e t r o ( 1 0 0 0 / ( 2 * 8 ) ) ; 3 M e t r o M e t r o 2 = M e t r o ( 1 0 0 0 / ( 2 * 1 0 ) ) ; 4 M e t r o M e t r o 3 = M e t r o ( 1 0 0 0 / ( 2 * 1 2 ) ) ; 5 M e t r o M e t r o 4 = M e t r o ( 1 0 0 0 / ( 2 * 1 1 ) ) ; 67 int s t a t e 1 = LOW , s t a t e 2 = LOW , s t a t e 3 = LOW , s t a t e 4 = LOW ;
8 v o i d s e t u p () { 9 p i n M o d e ( pin1 , O U T P U T ); 10 d i g i t a l W r i t e ( pin1 , s t a t e 1 ); 11 p i n M o d e ( pin2 , O U T P U T ); 12 d i g i t a l W r i t e ( pin2 , s t a t e 2 ); 13 p i n M o d e ( pin3 , O U T P U T ); 14 d i g i t a l W r i t e ( pin3 , s t a t e 3 ); 15 p i n M o d e ( pin4 , O U T P U T ); 16 d i g i t a l W r i t e ( pin4 , s t a t e 4 ); 17 } 18 19 v o i d l o o p () { 20 if ( M e t r o 1 . c h e c k () == 1) { 21 if ( s t a t e 1 == LOW ) s t a t e 1 = H I G H ; 22 e l s e s t a t e 1 = LOW ; 23 d i g i t a l W r i t e ( pin1 , s t a t e 1 ); 24 } 25 if ( M e t r o 2 . c h e c k () == 1) { 26 if ( s t a t e 2 == LOW ) s t a t e 2 = H I G H ; 27 e l s e s t a t e 2 = LOW ; 28 d i g i t a l W r i t e ( pin2 , s t a t e 2 ); 29 } 30 if ( M e t r o 3 . c h e c k () == 1) { 31 if ( s t a t e 3 == LOW ) s t a t e 3 = H I G H ; 32 e l s e s t a t e 3 = LOW ; 33 d i g i t a l W r i t e ( pin3 , s t a t e 3 ); 34 } 35 if ( M e t r o 4 . c h e c k () == 1) { 36 if ( s t a t e 4 == LOW ) s t a t e 4 = H I G H ; 37 e l s e s t a t e 4 = LOW ; 38 d i g i t a l W r i t e ( pin4 , s t a t e 4 ); 39 } 40 }