第一回ブレッドボード
第二回LCD表示
第三回基板組立・ケース加工
第四回PNPトランジスタ対応 ←イマココ
第五回(終)ケーシング・完成
------------------------------
ArduinoでhFEを測定してみよう
...ということで続きます。今回はケース加工も終わったところで、マイコンも組み込み完成というところまで移行と思ったのですが、LCDの不具合によりPNPトランジスタのプログラムについて書いていきます。
また、シリアルモニターを使うということで一時的にプログラムからはLCDに関する記述を取り除いています。
<<条件>>
・回路は 第一回ブレッドボード において使ったものを利用する。
・その回路図のVbe, Vce部をそれぞれV2, V3と置き換える。(PNPトランジスタだとそこの測定値がVbeやVceにならないため)
・PNPトランジスタを測定するときはその回路図のVccとGNDを入れ替える。(エミッタが直接Vccに接続することになります)
・V1, V2, V3はそれぞれArduinoのAnalog In端子の0,1,2ピンに接続する。
そこで、今回つかったソースはこちら
#define Vcc 5
#define R1 100000
#define R2 100
void setup()
{
Serial.begin(9600);
}
void loop()
{
float V1 = analogRead(0);
float V2 = analogRead(1);
float V3 = analogRead(2);
float Vbe, Vce, Ib, Ic, hFE;
V1 = Vcc * V1 / 1023;
V2 = Vcc * V2 / 1023;
V3 = Vcc * V3 / 1023;
if(V1>V2){
Vbe = V2;
Vce = V3;
Ib = (V1 - V2) / R1;
Ib = Ib * 1000;
Ic = (Vcc - V3) / R2;
Ic = Ic * 1000;
Serial.print("NPN");
Serial.print("\n");
}
else{
Vbe = Vcc - V2;
Vce = Vcc - V3;
Ib = (V2 - V1) / R1;
Ib = Ib * 1000;
Ic = V3 / R2;
Ic = Ic * 1000;
Serial.print("PNP");
Serial.print("\n");
}
hFE = Ic / Ib;
/*
Serial.print("V1=");
Serial.print(V1, 3);
Serial.print("[V]\n");
Serial.print("V2=");
Serial.print(V2, 3);
Serial.print("[V]\n");
Serial.print("V3=");
Serial.print(V3, 3);
Serial.print("[V]\n");
Serial.print("Vce=");
Serial.print(Vce, 3);
Serial.print("[V]\n");
*/
Serial.print("Vbe=");
Serial.print(Vbe, 3);
Serial.print("[V]\n");
Serial.print("Ic=");
Serial.print(Ic, 3);
Serial.print("[mA]\n");
Serial.print("Ib=");
Serial.print(Ib, 3);
Serial.print("[mA]\n");
Serial.print("hFE=");
Serial.print(hFE, 0);
Serial.print("\n\n");
delay(5000);
}
このプログラムを実行すると以下のようになります。
また、コメントアウト部を解除すると
こうなります。
ブレッドボードで簡単に回路をくんで測定するのなら良いのではないでしょうか。精度をあげるため、抵抗値や電圧等は測定したデータを利用できるように最初に#defineで記述してあります。この部分に実測値を入れてみるとより正確な測定ができると思います。
実際に使ってみた。
実際にランダムに選んで測定したともにGRランクのトランジスタをはかってみました。こうやってみるとGRとして選別している中でもばらつきがあることがわかります。(Excelで昇順に並び替え済)
コンプリメンタリペアがほしい際はこれを使って測定するのには良いのではないでしょうか。