Arduinoのデジタルピンの閾値は?

Arduino UNO R3のデジタル入力がオンオフと判断される電圧の閾値(しきいち)を調べてみた。結果は、電圧が2.57V以上になるとHIGHと判断され、それ以下だとLOWとなる。以下、調査方法を解説する。

デジタル入力の電圧閾値を調べる方法

コンデンサをゆっくり充電していく
コンデンサをゆっくり充電していく

閾値を調べる方法は次の通り。

  1. D2ピンをHIGHに設定し、抵抗100kΩを介してコンデンサへ充電していく
  2. その間、コンデンサの電圧をA5とD3で監視する
  3. D3がHIHGになるまでA5で電圧値をシリアルモニターへプロットする
  4. D3がHIGHになった瞬間ループを抜け、コンデンサに溜まった電荷をリリースする

これを数回繰り返し、閾値を調べたところ2.57Vの結果となった。

回路図

Arduinoの電圧閾値を調べる回路図
Arduinoの電圧閾値を調べる回路図

回路図はこちら。コンデンサに溜まった電圧をD3から逃すため1kΩの保護抵抗を入れている。

プログラム

/*
  Created by Toshihiko Arai.
  https://101010.fun/iot/arduino-threshold-volts.html
*/
const int PULSE_PIN = 2;
const int DIGITAL_READ_PIN = 3;
const int ANALOG_READ_PIN = 5;

void setup()
{
  Serial.begin(115200);
  pinMode(PULSE_PIN, OUTPUT);
}
void plot() {
  float value = float(analogRead(ANALOG_READ_PIN));
  float volts = value / 1023.0 * 5.0;
  Serial.println(volts);
}

void loop() {
  pinMode(DIGITAL_READ_PIN, INPUT);
  digitalWrite(PULSE_PIN, LOW);
  delay(10);
  digitalWrite(PULSE_PIN, HIGH);
  while(digitalRead(DIGITAL_READ_PIN)!=true) {
    plot();
  }
  pinMode(DIGITAL_READ_PIN, OUTPUT);
  digitalWrite(DIGITAL_READ_PIN, LOW); // コンデンサの電圧を逃す
  digitalWrite(PULSE_PIN, LOW);  
  delay(3000);
}

これらを応用するとデジタルピンで抵抗値を測ることも可能である。詳しくはこちらを参考に。

記事に関するご質問などがあればTwitterへお返事ください。
この記事で紹介した商品
人気のArduino互換機
Arduinoで人気の周辺パーツ
Arduinoのオススメ参考書

▼ Arduino初心者向きの内容となっています。ほかのArduino書籍と比べて図や説明がとてもていねいで、読みやすかったです。Arduinoで一通りのセンサーが扱えるようになります。

▼ 外国人が書いた本を翻訳したものです。この手の書籍は、目からうろこな発見をすることが多いです。

▼ Arduinoの入門書を既に読んでいる方で、次のステップを目指したい人向きの本です。C言語のプログラミングの内容が中心です。ESP32だけでなく、ふつうのArduinoにも役立つ内容でした。

関連記事