#はじめに
qitta最近やらかしてみんな消えていったみたいですね。そんな中での初投稿が電子工作にしました。その中でもポテンショメータを用いた簡易電圧計をつくります。
#完成作
こんな感じで回路くんでシリアルモニターで電圧を表示する。
#ポテンショメータとは
内蔵されている抵抗の両端に電圧をかけた状態でツマミを回すことで
抵抗値の比率が変わる。
それによって、端子から取り出せる電圧が変わる。
取り出した電圧はアナログ入力端子に入れることによって
デジタル値に変換することで制御信号として利用することができる。
内部構造は以下のリンクを参照して下さい。
https://jp.rs-online.com/web/generalDisplay.html?id=ideas-and-advice/trimmer-resistors-guide
#ポテンショメータの使い方
ポテンショメータの中央端子をアナログ入力に接続する。
つないだ端子の情報をanalogRead(pin)関数で読み取る。
analogRead(pin)は読み取った電圧値を0~1023の整数値を戻り値として返す。
ようするに、読み取った0V~5Vの電圧値を
0~1023のデジタル値に変換することができるわけですねぇ
一応こんな感じ。
#コマンド説明
・Serial.begin(speed)
シリアル通信のデータ転送レートをbpsで指定。
※bpsはビット/秒
speed:転送レート(int)
・analogRead(pin)
アナログ値を読み取るアナログ入力ピンを指定。
pin:0,1,2,3,4,5のいずれかを指定
例 アナログ入力ピンに3番を指定する。analogRead(3);
・ad変換の計算式
//読み取った値を電圧に変換、floatで計算
電圧=最大電圧(5v)/ ADコンバータで分割した数(1023)*入力値(value)
#サンプルコード
int analogPin = 3;
int val = 0;
float v_convert = 0.0f;
void setup() {
Serial.begin(9600); //シリアル通信のデータ転送レートを9600bpsで指定。bpsはビット/秒。
}
void loop() {
val = analogRead(analogPin);
v_convert = (float)val / 1023.0f * 5.0f; //読み取った値を電圧に変換、floatで計算
Serial.print( "value / volt : " ); //表示をプリント
Serial.print( val ); //読み取り値を表示
Serial.print( " / " ); //表示をプリント
Serial.println( v_convert ); //計算した電圧値を表示、改行
delay(2000); //2秒ごとに表示させるための遅延
}
#まとめ
今回のことで、
可変抵抗器の動きで電圧か変わっているのを読み取れているのがわかります。
これがanalogRead()関数の使い方になります。
これを使えば、ある電圧を読み取って何かをさせるといったことができます。
扇風機とか良いかもですね。
つまみ最小:最大:off:風力最大
とか、、、、
一応出来ましたね。誤差はあるので精度は良くないですが、、、
今後は電圧が半分まで言ったらledを光らせたりしたら面白いかもですね!!!
それではまた。ちゃお!!!