- Aveņu Pi viedā enerģijas skaitītāja blokshēma
- Nepieciešamās sastāvdaļas
- Pi sagatavošana
- Pi enerģijas skaitītāja shēmas diagramma
- Pi enerģijas skaitītāja Python kods
- Demonstrācija
Enerģijas monitori, neatkarīgi no tā, vai tie aptver visu dzīvokli, vai izvietoti tikai vienas ierīces uzraudzībai, nodrošina veidu, kā sekot līdzi patēriņam un veikt nepieciešamās korekcijas. Kaut arī tie arvien vairāk kļūst pieejami tirgū, ražotājs manī joprojām uzskata, ka būs lieliska ideja izveidot DIY versiju, kuru varētu pielāgot, lai atbilstu īpašām personiskajām prasībām. Šodienas apmācībai mēs izveidosim Raspberry Pi enerģijas patēriņa monitoru, kas spēj iegūt enerģijas patēriņu un augšupielādēt vietnē Adafruit.io.
Varat arī apskatīt Arduino bāzēto IoT enerģijas skaitītāju un priekšapmaksas GSM enerģijas skaitītāju, ko esam izveidojuši agrāk.
Aveņu Pi viedā enerģijas skaitītāja blokshēma
Bloka diagramma, kas parāda sistēmas darbību, ir parādīta zemāk.
Izvēlēties vienības vienu pēc otras;
Strāvas sensora bloks: strāvas sensoru veido SCT -013 strāvas sensors, kas var izmērīt līdz 100A atkarībā no pērkamās versijas. Sensors pārveido strāvu, kas iet caur vadu, uz kura tas ir piestiprināts, mazā strāvā, kas pēc tam tiek ievadīta ADC caur sprieguma dalītāju tīklu.
Sprieguma sensora bloks: Kamēr es nevarēju uzlikt rokas uz sprieguma sensora moduļa, mēs izveidosim DIY bez transformatora sprieguma sensoru, kas mēra spriegumu, izmantojot sprieguma dalītāju principu. DIY sprieguma sensors ietver sprieguma dalītāja posmu, kurā augstspriegums tiek pārveidots par vērtību, kas piemērota ievadīšanai ADC.
Apstrādes vienība: Apstrādes vienība sastāv no ADC un Raspberry pi. ADC paņem analogo signālu un nosūta to aveņu pī, kurš pēc tam aprēķina precīzu patērētās enerģijas daudzumu un nosūta to norādītajam ierīces mākonim. Šajā apmācībā mēs izmantosim vietni Adafruit.io kā savu ierīces mākoni. Mēs esam uzbūvējuši arī citus
Atruna: pirms mēs sākam, ir svarīgi pieminēt, ka šis projekts ir saistīts ar pieslēgšanos maiņstrāvas padevei, kas ir bīstama un var būt nāvējoša, ja ar to nerīkojas droši. Pirms mēģināt pārliecināties, ka jums ir pieredze darbā ar maiņstrāvu.
Gatavs? Ienirsim iekšā.
Nepieciešamās sastāvdaļas
Lai izveidotu šo projektu, ir nepieciešami šādi komponenti;
- Aveņu Pi 3 vai 4 (procesam jābūt vienādam RPI2 ar WiFi Dongle)
- ADS1115 16bit I2C ADC
- YHDC SCT-013-000
- 2.5A 5V MicroUSB strāvas adapteris
- 2W 10K rezistors (1)
- 1 / 2W 10K rezistors (2)
- 33ohm rezistors (1)
- 2W 3,3 k rezistors (1)
- IN4007 diode (4)
- 3.6v Zenera diode (1)
- 10 k potenciometrs (vai iepriekš iestatīts) (1)
- 50v 1uf kondensators
- 50v 10uf kondensators (2)
- Maizes dēlis
- Džempera vads
- Citi piederumi aveņu Pi lietošanai.
Papildus iepriekš uzskaitītajiem aparatūras komponentiem projektam ir nepieciešamas arī dažas programmatūras atkarības un bibliotēkas, kuras mēs instalēsim turpinot.
Lai gan šī apmācība darbosies neatkarīgi no izmantotās aveņu pi OS, es izmantošu Raspberry Pi buster OS, kas darbojas ar Pi 3 (jādarbojas arī ar Pi 4), un pieņemu, ka jūs esat iepazinies ar Raspberry Pi iestatīšanu ar Raspbian Buster OS (gandrīz tāds pats process kā iepriekšējās versijās), un jūs zināt, kā tajā SSH izmantot, izmantojot termināļa programmatūru, piemēram, hiper. Ja jums ir kādas problēmas ar šo, šajā vietnē var atrast daudz Raspberry Pi apmācību
Pi sagatavošana
Pirms sākam instalēt komponentus un kodēt, ir daži vienkārši uzdevumi, kas mums jāveic aveņu pi, lai pārliecinātos, ka esam gatavi iet.
1. solis: Pi I2C iespējošana
Šodienas projekta pamatā ir ne tikai aveņu pi, bet arī ADS1115 16bit I2C bāzes ADC. ADC ļauj mums savienot analogos sensorus ar Raspberry Pi, jo pašam Pi nav iebūvēta ADC. Tas uzņem datus caur savu ADC un pārsūta tos aveņu pi caur I2C. Kā tāds mums ir jāiespējo I2C komunikācija Pi, lai tā varētu ar to sazināties.
Pi I2C kopni var iespējot vai atspējot, izmantojot aveņu pi konfigurācijas lapu. Lai to palaistu, darbvirsmā noklikšķiniet uz Pi ikonas un atlasiet preferences, kam seko Raspberry pi konfigurācija.
Tam vajadzētu atvērt konfigurācijas lapu. Pārbaudiet I2C iespējoto radio pogu un noklikšķiniet uz Labi, lai to saglabātu, un restartējiet Pi, lai veiktu izmaiņas.
Ja jūs izmantojat Pi režīmā bez galvas, Raspbian konfigurācijas lapai var piekļūt, palaižot sudo raspi-config.
2. darbība: ADS11xx bibliotēkas instalēšana no Adafruit
Otra lieta, kas mums jādara, ir jāinstalē ADS11xx pitona bibliotēka, kas satur funkcijas un kārtību, kas mums atvieglo pitona skripta rakstīšanu, lai iegūtu vērtības no ADC.
Lai to izdarītu, veiciet tālāk norādītās darbības.
- Atjauniniet savu pi, palaižot; sudo apt-get update, kam seko sudo apt-get upgrade, tas atjauninās pi, nodrošinot, ka nevienai jaunai programmatūrai, kuru izvēlaties instalēt, nav saderības problēmu.
- Pēc tam palaidiet komandu cd ~, lai pārliecinātos, ka atrodaties mājas direktorijā.
- Pēc tam instalējiet būtiskāko versiju, palaižot; sudo apt-get install build-essential python-dev python-smbus git
- Pēc tam, palaižot, klonējiet Adafruit git mapi, kurā ir ADS bibliotēka; git klons https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Pārslēdzieties uz klonētā faila direktoriju un palaidiet iestatīšanas failu, izmantojot; cd Adafruit_Python_ADS1x1z, kam seko sudo python setup.py instalēšana.
Kad tas izdarīts, instalēšanai tagad jābūt pilnīgai.
Varat pārbaudīt bibliotēkas instalēšanu, savienojot ADS1115, kā parādīts zemāk esošajā shēmas sadaļā, un vispirms palaidiet bibliotēkas komplektācijā iekļauto koda paraugu, vispirms mainot tās mapē, izmantojot; cd piemēri un piemēra palaišana, izmantojot; python simpletest.py
3. solis: instalējiet Adafruit.IO Python moduli
Kā minēts ievadu laikā, mēs publicēsim rādījumus no sprieguma un strāvas sensoriem līdz Adafruit IO Cloud, no kura to var apskatīt no visas pasaules vai savienot ar IFTTT, lai veiktu visas vēlamās darbības.
Adafruit.IO pitona modulis satur apakšprogrammas un funkcijas, kuras mēs izmantosim, lai viegli straumētu datus mākonī. Veiciet tālāk norādītās darbības, lai instalētu moduli.
- Palaidiet cd ~, lai atgrieztos mājas direktorijā.
- Pēc tam palaidiet komandu; sudo pip3 instalējiet adafruit-io . Tam vajadzētu instalēt Adafruit IO python moduli.
4. darbība: iestatiet savu Adafruit.io kontu
Lai izmantotu Adafruit IO, noteikti vispirms būs jāizveido konts un jāiegūst AIO atslēga. Šo AIO atslēgu kopā ar jūsu lietotājvārdu python skripts izmantos, lai piekļūtu Adafruit IO mākoņpakalpojumam. Lai izveidotu kontu, apmeklējiet vietni; https://io.adafruit.com/, noklikšķiniet uz pogas Sākt bez maksas un aizpildiet visus nepieciešamos parametrus. Kad reģistrēšanās ir pabeigta, jūsu mājas lapas labajā pusē vajadzētu redzēt pogu Skatīt AIO atslēgu.
Noklikšķiniet uz tā, lai iegūtu AIO atslēgu.
Kad nokopēta atslēga, mēs esam gatavi doties. Tomēr, lai atvieglotu datu nosūtīšanas procesu mākoņa pakalpojumam, varat izveidot arī plūsmas, uz kurām dati tiks nosūtīti. (Plašāka informācija par AIO plūsmām ir atrodama šeit). Tā kā mēs galvenokārt sūtīsim enerģijas patēriņu, mēs izveidosim barošanas avotu. Lai izveidotu plūsmu, AIO lapas augšdaļā noklikšķiniet uz “plūsmas” un noklikšķiniet uz Pievienot jaunu plūsmu.
Piešķiriet to kādam vēlaties, bet, lai viss būtu vienkārši, es to saukšu par enerģijas patēriņu. Varat arī izlemt izveidot sprieguma un strāvas plūsmas un pielāgot kodu, lai tajos publicētu datus.
Tā kā tas viss ir ieviests, mēs tagad esam gatavi sākt būvēt projektu.
Pi enerģijas skaitītāja shēmas diagramma
Raspberry Pi Energy Monitor projekta shēmas ir samērā sarežģītas, un tas ietver pieslēgšanos maiņstrāvas spriegumam, kā minēts iepriekš, lūdzu, pārliecinieties, ka veicat visus nepieciešamos piesardzības pasākumus, lai izvairītos no elektrošoka. Ja jums nav zināms, kā droši rīkoties ar maiņstrāvas spriegumu, ļaujiet priekam, ka tas tiek ieviests uz maizes dēļa, to nedarbinot.
Shēmas ietver sprieguma un strāvas sensoru savienošanu ar ADC, kas pēc tam datus no sensoriem nosūta Raspberry Pi. Lai savienojumus būtu vieglāk ievērot, katras vienības shēmas tiek attēlotas atsevišķi.
Pašreizējā sensora shēma
Pievienojiet strāvas sensora komponentus, kā parādīts zemāk esošajās shēmās.
Šajā projektā izmantotais strāvas transformators ir parādīts zemāk, kā redzat, ka mums no tā ir trīs vadi, proti, zemējums, Cout un 3.3V
Sprieguma sensoru shēmas
Pievienojiet sprieguma sensora komponentus, kā parādīts zemāk esošajā shēmā.
Apstrādes vienības shēmas
Savienojiet visu kopā ar ADC (ADS1115), kas savienots ar aveņu pi, un strāvas un sprieguma sensoru izvadi, kas savienoti attiecīgi ar ADS1115 tapām A0 un A1.
Pārliecinieties, ka abu sensoru GND tapas ir savienotas ar ADC vai aveņu pi GND.
Lai padarītu lietas mazliet mazāk nestabilas, es ieviesu sprieguma un strāvas sensorus uz Protoboard. Tāpat uz maizes dēļa nav ieteicams veidot maiņstrāvas ķēdi. Ja jūs darāt to pašu, jūsu galīgā iestatīšana var izskatīties kā zemāk redzamais attēls;
Kad savienojumi ir pabeigti, mēs tagad esam gatavi rakstīt projekta kodu.
Pi enerģijas skaitītāja Python kods
Kā parasti ar mūsu aveņu pi projektiem, mēs izstrādāsim projekta kodu, izmantojot pitonu. Darbvirsmā noklikšķiniet uz aveņu pi ikonas, atlasiet programmēšanu un palaidiet jebkuru pitona versiju, kuru vēlaties izmantot. Es izmantošu Python 3, un dažas no Python 3 funkcijām var nedarboties Python 2.7. Tāpēc, ja vēlaties izmantot python 2.7, iespējams, būs jāveic dažas būtiskas izmaiņas kodā. Es sadalīšu kodu mazos fragmentos un beigās koplietošu kodu ar jums.
Gatavs? Forši.
Koda pamatā esošais algoritms ir vienkāršs. Mūsu pitona skripts vaicā sprieguma un strāvas rādījumus ADS1115 (pār I2C). Saņemtā analogā vērtība tiek saņemta, ņemta paraugs un tiek iegūta sprieguma un strāvas vidējā kvadrāta vērtība. Jaudu kilovatos aprēķina un pēc noteiktiem intervāliem nosūta uz Adafruit IO padevi.
Mēs sākam skriptu, iekļaujot visas bibliotēkas, kuras izmantosim. Tas ietver iebūvētās bibliotēkas, piemēram, laika un matemātikas bibliotēku, kā arī citas bibliotēkas, kuras mēs instalējām agrāk.
importēšanas laiks importēt Adafruit_ADS1x15 no Adafruit_IO importēt * importēt matemātiku
Pēc tam mēs izveidojam ADS1115 bibliotēkas gadījumu, kas tiks izmantota, lai risinātu fizisko ADC.
# Izveidojiet ADS1115 ADC (16 bitu) gadījumu.. adc1 = Adafruit_ADS1x15.ADS1115 ()
Pēc tam norādiet savu adafruit IO lietotājvārdu un taustiņu “AIO”.
username = 'ievadiet savu lietotājvārdu starp šīm pēdiņām' AIO_KEY = 'jūsu aio atslēga' aio = Client (lietotājvārds, AIO_KEY)
Lūdzu, glabājiet atslēgu drošā vietā. To var izmantot, lai piekļūtu jūsu Adafruit io kontam bez jūsu atļaujas.
Pēc tam mēs izveidojam dažus mainīgos, piemēram, ADC pieaugumu, vēlamo paraugu skaitu un iestatām noapaļošanu, kas noteikti nav kritiska.
GAIN = 1 # potenciālās vērtības skatiet ads1015 / 1115 dokumentācijā. paraugi = 200 # paraugu skaits, kas ņemti no reklāmām1115 vietas = int (2) # kopas noapaļošana
Pēc tam mēs izveidojam brīdi, lai uzraudzītu strāvu un spriegumu, un ar pārtraukumiem nosūta datus Adafruit io. Cilpa while sākas, iestatot visus mainīgos uz nulli.
kamēr True: # atiestatīt mainīgos = int (0) datai = datav = maxIValue = 0 #max pašreizējā vērtība paraugā maxVValue = 0 #max sprieguma vērtība izlasē IrmsA0 = 0 # saknes vidējā kvadrāta strāva VrmsA1 = 0 # vidējais kvadrāta spriegums ampēri A0 = 0 # strāvas pīķa volti A1 = 0 # sprieguma kilovati = pludiņš (0)
Tā kā mēs strādājam ar maiņstrāvas ķēdēm, SCT-013 izeja un sprieguma sensors būs sinewave, tāpēc, lai aprēķinātu strāvu un spriegumu no sinusa viļņa, mums būs jāiegūst maksimālās vērtības. Lai iegūtu maksimālās vērtības, mēs ņemsim gan sprieguma, gan strāvas paraugu (200 paraugi) un atradīsim visaugstākās vērtības (maksimālās vērtības).
skaitam diapazonā (paraugi): datai.insert (count, (abs (adc1.read_adc (0, gain = GAIN)))) datav.insert (count, (abs (adc1.read_adc (1, gain = GAIN)))) # pārbaudiet, vai jums ir jauns maxValue print (datai), ja datai> maxIValue: maxIValue = datai, ja datav> maxVValue: maxVValue = datav
Pēc tam mēs standartizējam vērtības, pārveidojot no ADC vērtībām uz faktisko vērtību, pēc kuras pēc tam mēs izmantojam Root Mean Square vienādojumu, lai atrastu RMS spriegumu un strāvu.
# aprēķināt strāvu, izmantojot atlasītos datus # izmantotais sct-013 ir kalibrēts 1000mV izejai @ 30A. IrmsA0 = pludiņš (maxIValue / float (2047) * 30) IrmsA0 = apaļa (IrmsA0, vietas) ampēriA0 = IrmsA0 / math.sqrt (2) ampēriA0 = apaļa (ampēriA0, vietas) # Aprēķiniet spriegumu VrmsA1 = pludiņš (maxVValue * 1100 / pludiņš (2047)) VrmsA1 = apaļa (VrmsA1, vietas) voltiA1 = VrmsA1 / math.sqrt (2) voltiA1 = apaļa (voltiA1, vietas) druka ('Spriegums: {0}'. formāts (voltsA1)) izdruka ('Pašreizējā: {0} '. Formāts (ampēriA0))
Kad tas izdarīts, tiek aprēķināta jauda un dati tiek publicēti vietnē adafruit.io
#calculate power power = apaļa (ampēriA0 * voltiA1, vietas) druka ('Jauda: {0}'. formāts (jauda)) #post dati vietnei adafruit.io EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' EnergyUsage ', jauda)
Bezmaksas kontiem Adafruit pieprasa, lai starp pieprasījumiem vai datu augšupielādi būtu noteikta laika aizkave.
# Pagaidiet, pirms atkārtojat cikla laiku. Gulēt (0)
Pilns projekta kods ir pieejams šīs lapas apakšdaļā
Demonstrācija
Kad kods ir pabeigts, saglabājiet to un nospiediet palaišanas pogu pitona IDE. Pirms tam pārliecinieties, vai Pi ir savienots ar internetu, izmantojot WiFi vai LAN, un jūsu aio atslēga un lietotājvārds ir pareizi. Pēc kāda laika jums vajadzētu sākt redzēt enerģijas datus (jaudu), kas tiek parādīti Adafruit.io plūsmā. Mana aparatūras iestatīšana demonstrācijas laikā bija šāda
Lai turpinātu lietas tālāk, vietnē adafruit.io varat izveidot informācijas paneli un pievienot diagrammas komponentu, lai jūs varētu iegūt datu grafisku skatu, kā parādīts zemāk esošajā attēlā.
Tas viss, puiši, tagad jūs varat kontrolēt enerģijas patēriņu no jebkuras vietas pasaulē. Ir svarīgi atzīmēt, ka noteikti ir jāveic vēl daudz precīzākas noregulēšanas un kalibrēšanas, lai to pārveidotu par patiešām precīzu risinājumu, taču es uzskatu, ka tas sniedz gandrīz visu nepieciešamo, lai turpinātu.
Jūtieties brīvi uzdot man jautājumus par projektu, izmantojot komentāru sadaļu. Es centīšos atbildēt pēc iespējas vairāk. Līdz nākamajai reizei.