Search This Blog

Wednesday, September 19, 2018

Safe and easy DIY Home Energy Monitor Using Current Transformer with Arduino, Raspberry Pi, or Beaglebone Black

အိမ်မှာ ရှိတဲ့ လျှပ်စစ် အသုံး အဆောင် တွေရဲ့ စွမ်းအင် အသုံး ပြုမှု ကို စီစစ် တိုင်းတာ ဖို့ အတွက် ရိုးရှင်း ပြီး၊ အခြေခံ ကျတဲ့ energy monitor တစ်ခု ကို လုပ်ကြည့် ပါမယ်။ တိုင်းတာ အသုံး ပြုတဲ့ နည်း အများကြီး ရှိပေ မယ့် သင်ယူ လေ့လာမှု အတွက် အထောက် အကူ ဖြစ်ဖို့ ရော၊ အန္တရာယ် ကင်းဖို့ အတွက်ပါ သင့်တော်မှု ရှိမယ် ထင်တဲ့ YHDC Current Transformer SCT-013-000 [YHD18] ကို သုံးဖို့ ရွေးချယ် လိုက်ပါ တယ်။ သူက split-core ဖြစ်ပြီး တိုင်းတာ ချင်တဲ့ ဗို့အား မြင့် ဝါယာ လိုင်း တွေကို ဘာမှ ဖြုတ် စရာ မလိုပဲ ဝါယာ ပေါ်ကို ပတ်ပြီး ကလစ် တပ်လိုက် ဖို့ပဲ လိုတာမို့ non-invasive ဖြစ်ပြီး၊ အန္တရာယ် လည်းကင်း၊ အသုံးပြုဖို့လည်း လွယ်ကူ ပါတယ်။ အဲဒီ လို ပတ်တဲ့ အခါ Figure 1 ရဲ့ ညာဖက် ဆုံးမှာ ပြထား သလို ဝါယာ တစ်စ ကိုပဲ ပတ်ရ မှာဖြစ် ပါတယ်။


Figure 1. (ဘယ်ဘက်) SCT-013 က split core ဖြစ်တဲ့ အတွက် ကလစ်ကို ဖွင့်ပြီး ဝါယာ ပေါ်ကို အလွယ် တကူ တပ်ဆင်နိုင် ပါတယ်။ (အလယ်) ဝါယာ အကုန်လုံးကို ပတ်လိုက်ရင် အဝင် နဲ့ အထွက် ပြန်ကြေပြီး core ထဲမှာ ဖြတ်စီး တဲ့ စုစုပေါင်း current က သုည ဖြစ်သွား တဲ့ အတွက် တိုင်းလို့ မရ ပါဘူး။ (ညာဖက်) ဝါယာ တစ်စ ကို ပဲ core ထဲမှာ ပတ်ဖို့ လိုပါတယ်။


  1. Current တိုင်းတာရန်ပြင်ဆင်ခြင်း
  2. Burden Resistor
  3. Bias ပေးခြင်း
  4. Power တိုင်းတာခြင်း
  5. Signal Processing
  6. Calibration
  7. Schematic Circuit
  8. Arduino
  9. BeagleBone Black / Odroid
  10. Raspberry Pi
  11. Web Interface
  12. အကိုးအကားများ




Current တိုင်းတာရန်ပြင်ဆင်ခြင်း

Current transformer တွေက primary winding မှာ စီးဆင်း နေတဲ့ AC current ကို ဝါယာ ပတ်ထား တဲ့ အပတ် အရေ အတွက် အချိုး အလိုက် secondary winding မှာ induced လုပ်ပေး ပါတယ်။ သူ့ရဲ့ datasheet မှာ ဖော်ပြ ထား တာက turn ratio 2000:1 ဖြစ်ပြီး၊ အဝင် current 100 A (rms) အတွက် အထွက် current 50 mA (rms) ထုတ်ပေး ပါမယ်။ Rated current က 120 A ဖြစ်ပြီး အထဲ မှာ transient voltage supressor (TVS) ပါ ပါတယ်။

အခု ဒီဇိုင်း လုပ်ချင်တဲ့ မီတာ မှာ အဝင် primary rms current \(I_{i_{rms}}\)ကို 30 A လောက်ထိ ပဲ အများဆုံး တိုင်းချင် ပြီး၊ interface လုပ်မဲ့ signal processor ဘက်မှာ 3.3 V လောက် ရဖို့ စဉ်းစား ပါမယ်။ CT (current transformer) ကထွက်လာ မယ့် secondary current \(I_s\) ကို ရဖို့ အတွက်၊ အဝင် current ကို turn ratio နဲ့ အချိုးချ ပါမယ်။ Passive load တွေ အတွက် ရည်ရွယ် ပြီး ဒီဇိုင်း လုပ်မှာ ဖြစ်တဲ့ အတွက် current ကို လည်း sinusoidal လို့ ယူဆ ပြီး၊ \(I_s\) ရဲ့ peak to peak တန်ဖိုး က rms တန်ဖိုး ရဲ့ \(2\sqrt{2}\) ဆ လို့ သတ်မှတ် နိုင် ပါတယ်။ အဲဒီ အခါ အဝင် rms current နဲ့ အထွက် peak to peak current ရဲ့ ဆက်သွယ်မှု ကို အောက်ပါ ညီမျှခြင်း တွေ အတိုင်း ရနိုင် ပါတယ်။

