PR

Arduinoのdelayの正確性をオシロスコープで確認してみた。

arduino-delay-accuracy

Arduinoを触ったことがあれば、

たいてい使ったことがあるのが、

[delay]

そう。なにもしない待ち時間ですね。

この待ち時間のdelay。

通常は、delay(100)なんて記述して、

100msなにもしない。という使い方だと思いますが、

この100。ちゃんと100msなのでしょうか??

厳密な制御が必要なければ、気にする必要はありませんが、

今回オシロスコープを手に入れたので、確認してみようと思います。

使用した道具。

使用した道具を一覧にしてみました。

これらの道具があれば、今回試したことをまるっきり再現可能です。

  • Arduino(今回はpro micro)
  • ブレッドボード(UNO系は不要)
  • ジャンパーワイヤー
  • オシロスコープ

すこしそれぞれについて説明していきます。

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-osiro
ArduinoProMicroのD5ピンとGNDにオシロスコープを接続。

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だろうが、好きなピンを使ってあげてください。

ただし、その場合は、オシロスコープとつなぐピンも合わせる必要があるので、

スケッチを変更する場合は、配線も忘れずに変更しましょう。

実際にオシロスコープで測定してみた結果

delay100
1マス20ms。5マスくっきりHIGHになっているので、100msHIGHになっているのがわかる。

これがオシロスコープの結果です。

見方として、点線のマスが1つ20msです。

黄色い線がD5ピンの出力を表していまして、

凸のような形状をしていますね?

この高いところの長さが、HIGHになっている時間と同じわけです。

制御通りであれば、delay(100)の、100msの間だけHIGHになっている

計算ですが、しっかり100ms(5マス分)だけHIGHになっていますね。

誤差もほとんどないことがわかります。

まとめ

今回オシロスコープを手に入れたので、

前々から気になっていた、Arduinoのdelayの正確性について調べてみました。

趣味の電子工作でそこまで厳密にタイミングを合わせることって、

そうそうない気もしますが、ついでなので調べておきました。

結果として精度が高いことがわかりましたので、

趣味程度であれば、特に問題になるほどの誤差が出ない。

というのが結論でいいと思います。

コメント

タイトルとURLをコピーしました