MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Arduinoの基礎のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Arduinoの基礎
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == Arduinoのスケッチには、setup()関数とloop()関数が存在する。<br> setup()関数はスケッチの実行開始時(電源を投入した直後)、またはボードのリセット後に1度だけ呼ばれる。<br> 変数の初期化や、ピンモードの設定、ライブラリの初期化などを行うのに適している。<br> loop()関数は、setup()関数が呼ばれた後に繰り返し呼び出される。<br> <br><br> == Arduino UNO R3 仕様一覧 == 下表に、Arduino UNO R3の仕様を示す。<br> <center> {| class="wikitable" style="background-color:#fefefe;" |+ Arduino UNO R3の仕様 |- ! style="background-color:#66CCFF;" | 項目 ! style="background-color:#66CCFF;" | 仕様 |- | マイコン || ATmega 328P |- | 動作電圧 || 5[V] |- | 入力電圧<br>DCジャック または Vin端子 || 推奨値 : 7~12[V]<br>限界値 : 6~20[V] |- | アナログ入力ピン || 6本 |- | デジタルI/Oピン || 14本 |- | DC出力電流 I/O || 20[mA] / IOピン(1つのI/Oピン当たり)<br>合計 Max : 100[mA]<br>※注意 : 1ピンあたり40[mA]以上で損傷 |- | DC出力電流 3.3[V]出力ピン || 50[mA] |- | Flashメモリ || 32[KB] |- | SRAM || 2[KB] |- | EEPROM || 1[KB] |- | クロック || 16[MHz] |} </center> <br><br> == Arduinoの電源供給 == Arduinoの電源供給は、USB端子と外部電源の2通りの給電方式がある。<br> USB端子と外部電源は以下に示す供給能力が推奨される。<br> <br> <center> {| class="wikitable" style="background-color:#fefefe;" |- ! style="background-color:#66CCFF;" | ! style="background-color:#66CCFF;" | 電圧[V] ! style="background-color:#66CCFF;" | 電流[A] |- | USB電源 || 5[V] || 約0.5〜0.9[A] |- | 外部電源(DCジャック) || 7〜12[V]<br>※注意 || 約1[A] |- | 外部電源(V<sub>IN</sub>) || 7〜12[V]<br>※注意 || 約1[A] |} </center> <br> <u>※注意</u><br> <u>Arduinoの開発元では、入力電圧の限界値を6〜20[V]と表示している。</u><br> <u>ただし、実装部品が耐圧20[V]以下の部品が実装されている場合がある。</u><br> <u>そのため、7〜12[V]の推奨値の範囲で使用することを推奨する。</u><br> <br><br> == スケッチのダウンロード == まず、スケッチをコンパイルする。<br> 次に、Arduino IDEの[ツール]メニューバー - [ボード]メニューでArduinoボードを選択する。<br> 更に、Arduino IDEの[ツール]メニューバー - [ポート]メニューでCOMポートを選択する。<br> 最後に、[マイコンボードに書き込む]ボタンを押下して、コンパイルしたスケッチをダウンロードする。<br> <br><br> == LEDの点滅(ArduinoのHello World)のサンプルコード == 次に示すのは、LEDを点滅させるサンプルコードである。<br> <syntaxhighlight lang="c++"> const int LED_PIN = 13; void setup() { pinMode(LED_PIN, OUTPUT); } void loop() { digitalWrite(LED_PIN, HIGH); delay(1000); digitalWrite(LED_PIN, LOW); delay( 1000 ); } </syntaxhighlight> <br><br> == Arduinoで電圧を測定する(アナログ入力を読み取る) == Arduinoボードは、A0 - A5までの6チャネルの10ビットのADCを持っている。<br> Arduino Uno等の動作電圧が5[V]のボードでは、0[V] - 5[V]までの電圧は、0 - 1023までの整数に対応付けられる。<br> <br> Arduino IDEでは、<code>analogRead</code>関数を用いることで、指定したアナログピンから値を読むことができる。<br> <code>analogRead</code>関数は読み取った値を、0 - 1023までの整数値で返す。<br> <br> <math>\mbox{analogRead 関 数 の 戻 り 値 } = \frac{\mbox{セ ン サ 電 圧 [V]}}{\mbox{参 照 電 圧 [V]}} \times (2^{N} - 1) \qquad \therefore \mbox{N は 、 N ビ ッ ト の AD コ ン バ ー タ }</math><br> <br> したがって、<code>analogRead</code>関数の戻り値をセンサ電圧に対応する場合は、以下の計算式を使用することにより、センサ電圧が分かる。<br> <br> <math>\mbox{セ ン サ 電 圧 [V]} = \frac{\mbox{analogRead 関 数 の 戻 り 値 }}{(2^{N} - 1)} \times \mbox{参 照 電 圧 [V]} \qquad \therefore \mbox{N は 、 N ビ ッ ト の AD コ ン バ ー タ }</math><br> <br> なお、標準では、<code>analogRead</code>関数の戻り値である0 - 1023が、0[V] - 5[V](Arduino Gemmaのような3.3[V]の動作電圧の場合は0[V] - 3.3[V])に対応付けられているが、<br> <code>analogReference</code>関数を使用してこの範囲を変更することは可能である。<br> ただし、設定可能な値は、各ボードに依存するため注意が必要である。<br> <br> <center>'''図.1 電圧を測定する回路図'''</center><br> [[ファイル:Arduino AnalogRead 01.png|フレームなし|中央]] <br> 次に記述するのは、電圧を読み取った結果をシリアルモニタに出力するサンプルコードである。<br> これによって 1秒毎にシリアルモニタに電圧が表示される。<br> <br> <center>'''図.2 電圧を測定してシリアルモニタに表示'''</center><br> [[ファイル:Arduino AnalogRead 02.png|フレームなし|中央]] <br> <syntaxhighlight lang="c++"> const int PIN_ANALOG_INPUT = 5; void setup() { Serial.begin(9600); } void loop() { int iVoltage = analogRead(PIN_ANALOG_INPUT); float fVoltage = iVoltage * 5.0 / 1023.0; Serial.println(fVoltage); delay(1000); } </syntaxhighlight> <br><br> == 割り込みとISR == Arduinoのスケッチでのハードウェア割込み(hardware interrupt)の利用方法について記載する。<br> <br> Arduino Unoでは、2個のピン(D2, D3)が割込みに利用できる。D2は割込み番号が0、D3は割り込み番号が1である。<br> Arduino Mega2560では、6個(D2, D3, D18, D19, D20, D21)が使用できる。割込み番号は順に0, 1, 5, 4, 3, 2が設定されている。<br> <br> 割込みサービスルーチン(ISR, interrupt service routine)は、引数および戻り値が無いvoidの関数が割り当てられる。<br> attachInterrupt(割込み番号, 関数名, モード)でISRをセットする。<br> また、attachInterruptの引数にはピンの番号ではなく、割込み番号を指定することに注意すること。<br> ピン番号から割込み番号の解決には、digitalPinToInterruptを使用する。<br> attachInterruptで指定した関数には幾つかの制約があるので、次の点に注意する。<br> * delay関数は機能しない。 * millis関数の戻り値が増加しない。 * シリアル通信により受信したデータは、失われる可能性がある。 * 割り当てた関数のなかで値が変化する変数にはvolatileをつけて宣言する必要がある。 <br> 次のサンプルコードでは、toggle_ledという名前のISRを、D2ピンでの割込み処理に指定している。<br> モードのFALLINGはHIGHからLOWの状態へ遷移したことで割込みを発生させることを意味する。<br> ISRでLEDが接続されたピンの状態を表す変数をLOWまたはHIGHに変化させている。<br> そして、loop()関数でその変数をdigitalWrite()関数に渡している。<br> <syntaxhighlight lang="c++"> const byte PIN_LED = 10; const byte PIN_INTERRUPT = 2; volatile byte state = LOW; void setup() { pinMode(PIN_LED, OUTPUT); digitalWrite(PIN_LED, state); attachInterrupt(digitalPinToInterrupt(PIN_INTERRUPT), toggle_led, FALLING); } void loop() { digitalWrite(PIN_LED, state); } void toggle_led() { state != state; } </syntaxhighlight> <br><br> == ArduinoでPWM制御 == Arduinoでは、PWMによるアナログ出力(任意の出力値)をサポートしている。<br> デジタル信号としてHIGH(3.3[V]または5[V])とLOW(0[V])だけでなく、2[V]等の中間の値も出力できる。<br> これにより、LEDの調光制御を行うことができる。<br> <br><br> ==== PWMとは ==== PWM(Pulse Width Modulation)とは、電圧を制御する方法の1つである。<br> 出力のオンとオフを行うことで、 パルス幅に比例した電圧を得ることができる。<br> <br> 例えば、下図のように信号の基本周期の間で、25[%]の時間だけ出力をオンにすることにより、<br> 平均で電圧の25[%]の電圧(5[V] * 25[%] = 1.25[V])を得ることができる。<br> 尚、この場合はオン時間をデューティーサイクル (Duty Cycle) といい、最大電圧に対する出力電圧の割合になる。<br> <br> [[ファイル:Arduino PWM 01.png|フレームなし|中央]] <br><br> ==== ArduinoのPWM出力 ==== Arduino Unoでは、デジタル出力ピンの3, 5, 6, 9, 10, 11番の6個のピンがPWM制御に利用できる。<br> ピン番号の前に ~記号が付記されており、PWM制御が利用可能であることがわかる。<br> [[ファイル:Arduino PWM 02.jpg|フレームなし|中央]] <br> 基本的に、ArduinoのPWMの周波数は約490[Hz]だが、Arduino Unoでは5番と6番ピンは980[Hz]である。<br> 周波数が2倍ということは、波長が半分ということである。しかしながら、デューティーサイクルが同じであれば出力電圧は同じである。<br> <br><br> ==== analogWrite関数の使い方 ==== Arduinoでは、PWM出力にはanalogWrite関数を使用する。<br> analogWrite関数の引数は、第1引数にピン番号、第2引数にデューティーサイクルを渡す。<br> <br> デューティーサイクルは、パーセント表示ではなく、0(0%)から255(100%)の値をとる。<br> したがって、5[V]の動作電圧の時には、255 / 5 = 51より電圧 * 51として、更に整数に丸めた値をanalogWrite関数の第2引数に渡す。<br> <br> analogWrite関数を1度呼ぶと、同じピンに対してanalogWrite関数、digitalWrite関数、digitalRead関数を呼ぶまで、一定のPWM波を出力する。<br> analogWrite関数を呼ぶためにpinModeを事前に呼ぶ必要は無い。<br> <br><br> ==== PWM出力のサンプルコード ==== 次に、analogWrite関数によるPWM出力のサンプルコードを記述する。<br> Arduinoの3番ピンにて2[V]を出力している。<br> <br> <syntaxhighlight lang="c++"> const int PIN_PWM = 3; const float V_OUT = 2; void setup() { int i = (int)V_OUT * 51; analogWrite(PIN_PWM, i); } void loop() { } </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:Arduino]]
Arduinoの基礎
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse