Arduinoのデジタルピンの閾値は?
Arduino UNO R3のデジタル入力がオンオフと判断される電圧の閾値(しきいち)を調べてみた。結果は、電圧が2.57V以上になるとHIGHと判断され、それ以下だとLOWとなる。以下、調査方法を解説する。
デジタル入力の電圧閾値を調べる方法
閾値を調べる方法は次の通り。
- D2ピンをHIGHに設定し、抵抗100kΩを介してコンデンサへ充電していく
- その間、コンデンサの電圧をA5とD3で監視する
- D3がHIHGになるまでA5で電圧値をシリアルモニターへプロットする
- D3がHIGHになった瞬間ループを抜け、コンデンサに溜まった電荷をリリースする
これを数回繰り返し、閾値を調べたところ2.57Vの結果となった。
回路図
回路図はこちら。コンデンサに溜まった電圧を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);
}
これらを応用するとデジタルピンで抵抗値を測ることも可能である。詳しくはこちらを参考に。
この記事で使った関連製品はこちら
Arduino Uno Rev3 ATmega328 マイコンボード A000066
Uno Rev.3、8 bit、AVR、ATmega328、USB-シリアルコンバータとしてプログラムされたATmega 16U2搭載
AmazonArduinoの参考書
Arduinoをはじめよう 第3版 (Make:PROJECTS)
本書では、開発者自らが、Arduinoの哲学、ハードウェア、ソフトウェアの基礎を解説、誰にでもできる簡単なチュートリアルを行います。
Amazon最後まで読んでいただきありがとうございました。
「この記事が参考になったよ」という方は、ぜひ記事をシェアをしていただけるととても嬉しいです。
今後も有益な記事を書くモチベーションにつながりますので、どうかよろしくお願いいたします。↓↓↓↓↓↓↓