\[ I_{s_{p-p}} = \frac{I_{i_{rms}}}{2000} \times 2\sqrt{2} \]

\[ \label{eq:ispp} I_{s_{p-p}} = \frac{\sqrt{2}I_{i_{rms}}}{1000} \]

Burden Resistor

ဥပမာ အဝင် current 30 A အတွက် CT ရဲ့ အထွက် က 42.43 mA peak to peak ဖြစ်ပါတယ်။ အဲဒီ အချိန် မှာ ရချင် တဲ့ voltage က 3.3 V ဆိုပါစို့၊ Ohm's law \( R = \frac{V}{I} \) ကို သုံးပြီး ရှာ တဲ့ အခါ သုံးရမယ့် burden resistance တန်ဖိုး ကို \( 78 \Omega \) ဆိုပြီး ရပါမယ်။ အဲဒီ အတွက် အလွယ် တကူ ရရှိ နိုင်တဲ့ အနီး စပ်ဆုံး common resistor တန်ဖိုး \( 75 \Omega \) ကို သုံးနိုင် ပါတယ်။ Burden resistance \( 75 \Omega \) ကို သုံးတဲ့ အခါ ထွက်လာ မယ့် peak to peak voltage \( V_{s_{p-p}} \) ကို အောက်ပါ ညီမျှခြင်း တွေ အတိုင်း ရနိုင် ပါတယ်။ \[ V_{s_{p-p}} = \frac{\sqrt{2}I_{i_{rms}}}{1000}\times R_{burden} \] \[ V_{s_{p-p}} =0.106 \times I_{i_{rms}} \]

Bias ပေးခြင်း

ရလာတဲ့ ဗို့က အပေါင်း အနှုတ် တလှည့်စီ ဖြစ်နေ တာမို့၊ signal processor ဘက် အတွက် အဆင်ပြေ တဲ့ အပေါင်း ဗို့ အမြဲ ဖြစ်နေ အောင် bias voltage တစ်ခု ကို ထည့် ပေါင်း ပေးပါမယ် [LH18]။ Figure 2 မှာ ပြထား သလို ခန့်မှန်းခြေ -1.6 V နဲ့ 1.6 V ကြားမှာ ပြောင်း နေတဲ့ အဝင် ဗို့ ကို 1.6 V လောက် ရှိတဲ့ bias voltage \(V_b \) ပေါင်း ပေးလိုက် တဲ့ အခါ 0 V နဲ့ 3.2 V ကြားမှာ ပြောင်း နေတဲ့ အထွက် ဗို့ \(V_c\) ကို ရလာ ပါမယ်။ Bias voltage ရဖို့ အတွက် တော့ ရိုးရှင်း တဲ့ voltage divider လေးကို 180 \(\Omega\) resistor တွေ သုံးပြီး တည်ဆောက် နိုင် ပါတယ်။ 360 \(\Omega\) resistor ရဖို့ 180 \(\Omega\) resistor နှစ်လုံး ကို series ဆက်ပြီး သုံးနိုင် ပါတယ်။ ရလာ တဲ့ အထွက် ဗို့ \(V_c\) ကို Ardiuno တို့လို microcontroller တွေနဲ့ ဆက်ပြီး current တွေ၊ ပါဝါ တွေကို တိုင်းတာ တွက်ချက် နိုင် ပါတယ်။


Figure 2. Bias ဗို့ ထည့်ပေးခြင်း။




Power တိုင်းတာခြင်း

