- Diagram ng Raspberry Pi Smart Energy Meter Block
- Mga Kinakailangan na Bahagi
- Paghahanda ng Pi
- Pi Energy Meter Circuit Diagram
- Python Code para sa Pi Energy Meter
- Demo
Ang Mga Energy Monitor, sumasaklaw man sa buong apartment o naka-deploy upang subaybayan ang isang appliance lamang, ay nagbibigay ng isang paraan para masubaybayan mo ang iyong pagkonsumo at gumawa ng mga kinakailangang pagsasaayos. Habang sila ay lalong nagiging magagamit sa merkado, ang gumagawa sa akin ay nararamdaman pa rin na magiging isang mahusay na ideya na bumuo ng isang bersyon ng DIY na maaaring ipasadya upang matugunan ang mga tukoy na personal na kinakailangan. Tulad ng naturan, para sa tutorial ngayon, magtatayo kami ng isang monitor ng Raspberry Pi Power Cons konsum na may kakayahang makakuha ng pagkonsumo ng enerhiya at pag-upload sa Adafruit.io
Maaari mo ring suriin ang batay sa Arduino na IoT Energy Meter at ang Prepaid GSM Energy Meter na naitayo namin nang mas maaga.
Diagram ng Raspberry Pi Smart Energy Meter Block
Ang isang diagram ng bloke na nagpapakita kung paano gumagana ang system ay ipinapakita sa ibaba.
Upang piliin ang mga yunit ng sunud-sunod;
Kasalukuyang Sensing Unit: Ang kasalukuyang unit ng sensing ay binubuo ng SCT -013 kasalukuyang sensor na maaaring masukat hanggang sa 100A, depende sa bersyon na iyong binili. Binago ng sensor ang kasalukuyang dumadaan sa kawad kung saan ito ay nai-clamp sa isang maliit na kasalukuyang na pagkatapos ay pinakain sa ADC sa pamamagitan ng isang network ng mga divider ng boltahe.
Unit ng Sensing ng Boltahe: Habang hindi ko nakawang ipatong ang aking mga kamay sa isang module ng sensor ng boltahe, bubuo kami ng isang DIY isang sensor ng boltahe na walang pagbabago na sumusukat sa boltahe gamit ang prinsipyo ng mga divider ng boltahe. Ang sensor ng boltahe ng DIY ay nagsasangkot ng yugto ng divider ng boltahe kung saan ang mataas na boltahe ay binago sa isang halagang angkop para sa pag-input sa ADC.
Yunit sa Pagpoproseso: Ang yunit sa pagpoproseso ay naglalaman ng ADC at ang Raspberry pi. Kinukuha ng ADC ang analog signal at ipinapadala ito sa raspberry pi, na pagkatapos ay kinakalkula ang eksaktong dami ng lakas na natupok at ipinapadala ito sa isang itinalagang ulap ng aparato. Para sa hangarin ng tutorial na ito, gagamitin namin ang Adafruit.io bilang aming Device Cloud. Nagtayo din kami ng iba pa
Pagwawaksi: Bago tayo magsimula, mahalagang banggitin na ang proyektong ito ay nagsasangkot ng koneksyon sa isang supply ng AC na mapanganib, at maaaring nakamamatay kung hindi ligtas na mapangasiwaan. Tiyaking mayroon kang karanasan sa pagtatrabaho sa paligid ng AC bago ito subukan.
Handa na? Sumisid tayo.
Mga Kinakailangan na Bahagi
Ang mga sumusunod na sangkap ay kinakailangan upang buuin ang proyektong ito;
- Raspberry Pi 3 o 4 (ang proseso ay dapat na pareho para sa RPI2 na may isang WiFi Dongle)
- ADS1115 16bit I2C ADC
- YHDC SCT-013-000
- 2.5A 5V MicroUSB Power Adapter
- 2W 10K Resistor (1)
- 1 / 2W 10K Resistor (2)
- 33ohms Resistor (1)
- 2W 3.3k Resistor (1)
- IN4007 Diode (4)
- 3.6v Zener Diode (1)
- 10k Potensyomiter (o Preset) (1)
- 50v 1uf Capacitor
- 50v 10uf Capacitor (2)
- BreadBoard
- Jumper Wire
- Iba pang Mga Kagamitan para sa Paggamit ng Raspberry Pi.
Bukod sa mga bahagi ng hardware na nakalista sa itaas, nangangailangan din ang proyekto ng ilang mga dependency ng software at aklatan na mai-install namin sa pagpapatuloy namin.
Habang ang tutorial na ito ay gagana nang walang pagsasaalang-alang sa raspberry pi OS na ginamit, gagamitin ko ang Raspberry Pi buster OS na tumatakbo sa isang Pi 3 (dapat ding gumana sa isang Pi 4) at ipalagay kong pamilyar ka sa pag-set up ng Raspberry Pi kasama ang Raspbian Buster OS (halos pareho ang proseso tulad ng nakaraang mga bersyon), at alam mo kung paano SSH dito gamit ang isang terminal software tulad ng hyper. Kung mayroon kang mga isyu sa anuman sa mga ito, maraming tonelada ng Mga Tutorial sa Raspberry Pi sa website na ito na makakatulong
Paghahanda ng Pi
Bago namin simulan ang pag-kable ng mga bahagi at pag-coding, may ilang mga simpleng gawain na kailangan nating gawin sa raspberry pi upang matiyak na handa na kaming pumunta.
Hakbang 1: Paganahin ang Pi I2C
Sa core ng proyekto ngayon ay hindi lamang ang raspberry pi ngunit ang ADS1115 16bit I2C-based ADC. Pinapayagan kami ng ADC na ikonekta ang mga analog sensor sa Raspberry Pi dahil ang Pi mismo ay walang inbuilt na ADC. Tumatagal ito ng data sa pamamagitan ng sarili nitong ADC at ipasa ito sa raspberry pi sa pamamagitan ng I2C. Tulad ng naturan, kailangan naming paganahin ang komunikasyon ng I2C sa Pi upang maaari itong makipag-usap dito.
Ang Pi's I2C bus ay maaaring paganahin o hindi paganahin sa pamamagitan ng pahina ng config ng raspberry pi. Upang ilunsad ito, Mag-click sa Pi Icon sa desktop at piliin ang mga kagustuhan na susundan ng pagsasaayos ng Raspberry pi.
Dapat itong buksan ang pahina ng config. Suriin ang naka-on na pindutan ng radyo para sa I2C at mag-click sa OK upang i-save ito at i-reboot ang Pi upang maipatupad ang mga pagbabago.
Kung pinapatakbo mo ang Pi sa mode na walang ulo, ang pahina ng pagsasaayos ng Raspbian ay maaaring ma-access sa pamamagitan ng pagpapatakbo ng sudo raspi-config.
Hakbang 2: Pag-install ng ADS11xx library mula sa Adafruit
Ang pangalawang bagay na kailangan nating gawin ay i-install ang ADS11xx python library na naglalaman ng mga pagpapaandar at gawain na ginagawang madali para sa amin na magsulat ng isang script ng sawa upang makuha ang mga halaga mula sa ADC.
Sundin ang mga hakbang sa ibaba upang magawa ito.
- I-update ang iyong pi sa pamamagitan ng pagtakbo; sudo apt-get update na sinusundan ng sudo apt-get upgrade i -a-update nito ang pi na tinitiyak na walang mga isyu sa pagiging tugma para sa anumang bagong software na pinili mong i-install.
- Susunod, patakbuhin ang cd ~ utos upang matiyak na nasa direktoryo ka sa bahay.
- Susunod, i-install ang mga mahahalagang build-sa pamamagitan ng pagpapatakbo; sudo apt-get install build-essential python-dev python-smbus git
- Susunod, i-clone ang folder ng Adafruit git na naglalaman ng ADS library sa pamamagitan ng pagpapatakbo; git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Baguhin sa direktoryo ng cloned file at patakbuhin ang setup file gamit ang; cd Adafruit_Python_ADS1x1z sinundan ng sudo python setup.py install
Sa tapos na ito, dapat na kumpleto ang pag-install.
Maaari mong subukan ang pag-install ng library sa pamamagitan ng pagkonekta sa ADS1115 tulad ng ipinakita sa seksyon ng mga eskematiko sa ibaba at patakbuhin ang sample code na kasama ng silid-aklatan ng una, na binabago ang folder nito gamit ang; mga halimbawa ng cd at pagpapatakbo ng halimbawa ng paggamit; pinakasimpleng python.py
Hakbang 3: I-install ang Adafruit.IO Python Module
Tulad ng nabanggit sa panahon ng mga pagpapakilala, maglalathala kami ng mga pagbabasa mula sa boltahe at kasalukuyang mga sensor hanggang sa Adafruit IO Cloud kung saan maaari itong matingnan mula sa buong mundo o makakonekta sa IFTTT upang maisagawa ang anumang mga aksyon na nais mo.
Ang module ng Adafruit.IO python ay naglalaman ng mga subroutine at pagpapaandar na gagamitin namin, upang madaling mai-stream ang data sa cloud. Sundin ang mga hakbang sa ibaba upang mai-install ang module.
- Patakbuhin ang cd ~ upang bumalik sa direktoryo ng bahay.
- Susunod, patakbuhin ang utos; sudo pip3 i-install ang adafruit-io . Dapat itong mai-install ang module ng Adafruit IO python.
Hakbang 4: I-set up ang Iyong Adafruit.io Account
Upang magamit ang Adafruit IO ay tiyak na kailangan munang lumikha ng isang account at makakuha ng isang key ng AIO. Ang key na AIO kasama ang iyong username ay gagamitin ng iyong python script upang ma-access ang serbisyo ng cloud ng Adafruit IO. Upang lumikha ng isang account, bisitahin; https://io.adafruit.com/, mag-click sa magsimula nang walang bayad na pindutan at punan ang lahat ng kinakailangang mga parameter. Sa kumpletong Pag-sign up, dapat mong makita ang pindutang Tingnan ang AIO Key sa kanan ng iyong home page.
Mag-click dito upang makuha ang iyong AIO key.
Gamit ang susi na kinopya, handa na kaming pumunta. Gayunpaman, upang gawing mas madali ang proseso ng pagpapadala ng data sa serbisyong cloud, maaari mo ring likhain ang mga feed kung aling ipapadala ang data. (mas maraming impormasyon sa kung ano ang mga feed ng AIO ay matatagpuan dito). Dahil karaniwang magpapadala kami ng Pagkonsumo ng kuryente, lilikha kami ng isang feed para sa lakas. Upang lumikha ng isang feed, mag-click sa "feed" sa tuktok ng pahina ng AIO at mag-click sa magdagdag ng bagong feed.
Bigyan ito ng anumang nais mong pangalan ngunit upang mapanatili ang mga bagay na simple, tatawagin ko itong pagkonsumo ng enerhiya. Maaari ka ring magpasya na lumikha ng mga feed para sa boltahe at kasalukuyang at iakma ang code upang mai-publish ang data sa kanila.
Sa lahat ng ito sa lugar, handa na kami ngayon upang simulan ang pagbuo ng proyekto.
Pi Energy Meter Circuit Diagram
Ang mga iskematika para sa proyekto ng Raspberry Pi Energy Monitor ay medyo kumplikado at nagsasangkot ito ng pagkonekta sa isang boltahe ng AC na nabanggit nang mas maaga, mabait na siguraduhin mong gawin ang lahat ng mga pag-iingat na kinakailangan upang maiwasan ang pagkabigla sa kuryente. Kung hindi ka pamilyar sa ligtas na paghawak ng mga boltahe ng AC, hayaan ang kasiyahan ng pagpapatupad nito sa isang breadboard, nang hindi pinapagana ito, maging kasiya-siya.
Ang mga eskematiko ay nagsasangkot ng pagkonekta ng boltahe at kasalukuyang mga yunit ng sensor sa ADC na pagkatapos ay nagpapadala ng data mula sa mga sensor sa Raspberry Pi. Upang gawing mas madaling sundin ang mga koneksyon, ang mga eskematiko para sa bawat yunit ay ipinakita nang mag-isa.
Kasalukuyang Sensor Schematic
Ikonekta ang mga bahagi para sa kasalukuyang sensor tulad ng ipinapakita sa mga iskema sa ibaba.
Ang kasalukuyang transpormer na ginamit sa proyektong ito ay ipinapakita sa ibaba, tulad ng nakikita mong mayroon kaming tatlong mga wire mula dito, katulad ng ground, Cout at 3.3V
Mga Schematic ng Sensor ng Boltahe
Ikonekta ang mga bahagi para sa sensor ng boltahe tulad ng ipinakita sa mga iskema sa ibaba.
Yunit ng pagpoproseso ng Skema
Ikonekta ang lahat kasama ang ADC (ADS1115) na konektado sa raspberry pi at ang output ng kasalukuyang at boltahe sensor na konektado sa pin A0 at A1 ng ADS1115 ayon sa pagkakabanggit.
Siguraduhin na ang mga pin ng GND ng parehong mga yunit ng sensing ay konektado sa GND ng ADC o ng raspberry pi.
Upang gawing medyo hindi gaanong umuuga ang mga bagay, ipinatupad ko ang boltahe at kasalukuyang mga sensor sa isang Protoboard. Gayundin, hindi inirerekumenda na bumuo ng isang AC mains circuit sa breadboard. Kung gagawin mo ang pareho, ang iyong panghuling pag-set up ay maaaring magmukhang ang imahe sa ibaba;
Sa mga koneksyon na kumpleto, handa na kami ngayon upang isulat ang code para sa proyekto.
Python Code para sa Pi Energy Meter
Tulad ng dati sa aming mga proyekto sa raspberry pi, bubuo kami ng code para sa proyekto na gumagamit ng sawa. Mag-click sa icon ng raspberry pi sa desktop, piliin ang programa at ilunsad ang alinmang bersyon ng sawa na nais mong gamitin. Gumagamit ako ng Python 3 at ang ilan sa mga pagpapaandar sa python 3 ay maaaring hindi gumana para sa python 2.7. Kaya maaaring may pangangailangan na gumawa ng ilang makabuluhang pagbabago sa code kung nais mong gumamit ng sawa 2.7. Gagawin ko ang isang pagkasira ng code sa mga maliliit na snippet at ibahagi sa iyo ang kumpletong code sa dulo.
Handa na? Malamig.
Ang algorithm sa likod ng code ay simple. Ang aming script ng python ay nagtatanong sa ADS1115 (higit sa I2C) para sa boltahe at kasalukuyang mga pagbasa. Ang natanggap na analog na halaga ay natanggap, na-sample at ang root na nangangahulugang parisukat na halaga ng boltahe at kasalukuyang nakuha. Ang lakas sa kilowatts ay kinakalkula at ipinadala sa feed ng Adafruit IO pagkatapos ng mga tiyak na agwat.
Sinisimula namin ang script sa pamamagitan ng pagsasama ng lahat ng mga aklatan na gagamitin namin. Kasama rito ang mga built-in na aklatan tulad ng library ng oras at matematika at iba pang mga silid-aklatan na na-install natin nang mas maaga.
mag-import ng oras sa pag- import ng Adafruit_ADS1x15 mula sa Adafruit_IO import * import math
Susunod, gumawa kami ng isang halimbawa ng ADS1115 library na gagamitin upang matugunan ang pisikal na ADC na pasulong.
# Lumikha ng isang ADS1115 ADC (16-bit) na halimbawa.. adc1 = Adafruit_ADS1x15.ADS1115 ()
Susunod, ibigay ang iyong adafruit IO username at ang "AIO" key.
username = 'ipasok ang iyong username sa pagitan ng mga quote na ito' AIO_KEY = 'iyong aio key' aio = Client (username, AIO_KEY)
Mangyaring panatilihing ligtas ang susi. Maaari itong magamit upang ma-access ang iyong adafruit io account nang walang iyong pahintulot.
Susunod, lumilikha kami ng ilang mga variable tulad ng nakuha para sa ADC, ang bilang ng mga sample na gusto namin at itinakda ang pag-ikot na tiyak na hindi kritikal.
MAKIN = 1 # tingnan ang dokumentasyon ng ads1015 / 1115 para sa mga potensyal na halaga. mga sample = 200 # bilang ng mga sample na kinuha mula sa mga ads1115 na lugar = int (2) # na itinakda ang pag-ikot
Susunod, Lumilikha kami ng isang habang loop upang subaybayan ang kasalukuyang at boltahe at ipadala ang data sa Adafruit io sa mga agwat. Ang habang loop ay nagsisimula sa pamamagitan ng pagtatakda ng lahat ng mga variable sa zero.
habang Totoo: # reset variable variable = int (0) datai = datav = maxIValue = 0 #max kasalukuyang halaga sa loob ng sample maxVValue = 0 #max boltahe na halaga sa loob ng sample na IrmsA0 = 0 #root mean square current VrmsA1 = 0 # root mean square voltage ampsA0 = 0 # kasalukuyang kasalukuyang voltsA1 = 0 #voltage kilowatts = float (0)
Dahil nagtatrabaho kami sa mga AC circuit ang output ng SCT-013 at ang sensor ng boltahe ay magiging isang sinewave, kaya Upang makalkula ang kasalukuyang at boltahe mula sa sine wave, kakailanganin nating makuha ang mga pinakamataas na halaga. Upang makuha ang mga halagang rurok, susubukan namin ang parehong boltahe at kasalukuyang (200 na mga sample), at hanapin ang pinakamataas na halaga (rurok na mga halaga).
para sa bilang sa saklaw (mga sample): datai.insert (count, (abs (adc1.read_adc (0, gain = GAIN)))) datav.insert (count, (abs (adc1.read_adc (1, gain = GAIN)))) # tingnan kung mayroon kang isang bagong pag- print ng maxValue (datai) kung datai> maxIValue: maxIValue = datai kung datav> maxVValue: maxVValue = datav
Susunod, pinapasadya namin ang mga halaga sa pamamagitan ng pag-convert mula sa mga halaga ng ADC sa aktwal na halaga pagkatapos na pagkatapos ay ginagamit namin ang equation ng Root Mean Square upang hanapin ang boltahe at kasalukuyang RMS.
#kalkula ang kasalukuyang gamit ang sample na data # ang ginamit na sct-013 ay na-calibrate para sa 1000mV output @ 30A. IrmsA0 = float (maxIValue / float (2047) * 30) IrmsA0 = bilog (IrmsA0, mga lugar) ampsA0 = IrmsA0 / math.sqrt (2) ampsA0 = bilog (ampsA0, mga lugar) # Kalkulahin ang boltahe VrmsA1 = float (maxVValue * 1100 / float (2047)) VrmsA1 = bilog (VrmsA1, mga lugar) voltsA1 = VrmsA1 / math.sqrt (2) voltsA1 = bilog (voltsA1, mga lugar) i- print ('Boltahe: {0}'. format (voltsA1)) i- print ('Kasalukuyan: Format na {0} '. (AmpsA0))
Sa tapos na ito, ang kapangyarihan ay kinakalkula at ang data ay na-publish sa adafruit.io
#calculate power power = bilog (ampsA0 * voltsA1, mga lugar) i- print ('Power: {0}'. format (power)) #post data sa adafruit.io EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' EnergyUsage ', lakas)
Para sa mga libreng account, hinihiling ng adafruit na mayroong ilang oras na pagkaantala sa pagitan ng mga kahilingan o pag-upload ng data.
# Maghintay bago ulitin ang oras ng loop. Pagtulog (0)
Ang kumpletong code para sa proyekto ay magagamit sa ilalim ng pahinang ito
Demo
Sa kumpletong code, i-save ito at pindutin ang run button sa python IDE. Bago ito, tiyaking nakakonekta ang Pi sa internet sa pamamagitan ng WiFi o LAN, at tama ang iyong aio key at username. Makalipas ang ilang sandali, dapat mong simulang makita ang data ng enerhiya (lakas) na ipinapakita sa feed sa Adafruit.io. Ang setup ng aking hardware sa panahon ng demo ay ganito
Upang madagdagan ang mga bagay, maaari kang lumikha ng isang dashboard sa adafruit.io at magdagdag ng isang bahagi ng grap upang makakakuha ka ng isang graphic na pagtingin sa data tulad ng ipinakita sa imahe sa ibaba.
Iyon lang mga tao, maaari mo na ngayong subaybayan ang iyong pagkonsumo ng enerhiya mula sa kahit saan sa mundo. Mahalagang tandaan na tiyak na maraming mas mahusay na pag-aayos at mga pagkakalibrate na gagawin upang ibahin ito sa isang talagang tumpak na solusyon, ngunit naniniwala akong bibigyan ka nito ng halos lahat ng kailangan mo upang magpatuloy.
Huwag mag-atubiling shoot ako ng mga katanungan tungkol sa proyekto sa pamamagitan ng seksyon ng komento. Susubukan kong sagutin hangga't maaari. Hanggang sa susunod.