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

Arduino UNO IS Report No. Report Medical Information System Laboratory

N/A
N/A
Protected

Academic year: 2021

シェア "Arduino UNO IS Report No. Report Medical Information System Laboratory"

Copied!
27
0
0

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

全文

(1)

Arduino UNO

の使い方

   

森下 拓哉 廣安 知之 山本 詩子

   

2015

2

25

   

IS Report No.

   

Report

Medical Information

  

System Laboratory

  

(2)

Abstract

本稿では, フィジカルコンピューティングのためのマイコン

(

マイクロ・コンピュータ

)

を搭載した

オープンソースプラットフォームの一つである,

Arduino

プロジェクトが製造

/

販売する

Arduino

基礎知識とその使用方法及び

Bluetooth

モジュールを使用した

Bluetooth

通信,モータシールドを使

用したモータ制御,ライブラリを使用した時系列並列処理方法を紹介する.

キーワード

: Arduino

Arduino UNO

Arduino IDE

micro computer

LED

,モータシールド,時

系列並列処理

(3)

目 次

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

(4)

1

章 はじめに

実験などで光刺激を与える際,多くはパソコンのモニタを使用するだろう.しかし,定時速度の関係

ではモニタのリフレッシュレートが追い付かず,正しい刺激が与えれない場合がある.そこで,マイ

コンを使い,実際に

LED

で刺激を提示することでモニタのリフレッシュレートによる問題を解決で

きるかもしれない.本稿で紹介するのはフィジカルコンピューティングのためのマイコンを搭載した

オープンソースプラットフォームのである

Arduino

の中の

Arduino UNO

である.フィジカルコン

ピューティングとはマイコンによってエレクトロニクスを制御,実際に物理的な計算や仕事を行う

「インタラクティブ・オブジェクト」を設計することである

1)

(5)

2

Arduino

について

前章でも上げたように

Arduino

はオープンソースプラットフォームである.これは普通のマイコン

開発ボードとは違い,物理的な製品であるにも関わらず,製品仕様から設計まですべての情報が提

示されており入手出来るようになっている.また,

Arduino

はプリント基板の図面まで公開されてい

る.その為,

Arduino

と同じものを作ることが可能であるので,市場には

Arudino

互換製品が多くあ

る.

Arduino

はボードだけが

Arduino

というわけではなく,開発環境を含めて

Arduino

とされている.

Arduino

のソフトウェアは

Fig. 2.1

のようなもので,

Java

ベースの統合開発環境

(IDE

Integrated

Development Environment)

で,こちらもオープンソースとなっている.プログラムの記述に使われ

る言語は

C/C++

がベースとなっているが,

Arduino

の独自の記述方法が使われている.特徴的なの

Arduino

ではプログラムの事を ”スケッチ ”と呼ぶことである.

2)

(6)

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

(7)

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

チャンネルあり,入力された電圧をデジダル変換して読み取ることが出来る.

入力はアナログ入力とされているが,設定によってデジタル入出力として使うことも可能.デ

ジタルピンが足りない時に使用できる.

(8)

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

(9)

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

の使い方についてはまた後で詳しく説明する.

(10)

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

の実行プログラムである.

(11)

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

(12)

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 }

(13)

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

に示す赤枠の

(14)

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

が点滅を繰り返していたのである.

(15)

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()

はシリアルポートに何バイトの

(16)

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)

データの送信

(17)

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

モバイルバッテリーによる電源供給

(18)

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

に下げて通信を試す

)

(19)

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 }

(20)

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 }

(21)

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 () {

(22)

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 }

(23)

7

章 まとめ

今回,オープンソースプラットフォームのである

Arduino

を用いそのスケッチ方法,通信方法,シー

ルド・ライブラリの使用について述べた.本稿で述べたスケッチやシールドは一部分であるため,ぜ

ひこのレポートを参考にさらなる技術向上へとつながることを期待する.

(24)

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 ) ) ; 6

7 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 }

(25)

8

章 コード付録

リスト

8.2

自作移動ロボットの制御プログラム