ရှေ့မှာ ဆွေးနွေး ခဲ့တဲ့ \(V_c\) ကို တိုင်းတာ ပြီး၊ CT တပ်ထား တဲ့ ဝါယာ မှာ စီးဆင်း နေတဲ့ current ကို သိနိုင် ပါတယ်။ Power ရဖို့ အတွက် voltage နဲ့ current ကို မြှောက်ပြီး၊ တွက်နိုင် ပါတယ်။ အခု တည်ဆောက် မယ့် energy monitor မှာ အောက်က အချက် တွေ အတိုင်း ယူဆ မှု တွေ လုပ်ထား ပါတယ်။
  • ၁။ လျှပ်စစ် ဗို့အား ကို 230 V အသေလို့ ယူဆ ထား ပါမယ်။ မီးအား မငြိမ် ရင်တောင် မှ တိုင်းတာ မှု လုပ်ထား တဲ့ ဝါယာက အလို အလျောက် မီးအား မြှင့်ထား တဲ့ ဘက်မှာ ရှိရင် ယူဆ ချက် သိပ် မမှားဘူး ပြောနိုင် ပါမှာ။ အကယ်၍ အတိ အကျ လိုချင် ရင်တော့ voltage divider ဒါမှ မဟုတ် voltage transformer လေးပဲ ဖြစ်ဖြစ် သုံးပြီး ဗို့အား အတိ အကျ တိုင်းတာ ရရှိ နိုင် ပါတယ်။
  • ၂။ သုံးမယ့် load ရဲ့ reactive power ကြောင့် ရလာ မယ့် apparent power \(P=VI\) က real power နဲ့ သိပ် မကွာ ဘူးလို့ ယူဆ ပါမယ်။ ဥပမာ စင်ကာပူ မှာ ဆိုရင် သတ်မှတ် ထားတဲ့ power factor 0.95 ထက် နည်းတဲ့ load ကို သုံးလို့ မရ ပါဘူး။ အတိ အကျ လိုချင် ရင်တော့ arduino တို့လို microcontroller တစ်ခုခု နဲ့ voltage, current တွေကို 1 kHz လောက်နဲ့ sample ကောက်ပြီး တွက်လို့ ရသလို၊ ADE9153A တို့လို energy metering IC တွေကို သုံးလို့ ရ ပါတယ် [Ana18]။
  • ၃။ သုံးမယ့် load တွေက passive load တွေ ပဲဖြစ် တယ် လို့ ယူဆ ပြီး၊ current က ဗို့အား နဲ့ linear ဖြစ်ပြီး sinusoidal ပုံစံ ပဲ ထွက်မယ် လို့ ယူဆ ပါမယ်။ ဒီ နမူနာ မှာ တော့ rms တန်ဖိုး တွက်တဲ့ အခါ ပုံမှန် sinusoidal တွေရဲ့ ဆက်သွယ် ချက် နဲ့ပဲ ခန့်မှန်း တွက်ချက် ထားပါတယ်။ မဟုတ် ရင် တော့ AD8346 တို့လို RMS to DC Converters တွေကို သုံးလို့ လည်း ရပါတယ် [Ana17]။
နောက် တစ်ခါ အသုံးပြု တဲ့ component တွေရဲ့ တန်ဖိုး က လည်း အတိ အကျ မရ နိုင် တာကြောင့် အဲဒီ အတွက် error တွေ လည်း ရှိ ပါတယ်။ ဥပမာ 75 \(\Omega\) burden resistor ဆိုရင် လည်း သူ့မှာ 1 % ဒါမှ မဟုတ် 5 % စသဖြင့် tolerance ရှိတာ မို့ ထွက်လာ တဲ့ \(V_c\) မှာ လည်း မတိ ကျမှု တွေ ရှိ ပါတယ်။ သတင်း ကောင်း တစ်ခု ကတော့ energy monitor တွေဟာ အသေ တပ်ထား လေ့ ရှိတာမို့၊ အခု ပြောခဲ့ တဲ့ ယူဆချက် တွေ ကြောင့် ရလာ တဲ့ အမှား တွေ အားလုံး နီးပါး ကို calibration လုပ်ပြီး ဖျောက်ပစ် နိုင်ပါ တယ်။ ဒါကြောင့် ရလာ မယ့် energy monitor က တော်တော် တိကျမှု ရှိနိုင် ပါတယ်။

Signal Processing

ကျွန်တော် တို့ SBC ရဲ့ Linux က real-time ကြိမ်နှုန်း မြင့် လုပ်ငန်း တွေ မလုပ် နိုင်တာ မို့ အသုံးပြု တဲ့ rms current အလိုက် အချိုးကျ dc voltage ထွက်မယ့် ရိုးရှင်း တဲ့ signal processor တစ်ခု ကို op-amp လေးတွေ သုံးပြီး တည်ဆောက် ပါမယ်။ သုံးမယ့် op-amp ရဲ့ အထွက် ဗို့ က အနည်းဆုံး 0.8 V ကနေ အများဆုံး \(Vcc - 1.5\) V အထိ ထုတ် ပေးနိုင် တာမို့ 5 V ပါဝါ သုံး လိုက်ရင်၊ အထွက် voltage range 2 V ကျော်ကျော် ရနိုင် ပါတယ် [Tex15; Tex17]။ နမူနာ အနေနဲ့ ရှေ့က ဆွေးနွေး ခဲ့တဲ့ အတိုင်း 75 \(\Omega\) burden resistor ကိုပဲ ပြန်သုံး မယ် ဆိုရင် 20 A လောက်ထိ တိုင်းနိုင် တဲ့ energy monitor တစ်ခု ကို ရနိုင် ပါတယ်။ တိုင်းတာ ချင်တဲ့ current ရဲ့ range ကို burden resistor တန်ဖိုး နဲ့ အလွယ် တကူ ပြောင်းလို့ ရ ပါတယ်။


Figure 3. Voltage reference တစ်ခု တည်ဆောက်ခြင်း။


