Arduinoを触ったことがあれば、
たいてい使ったことがあるのが、
[delay]
そう。なにもしない待ち時間ですね。
この待ち時間のdelay。
通常は、delay(100)なんて記述して、
100msなにもしない。という使い方だと思いますが、
この100。ちゃんと100msなのでしょうか??
厳密な制御が必要なければ、気にする必要はありませんが、
今回オシロスコープを手に入れたので、確認してみようと思います。
使用した道具。
使用した道具を一覧にしてみました。
これらの道具があれば、今回試したことをまるっきり再現可能です。
すこしそれぞれについて説明していきます。
Arduino(今回はpro micro)
今回は手元にあったpro microを使用しました。
もちろん、Arduino UNOであれ、miniであれ、megaであれ、
基本は今回の検証ではdegitalPinを一つHIGH,LOW切り替えるだけです。
ですからArduinoであればなんでもOKです。
Arduinoと言えば、UNO系が有名かな…
ブレッドボード
これは、今回Arduino pro microを使用したので、必要になりました。
pro microはピンヘッダが出ていて、それをブレッドボードや、
ユニバーサル基板に挿して使用するのが一般的な使い方になります。
ですから、そのままオシロスコープのプローブでキャッチしようとすると、
隣のピンと触れてしまい、ショートの危険があるので、必ず必要になります。
UNOなどは、メスのブレッドボードのピンヘッダになっていることが
ほとんどだと思いますので、その場合はブレッドボードは不要です。
ブレッドボードにも質の問題がありまして、
わたしも昔は消耗品だし、安ければ安いほどいいじゃん。
なんて思っていましたが、Amazonの安物ブレッドボードを購入したとき、
だいぶ後悔しました…
そんな後悔をばねにして書いた記事がこちら
↓↓↓↓
ジャンパーワイヤー
ArduinoのD5ピンをオシロスコープで見るとき、
どうしてもピンを直接プローブで触れませんから、
Arduinoのピンと、オシロスコープのプローブの中継役が必要になります。
そんなとき活躍してくれるのがジャンパーワイヤーですね。
オシロスコープで測定するときもかなりの確率で出番が来ます。
プローブでキャッチするのもジャンパーワイヤーならお手軽に可能です。
ちなみに…
ジャンパーワイヤーで長さをちょっとカスタマイズしたい、
であったり、線材をもう少しいいものに変えたいな..なんて場合、
自分でジャンパーワイヤーを作成できるのは知っていますか??
以前の記事でジャンパーワイヤーの作成方法についてご紹介しています。
↓↓↓↓
オシロスコープ
これがないと、HIGHとLOWの信号の波形がわかりません。
オシロスコープを使用する最大のメリットは、
信号の時間に対する変化が目で見えることです。
電圧計なんかでも、もちろんその瞬間の電圧なんかは測定できますが、
継続的にいつからいつまで電圧が何Vで…なんてことはできません。
ですからオシロスコープで時系列をプロットしていきたい。
というイメージになります。
私自身、もともと家にオシロスコープはなかったのですが、
この度購入しました。電圧のレベルなどがつまみになっていないので、
少々変更には慣れが必要ですが、まあ慣れてしまえば特に支障ないですね….
お安いものをAmazonで購入しましたが、今のところ不満はないですね。
ちゃんと2CHついていますから、1chが立ち上がった瞬間、2chはどうなっているか?
なんてのもちゃんと追えます。
ただ、3ch,4chはついていません。最大2chですので注意してください。
まずは配線はこんな感じでテストします。
Arduinoのpro micro(Leonardoの互換機)を使用しました。
D5ピンとGNDをオシロスコープにつなぐことで、
HIGHになっている時間をオシロスコープで監視することが可能です。
delay(100)の100がしっかり100msなのか確認できればいいので、
ほかにつなぐものは特にありません。
テストに使用したスケッチはこちら。
先ほどの配線の時にお話しした通り、
D5ピンを制御します。
そのスケッチをこちらのようにしました。↓↓↓
void setup(){
pinMode(5,OUTPUT);
}
void loop(){
digitalWrite(5,HIGH);
delay(100);
digitalWrite(5,LOW);
delay(100);
}
setupの時にoutputと指定してあげて、
loopの関数の中でHIGHとLOWを定期的に切り替えてあげています。
そのときのdelay(100)←これを計測します。
今回デジタルピンの5番を選択しましたが、
とくにこの番号を選んだのに深い理由はありません。
D4だろうが、D6だろうが、好きなピンを使ってあげてください。
ただし、その場合は、オシロスコープとつなぐピンも合わせる必要があるので、
スケッチを変更する場合は、配線も忘れずに変更しましょう。
実際にオシロスコープで測定してみた結果
これがオシロスコープの結果です。
見方として、点線のマスが1つ20msです。
黄色い線がD5ピンの出力を表していまして、
凸のような形状をしていますね?
この高いところの長さが、HIGHになっている時間と同じわけです。
制御通りであれば、delay(100)の、100msの間だけHIGHになっている
計算ですが、しっかり100ms(5マス分)だけHIGHになっていますね。
誤差もほとんどないことがわかります。
まとめ
今回オシロスコープを手に入れたので、
前々から気になっていた、Arduinoのdelayの正確性について調べてみました。
趣味の電子工作でそこまで厳密にタイミングを合わせることって、
そうそうない気もしますが、ついでなので調べておきました。
結果として精度が高いことがわかりましたので、
趣味程度であれば、特に問題になるほどの誤差が出ない。
というのが結論でいいと思います。
コメント