Arduinoを使用してこの高度なデジタル電流計を作成します

問題を排除するために楽器を試してください





この投稿では、16 x 2LCDディスプレイとArduinoを使用してデジタル電流計を構築します。シャント抵抗を使用して電流を測定する方法を理解し、Arduinoに基づいた設計を実装します。提案されたデジタル電流計は、0〜2アンペア(絶対最大)の範囲の電流を妥当な精度で測定できます。

電流計のしくみ

電流計には、アナログとデジタルの2種類があり、動作が大きく異なります。ただし、どちらにも共通の概念が1つあります。それはシャント抵抗です。



シャント抵抗は、電流を測定するときにソースと負荷の間に配置される抵抗が非常に小さい抵抗です。

アナログ電流計がどのように機能するかを見てみましょう。そうすれば、デジタル電流計を理解しやすくなります。



アナログ電流計のしくみ

抵抗Rが非常に低いシャント抵抗器で、ある種のアナログメーターが抵抗器の両端に接続されていると仮定します。抵抗器の偏向は、アナログメーターを通る電圧に正比例します。

それでは、左側からある程度の電流を流してみましょう。 i1はシャント抵抗Rに入る前の電流で、i2はシャント抵抗を通過した後の電流になります。

電流i1は、シャント抵抗を流れる電流の一部を落としたため、i2よりも大きくなります。シャント抵抗間の電流差は、V1とV2で非常に少量の電圧を発生させます。
電圧の量は、そのアナログメーターによって測定されます。

シャント抵抗の両端に発生する電圧は、シャント抵抗を流れる電流とシャント抵抗の値の2つの要因に依存します。

シャントを流れる電流が大きい場合、発生する電圧は大きくなります。シャントの値が高い場合、シャントの両端に発生する電圧は高くなります。

シャント抵抗は非常に小さい値である必要があり、より高いワット数定格を備えている必要があります。

小さな値の抵抗は、負荷が通常の動作に十分な量の電流と電圧を取得していることを保証します。

また、シャント抵抗は、電流を測定しながらより高い温度に耐えられるように、より高いワット数定格を備えている必要があります。シャントを流れる電流が大きいほど、熱が発生します。

これで、アナログメーターがどのように機能するかという基本的な考え方を理解できたはずです。それでは、デジタルデザインに移りましょう。

これで、電流が流れると抵抗が電圧を生成することがわかりました。図から、V1とV2は、マイクロコントローラーへの電圧サンプルを取得するポイントです。

電圧から電流への変換の計算

次に、簡単な計算を見てみましょう。生成された電圧を電流に変換するにはどうすればよいですか。

オームの法則:I = V / R

シャント抵抗Rの値がわかっているので、プログラムに入力します。

シャント抵抗の両端に生成される電圧は次のとおりです。

V = V1-V2

または

V = V2 – V1(測定中の負の記号を回避し、負の記号は電流の方向に依存します)

したがって、方程式を単純化できます。

I =(V1 – V2)/ R
または
I =(V2-V1)/ R

上記の式の1つがコードに入力され、電流の流れを見つけることができ、LCDに表示されます。

次に、シャント抵抗値を選択する方法を見てみましょう。

Arduinoには10ビットのアナログ-デジタルコンバーター(ADC)が組み込まれています。 0〜1024ステップまたは電圧レベルで0〜5Vを検出できます。

したがって、このADCの分解能は5/1024 = 0.00488ボルトまたは4.88ミリボルト/ステップになります。

したがって、4.88ミリボルト/ 2mA(電流計の最小分解能)= 2.44または2.5オームの抵抗。

4つの10オーム、2ワットの抵抗を並列に使用して、プロトタイプでテストされた2.5オームを取得できます。

それで、提案された電流計の最大測定可能範囲である2アンペアをどのように言うことができますか。

ADCは0から5Vまでしか測定できません。上記のものは、マイクロコントローラーのADCを損傷します。