အခု op-amp ကို 5 V ပါဝါ supply ဗို့အား နဲ့ သုံးမှာ မို့၊ သူ့ရဲ့ အထွက် ဗို့ က 0.8 V ကနေ 3.5 V ကြားထဲ မှာ ပြောင်းလဲ နိုင်ပြီး၊ အလယ် မှတ်က 2.2 V ဝန်းကျင် မှာ ရှိပါတယ်။ အဲဒါ ကြောင့် ပေါင်းထည့် ပေးချင်တဲ့ bias voltage \(V_b\) အတွက် ပိုမို သင့်တော် တဲ့ 2.2 V ထုတ်ပေး မယ့် voltage reference တစ်ခု ကို Figure 3 အတိုင်း zener diode နဲ့ op-amp voltage follower ကို သုံးပြီး တည်ဆောက် နိုင်ပါ တယ်။ အဲဒီ နောက် precision rectifier တစ်ခု ကို Figure 4 အတိုင်း တည်ဆောက် ပါမယ် [Ye13]။ သုံးဖို့ diode ကို ရွေးချယ် တဲ့ အခါ မြန်ဆန်ပြီး၊ forward voltage \(V_F\) နည်းတဲ့ small signal Schottky diode BAT46 ကို ရွေးလိုက် ပါတယ်။ Capacitor \(C_1\) က frequency response ကောင်းအောင် ကူညီ ပေး ပါတယ်။


Figure 4. Fullwave precision rectifier တစ်ခု ကို op-amp များဖြင့် တည်ဆောက်ပုံ။


အဝင် ဗို့ \(V_c\) က အပေါင်း ဘက်ခြမ်း (ဆိုလို တာက \(V_c > V_b\) ) ဖြစ်နေတဲ့ အချိန်မှာ၊ Figure 5 မှာ ပြထား သလို D1 က forward ဖြစ်နေ ပြီး၊ D2 က reverse ဖြစ်နေ ပါမယ်။ \(V_b\) ကို ground အနေ နဲ့ သဘော ထားပြီး စဉ်းစား မယ်ဆို ပထမ op-amp က voltage follower ပုံစံ မျိုး လုပ်ဆောင် ပြီး သူ့ရဲ့ အနုတ် အဝင် မှာ ရှိတဲ့ ဗို့ အား က \(\approx V_c\) ဖြစ်နေ ပါမယ်။ အဲဒီ အချိန် မှာ ဒုတိယ op-amp က inverting amplifier ပုံစံ ဖြစ်သွား တာမို့ rectified voltage \(V_r\) ကို အောက်ပါ အတိုင်း ဖော်ပြ နိုင် ပါတယ်။ \[ V_r =-\frac{R_2}{R_1} \times V_c \]


Figure 5. အဝင် အပေါင်း ဖြစ်ချိန် တွင် precision rectifer က inverting amplifier အနေနှင့် လုပ်ဆောင်ပြီး အထွက် တွင် အနုတ် အနေနှင့် ထုတ်ပေးသည်။


\(R_1\) နဲ့ \(R_2\) ရဲ့ တန်ဖိုး က တူတာ မို့၊ အထွက် က အဝင် ရဲ့ ပြောင်းပြန် အနုတ် အခြမ်း ရ လာ ပါမယ်။ \[ V_r =-V_c \]


Figure 6. အဝင် အနုတ် ဖြစ်ချိန် တွင်လည်း voltage follower အနေနှင့် အနုတ် ထုတ်ပေးသည်။


အဝင် ဗို့ \(V_c\) က အနုတ် ဘက်ခြမ်း (ဆိုလို တာက \(V_c < V_b\) ) ဖြစ်နေတဲ့ အချိန်မှာ၊ Figure 6 မှာ ပြထား သလို D1 က reverse ဖြစ်နေ ပြီး၊ D2 က forward ဖြစ်နေ ပါမယ်။ အဲဒီ အချိန် မှာ high input impedance အဝင် တွေနဲ့ ဆက်ထား တဲ့ \(R_1\) နဲ့ \(R_2\) မှာ current မစီး တဲ့ အတွက် voltage drop က သုည ဖြစ်နေ ပါမယ်။ ဒါကြောင့် op-amp နှစ်ခု စလုံးက voltage follower ပုံစံ ဖြစ် နေပြီး အထွက် \(V_r\) က အဝင် \(V_c\) နဲ့ တန်ဖိုး အတူတူ အနုတ် ပဲ ထွက်လာ မှာ ဖြစ်ပါတယ်။ ဒီ configuration မှာ ပထမ op-amp ရဲ့ အထွက် peak to peak voltage က အဝင် \(V_c\) ထက် \(2V_F\) ပိုများ တာကို တွေ့နိုင် ပါတယ်။ ဒါကြောင့် အဝင် \(V_c\) အတွက် အများဆုံး လက်ခံ နိုင်တဲ့ peak to peak voltage တန်ဖိုးကို အောက်က ညီမျှခြင်း အတိုင်း တွက်နိုင် ပါတယ်။ \[ V_{c_{p-p}}=V_{cc}-1.5-0.8-2 V_F \] \(V_{cc}\) တန်ဖိုး 5 V သုံးတဲ့ အချိန်၊ Schottky diode ရဲ့ \(V_F\) ကို 0.25 V လို့ ယူဆ လိုက်ရင် \(V_{c_{p-p}}\) ရဲ့ အများဆုံး တန်ဖိုးကို 2.2 V လို့ ရနိုင် ပါတယ်။ ရှေ့မှာ ဖော်ပြ ခဲ့တဲ့ \(V_{c_{p-p}}\) နဲ့ \(I_{i_{rms}}\) ဆက်သွယ်ချက် ညီမျှခြင်း မှာ အဲဒီ တန်ဖိုး ထည့်လိုက် ရင် အများဆုံး တိုင်းတာ နိုင်တဲ့ အဝင် current \(I_{i_{rms}}\) ကို 20 A လို့ တွေ့ရ မှာ ဖြစ် ပါတယ်။

