差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
gimmickkouza:electronic_basic:6:1_servo_pwm [2024/06/16 12:13] – matsuhachi | gimmickkouza:electronic_basic:6:1_servo_pwm [2024/06/21 18:12] (現在) – ★7-3へのインターナルリンク追加 lutamesta | ||
---|---|---|---|
行 9: | 行 9: | ||
DCモータには2つの端子があり、一方に電源の+側、もう一方に-側を繋ぐと回転します。 | DCモータには2つの端子があり、一方に電源の+側、もう一方に-側を繋ぐと回転します。 | ||
接続を逆にすると逆回転する他、電圧が高くなるほど回転が速くなる性質があります。 | 接続を逆にすると逆回転する他、電圧が高くなるほど回転が速くなる性質があります。 | ||
+ | |||
+ | <panel type=" | ||
+ | DCモータは位置制御ができない、高い電圧・電流が必要など、初心者が扱うにはちょっとコツがいります。 | ||
+ | 特にR4からは各GPIOピンに8mAまでの電流しか流せなくなったので、DCモータを使う場合はモータードライバやトランジスタ、MOSFETなどを使う必要があります。 | ||
+ | 2024年6月現在、" | ||
+ | </ | ||
+ | /*<panel type=" | ||
+ | R4からはGPIOピンで8mAしか流せなくなったのでモータードライバやトランジスタ、MOSFETなどを使う必要があります。 | ||
+ | 位置制御ができない、高い電圧・電流が必要など、初心者が扱うにはちょっとコツがいります。 | ||
+ | Arduino DCモータ で調べると大体落ちてるのはR3のサンプルなので、ご注意を。 | ||
+ | </ | ||
== ステッピングモータ == | == ステッピングモータ == | ||
行 20: | 行 31: | ||
電子工作用途ではサーボモータの方が種類が多く、一般的に使われている印象があります。 | 電子工作用途ではサーボモータの方が種類が多く、一般的に使われている印象があります。 | ||
- | <alert type=" | + | <panel type=" |
+ | 最低4本ピンがあり、どこにどれを差したらいいか分かりづらく、電圧も足りない。扱うにはモータードライバが必須。そして重い。 | ||
+ | ……といった具合で、初心者が扱うにはかなりくせがあるモータです。 | ||
+ | よほど精度が必要でもない限り、使わなくてもいいと思います。 | ||
+ | (ちなみに精度が高くても分解能が低い製品もあります) | ||
+ | </ | ||
+ | /*<alert type=" | ||
+ | 実際に扱う際は初心者にはかなりくせがある…(最低4本ピンがあり、どこにどれを差したらいいか分からない。電圧も足りない。モータードライバ必須。そして重い。なので使わないほうがいいと思います…とか書いてもいいかもです。 | ||
+ | よほど精度が必要でもない限り…ちなみに精度は高くても分解能が低いやつもある。</ | ||
== サーボモータ == | == サーボモータ == | ||
行 29: | 行 48: | ||
トルクが高いものほど動作電圧が高くなります。 | トルクが高いものほど動作電圧が高くなります。 | ||
電子工作では、ロボットやアニマトロニクスの制作などでよく使われています。 | 電子工作では、ロボットやアニマトロニクスの制作などでよく使われています。 | ||
+ | 本項ではこちらのモータを使用します。 | ||
+ | |||
+ | <panel type=" | ||
+ | サーボモータはDCモータ、ステッピングモータと比べて扱いやすいモータです。 | ||
+ | |||
+ | サーボモータはモータードライバが中に内蔵されていて、実際の中身はDCモーターだったりします。 | ||
+ | こちらの記事がわかりやすいのですが、普段サーボモータと呼んでいるものはラジコンサーボという部類のモータです。 | ||
+ | https:// | ||
+ | |||
+ | また、サーボモータの中にも、PWM形式とシリアル制御形式の2種類があります。 | ||
+ | 電子工作で一般的に使われているのは、PWM形式のラジコンサーボです。 | ||
+ | </ | ||
+ | /*<alert type=" | ||
+ | 追加です。 | ||
+ | 回転「角度」が制御できるタイプと、回転「速度」が制御できるタイプがあることを書いとくと親切そうです | ||
+ | サーボモータはモータードライバが中に内蔵されていて、実際の中身はDCモータだったりします | ||
+ | |||
+ | これがわかりやすいのですが、普段サーボモータと呼んでいるものはラジコンサーボという部類です。 | ||
+ | https:// | ||
+ | |||
+ | また、サーボモータの中にも、PWM形式と、シリアル制御形式の2種類があって、普段使うのは、PWM形式のラジコンサーボとなります。 | ||
+ | 上記に比べてサーボモータは扱いやすいからこれ使いますよってのがあったほうがいいです。 | ||
+ | </ | ||
/*<alert type=" | /*<alert type=" | ||
行 42: | 行 84: | ||
(下記に販売ページのリンクを掲載しておきますので、リンク先にあるデータシートのPDFをご確認ください) | (下記に販売ページのリンクを掲載しておきますので、リンク先にあるデータシートのPDFをご確認ください) | ||
- | マイクロサーボSG-90hの販売ページ(秋月電子通商): | + | マイクロサーボSG-90の販売ページ(秋月電子通商): |
https:// | https:// | ||
行 59: | 行 101: | ||
{{: | {{: | ||
+ | ===使う部品リスト=== | ||
+ | ^ 部品 | ||
+ | | SG90 | 1個 | | ||
+ | |||
SG90から出ているワイヤには、メス型のコネクタがついているかと思います。 | SG90から出ているワイヤには、メス型のコネクタがついているかと思います。 | ||
両端がオスピンになっているワイヤを挿し込むことで、Arduinoと接続することができます。 | 両端がオスピンになっているワイヤを挿し込むことで、Arduinoと接続することができます。 | ||
3本出ているワイヤのうち、橙色はD11へ、赤色は5Vへ、茶色はGNDへ繋いでください。 | 3本出ているワイヤのうち、橙色はD11へ、赤色は5Vへ、茶色はGNDへ繋いでください。 | ||
- | + | ||
- | 完全に余談ですけどSG90のワイヤの配色、P型・D型色覚の人には判別が大変なのではないかと思うんですがどうなんでしょうね。 | + | 完全に余談ですけどSG90のワイヤの配色、P型・D型色覚の人には見にくいのではないかと思うんですがどうなんでしょうね。 |
ちなみに正規品のSG90であれば3本の線のうち真ん中が必ず5Vになるようです。 | ちなみに正規品のSG90であれば3本の線のうち真ん中が必ず5Vになるようです。 | ||
とはいえロット違いや将来的に変更が生じる可能性がないとも言えないので、参考程度に… | とはいえロット違いや将来的に変更が生じる可能性がないとも言えないので、参考程度に… | ||
- | <alert type=" | ||
+ | {{: | ||
+ | SG90のワイヤ。 | ||
+ | P型・D型色覚でない自分でもパッと見わかりにくいんじゃ(byるためすた) | ||
+ | 真ん中が5Vになるので絶対にショートしないところはポイント高い(byまつはちさん) | ||
+ | |||
+ | /*<alert type=" | ||
+ | |||
==== PWMの仕組み ==== | ==== PWMの仕組み ==== | ||
実際に動かす前に、サーボモータを動かすのに必要な仕組み、「PWM」について説明します。 | 実際に動かす前に、サーボモータを動かすのに必要な仕組み、「PWM」について説明します。 | ||
行 78: | 行 130: | ||
(厳密に言うとR4シリーズにはアナログ出力の機能があります(後述)が、他のシリーズのArduinoでは使えない機能なので、PWMの使い方も履修しておいた方がいいかと思います) | (厳密に言うとR4シリーズにはアナログ出力の機能があります(後述)が、他のシリーズのArduinoでは使えない機能なので、PWMの使い方も履修しておいた方がいいかと思います) | ||
- | === PWMの基本 === | + | === PWMの基本1:analogWriteの場合=== |
+ | サーボモータの説明をする前に、よりベーシックな" | ||
+ | |||
Arduinoが出力できる電圧は0Vか5Vのどちらかです(いわゆるデジタル出力です) | Arduinoが出力できる電圧は0Vか5Vのどちらかです(いわゆるデジタル出力です) | ||
- | PWMでは、この**0Vと5Vの電圧を高速で切り替えて出すことによって、" | + | analogWriteのPWMでは、この**0Vと5Vの電圧を高速で切り替えて出すことによって、" |
**" | **" | ||
- | {{: | + | {{: |
+ | /*{{: | ||
- | 上の図はPWMのモデル図です。 | + | 上の図はanalogWriteのPWMのモデル図です。 |
- | HIGH(5V)とLOW(0V)を3:2の割合の長さで出すことによって、3Vの出力を疑似的に作り出しています。 | + | PWM周期の中でHIGH(5V)とLOW(0V)を3:2の割合の長さで出すことによって、3Vの出力を疑似的に作り出しています。 |
+ | HIGHとLOWの割合によって出力される電圧は変わります。 | ||
以上がPWMの基本です。 | 以上がPWMの基本です。 | ||
行 93: | 行 149: | ||
本項ではanalogWriteのサンプルコードもご用意しておりますので、後ほどご覧ください。 | 本項ではanalogWriteのサンプルコードもご用意しておりますので、後ほどご覧ください。 | ||
- | === PWM:サーボモータの場合 === | + | /*<alert type=" |
- | さて、サーボモータもPWMによって制御可能な部品ですが、こちらはもう少々複雑な仕組みです。 | + | |
+ | === PWMの基本2:サーボモータの場合 === | ||
+ | さて、サーボモータもPWMによって制御可能な部品ですが、こちらはanalogWriteとは若干の違いがあります。 | ||
説明の為に、先程のSG90のデータシートの図を掲載します。 | 説明の為に、先程のSG90のデータシートの図を掲載します。 | ||
行 102: | 行 160: | ||
図の中央には少し盛り上がってから下がり、右端で再度隆起しているグラフがあります。 | 図の中央には少し盛り上がってから下がり、右端で再度隆起しているグラフがあります。 | ||
- | まず一番下の薄青緑で塗られた「20ms(50Hz) PWM Period」はPWM信号の周期を表します。 | + | まず一番下の薄青緑で塗られた「20ms(50Hz) PWM Period」はSG90サーボモータのPWM信号の周期を表します。 |
色付けされた1周期分の幅が20ms(=20ミリ秒)です。 | 色付けされた1周期分の幅が20ms(=20ミリ秒)です。 | ||
この20ミリ秒の周期の中で、何ミリ秒の間HIGHにするかでサーボの動きを指定することができます。 | この20ミリ秒の周期の中で、何ミリ秒の間HIGHにするかでサーボの動きを指定することができます。 | ||
行 109: | 行 167: | ||
つまり、20msのPWMの周期うち、HIGHにする時間を0.5msにすると最小角度の0度、2.4msにすると最大角度の180度になるように、内部のギアが動く仕様になっています。 | つまり、20msのPWMの周期うち、HIGHにする時間を0.5msにすると最小角度の0度、2.4msにすると最大角度の180度になるように、内部のギアが動く仕様になっています。 | ||
ちなみに90度にしたい場合は、0.5msと2.4msの中間の1.45msの間HIGHにすればOKです。 | ちなみに90度にしたい場合は、0.5msと2.4msの中間の1.45msの間HIGHにすればOKです。 | ||
- | <alert type=" | + | /*<alert type=" |
+ | === analogWriteのPWMとサーボモータのPWMって結局何がどう違うの? === | ||
+ | ==analogWriteはPWM周期全体がデューティーサイクル== | ||
+ | 最初の図をもう一度出します。 | ||
+ | |||
+ | {{: | ||
+ | |||
+ | analogWriteでのPWMは、PWM周期の全体がデューティーサイクルとなります。 | ||
+ | どういうことか、可視化してみましょう。 | ||
+ | |||
+ | {{: | ||
+ | |||
+ | PWM周期のうちのHIGHにする幅の割合によって出力電圧が決まります。 | ||
+ | 先程は3Vを出力電圧としましたが、HIGHの幅が狭ければもっと低い電圧が出力されます。 | ||
+ | |||
+ | {{: | ||
+ | |||
+ | PWM周期の全ての幅=デューティーサイクルの幅なので、PWM周期のすべて100%をHIGHにすることだってあります。 | ||
+ | |||
+ | {{: | ||
+ | /*<alert type=" | ||
+ | Duty100%を使うこともありますよ!6-1-3_analogWrite.inoでint DUTY = 255; | ||
+ | </ | ||
+ | |||
+ | ==サーボはPWM周期のほんの部分がデューティーサイクル== | ||
+ | analogWriteの図に対応するサーボモータのPWMの図も召喚してみましょう。 | ||
+ | |||
+ | {{: | ||
+ | |||
+ | サーボモータのPWMでは、PWM周期のうちごく一部分の範囲だけがデューティーサイクルとなっています。 | ||
+ | PWM周期のうちデューティーサイクル外の部分については、出力を操作することはありません。 | ||
+ | デューティーサイクルの最小値~最大値の中で幅を指定することによって、サーボモータの動作が変わります。 | ||
+ | |||
+ | ==そもそも両者は速度感からして違うんじゃな== | ||
+ | SG90サーボのPWM周期は50Hz、つまり20msでした。 | ||
+ | つまりこんな感じ。 | ||
+ | |||
+ | {{: | ||
+ | |||
+ | それに対して、analogWriteのPWM周期は490Hz、約2msです。 | ||
+ | (ちなみに5番ピンと6番ピンで出すときだけは980Hz(約1ms)です) | ||
+ | つまり、analogWriteのPWMはサーボモータのPWMよりずっとはやい周期で制御しています。 | ||
+ | 先程のサーボの図にanalogWriteを足して速度感の違いを可視化してみると、こんな感じです。 | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
==== サンプルコード解説 ==== | ==== サンプルコード解説 ==== | ||
サンプルコード6-1-1_Servo_PWM.inoを開いてください。 | サンプルコード6-1-1_Servo_PWM.inoを開いてください。 | ||
- | <alert type=" | + | /*<alert type=" |
+ | int servo_PIN = 11; pinMode(Servo_PIN, | ||
delay(20); | delay(20); | ||
これ、正しくは | これ、正しくは | ||
行 121: | 行 227: | ||
delayMicroseconds(20000-pulse_WIDTH); | delayMicroseconds(20000-pulse_WIDTH); | ||
https:// | https:// | ||
- | </ | + | |
+ | 私は試してみたときこのコンパイルエラーに引っかかりました。 | ||
+ | This library only supports boards with an AVR, SAM, SAMD, NRF52 or STM32F4 processor. | ||
+ | サーボライブラリが古かったみたいで、新しくIDEインストールしてれば起きないのかもしれませんが… | ||
+ | https:// | ||
+ | </ | ||
< | < | ||
行 128: | 行 239: | ||
void setup() { | void setup() { | ||
- | pinMode(Servo_PIN, OUTPUT); // | + | pinMode(servo_PIN, OUTPUT); // |
} | } | ||
行 135: | 行 246: | ||
delayMicroseconds(pulse_WIDTH);// | delayMicroseconds(pulse_WIDTH);// | ||
digitalWrite(servo_PIN, | digitalWrite(servo_PIN, | ||
- | delay(20); | + | |
+ | delayMicroseconds(10000); //残りの10msぶんdelayする(delayMicrosecondsは16383usまでしか動作しないため) | ||
} | } | ||
</ | </ | ||
行 146: | 行 258: | ||
delayMicrosecondsは更に短い単位の" | delayMicrosecondsは更に短い単位の" | ||
+ | ===このスケッチを実行しようとするとコンパイルエラーが出てしまう人のための情報=== | ||
+ | ArduinoIDEにインストールされているServoライブラリが古い場合、R4でServoライブラリを使用しようとするとエラーが出る場合があります。 | ||
+ | (逆に言うと、本講座資料の実践の為に新しくArduinoIDEをインストールした人ではこのエラーは恐らく出ないかと思います) | ||
+ | |||
+ | 「警告:ライブラリServoはアーキテクチャavr, | ||
+ | |||
+ | もしくは | ||
+ | |||
+ | 「This library only supports boards with an AVR, SAM, SAMD, NRF52 or STM32F4 processor.」 | ||
+ | |||
+ | Arduinoに6-1-1を書き込もうとしてこれらのエラーが出た場合は、下記の手順でServoライブラリをアップデートしてください。 | ||
+ | |||
+ | ==手順1:ライブラリマネージャを開く== | ||
+ | {{: | ||
+ | ライブラリマネージャを開きます。 | ||
+ | ArduinoIDEの左側に並んでいるアイコンのうち、上から三つめがライブラリマネージャです。 | ||
+ | |||
+ | ==手順2:ライブラリを探す== | ||
+ | {{: | ||
+ | アイコンをクリックするとライブラリマネージャが出現します。 | ||
+ | 今回はServo用のライブラリを探したいので、検索欄に「Servo」と打ち込みます。 | ||
+ | (この画像は6-2の使い回しなので、別の文字列が入っていますがお気になさらず…) | ||
+ | 打ち込むと検索ワードに該当するライブラリがズラーっと下に現れます。 | ||
+ | |||
+ | ==手順3:公式のライブラリを見つけてインストールする== | ||
+ | {{: | ||
+ | 今回はArduino公式がリリースしているライブラリをインストールします。 | ||
+ | 検索結果の中から、__**ライブラリ名が「Servo」開発者が「by Michael Margolis, Arduino」のものをインストール**__してください。 | ||
+ | (だいたい検索結果の最上位に出てくるかと思います) | ||
+ | ライブラリのバージョンは最新版で大丈夫です。 | ||
+ | |||
+ | 参考リンク:https:// | ||
+ | |||
+ | ===そんなわけでコード解説に戻ります=== | ||
== 1行目 == | == 1行目 == | ||
< | < | ||
行 164: | 行 310: | ||
それ以外の角度は…パルス幅を計算して求めてください… | それ以外の角度は…パルス幅を計算して求めてください… | ||
- | <alert type=" | + | また、map関数を使う方法もあります! |
+ | [[gimmickkouza: | ||
+ | |||
+ | /*<alert type=" | ||
高度なやり方だと、map関数で変換もできると思います。(要確認) | 高度なやり方だと、map関数で変換もできると思います。(要確認) | ||
http:// | http:// | ||
- | </ | + | </ |
== 5行目 == | == 5行目 == | ||
< | < | ||
- | pinMode(Servo_PIN, OUTPUT); // | + | pinMode(servo_PIN, OUTPUT); // |
</ | </ | ||
D11を出力モードにします。何の変哲もないデジタル出力の設定です。 | D11を出力モードにします。何の変哲もないデジタル出力の設定です。 | ||
行 193: | 行 342: | ||
パルス幅の時間分HIGHにしたので、D11をLOWにします。 | パルス幅の時間分HIGHにしたので、D11をLOWにします。 | ||
- | == 12行目 == | + | == 12・13行目 == |
< | < | ||
- | delay(20); | + | delayMicroseconds(10000-pulse_WIDTH); |
+ | delayMicroseconds(10000); //残りの10msぶんdelayする(delayMicrosecondsは16383usまでしか動作しないため) | ||
</ | </ | ||
11行目を終えてすぐloop文の先頭に戻ると、PWMの1周期が終わらないうちにHIGHが再度出力されてしまいます。 | 11行目を終えてすぐloop文の先頭に戻ると、PWMの1周期が終わらないうちにHIGHが再度出力されてしまいます。 | ||
- | なので、delayを使ってPWMの1周期に相当する20ミリ秒の間、ここで待機します。 | + | なので、PWMの1周期を終えるまで、ここで待機します。 |
+ | |||
+ | 待機する時間は20ms(SG90のPWM1周期)からパルス幅(本コードでは変数pulse_WIDTHの数値)を引いた残りの時間です。 | ||
+ | そんなわけで delayMicroseconds(20000 - pulse_WIDTH); | ||
+ | __delayMicrosecondsで扱える最大の時間は16383us__です。 | ||
+ | なので、delayMicrosecondsの引数に20000usを突っ込むことはできません。 | ||
+ | ここは少し面倒ですが、2回に分けてdelayMicrosecondsをかける必要があります。 | ||
+ | |||
+ | 1回目のdelayMicrosecondsは10msからpulse_WIDTHの数値を引いた時間分待機させます。 | ||
+ | 続く2回目のdelayMicrosecondsで、残りの10msぶん待機させます。 | ||
+ | この2行の記述により、本来記述したかった delayMicroseconds(20000 - pulse_WIDTH); | ||
===== 6-1-2_Servo_library ===== | ===== 6-1-2_Servo_library ===== | ||
+ | {{youtube> | ||
+ | |||
サーボモータはパルス幅を指定して動かすだけでなく、「ライブラリ」を使うことでもっと簡単に、直感的に動作させることができます。 | サーボモータはパルス幅を指定して動かすだけでなく、「ライブラリ」を使うことでもっと簡単に、直感的に動作させることができます。 | ||
行 213: | 行 375: | ||
そのため、有名な電子部品や人気な電子部品は、リリース元の異なる複数のライブラリがある場合があります(LEDテープなんかがそうですね) | そのため、有名な電子部品や人気な電子部品は、リリース元の異なる複数のライブラリがある場合があります(LEDテープなんかがそうですね) | ||
**あるライブラリのルールは、そのライブラリを使っているプログラムの中でしか使えないので、注意が必要です。** | **あるライブラリのルールは、そのライブラリを使っているプログラムの中でしか使えないので、注意が必要です。** | ||
+ | |||
==== 配線図 ==== | ==== 配線図 ==== | ||
{{: | {{: | ||
行 219: | 行 381: | ||
回路は直前の6-1-1で作ったものをそのまま流用できます。 | 回路は直前の6-1-1で作ったものをそのまま流用できます。 | ||
何もいじらなくてOKです! | 何もいじらなくてOKです! | ||
- | + | ||
+ | ===使う部品リスト=== | ||
+ | ^ 部品 | ||
+ | | SG90 | 1個 | | ||
==== サンプルコード解説 ==== | ==== サンプルコード解説 ==== | ||
サンプルコード6-1-2_Servo_library.inoを開いてください。 | サンプルコード6-1-2_Servo_library.inoを開いてください。 | ||
行 321: | 行 487: | ||
---- | ---- | ||
<text background=" | <text background=" | ||
- | サーボをたくさん繋げる方法は第8章で出てくるのでそっちも見てくれよな!!!!! </ | + | サーボをたくさん繋げる方法は第8章、 [[gimmickkouza: |
+ | **間違ってもArduinoに沢山のサーボを直接繋げたらダメだぞ!!!!!!!**</ | ||
<panel type=" | <panel type=" | ||
行 333: | 行 500: | ||
Arduino UNO R4 Minima Digital-to-Analog Converter (DAC)(Arduino公式): | Arduino UNO R4 Minima Digital-to-Analog Converter (DAC)(Arduino公式): | ||
https:// | https:// | ||
+ | |||
+ | またDACについてはこちらのページでまつはちさんが補足してくれています:[[gimmickkouza: | ||
+ | |||
</ | </ | ||
===== 6-1-3_analogWrite ===== | ===== 6-1-3_analogWrite ===== | ||
- | PWMを使った疑似的なアナログ入力で、LEDの明るさを調節してみましょう! | + | 6-1-3と6-1-4はLEDを使ったanalogWriteのサンプルコードとなっております。 |
+ | サーボモータの使い方ではありませんが、せっかくPWMについて学習したのですから、ぜひこちらも実践してみてください! | ||
+ | そんなわけで、PWMを使った疑似的なアナログ入力で、LEDの明るさを調節してみましょう! | ||
+ | analogWriteのPWMについてもう一度おさらいしておきたい方は、本ページを上の方~~~までスクロールしてください。 | ||
+ | 講師はとても親切なのでインターナルリンクも貼っておきますよ。**親切なので。** | ||
+ | [[gimmickkouza: | ||
+ | |||
+ | /*<alert type=" | ||
+ | https:// | ||
+ | こことの関連性も書きたい | ||
+ | </ | ||
+ | |||
==== 配線図 ==== | ==== 配線図 ==== | ||
{{: | {{: | ||
行 344: | 行 525: | ||
今回使う関数はanalogWriteですが、あくまで__" | 今回使う関数はanalogWriteですが、あくまで__" | ||
またいつものことですが、LEDの抵抗はお使いになるLEDの仕様に合わせたものを計算してお選びください。 | またいつものことですが、LEDの抵抗はお使いになるLEDの仕様に合わせたものを計算してお選びください。 | ||
+ | |||
+ | ===使う部品リスト=== | ||
+ | ^ 部品 | ||
+ | | 砲弾型LED球 | ||
+ | | 抵抗器\\ (抵抗値は使うLEDのデータシートをもとに各自計算してください) | ||
==== サンプルコード解説 ==== | ==== サンプルコード解説 ==== | ||
サンプルコード6-1-3_analogWrite.inoを開いてください。 | サンプルコード6-1-3_analogWrite.inoを開いてください。 | ||
+ | /*<alert type=" | ||
+ | LEDの何なのか書いたほうがわかりやすい | ||
+ | ledPinとか | ||
+ | </ | ||
< | < | ||
- | int LED = 10; // | + | int LED_PIN |
int DUTY = 255;// | int DUTY = 255;// | ||
void setup() { | void setup() { | ||
- | pinMode(LED, | + | pinMode(LED_PIN, |
} | } | ||
void loop() { | void loop() { | ||
- | | + | |
} | } | ||
</ | </ | ||
行 370: | 行 560: | ||
== 5行目 == | == 5行目 == | ||
< | < | ||
- | pinMode(LED, | + | pinMode(LED_PIN, |
</ | </ | ||
PWMは出力しかしないので、実はpinModeの記述は省略することができます。 | PWMは出力しかしないので、実はpinModeの記述は省略することができます。 | ||
行 377: | 行 567: | ||
== 9行目 == | == 9行目 == | ||
< | < | ||
- | analogWrite(LED, | + | analogWrite(LED_PIN, |
</ | </ | ||
PWM出力をするときに使うanalogWrite関数です。 | PWM出力をするときに使うanalogWrite関数です。 | ||
行 395: | 行 585: | ||
配線は6-1-3と同じ、そのままの状態でOKです。 | 配線は6-1-3と同じ、そのままの状態でOKです。 | ||
+ | |||
+ | ===使う部品リスト=== | ||
+ | ^ 部品 | ||
+ | | 砲弾型LED球 | ||
+ | | 抵抗器\\ (抵抗値は使うLEDのデータシートをもとに各自計算してください) | ||
==== サンプルコード解説 ==== | ==== サンプルコード解説 ==== | ||
サンプルコード6-1-4_analogWrite_firefly.inoを開いてください。 | サンプルコード6-1-4_analogWrite_firefly.inoを開いてください。 | ||
+ | /*<alert type=" | ||
+ | LEDの何なのか書いたほうがわかりやすい | ||
+ | SPEEDはdelay(SPEED)とするのはdelayは遅延させる意味のためちょっと違和感あるので、duarationとかにした方がいいと思います。 | ||
+ | あと単位書いたほうがいいと思います。[ms]とか。 | ||
+ | int ledPin = 10; // | ||
+ | int duaration = 5;// | ||
+ | </ | ||
+ | |||
< | < | ||
- | int LED = 10; // | + | int LED_PIN |
- | int SPEED = 5;// | + | int duaration |
void setup() {// | void setup() {// | ||
行 407: | 行 610: | ||
void loop() { | void loop() { | ||
for(int i = 0; i < 255; i++){// | for(int i = 0; i < 255; i++){// | ||
- | | + | |
- | | + | |
} | } | ||
delay(500);// | delay(500);// | ||
for(int i = 255; i > 0; i--){// | for(int i = 255; i > 0; i--){// | ||
- | | + | |
- | | + | |
} | } | ||
delay(500);// | delay(500);// | ||
行 421: | 行 624: | ||
== 2行目 == | == 2行目 == | ||
< | < | ||
- | int DUTY = 255;//デューティサイクルを設定(0~255) | + | int duaration |
</ | </ | ||
このスケッチでは、LEDに送るアナログ値を1段階ずつ増減させ点灯することで、連続的に明るさが変化するように見せます。 | このスケッチでは、LEDに送るアナログ値を1段階ずつ増減させ点灯することで、連続的に明るさが変化するように見せます。 | ||
- | この" | + | この" |
- | (SPEEDを増やすと、よりゆっくり明滅するようになります) | + | (duarationを増やすと、よりゆっくり明滅するようになります) |
== 8行目 == | == 8行目 == | ||
行 439: | 行 642: | ||
== 9行目 == | == 9行目 == | ||
< | < | ||
- | analogWrite(LED, | + | analogWrite(LED_PIN, |
</ | </ | ||
- | analogWrite関数で、LEDにアナログ値を出力します。 | + | analogWrite関数で、LED_PINにアナログ値を出力します。 |
出力する値の指定には、for文を回すために作られた変数iを使い回し、その数値を出力します。 | 出力する値の指定には、for文を回すために作られた変数iを使い回し、その数値を出力します。 | ||
== 10行目 == | == 10行目 == | ||
< | < | ||
- | delay(SPEED);// | + | delay(duaration);// |
</ | </ | ||
- | 変数SPEEDに設定した数値分待機します。 | + | 変数duarationに設定した数値分待機します。 |
== 12行目 == | == 12行目 == |