エレクトロニクスエンジニアとして、私たちは常にメーター/機器に依存して回路の動作を測定および分析します。単純なマルチメータから複雑な電力品質アナライザまたはDSOまで、すべてに独自のアプリケーションがあります。これらのメーターのほとんどはすぐに利用でき、測定するパラメーターとその精度に基づいて購入できます。ただし、独自のメーターを作成する必要がある状況に陥ることもあります。たとえば、太陽光発電プロジェクトに取り組んでいて、負荷の消費電力を計算したい場合、そのようなシナリオでは、Arduinoのような単純なマイクロコントローラープラットフォームを使用して独自の電力計を構築できます。
独自のメーターを作成すると、テストのコストが削減されるだけでなく、テストのプロセスを容易にする余地もあります。同様に、Arduinoを使用して構築された電力計は、シリアルモニターで結果を監視し、シリアルプロッターでグラフをプロットしたり、SDカードを追加して、事前定義された間隔で電圧、電流、電力の値を自動的に記録するように簡単に調整できます。面白そうですね!?それでは始めましょう…
必要な材料
- Arduino Nano
- LM358オペアンプ
- 7805電圧レギュレータ
- 16 * 2LCDディスプレイ
- 0.22オーム2ワットシャント抵抗
- 10kトリマポット
- 10k、20k、2.2k、1k抵抗器
- 0.1uFコンデンサ
- テスト負荷
- パフォーマンスボードまたはブレッドボード
- はんだ付けキット(オプション)
回路図
arduino電力計プロジェクトの完全な回路図を以下に示します。
理解を容易にするために、arduino電力計回路は2つのユニットに分割されています。回路の上部は測定ユニットであり、回路の下部は計算および表示ユニットです。このタイプの回路に不慣れな人のために、ラベルに従いました。例+ 5Vはラベルです。これは、ラベルが接続されているすべてのピンが互いに接続されていることを考慮する必要があることを意味します。ラベルは通常、回路図をきれいに見せるために使用されます。
この回路は、太陽光発電の仕様を念頭に置いて、0〜1Aの電流範囲で0〜24Vで動作するシステムに適合するように設計されています。しかし、回路の動作を理解すれば、範囲を簡単に拡張できます。回路の背後にある基本原理は、負荷の両端の電圧と回路を流れる電流を測定して、負荷が消費する電力を計算することです。すべての測定値は16 * 2英数字LCDに表示されます。
さらに以下では、回路を小さなセグメントに分割して、回路がどのようにインデントされて機能するかを明確に把握できるようにします。
測定単位
測定ユニットは、電圧の測定に役立つ分圧器で構成され、非反転オペアンプを備えたシャット抵抗を使用して、回路を流れる電流を測定します。上記回路の分圧器部分を以下に示します。
ここで、入力電圧はVccで表されます。前述のように、0V〜24Vの電圧範囲で回路を設計しています。しかし、Arduinoのようなマイクロコントローラーはそのような高い値の電圧を測定することはできません。0〜5Vの電圧しか測定できません。したがって、0-24Vから0-5Vの電圧範囲をマッピング(変換)する必要があります。これは、以下に示すように分圧回路を使用することで簡単に実行できます。抵抗10kと2.2kが一緒になって分圧回路を形成します。分圧器の出力電圧は、以下の式で計算できます。抵抗器の値を決定するためにも同じことが使用されます。回路を再設計する場合は、オンライン計算機を使用して抵抗器の値を計算できます。
Vout =(Vin×R2)/(R1 + R2)
マップされた0-5Vは、Voltageというラベルの付いた中央部分から取得できます。このマッピングされた電圧は、後でArduinoアナログピンに供給することができます。
次に、LOADを流れる電流を測定する必要があります。マイクロコントローラはアナログ電圧しか読み取れないことがわかっているので、何らかの方法で電流の値を電圧に変換する必要があります。これは、オームの法則に従って、パスに流れる電流に比例する電圧の値をパスにドロップする抵抗(シャント抵抗)をパスに追加するだけで実行できます。この電圧降下の値は非常に小さいので、オペアンプを使用して増幅します。そのための回路を以下に示します。
ここで、シャント抵抗(SR1)の値は0.22オームです。前に述べたように、0-1Aの回路を設計しているので、オームの法則に基づいて、最大1Aの電流が負荷を通過するときに約0.2Vになるこの抵抗の両端の電圧降下を計算できます。この電圧はマイクロコントローラーが読み取るには非常に小さいため、非反転増幅器モードのオペアンプを使用して、Arduinoが読み取るために電圧を0.2Vからより高いレベルに上げます。
非反転モードのオペアンプは上に示されています。アンプは21のゲインを持つように設計されているため、0.2 * 21 = 4.2Vになります。オペアンプのゲインを計算する式を以下に示します。回路を再設計する場合は、このオンラインゲイン計算機を使用して抵抗の値を取得することもできます。
ゲイン= Vout / Vin = 1 +(Rf / Rin)
ここで、この場合、Rfの値は20k、Rinの値は1kであり、これにより、21の巨大な値が得られます。オペアンプからの増幅された電圧は、抵抗1kとコンデンサ0.1uFを備えたRCフィルタに与えられます。結合されているノイズをフィルタリングします。最後に、電圧がArduinoアナログピンに供給されます。
測定ユニットに残っている最後の部分は、電圧レギュレーター部分です。可変入力電圧を与えるので、Arduinoとオペアンプが動作するために調整された+ 5Vボルトが必要です。この安定化された電圧は、7805電圧レギュレーターによって提供されます。ノイズをフィルタリングするために、コンデンサが出力に追加されます。
計算および表示ユニット
測定ユニットでは、電圧と電流のパラメータを0〜5Vに変換する回路を設計しました。これは、Arduinoアナログピンに供給することができます。回路のこの部分では、これらの電圧信号をArduinoに接続し、16×2の英数字ディスプレイをArduinoに接続して、結果を表示できるようにします。そのための回路を以下に示します。
ご覧のとおり、電圧ピンはアナログピンA3に接続され、電流ピンはアナログピンA4に接続されています。LCDは7805の+ 5Vから給電され、Arduinoのデジタルピンに接続されて4ビットモードで動作します。また、Conピンに接続されたポテンショメータ(10k)を使用して、LCDのコントラストを変化させました。
Arduinoのプログラミング
ハードウェアについて十分に理解できたので、Arduinoを開いてプログラミングを始めましょう。コードの目的は、ピンA3とA4のアナログ電圧を読み取り、電圧、電流、電力の値を計算して、最終的にLCD画面に表示することです。同じことを行うための完全なプログラムは、上記のハードウェアにそのまま使用できるページの最後に記載されています。さらに、コードは小さなスニペットに分割されて説明されています。
私たちが始めるすべてのプログラムとして、私たちが使用したピンを定義します。アウトプロジェクトでは、A3ピンとA4ピンを使用してそれぞれ電圧と電流を測定し、デジタルピン3,4、8、9、10、11を使用してLCDとArduinoを接続します。
int Read_Voltage = A3; int Read_Current = A4; const int rs = 3、en = 4、d4 = 8、d5 = 9、d6 = 10、d7 = 11; // LCD接続のピン番号に言及 LiquidCrystallcd(rs、en、d4、d5、d6、d7);
LCDをArduinoとインターフェースするための液晶と呼ばれるヘッダーファイルも含まれています。次に、セットアップ機能内でLCDディスプレイを初期化し、イントロテキストを「ArduinoWattmeter」として表示し、2秒間待ってからクリアします。そのためのコードを以下に示します。
void setup(){ lcd.begin(16、2); // 16 * 2 LCDを初期化します lcd.print( "Arduino Wattmeter"); //イントロメッセージライン 1lcd.setCursor(0、1); lcd.print( "-Circuitdigest"); //イントロメッセージライン 2delay(2000); lcd.clear(); }
メインループ機能の内部では、アナログ読み取り機能を使用して、ピンA3およびA4から電圧値を読み取ります。 Arduino ADCの出力値は10ビットADCであるため、0-1203です。次に、この値を0〜5Vに変換する必要があります。これは、(5/1023)を掛けることで実行できます。次に、ハードウェアの前半で、電圧の実際の値を0-24Vから0-5Vにマッピングし、電流の実際の値を0-1Aから0-5Vにマッピングしました。したがって、乗数を使用してこれらの値を実際の値に戻す必要があります。これは、乗数を掛けることで実行できます。乗数の値は、ハードウェアセクションで提供されている式を使用して理論的に計算するか、既知の電圧および電流値のセットがある場合は実際に計算できます。後者のオプションはリアルタイムでより正確になる傾向があるため、私は後者のオプションに従いました。したがって、ここでの乗数の値は6.46と0.239です。したがって、コードは次のようになります
float Voltage_Value = analogRead(Read_Voltage); float Current_Value = analogRead(Read_Current); Voltage_Value = Voltage_Value *(5.0 / 1023.0)* 6.46; Current_Value = Current_Value *(5.0 / 1023.0)* 0.239;
より正確に測定する方法は?
実際の電圧と電流の値を計算する上記の方法は問題なく機能します。しかし、1つの欠点があります。それは、測定されたADC電圧と実際の電圧の関係が線形ではないため、単一の乗算器では非常に正確な結果が得られないことです。
したがって、精度を向上させるために、既知の値のセットを使用して実際の値で測定されたADC値のセットをプロットし、そのデータを使用してグラフをプロットし、線形回帰法を使用して乗数方程式を導出できます。私が同様の方法を使用したArduinodBメーターを参照できます。
最後に、負荷を流れる実際の電圧と実際の電流の値を計算したら、式(P = V * I)を使用して電力を計算できます。次に、以下のコードを使用して、3つの値すべてをLCDディスプレイに表示します。
lcd.setCursor(0、0); lcd.print( "V ="); lcd.print(Voltage_Value); lcd.print( ""); lcd.print( "I ="); lcd.print(Current_Value); float Power_Value = Voltage_Value * Current_Value; lcd.setCursor(0、1); lcd.print( "Power ="); lcd.print(Power_Value);
作業とテスト
チュートリアルのために、回路に示されているように、パフォーマンスボードを使用してすべてのコンポーネントをはんだ付けしました。フェニックスのネジ留め式端子を使用して負荷を接続し、通常のDCバレルジャックを使用して電源を接続しました。Arduino NanoボードとLCDは、後で必要になったときに再利用できるように、メスのBergstikに取り付けられています。
ハードウェアの準備ができたら、ArduinoコードをNanoボードにアップロードします。トリマポットを調整して、明確なイントロテキストが表示されるまでLCDのコントラストレベルを制御します。ボードをテストするには、負荷をネジ留め式端子コネクタに接続し、ソースをバレルジャックに接続します。 Arduinoの動作には+ 5Vが必要だったため、このプロジェクトが機能するには、ソース電圧が6Vを超える必要があります。すべてが正常に機能している場合は、以下に示すように、負荷の両端の電圧と負荷を流れる電流の値がLCDの1行目に表示され、計算された電力がLCDの2行目に表示されます。
何かを構築することの楽しい部分は、それが適切に機能する範囲を確認するためにそれをテストすることにあります。そのために、12Vの自動車用インジケーターバブを負荷として使用し、RPSをソースとして使用しました。RPS自体が電流と電圧の値を測定して表示できるため、回路の精度と性能を簡単にクロスチェックできます。はい、RPSを使用して乗数の値を調整し、正確な値に近づけました。
完全な作業は、このページの最後にあるビデオで見つけることができます。回路とプログラムを理解し、何か役に立つことを学んだことを願っています。これを機能させるのに問題がある場合は、以下のコメントセクションに投稿するか、フォーラムに書き込んで技術的なヘルプを入手してください。
このArduinoベースの電力計プロジェクトには、自動データロギング、グラフのプロット、過電圧または過電流状況の通知などのパフォーマンスを向上させるために追加できるアップグレードがさらにたくさんあります。興味を持って、これを何に使用するかを教えてください。