Calibration

ဒီ energy monitor က ရဲ့ တိုင်းတာ မှုကို တိကျ အောင် calibration လုပ်လို့ ရပါတယ်။ သူ့နဲ့ ဆက်သွယ် မယ့် microcontroller ဒါမှ မဟုတ် SBC ရဲ့ ပရိုဂရမ် မှာ ချိန်ညှိ လို့ရ ပေမယ့် hardware trimmer တွေ သုံး တာက ပိုမို လွယ်ကူ အဆင်ပြေ ပြီး၊ လက်တွေ့ ပိုကျ ပါတယ်။ ဒါ ကြောင့် အဝင် rms current နဲ့ အထွက် ဗို့ ကြား ဆက်သွယ် မှု ရဲ့ offset နဲ့ scale factor ကို ချိန်ညှိ ဖို့ အတွက် inverting op-amp adder တစ်ခု ကို Figure 7 မှာ ပြထား သလို ထပ်ဖြည့် လိုက် ပါမယ်။ အဲဒီ မှာ တည်ငြိမ် တဲ့ အထွက် ဗို့အား ရဖို့ low pass filter တစ်ခု ကို ပါ ထည့်ထား ပါတယ်။ အထွက် မှာ zener diode တစ်ခု ကို သုံးပြီး ဗို့အား ကို 1.8 V တို့၊ 3.3 V တို့ စတဲ့ တန်ဖိုး တွေထက် မကျော် အောင် limit လုပ်နိုင် ပါသေးတယ်။


Figure 7. Calibration အတွက် op-amp adder နှင့် filter, voltage clipper တို့ အတွက် schematic ပုံ။


Op-amp ရဲ့ အထွက် ဗို့ \(V_a\) ကို အောက်ပါ ညီမျှခြင်း နဲ့ ဖော်ပြနိုင် ပါတယ်။ \[ V_a=V_b - \frac{R_1}{R_2}(V_r-V_b) - \frac{R_1}{R_2}(V_{cc}-V_b) \] အဝင် current တန်ဖိုး မရှိတဲ့ အချိန် ထွက်ချင် တဲ့ offset voltage က 1 V ထားချင် တာမို့ အဲဒီ ညီမျှခြင်း မှာ \(V_b\) တန်ဖိုး 2.2 V သုံးပြီး၊ \(V_{cc}\) တန်ဖိုး +5 V နဲ့ \(V_{r}\) ရဲ့ quiescent တန်ဖိုး 2.2 V သုံး လိုက် တဲ့ အခါ \(R_3\) တန်ဖိုး ကို 2.3 k\(\Omega\) လို့ ရလာ ပါမယ်။ ဒါကြောင့် အဲဒီ နေရာ မှာ အနီး စပ်ဆုံး mid point ရှိတဲ့ 5 k\(\Omega\) trimmer ကို သုံးလိုက် ပါမယ်။ \(V_{c_{p-p}}\) ရဲ့ peak to peak အများဆုံး တန်ဖိုးက 2.2 V ဖြစ်တာ မို့၊ \(V_{a}\) ရဲ့ peak တန်ဖိုး \(V_{p}\) က အများ ဆုံး 1.1 V ထိ ရှိနိုင် ပါတယ်။ အဲဒီ အချိန်မှာ အဝင် တိုင်းချင် တဲ့ current \(I_{i_{rms}}\) က 20 A ဖြစ်ပြီး၊ နောက်ဆုံး ပျမ်းမျှ အထွက် \(V_{o}\) က BBB ရဲ့ analog input reference အတိုင်း 1.8 V ဖြစ်အောင် ဒီဇိုင်း လုပ် ပါမယ်။ Offset voltage တန်ဖိုး 1 V ကို ဖယ်လိုက် ရင် အဝင် ကြောင့် ဖြစ်လာ တဲ့ ပျမ်းမျှ ဗို့အား တန်ဖိုး အထွက် \(V_{d}\) က 0.8 V ပါ။ \(V_{d}\) နဲ့ \(V_{p}\) ရဲ့ တန်ဖိုး ဆက်သွယ် ချက် ကို အောက်က ညီမျှခြင်း တွေနဲ့ ဖော်ပြ နိုင် ပါတယ်။ \[ V_d=\frac{V_p}{\pi}\int_{\omega t =0}^{\pi} \sin (\omega t) d\omega t \] \[ V_d=\frac{2V_p}{\pi} \] \(V_{d}\) တန်ဖိုး 0.8 V အစား သွင်း လိုက် တဲ့ အခါ \(V_{p}\) က 1.26 V လို့ ရလာ ပါမယ်။ Inverting op-amp အတွက် \(R_1\) နဲ့ \(R_2\) အချိုး ကို voltage အချိုးနဲ့ အောက်ပါ အတိုင်း ဖော်ပြ နိုင် ပါတယ်။ အဲဒီ အခါ ရှိ ရမယ့် \(R_2\) တန်ဖိုး ကို 870 \(\Omega\) ဆိုပြီး ရလာ တာမို့၊ သူ့ နေရာ မှာ 2 k\(\Omega\) trimmer ကို သုံးလိုက် ပါမယ်။ \[ \frac{R_1}{R_2}=\frac{1.26}{1.1} \] DC တန်ဖိုး ရ အောင် သုံးထား တဲ့ low pass filter အတွက် cutoff frequency \(f_c\) ကို အောက်ပါ ညီမျှခြင်း နဲ့ ဖော်ပြ နိုင် ပါတယ်။ \[ f_c=\frac{1}{2\pi R C} \] အဲဒီ မှာ R တန်ဖိုး 2 k\(\Omega\) နဲ့ C တန်ဖိုး 68 \(\mu\)F သုံးလိုက် တဲ့ အခါ cutoff frequency ကို \(\approx\)1 Hz ရ ပါတယ်။ ဗို့အား ကို ကန့်သတ် ဖို့ အတွက် voltage clipper မှာ 1.8 V Zener diode ကို သုံး နိုင် ပါတယ်။