テストされたプロトタイプから、電流測定値X mAのときのポイントV1とV2からの2つのアナログ入力で、アナログ電圧はX / 2(シリアルモニター内)を読み取ります。

たとえば、電流計が500 mAを読み取る場合、シリアルモニターのアナログ値は250ステップまたは電圧レベルを読み取ります。 ADCは最大1024ステップまたは最大5Vに耐えることができるため、電流計が2000 mAを読み取ると、シリアルモニターは約1000ステップを読み取ります。これは1024に近いです。

1024電圧レベルを超えると、ArduinoのADCが損傷します。これを回避するために、2000 mAの直前に、回路を切断するように指示する警告メッセージがLCDに表示されます。

これで、提案された電流計がどのように機能するかを理解できたはずです。

それでは、構造の詳細に移りましょう。

回路図:

ArduinoDCデジタル電流計

提案された回路は非常にシンプルで初心者に優しいです。回路図に従って構築します。 10Kポテンショメータを調整して、ディスプレイのコントラストを調整します。

Arduinoには、USBから、または9VバッテリーのDCジャックを介して電力を供給できます。 4つの2ワット抵抗器は、1つの2.5オーム抵抗器と8〜10ワットの抵抗器を使用するよりも均等に熱を放散します。

電流が流れていない場合、ディスプレイは無視できる小さなランダム値を読み取る可能性があります。これは、測定端子間の迷走電圧が原因である可能性があります。

注:入力負荷電源の極性を逆にしないでください。

プログラムコード:

//------------------Program Developed by R.GIRISH------------------//
#include
#define input_1 A0
#define input_2 A1
LiquidCrystal lcd(12, 11, 5, 4, 3, 2)
int AnalogValue = 0
int PeakVoltage = 0
float AverageVoltage = 0
float input_A0 = 0
float input_A1 = 0
float output = 0
float Resolution = 0.00488
unsigned long sample = 0
int threshold = 1000
void setup()
{
lcd.begin(16,2)
Serial.begin(9600)
}
void loop()
{
PeakVoltage = 0
for(sample = 0 sample <5000 sample ++)
{
AnalogValue = analogRead(input_1)
if(PeakVoltage {
PeakVoltage = AnalogValue
}
else
{
delayMicroseconds(10)
}
}
input_A0 = PeakVoltage * Resolution
PeakVoltage = 0
for(sample = 0 sample <5000 sample ++)
{
AnalogValue = analogRead(input_2)
if(PeakVoltage {
PeakVoltage = AnalogValue
}
else
{
delayMicroseconds(10)
}
}
input_A1 = PeakVoltage * Resolution
output = (input_A0 - input_A1) * 100
output = output * 4
while(analogRead(input_A0) >= threshold)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Reached Maximum')
lcd.setCursor(0,1)
lcd.print('Limit!!!')
delay(1000)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Disconnect now!!')
delay(1000)
}
while(analogRead(input_A0) >= threshold)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Reached Maximum')
lcd.setCursor(0,1)
lcd.print('Limit!!!')
delay(1000)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Disconnect now!!')
delay(1000)
}
lcd.clear()
lcd.setCursor(0,0)
lcd.print('DIGITAL AMMETER')
lcd.setCursor(0,1)
lcd.print(output)
lcd.print(' mA')
Serial.print('Volatge Level at A0 = ')
Serial.println(analogRead(input_A0))
Serial.print('Volatge Level at A1 = ')
Serial.println(analogRead(input_A1))
Serial.println('------------------------------')
delay(1000)
}
//------------------Program Developed by R.GIRISH------------------//

このArduinoベースのデジタル電流計回路プロジェクトに関して特定の質問がある場合は、コメントセクションで表現してください。すぐに返信が届く場合があります。




前:ArduinoでデジタルポテンショメータMCP41xxを使用 次へ:Arduinoを使用した過電流カットオフ電源