1 c o n s t int b a u d R a t e = 4 8 0 0 ; 2 3 v o i d s e t u p () { 4 S e r i a l . b e g i n ( b a u d R a t e ); 5 // モ ー タ ー A の 制 御 用 ピ ン 設 定 6 p i n M o d e (12 , O U T P U T ); // 回 転 方 向 ( HIGH / LOW ) 7 p i n M o d e (9 , O U T P U T ); // ブ レ ー キ ( HIGH / LOW ) 8 p i n M o d e (3 , O U T P U T ); // P W M に よ る ス ピ ー ド 制 御 ( 0 - 2 5 5 ) 9 10 // モ ー タ ー B の 制 御 用 ピ ン 設 定 11 p i n M o d e (13 , O U T P U T ); // 回 転 方 向 ( HIGH / LOW ) 12 p i n M o d e (8 , O U T P U T ); // ブ レ ー キ ( HIGH / LOW ) 13 p i n M o d e (11 , O U T P U T ); // P W M に よ る ス ピ ー ド 制 御 ( 0 - 2 5 5 ) 14 } 15 16 v o i d l o o p () { 17 if ( S e r i a l . a v a i l a b l e () >0){ 18 c h a r c = S e r i a l . r e a d (); 19 if ( c == ’ s ’ ) 20 { 21 // モ ー タ ー A : 停 止 22 d i g i t a l W r i t e (12 , H I G H ); 23 d i g i t a l W r i t e (9 , H I G H ); 24 a n a l o g W r i t e (3 , 2 5 5 ) ; 25 // モ ー タ ー B : 停 止 26 d i g i t a l W r i t e (13 , H I G H ); 27 d i g i t a l W r i t e (8 , H I G H ); 28 a n a l o g W r i t e (11 , 2 5 5 ) ; 29 S e r i a l . w r i t e ( " S t o p " ); 30 } 31 e l s e if ( c == ’ w ’ ) 32 { 33 // モ ー タ ー A : 正 転 モ ー タ ー B : 正 転 34 d i g i t a l W r i t e (12 , LOW ) , d i g i t a l W r i t e (13 , LOW ); 35 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 ); 36 a n a l o g W r i t e (3 , 200) , a n a l o g W r i t e (11 , 2 0 0 ) ; 37 S e r i a l . w r i t e ( " Go " ); 38 } 39 e l s e if ( c == ’ d ’ ) 40 { 41 // モ ー タ ー A : 正 転 モ ー タ ー B : 停 止 42 d i g i t a l W r i t e (12 , LOW ) , d i g i t a l W r i t e (13 , H I G H ); 43 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 ); 44 a n a l o g W r i t e (3 , 200) , a n a l o g W r i t e (11 , 2 0 0 ) ; 45 S e r i a l . w r i t e ( " R i g h t " ); 46 } 47 e l s e if ( c == ’ a ’ ) 48 { 49 // モ ー タ ー A : 停 止 モ ー タ ー B : 正 転 50 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 , LOW ); 51 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 ); 52 a n a l o g W r i t e (3 , 200) , a n a l o g W r i t e ( 1 1 , 2 0 0 ) ; 53 S e r i a l . w r i t e ( " L e f t " ); 54 } 55 e l s e if ( c == ’ x ’ ) 56 { 57 // モ ー タ ー A : 逆 転 モ ー タ ー B : 逆 転 58 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 ); 59 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 ); 60 a n a l o g W r i t e (3 , 200) , a n a l o g W r i t e (11 , 2 0 0 ) ;

(26)

8

章 コード付録

61 S e r i a l . w r i t e ( " B a c k " ); 62 } 63 e l s e if ( c == ’ e ’ ) 64 { 65 // モ ー タ ー A : 正 転 モ ー タ ー B : 正 転 66 d i g i t a l W r i t e (12 , LOW ) , d i g i t a l W r i t e (13 , LOW ); 67 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 ); 68 a n a l o g W r i t e (3 , 200) , a n a l o g W r i t e (11 , 1 0 0 ) ; 69 S e r i a l . w r i t e ( " G o _ R i g h t " ); 70 } 71 e l s e if ( c == ’ q ’ ) 72 { 73 // モ ー タ ー A : 正 転 モ ー タ ー B : 正 転 74 d i g i t a l W r i t e (12 , LOW ) , d i g i t a l W r i t e (13 , LOW ); 75 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 ); 76 a n a l o g W r i t e (3 , 100) , a n a l o g W r i t e (11 , 2 0 0 ) ; 77 S e r i a l . w r i t e ( " G O _ L e f t " ); 78 } 79 e l s e if ( c == ’ c ’ ) 80 { 81 // モ ー タ ー A : 逆 転 モ ー タ ー B : 逆 転 82 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 ); 83 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 ); 84 a n a l o g W r i t e (3 , 200) , a n a l o g W r i t e (11 , 1 0 0 ) ; 85 S e r i a l . w r i t e ( " B a c k _ R i g h t " ); 86 } 87 e l s e if ( c == ’ z ’ ) 88 { 89 // モ ー タ ー A : 逆 転 モ ー タ ー B : 逆 転 90 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 ); 91 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 ); 92 a n a l o g W r i t e (3 , 100) , a n a l o g W r i t e (11 , 2 0 0 ) ; 93 S e r i a l . w r i t e ( " B a c k _ L e f t " ); 94 } 95 } 96 }

(27)

参考文献

1)

同志社大学 生命医科学部 医情報学科

, “

医情報基礎実験

1I.

フィジカルコンピューティングの基礎

,” 2013

2)

高橋隆雄

,

楽しい電子工作

Arduino

で電子工作を始めよう

!,

2

,

秀和システム

, 2013

Fig. 2.1 Arduino IDE
Fig. 2.2 Arduino UNO R3
Fig. 2.3 POWER と ANALOG IN
Fig. 2.6 Arduino IDE のライブラリ例
+7

参照

関連したドキュメント

tiSOneと共にcOrtisODeを検出したことは,恰も 血漿中に少なくともこの場合COTtisOIleの即行

操作は前章と同じです。但し中継子機の ACSH は、親機では無く中継器が送信する電波を受信します。本機を 前章①の操作で

すべての Web ページで HTTPS でのアクセスを提供することが必要である。サーバー証 明書を使った HTTPS

信号を時々無視するとしている。宗教別では,仏教徒がたいてい信号を守 ると答える傾向にあった

行ない難いことを当然予想している制度であり︑

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

ƒ 、または Arduinoのリセットボタン”oƒ、2 }~x してか らコマンド @2 しま Q*した Arduino す。 プログラムを Arduino に…き:む Äsについては「

*+パラメータを Arduino MICRO マイコンでK!す るためのソフト(ソースコード)を Arduino IDE でコンパイルJなMN ( スケッチ )