Steps

Calibration လုပ်တဲ့ အခါ ပထမ အဆင့် အနေနဲ့ ဘာ load မှာ မရှိ တဲ့ အချိန် \(V_o\) ကို 1 V ရအောင် \(R_3\) trimmer ကို လှည့်ပြီး ချိန် ပါမယ်။ ပြီးတဲ့ အခါ ကိုယ့်မှာ ရှိတဲ့ တန်ဖိုး သိတဲ့ load ကို ဖွင့်ပြီး၊ အထွက် \(V_o\) ကိုက်ညီ အောင် \(R_2\) trimmer ကို လှည့်ပြီး ချိန်ရ ပါမယ်။ ဥပမာ 2000 W ရှိတဲ့ hair dryer ကို ဆိုရင် 230 V အတွက် current တန်ဖိုး ကို 8.7 A လို့ ရ ပါမယ်။ အဲဒီ အချိန်မှာ ရှိ ရမယ့် အထွက် ဗို့ ကို သူ့အတွက် ညီမျှခြင်း သုံးပြီး ရှာ လိုက်ရင် ချိန်ရ မယ့် \(V_o\) ကို 1.35 V လို့ ရ လာ ပါမယ်။ \[ V_o=1 + 0.8 \times \frac{I_{i_{rms}}}{20} \]

Schematic circuit

Signal processor က ထွက်လာ တဲ့ အထွက် ကို BBB ရဲ့ analog input သုံးပြီး ဖတ်လို့ ရသလို၊ Arduino တို့လို microcontroller တွေ သုံးပြီး ဖတ်လို့ လည်း ရပါတယ်။ Analog input မရှိ တဲ့ Raspberry Pi နဲ့ ဖတ်မယ် ဆိုရင် တော့ MCP3004 တို့လို ADC chip တစ်ခုခု ခံ သုံးဖို့ လို ပါလိမ့် မယ်။ ရှေ့က ပြောခဲ့ တဲ့ အစိတ် အပိုင်း တွေ အားလုံး ကို စုပေါင်း ပြီးတဲ့ အခါ ရလာ တဲ့ နမူနာ schematic circuit တစ်ခု ကို Figure 8 မှာ ပြထား ပါတယ်။


Figure 8. Signal processor ၏ schematic circuit ပုံ။




Arduino

Signal processor က 5 V power supply နဲ့ အသုံးပြုနိုင် တဲ့ အတွက်၊ သူ့ အတွက် Vcc ကို Arduino ရဲ့ 5 V pin နဲ့ ချိတ်ပေး နိုင် ပါတယ်။ Signal processor ရဲ့ အထွက် ဗို့ \(V_o\) ကို Arduino ရဲ့ analog input A0 နဲ့ ဖြစ်ဖြစ် Figure 9 မှာ ပြထား သလို ဆက်သွယ် နိုင်ပါတယ်။


Figure 9. Signal processor ၏ analog output ကို Arduino ဖြင့်ဆက်သွယ်ခြင်း။


Code example

Analog input ကို ဖတ်ပြီး serial monitor မှာ ဖော်ပြ ပေးဖို့ အတွက် Arduino နမူနာ AnalogReadSerial ကို သုံးနိုင် ပါတယ်။ သူ့ကို Arduino IDE မှာ ဖွင့်ဖို့ အတွက် File menu -> Examples -> 01. Basics -> AnalogReadSerial ကို နှိပ်ပြီး ဖွင့်နိုင် ပါတယ်။ အဲဒီ နမူနာ ကို အောက်က လင့်ခ် မှာလည်း တွေ့နိုင် ပါတယ်။

https://www.arduino.cc/en/Tutorial/AnalogReadSerial

ပြီးတဲ့ အခါ ပရိုဂရမ် ကို run လိုက်ရင် serial monitor မှာ ဖတ်လို့ ရတဲ့ analog တန်ဖိုး တွေကို တွေ့ရ မှာ ဖြစ်ပါတယ်။ Analog တန်ဖိုး ဂဏန်း တွေ အစား volt-ampere (VA) တန်ဖိုး ပြောင်းချင် ရင်
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
ဆိုတဲ့ နေရာမှာ အောက် ပါ အတိုင်း ပြောင်းလို့ ရပါတယ်။
float a = 204.6; // offset = 1023.0 / 5 = 204.6 N/V;
float k = 2.53;  // scale factor = (20 * 230) / (0.8*204.6) => 28.1 VA/N
float val = analogRead(A0);
float w = k*(val - a);
Serial.println(w);


BeagleBone Black / Odroid

BeagleBone Black တို့၊ Odroid တို့ကို barrel jack ကနေ ပါဝါ ပေးထား တယ်ဆိုရင်၊ သူ့ရဲ့ 5 V pin က ပါဝါ ကို signal processor ကို supply လုပ်ဖို့ သုံးနိုင် ပါတယ်။ သူတို့ မှာ analog input တွေ ပါတဲ့ အတွက် signal processor ရဲ့ အထွက် ဗို့ \(V_o\) ကို analog input တစ်ခုခု၊ ဥပမာ A5 နဲ့ Figure 10 မှာ ပြထား သလို ဆက်သွယ် နိုင်ပါတယ်။


Figure 10. Signal processor ၏ analog output ကို BeagleBone Black ဖြင့်ဆက်သွယ်ခြင်း။


Analog input ကို ဖတ်ဖို့ အတွက် အောက်က လင့်ခ်မှာ ဖော်ပြ ထားတဲ့ CE_Ai class module ကို အလွယ် တကူ သုံး နိုင် ပါတယ်။

https://github.com/yan9a/beagle/blob/master/io/ce_ai.h

ဒေတာ တွေဖတ်ဖို့ အတွက် အောက်က ဆောင်းပါး မှာ ဖော်ပြ ထားတဲ့ အတိုင်း wxWidgets ကို သုံးပြီး GUI C++ program တစ်ခု ကို ဖန်တီး ပါမယ်။

Cross-platform C++ programming with wxWidgets

အဲဒီ နောက် wxWidgets timer ကို သုံးပြီး တစ် စက္ကန့် တစ်ခါ sample ကောက် ပေးတဲ့ ရိုးရှင်းတဲ့ C++ နမူနာ em.cpp ကို အောက်က လင့်ခ်မှာ ဖော်ပြ ထားပါ တယ်။

https://github.com/yan9a/beagle/blob/master/sensor-energy/em.cpp

သူက တစ်မိနစ် စာ ဒေတာ တွေကို web interface မှာ ဖော်ပြ တဲ့ အခါ အသုံး ပြုနိုင် အောင် eseconds.php ဆိုတဲ့ ဖိုင် မှာလည်း သိမ်းပေး ပါတယ်။ မိနစ် အပြင် hourly တို့၊ daily ဒေတာ တို့ကို လည်း အလွယ် တကူ ထပ်ဖြည့် နိုင် ပါတယ်။ ပရိုဂရမ် ကို build and run လုပ်ဖို့ အတွက် command တွေကို Listing. em-bar.sh မှာ ဖော်ပြ ထားတဲ့ script ကို အောက်က အတိုင်း သုံးနိုင် ပါတယ်။
$ ./em-bar.sh


 #!/bin/bash
echo "Compiling..."
unamestr=`uname -m`
if [[ "$unamestr" == 'x86_64' ]]; then
   echo "on x86_64"
   g++ em.cpp `wx-config --cxxflags --libs std`-o em -std=c++11
   echo "CWD: $PWD"
   gnome-terminal -x sh -c './em'
elif [[ "$unamestr" == 'armv7l' ]]; then
   echo "on armv7l"
   g++ em.cpp `wx-config --cxxflags --libs std`-o em -std=c++11
   echo "CWD: $PWD"
   gksudo ./em
fi
echo "Done."   

Listing. em-bar.sh

ပရိုဂရမ် ရဲ့ GUI ကို Figure 11 မှာ ပြထား ပါတယ်။


Figure 11. em.cpp ၏ GUI ။




Raspberry Pi

Analog input မရှိ တဲ့ Raspberry Pi အတွက် တော့ MCP3004 တို့လို ADC chip တစ်ခုခု ခံ သုံးဖို့ လို ပါလိမ့် မယ်။ Signal processor က 5 V power supply နဲ့ အသုံးပြုနိုင် တဲ့ အတွက်၊ သူ့ အတွက် Vcc ကို RPi ရဲ့ 5 V pin နဲ့ ချိတ်ပေး နိုင် ပါတယ်။ Signal processor ရဲ့ အထွက် ဗို့ \(V_o\) ကို ဖတ်တဲ့ ADC ရဲ့ SPI interface pin တွေိကို RPi နဲ့ Figure 12 မှာ ပြထား သလို ဆက်သွယ် လိုက် ပါမယ်။


Figure 12. Energy Monitor ကို Raspberry Pi ၏ SPI interface ဖြင့် ဆက်သွယ်ခြင်း။


ADC ကို ဖတ်ဖို့ အတွက် အောက်က လင့်ခ် မှာ ဖော်ပြ ထားတဲ့ CE_SPI class module ကို အလွယ် တကူ ပြန်သုံး နိုင် ပါတယ်။

https://github.com/yan9a/rpi/blob/master/bus/ce_spi.h

အဲဒီ နောက် ခုနက အတိုင်း wxWidgets (See. Cross-platform C++ programming with wxWidgets) timer ကို သုံးပြီး တစ် စက္ကန့် တစ်ခါ sample ကောက် ပေးတဲ့ ရိုးရှင်းတဲ့ C++ နမူနာ em.cpp ကို အောက်က လင့်ခ်မှာ ဖော်ပြ ထားပါ တယ်။

https://github.com/yan9a/rpi/blob/master/sensor-energy/em.cpp

သူ့ရဲ့ အလုပ်လုပ်ပုံ က ခုနက အပိုင်း မှာ ဖော်ပြ ခဲ့ တဲ့ အတိုင်း ပါပဲ။ Raspberry Pi အတွက် ပရိုဂရမ် ရဲ့ GUI ကို Figure 13 မှာ ပြထား ပါတယ်။


Figure 13. Raspberry Pi အတွက် em.cpp ၏ GUI ။




Web Interface

Energy monitor က ဖတ်လို့ ရတဲ့ ဒေတာ တွေကို SBC တွေရဲ့ web server မှာ PHP web page တစ်ခု အနေ နဲ့ တိုက်ရိုက် ဖော်ပြ နိုင် ပါတယ်။ အဲဒီ web interface က ကွန်ပျူတာ ဖြစ်ဖြစ်၊ ဖုန်း နဲ့ပဲ ဖြစ်ဖြစ် internet ဆက်သွယ်မှု ရှိတဲ့ ဘယ်နေ ရာက မဆို လှမ်းကြည့် လို့ ရနိုင် ပါတယ်။ Chart တွေ ဆွဲဖို့ အတွက် Google ရဲ့ gchart ကို အသုံးပြု ထားတဲ့ ရိုးရှင်း တဲ့ web page နမူနာ em.php ကို အောက်က လင့်ခ် မှာ ဖော်ပြ ထားပြီး၊

https://github.com/yan9a/beagle/blob/master/sensor-energy/em.php

သူ့ရဲ့ web UI ကို Figure 14 မှာ တွေ့နိုင် ပါတယ်။


Figure 14. em.php ၏ UI ။




အကိုးအကားများ



[Ana17] Analog Devices. AD8346 Low Cost, Low Power, True RMS-to-DC Converter. 2017.
url: http://www.analog.com/en/products/analog-functions/rms-to-dc-converters/ad8436.html.

[Ana18] Analog Devices. ADE9153A Energy Metering IC with Autocalibration. 2018.
url: http://www.analog.com/en/products/analog-to-digital-converters/integrated-special-purpose-converters/energy-metering-ics/ADE9153A.html.

[LH18] Trystan Lea and Glyn Hudson. CT sensors - An Introduction. 2018.
url: https://learn.openenergymonitor.org/electricity-monitoring/ct-sensors/introduction.

[Tex15] Texas Instruments. LMx24, LMx24x, LMx24xx, LM2902, LM2902x, LM2902xx, LM2902xxx Quadruple Operational Amplifiers. 2015.
url: http://www.ti.com/lit/ds/symlink/lm324a.pdf.

[Tex17] Texas Instruments. LM358, LM258, LM158, LM2904 Dual Operational Amplifiers. 2017.
url: http://www.ti.com/lit/ds/symlink/lm258a.pdf.

[Ye13] Ting Ye. Precision Full-Wave Rectifier, Dual-Supply. 2013.
url: http://www.ti.com/lit/ug/tidu030/tidu030.pdf.

[YHD18] YHDC. SCT013-000-100A-50mA Split Core Current Transformer. 2018.
url: http://en.yhdc.com/product/SCT013-401.html.