第1章 はじめに [開発環境] 演習室はすでに開発環境が整っています。C ドライブにあるArduino フォルダにある、 「arduino。exe」を実行すれば、すぐにプログラムの開発を行うことが出来ます。 以下の開発環境のセットアップ方法は、もし自宅で演習をしたい人がいれば参考にしてく ださい。 ・JAVA 実行環境 すでにインストール済みかもしれないので、開発環境の起動ができなければインストー ルします。Sun のサイト(http://www.java.com/ja/)からダウンロードできます。 ・ Arduino 開発環境 Arduino 公式サイト(http://www.arduino.cc/)から開発環境をダウンロードします。 Windows 環境での最新版は「arduino-1.0.1-windows.zip」というファイルをダウンロー ド後に展開します。 ・シリアルドライバ Windows 環境の場合、Arduino 開発環境とともに展開され、「arduino-1.0.1」フォル ダの中の「drivers」フォルダに「FTDI USB Drivers」があります。初めてArduino ボ ードをUSB ケーブルで接続すると、ドライバを要求されます。その際、デバイスマネー ジャーで状況を確認すると、Arduino UNOのドライバが正常でないとの表示になってい ます。このドライバのプロパティを表示すると、「ドライバの更新」というボタンがあ りますのでクリックします。次にドライバのある場所を手動で検索します。参照する場 所は「arduino-1.0.1¥drivers」です。これでドライバのインストールは完了します。他 のバージョンでもやり方は同じです。 Windows 環境の場合、Arduino 開発環境を展開したフォルダに入っている「arduino.exe」 を起動します(図1.1)。 [動作確認] はじめて開発環境を使う際には、ここに示す動作確認を必ず行ってください。シリアルポ ートの番号など、今後の開発で必要になる情報を確認します。 動作確認では、Arduino ボード上のLED を点滅させるプログラムを作成し、その動作を確 認します。 ・プログラムの入力 開発環境のエディタ部分で以下のlist0101 を入力します(左の行番号は入力しません)。 図1.1 Arduino 開発環境 作成したプログラムを保存しておきます。[File]-[Save] メニューを選択して、Y ドライブ の自分のフォルダに保存します。ファイルの拡張子は不要です。ファイル名で入力したフ ォルダが作成され、その中にいくつかのファイルが保存されます。 図1.2 list0101 の入力 ・コンパイル [Sketch]-[Verify/Compile] メニューを選択すると、プログラムのコンパイルが行なわれ ます。 「Binary sketch size: xxx bytes」と表示されればコンパイルに成功しています。 この表示の代わりに「error」などのメッセージが表示された場合は、プログラムにエラ ーがあります(図1。3)。エラーメッセージに従ってプログラムを修正してください。 図1.3 コンパイルエラーのメッセージ ・プログラムのアップロード プログラムのコンパイルに成功したら、コンパイル済みのプログラムをArduino ボード へ送ります。この操作をアップロードと呼んでいます。 アップロードに使用するシリアルポートの設定を確認します。[Tools]-[Serial Port] メニ ューを選択して、[COM4] にチェックが入っていることを確認してください。もし [COM4] でなかったら、[COM4] を選択してください。 (注意:Serial Port は使用する環境によって異なります。環境に合わせてCOM4 など の指定を変えてください) [File]-[Upload to I/O Board] メニューを選択して、プログラムをアップロードします。 アップロードの中はArduino ボードにある“RX”と“TX”のLED が点滅します。もし点滅 しない場合は、シリアルポートの設定が異なっています。設定を変更して再度アップロ ードをしてみてください。 アップロードが完了すると、プログラムは自動的に実行を開始します。先ほどのプログ ラムでは、LED が1 秒間隔で点滅します。 RX+TX LEDs Pin13 (L) LED GND Digital Pins (0~13) USB to computer Reset Button 7 to 12V DC input Power Pins 図1.4 Arduino ボード Analog Input Pins 第2章 Arduinoプログラム Arduino のプログラムは、C 言語に似たプログラム言語を利用しています。ただ、次の点 で異なりますので、プログラムを作成する上では若干の注意が必要です。 • main 関数がない main 関数の代わりに、setup 関数とloop 関数を使用します。 • #include が不要 • printf 関数やscanf 関数は使えない Arduuino ボードにはディスプレイやキーボードが無いので、これらの関数も使えません。 次に、第1 章で使ったプログラムについて解説していきます。 プログラムには、setup 関数とloop 関数が必ず必要です。setup 関数はプログラム開始時 に一度だけ呼び出されます(一度だけ実行されます)。一方、loop 関数はプログラム実行 中に繰り返し呼び出されます。 それぞれの関数での処理について説明していきます。 ・setup 関数 setup 関数では、「pinMode(ledPin, OUTPUT);」としています。pinMode 関数は、 Arduinoボードの入出力を設定します。ここではledPin をOUTPUT としています。つ まり、ピン番号13 を出力としています。 ・loop 関数 loop 関数では、digitalWrite 関数によるピンへの出力と、delay 関数による時間待ちを しています。10 行目のdigitalWrite 関数では、ledPin へHIGH を出力しています (ledPinはOUTPUT になっているので出力できます)。 delay 関数は、一定時間の時間待ちをします。delay 関数は、待つ時間をミリ秒(1000 分 の1 秒)で指定します。 次に電子回路の説明をします。 電子回路の説明では、Arduino ボードの回路図を使います。回路図はArduino 公式サイ トの“Arduino Duemilanove”のページからダウンロードできます。 「http://arduino.cc/en/Main/ArduinoBoardDuemilanove」にあるSchematicでPDFファ イルになっています。事前に準備しておいてください。 ・digitalWrite 関数の出力 プログラム中のdigitalWrite で、信号を出力しています。出力する値は、LOW または HIGH のいずれかです。出力ピン(今回のプログラムではピン番号13)には、LOW が 出力された場合は0V が、HIGH が出力された場合は5V が出力されます。 それぞれのピン番号は、回路図だけでなく、Arduino ボードにも印刷されています。ピ ン番号13 は、図2.2 のような位置にあります。 ・LED の点灯 プログラムの「digitalWrite(ledPin, HIGH);」によって、ピン番号13 にHIGH が出力さ れることは、回路図ではAVR マイコンの“SCK(PB5)”の電位が5V になることを意味して います。つまり、LED が接続されている線(“SCK(PB5)”~ピン番号13)が5V になり ます。一方、LED の反対側は“GND”となっていますが、これはグランド(接地)を示し ていて、Arduino ボードでは0V です。 LED のアノード側が5V で、カソード側が0V なので、アノードからカソードへ電流が 流れます(これを順電流と呼んでいます)。これにより、LED が点灯します。 図2.1 Arduino ボードの回路図(一部抜粋) ピン番号 13 図2.2 Arduino ボードのピン番号 図2.3 LEDへの出力 第3章 回路の作成 [ブレッドボードの使い方] Arduino ボード本体で利用できる入出力は、LED が1 つだけであり、これではさまざま な演習を行なっていくことができません。そこで、ブレッドボードと呼ばれる板を利用し て、さまざまな回路を作成していくことにします。 ブレッドボードは、図3.1 のように、ピン穴が電気的につながっています。ブレッドボード を使うことで、部品を差し込むだけでさまざまな回路を作成できます。 +と-は横方向に導通している それ以外は縦方向に導通している 図3.1 ブレッドボード ブレッドボードを使って、LED を点滅させる回路を作成していきます。まず、回路図を作 成します。回路図の作成にはさまざまなルールがあるのですが、ここでは自分が理解でき れば十分なので、自分にとってわかりやすいように作成してみてください。 たとえば、図3.2 のような回路図を作成しました。 この回路図に従って、ブレッドボードに部品を配置していきます。必要な部品は、LED、 抵抗です。 ブレッドボードに部品を配置していきます。必要な部品はLED と抵抗です。それぞれの部 品を確認しておいてください。抵抗は1KΩ を使いますので、10 × 102 となり、カラーコ ードは「茶・黒・赤」です。また、LED は足の長い方がアノード側(回路図にあるLED の ▽の側)です。 図3.2 ブレッドボード これらの部品をブレッドボードに差し込みます。ブレッドボードの導通の方向に注意して ください。 図3.3 部品の配置 今回、Arduino ボード側のピン番号0 を使うことにします。ピン番号は0~13 を使うこと ができます。Arduino ボード側のピン番号0 とGND を、それぞれブレッドボードに接続 します。GND の接続を忘れないように気をつけてください。 [プログラム作成] 作成するプログラムは、list0101 とほぼ同じですが、ピン番号が0 となっている点に注意 してください。このプログラムをlist0301 として保存しておきます。 図3.4 ピン番号0とGNDの接続 プログラムをコンパイルしてアップロードすると、ブレッドボード上のLED が点滅します。 ※プログラムが正しく動作しない場合、その原因はプログラムまたは回路にあります。こ のように、ソフトウェアとハードウェアのことを同時に考えて行かなくてはならない点が、 組み込みシステムが難しいと言われている理由です。 見方を変えれば、組み込みシステムの技術者は、ソフトとハードの両方で能力を発揮でき るという優位性もあります。 図3.5 実行結果 第4章 プロジェクトの説明 [ LEDの明るさ制御] LED の明るさを制御します。 LED の明るさを変えるためには、LED に流す電流(または、抵抗を含めた電圧)を変化 させる必要があります。しかし、Arduino ボードの出力はHIGH(5V) またはLOW(0V) の みです。そこで、PWM と呼ばれるデジタル制御方式で、LED の明るさを変化させます。 ・作成するシステム 消灯状態のLED が次第に明るくなり、2 秒かけて最大輝度に達する。1 秒間は最大輝 度のまま点灯する。その後、次第に暗くなり、4 秒かけて消灯状態になる。 ・使用する部品 LED 抵抗(1KΩ) [セグメントLEDの制御] 7 セグメントLED を使って、カウンタを作成します。7 セグメントLED は、いわゆる「デ ジタル数字」の表示に使われる発光素子です。この7 セグメントLED の1 桁を点灯させる には、8 つの信号を制御しなくてはなりません(7 セグメントの信号とGND)。 ここでは、7 セグメントLED を使って2 桁のカウンタを作成します。2 桁のカウンタでは、 00~99 までをカウントできます。ここで問題になるのは、Arduino ボードの出力ピンの 個数です。 Arduino ボードには14 本(ANALOG も利用すると19 本)の出力ピンがあります。この ままでは、出力ピンの数が不足します。 そこで、7 セグメントLED のダイナミック点灯(ダイナミック表示)という技術を使いま す。 ・作成するシステム 7 セグメントLED を2 つ使ってカウンタを作成する。このカウンタは、00 から01、 02、とカウントアップしていき、59 まで出力する。カウンタの値は1 秒ごとに増加す る。59 の次は00 に戻る。従って、このカウンタを実行すると、デジタル時計の「秒」 の部分を実現したことになる。 ・使用する部品 7 セグメントLED × 2 抵抗(1KΩ)× 8 [LEDマトリクスの点灯] ※今年度の教材にはありません。 64 個のLED が8 × 8 の格子状に並んだLED マトリクスを点灯させます。通常、64 個の LED を点灯させるには、64(各LED のアノード)+1(カソード)の信号が必要になりま すが、65 個の信号を制御するのは困難なため(当然コストの問題もあります)、LED の アノードとカソードをそれぞれ制御します。 ・作成するシステム 8 × 8 のLED マトリックスを使って自分の名字のイニシャル(たとえば、田中ならT) を出力する。8x8 の出力が難しければ、6x6 としてもよい。さらに可能であれば、名 字と名前を1 秒ごとに表示を切り替えて出力する。 ・使用する部品 LED マトリックスパラライト社TOM-1588BH-B 抵抗(1KΩ)× 8 [光センサによるLEDの自動点灯] CdS 光センサを使って、周囲が暗くなると自動的にLED が点灯する仕組みを実現します。 暗くなると点灯し、明るくなると消灯する仕組みは、照明を自動制御する仕組みとして役 立つ内容です。 CdS は、その名の通りCdS を材料とする半導体センサで、明るさによって抵抗値が変化す る特性を持っています。このセンサは、その抵抗値のみが変化するため、抵抗値の変化を 電圧の変化に変える仕組みが必要となります。 ・作成するシステム 光センサを使い、暗くなるとLED が点灯し、明るくなるとLED が消灯するシステム を作る。LED の光が直接光センサに入ってしまうと誤動作をするので、この点には注 意する。光センサを手で覆うとLED を点灯させるようにする。 ・使用する部品 LED CdS 光センサ [音の発生] 圧電素子(圧電スピーカ)と呼ばれる部品を使って、音を出します。圧電素子は、携帯電 話の着信音などでも利用されています。 圧電素子の原理を理解した上で、音を出す仕組みを考えていきます。ある高さの音を出力 するには、その周波数の振動を発生させることになります。この振動の発生に圧電素子を 使います。 ・作成するシステム 圧電素子を使って、「ド」「レ」「ミ」の3 音を1 秒ずつ出力する。 ・使用する部品 圧電素子(圧電スピーカ) [電子オルゴールの作成] 「音の発生」を応用することで、電子オルゴールを作ることができます。 ・作成するシステム 電子オルゴールを作る。 ・使用する部品 圧電素子(圧電スピーカ) 第5章 関数リファレンス [設定関係] 設定関係の関数は、主にsetup 関数で使用します。 pinMode Arduino ボードの入出力ピンについて、入力または出力を設定します。設定しない場合は 「入力」となります。 ・ pinMode 関数 ピン番号:Arduino のピン番号を指定します モード:INPUT またはOUTPUT を指定します [入出力] Arduino ボードの入出力ピンは、デジタル入出力を行なう際はデジタルピン番号で、アナ ログ入出力を行なう際はアナログピン番号で指定します。デジタルピン番号は「0~19」を 指定できます。 デジタル入出力については、Arduino ボード上で「DIGITAL」の「0~13」がデジタルピ ン番号「0~13」です。また、「ANALOG」の「0~5」がデジタルピン番号「14~19」に 割り当てられています。 最大40mA 程度の出力が可能です。LED などの電子部品に直接40mA もの電流を流すと 破損します。必ず抵抗を使って流れる電流を抑制してください。 digitalWrite 出力に設定されたピンから、デジタル値を出力します。デジタル値はLOW またはHIGHで、 それぞれ0V と5V の出力になります。 ・digitalWrite 関数 ピン番号:Arduino のデジタルピン番号を指定します 出力値:LOW またはHIGH を指定します digitalRead 入力に設定されたピンから、デジタル値を入力します。この関数は、入力されたデジタル 値に対して、LOW またはHIGH を返します。 ・digitalRead 関数 ピン番号:Arduino のデジタルピン番号を指定します analogWrite 出力に設定されたピンから、アナログ値を出力します。アナログ値は約490Hz のPWM で 制御されています。analogWrite 関数で指定した値(0~255)が0~5V として出力されま す。 ・analogWrite 関数 ピン番号:Arduino のアナログピン番号を指定します 出力値:0~255 の整数を指定します。 analogRead 入力に設定されたピンから、アナログ値を入力します。10 ビットのA/D 変換により、0~ 5V の電圧を、0~1023 の整数値として得ることができます。 ・analogRead 関数 ピン番号:Arduino のアナログピン番号を指定します [タイマー] delay 一定時間、処理を停止させます。 ・delay 関数 時間:停止する時間(単位はミリ秒)を指定します。 delayMicroseconds 一定時間、処理を停止させます。 ・delayMicroseconds 関数 時間:停止する時間(単位はマイクロ秒)を指定します。 millis Arduino ボードが起動してからの時間を整数で返します。単位はミリ秒です。 ・millis 関数 micros Arduino ボードが起動してからの時間を整数で返します。単位はマイクロ秒です。約70 分 で0 に戻ります。 ・micros 関数 [シリアル通信] Arduino はUSB を通してパソコンとシリアル通信を行うことが出来ます。 Sirial.begin シリアル通信のデータ転送レートをビット/秒で指定します。コンピュータと通信する際は 以下のレートから一つを選びます。 300、 1200、 2400、 4800、 9600、 14400、 19200、 28800、 38400、 57600、 115200 他の転送レートを必要とするコンポーネントをピン0 と1 につないで使う場合、上記以外 の値を指定することも可能です。 ビット/秒 データ転送レートを指定します。 Sirial.end シリアル通信を終了し、RX とTX を汎用の入出力ピンとして使えるようにします。再度シ リアル通信を有効にしたいときは、Serial.begin()を コールしてください。 Sirial.print 人が読むことのできる形式(ASCII テキスト)でデータをシリアルポートへ出力します。 この命令は多くの形式に対応しています。数値は1 桁ずつASCII 文字に変換されます。浮 動小数点数の場合は、小数点以下第2 位まで出力するのが デフォルトの動作です。バイト 型のデータは1 文字として送信されます。文字列はそのまま送信されます。 val:出力する値。すべての型に対応しています。 format:基数または有効桁数(浮動小数点数の場合) Sirial.println データの末尾にキャリッジリターン(ASCII コード13 あるいは'¥r')とニューライン(ASCII コード10 あるいは'¥n')を付けて送信します。このコマンドはSerial.print()と同じフォーマ ットが使えます。 data:すべての整数型とString 型 format:data を変換する方法を指定します(省略可)
© Copyright 2024 ExpyDoc