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> == スケッチのダウンロード == まず、スケッチをコンパイルする。<br> 次に、Arduino IDEの[ツール]メニューバー - [ボード]メニューでArduinoボードを選択する。<br> 更に、Arduino IDEの[ツール]メニューバー - [ポート]メニューでCOMポートを選択する。<br> 最後に、[マイコンボードに書き込む]ボタンを押下して、コンパイルしたスケッチをダウンロードする。<br> <br><br> == LEDの点滅(ArduinoのHello World)のサンプルコード == 次に示すのは、LEDを点滅させるサンプルコードである。<br> <source 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 ); } </source> <br><br> == Arduinoで電圧を測定する(アナログ入力を読み取る) == Arduinoボードは、A0 - A5までの6チャネルの10ビットのADCを持っている。<br> Arduino Uno等の動作電圧が5[V]のボードでは、0[V] - 5[V]までの電圧は、0 - 1023までの整数に対応付けられる。<br> <br> Arduino IDEでは、analogRead()関数を用いることで、指定したアナログピンから値を読むことができる。<br> analogRead()関数は読み取った値を0 - 1023までの整数値で返す。<br> 従って、5[V]を1023に対応する場合は、'''"analogRead()関数の戻り値 * 5 / 1023"'''とすれば電圧が分かる。<br> <br> 尚、デフォルトでanalogRead()の戻り値である0 - 1023が、0[V] - 5[V](Arduino Gemmaのような3.3[V]の動作電圧の場合は0[V] - 3.3[V])に<br> 対応付けられているが、analogReference()関数を用いてこの範囲を変更することは可能だが、設定可能な値はボードに依存する。<br> <br> <center>'''図.1 電圧を測定する回路図'''</center><br> [[ファイル:Arduino AnalogRead 01.png|フレームなし|中央]] <br> 次に記述するのは、電圧を読み取った結果をシリアルモニタに出力するサンプルコードである。<br> これによって 1秒毎にシリアルモニタに電圧が表示される。<br> <br> <center>'''図.2 電圧を測定してシリアルモニタに表示'''</center><br> [[ファイル:Arduino AnalogRead 02.png|フレームなし|中央]] <br> <source 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); } </source> <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> <br> 次のサンプルコードでは、toggle_ledという名前のISRを、D2ピンでの割込み処理に指定している。<br> モードのFALLINGはHIGHからLOWの状態へ遷移したことで割込みを発生させることを意味する。<br> ISRでLEDが接続されたピンの状態を表す変数をLOWまたはHIGHに変化させている。<br> そして、loop()関数でその変数をdigitalWrite()関数に渡している。<br> <source 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; } </source> <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> <source 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() { } </source> <br><br> __FORCETOC__ [[カテゴリ:Arduino]]
Arduinoの基礎
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse