- „Raspberry Pi“ išmaniosios energijos skaitiklio blokinė schema
- Reikalingi komponentai
- Ruošiant Pi
- Pi energijos skaitiklio grandinės schema
- „Pi“ energijos skaitiklio „Python“ kodas
- Demonstracija
Energijos monitoriai, aprėpiantys visą butą arba pritaikyti stebėti tik vieną prietaisą, suteikia jums galimybę stebėti savo vartojimą ir atlikti būtinus pakeitimus. Nors jie vis labiau tampa prieinami rinkoje, gamintojas manyje vis tiek mano, kad bus puiki idėja sukurti „pasidaryk pats“ versiją, kurią būtų galima pritaikyti atsižvelgiant į konkrečius asmeninius reikalavimus. Šiandienos pamokai sukursime „ Raspberry Pi“ energijos vartojimo monitorių, galintį suvartoti energiją ir įkelti į „Adafruit.io“.
Taip pat galite patikrinti „Arduino“ pagrįstą „IoT“ energijos skaitiklį ir iš anksto sukurtą išankstinio mokėjimo „GSM“ skaitiklį.
„Raspberry Pi“ išmaniosios energijos skaitiklio blokinė schema
Blokinė schema, rodanti sistemos veikimą, parodyta žemiau.
APasirinkti vienetus vienas po kito;
Srovės jutiklis: srovės jutiklį sudaro SCT -013 srovės jutiklis, galintis išmatuoti iki 100 A, atsižvelgiant į perkamą versiją. Jutiklis transformuoja srovę, einančią per laidą, ant kurio jis yra pritvirtintas, į mažą srovę, kuri tada įtampos daliklių tinklu tiekiama į ADC.
Įtampos jutiklis: Nors aš negalėjau uždėti rankos ant įtampos jutiklio modulio, mes sukursime be transformatoriaus įtampos jutiklį, kuris matuoja įtampą pagal įtampos daliklių principą. Pasidaryk pats įtampos jutiklis apima įtampos daliklio etapą, kai aukšta įtampa transformuojama į vertę, tinkamą įėjimui į ADC.
Apdorojimo blokas: Apdorojimo bloką sudaro ADC ir „Raspberry pi“. ADC paima analoginį signalą ir siunčia jį į aviečių pi, kuris paskaičiuoja tikslų sunaudojamos energijos kiekį ir siunčia jį į nurodytą įrenginio debesį. Šioje pamokoje mes naudosime „ Adafruit.io“ kaip savo įrenginio debesį. Mes taip pat pastatėme kitus
Atsakomybės apribojimas: Prieš pradedant, svarbu paminėti, kad šis projektas apima prisijungimą prie kintamosios srovės maitinimo šaltinio, kuris yra pavojingas ir gali būti mirtinas, jei nebus elgiamasi saugiai. Prieš bandydami įsitikinkite, kad turite patirties dirbdami su kintama srove.
Paruošta? Pasinerkime.
Reikalingi komponentai
Norint sukurti šį projektą, reikalingi šie komponentai;
- „Raspberry Pi 3“ arba „4“ (RPI2 su „WiFi Dongle“ procesas turėtų būti toks pats)
- ADS1115 16bit I2C ADC
- YHDC SCT-013-000
- 2,5 A 5 V „MicroUSB“ maitinimo adapteris
- 2W 10K rezistorius (1)
- 1 / 2W 10K rezistorius (2)
- 33 omų rezistorius (1)
- 2W 3,3k rezistorius (1)
- IN4007 diodas (4)
- 3.6v „Zener“ diodas (1)
- 10 k potenciometras (arba iš anksto nustatytas) (1)
- 50v 1uf kondensatorius
- 50v 10uf kondensatorius (2)
- Bandomoji Lenta
- Džemperio viela
- Kiti „Raspberry Pi“ priedai.
Be pirmiau išvardytų aparatūros komponentų, projektui taip pat reikalingos tam tikros programinės įrangos priklausomybės ir bibliotekos, kurias įdiegsime toliau.
Nors ši pamoka veiks nepriklausomai nuo naudojamos aviečių pi OS, aš naudosiu „Raspberry Pi buster“ OS, veikiančią „Pi 3“ (taip pat turėtų veikti su „Pi 4“), ir manysiu, kad esate susipažinę su „Raspberry Pi“ nustatymu su „Raspbian Buster“ OS (beveik tas pats procesas, kaip ir ankstesnėse versijose), ir jūs žinote, kaip į jį SSH naudoti terminalo programinę įrangą, pvz., „Hyper“. Jei turite problemų dėl bet kurio iš šių dalykų, šioje svetainėje yra daugybė „Raspberry Pi“ vadovėlių, kurie gali padėti
Ruošiant Pi
Prieš pradėdami prijungti komponentus ir koduoti, turime keletą paprastų užduočių, kurias turime atlikti su aviečių pi, kad būtume pasirengę eiti.
1 veiksmas: įgalinkite „Pi I2C“
Šiandienos projekto esmė yra ne tik aviečių pi, bet ir ADS1115 16bit I2C pagrindu sukurta ADC. ADC leidžia mums prijungti analoginius jutiklius prie „Raspberry Pi“, nes pats „Pi“ neturi įmontuoto ADC. Jis paima duomenis per savo ADC ir per I2C persiunčia juos į aviečių pi. Taigi mes turime įgalinti I2C ryšį Pi, kad jis galėtų su juo bendrauti.
„Pi“ I2C magistralę galima įjungti arba išjungti per „aviečių pi“ konfigūracijos puslapį. Norėdami jį paleisti, spustelėkite darbalaukio piktogramą Pi ir pasirinkite nuostatas, o po to - „Raspberry pi“ konfigūraciją.
Tai turėtų atidaryti konfigūracijos puslapį. Patikrinkite įjungtą I2C radijo mygtuką ir spustelėkite Gerai, kad jį išsaugotumėte, ir perkraukite „Pi“, kad atliktumėte pakeitimus.
Jei „Pi“ naudojate belaidžiu režimu, „Raspbian“ konfigūracijos puslapį galite pasiekti paleidę sudo raspi-config.
2 žingsnis: ADS11xx bibliotekos diegimas iš „Adafruit“
Antras dalykas, kurį turime padaryti, yra įdiegti „ADS11xx python“ biblioteką, kurioje yra funkcijos ir įprastos priemonės, leidžiančios lengvai parašyti pitono scenarijų, kad gautume reikšmes iš ADC.
Norėdami tai padaryti, atlikite toliau nurodytus veiksmus.
- Atnaujinkite savo pi paleisdami; sudo apt-get update, po to sudo apt-get upgrade, tai atnaujins pi, užtikrinant, kad nėra jokios naujos įdiegtos programinės įrangos suderinamumo problemų.
- Tada paleiskite komandą cd ~, kad įsitikintumėte, jog esate namų kataloge.
- Tada paleisdami įdiekite pagrindinius komponentus; sudo apt-get install build-essential python-dev python-smbus git
- Tada paleisdami klonuokite „Adafruit git“ aplanką, kuriame yra ADS biblioteka; „git“ klonas https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Pereikite į klonuoto failo katalogą ir paleiskite sąrankos failą naudodami; cd Adafruit_Python_ADS1x1z, po to sudo python setup.py diegimas.
Tai atlikus, diegimas turėtų būti baigtas.
Galite išbandyti bibliotekos diegimą prijungdami ADS1115, kaip parodyta toliau pateiktame schemų skyriuje, ir pirmiausia paleiskite su biblioteka gautą kodo pavyzdį, naudodami; CD pavyzdžiai ir pavyzdžio paleidimas naudojant; python simpletest.py
3 žingsnis: įdiekite „Adafruit.IO Python“ modulį
Kaip minėta įžangose, mes skelbsime įtampos ir srovės jutiklių rodmenis „Adafruit IO Cloud“, iš kurio jį galima žiūrėti iš viso pasaulio arba prijungti prie IFTTT, kad atliktumėte bet kokius norimus veiksmus.
„Adafruit.IO python“ modulyje yra paprogramės ir funkcijos, kurias naudosime, kad duomenys būtų lengvai perduodami į debesį. Norėdami įdiegti modulį, atlikite toliau nurodytus veiksmus.
- Paleiskite cd ~, kad grįžtumėte į namų katalogą.
- Tada paleiskite komandą; sudo pip3 įdiekite „adafruit-io“ . Ji turėtų įdiegti „Adafruit IO python“ modulį.
4 žingsnis: sukurkite „Adafruit.io“ paskyrą
Norint naudoti „Adafruit IO“, pirmiausia reikės susikurti paskyrą ir gauti AIO raktą. Šį AIO raktą kartu su jūsų vartotojo vardu jūsų python scenarijus naudos norėdamas pasiekti „Adafruit IO“ debesų paslaugą. Norėdami sukurti paskyrą, apsilankykite; https://io.adafruit.com/, spustelėkite mygtuką Pradėti nemokamai ir užpildykite visus reikiamus parametrus. Užbaigus „Prisiregistruoti“, pagrindinio puslapio dešinėje turėtumėte pamatyti mygtuką „Peržiūrėti AIO raktą“.
Spustelėkite jį, kad gautumėte AIO raktą.
Nukopijavę raktą, mes pasiruošę eiti. Tačiau norint palengvinti duomenų siuntimo į debesų paslaugą procesą, taip pat galite sukurti kanalus, į kuriuos bus siunčiami duomenys. (daugiau informacijos apie tai, kokie yra AIO kanalai, rasite čia). Kadangi iš esmės siųsime energijos suvartojimą, sukursime energijos tiekimą. Norėdami sukurti sklaidos kanalą, spustelėkite „sklaidos kanalus“ AIO puslapio viršuje ir spustelėkite pridėti naują sklaidos kanalą.
Suteikite jam kokį tik norite pavadinimą, bet kad viskas būtų paprasta, aš pavadinsiu tai energijos suvartojimu. Taip pat galite nuspręsti sukurti įtampos ir srovės tiekimą ir pritaikyti kodą, kad juose būtų skelbiami duomenys.
Turėdami visa tai, mes dabar esame pasirengę pradėti kurti projektą.
Pi energijos skaitiklio grandinės schema
„ Raspberry Pi Energy Monitor“ projekto schemos yra gana sudėtingos ir apima prijungimą prie kintamosios srovės įtampos, kaip minėta anksčiau, įsitikinkite, kad imatės visų būtinų atsargumo priemonių, kad išvengtumėte elektros šoko. Jei nesate susipažinę su saugiu kintamosios srovės įtampos valdymu, leiskite patenkinti džiaugsmą, kai tai diegiate ant duonos lentos, jos neįjungę.
Schemos apima įtampos ir srovės jutiklių įrenginio prijungimą prie ADC, kuris tada siunčia duomenis iš jutiklių į „Raspberry Pi“. Kad būtų lengviau sekti ryšius, kiekvieno įrenginio schemos pateikiamos atskirai.
Srovės jutiklio schema
Prijunkite srovės jutiklio komponentus, kaip parodyta toliau pateiktose schemose.
Šiame projekte naudojamas srovės transformatorius parodytas žemiau, nes matote, kad iš jo turime tris laidus, ty įžemintą, „Cout“ ir 3,3 V
Įtampos jutiklių schemos
Prijunkite įtampos jutiklio komponentus, kaip parodyta toliau pateiktose schemose.
Apdorojimo bloko schema
Prijunkite viską kartu su ADC (ADS1115), prijungtu prie aviečių pi, ir srovės ir įtampos jutiklių išėjimais, prijungtais atitinkamai prie ADS1115 kaiščių A0 ir A1.
Įsitikinkite, kad abiejų jutimo elementų GND kaiščiai yra prijungti prie ADC arba aviečių pi GND.
Kad viskas būtų kiek mažiau nestabili, įtampos ir srovės jutiklius įdiegiau „Protoboard“. Be to, ant duonos plokštės nerekomenduojama statyti kintamosios srovės grandinės. Jei elgsitės taip pat, jūsų galutinė sąranka gali atrodyti kaip paveikslėlyje žemiau;
Užbaigę ryšius, dabar esame pasirengę parašyti projekto kodą.
„Pi“ energijos skaitiklio „Python“ kodas
Kaip įprasta mūsų aviečių pi projektuose, mes sukursime projekto kodą naudodami pitoną. Spustelėkite ant aviečių pi piktogramos darbalaukyje, pasirinkite programavimą ir paleiskite bet kurią norimą naudoti pitono versiją. Aš naudosiu „Python 3“ ir kai kurios „Python 3“ funkcijos gali neveikti „Python 2.7“. Taigi, jei norite naudoti „Python 2.7“, gali tekti atlikti keletą reikšmingų kodo pakeitimų. Aš suskirstysiu kodą į mažus fragmentus ir pasidalysiu visu kodu su jumis pabaigoje.
Paruošta? Saunus.
Kodo algoritmas yra paprastas. Mūsų python scenarijus pateikia įtampos ir srovės rodmenų užklausą ADS1115 (per I2C). Gaunama analoginė vertė gaunama, atrenkama ir gaunama vidutinė įtampos ir srovės kvadratinė vertė. Galia kilovatais apskaičiuojama ir po tam tikrų intervalų siunčiama į „Adafruit“ IO pašarą.
Mes pradedame scenarijų įtraukdami visas bibliotekas, kurias naudosime. Tai apima įmontuotas bibliotekas, tokias kaip laiko ir matematikos biblioteka, ir kitas bibliotekas, kurias įdiegėme anksčiau.
importavimo laikas importuoti „Adafruit_ADS1x15“ iš „Adafruit_IO import“ * importuoti matematiką
Tada sukursime ADS1115 bibliotekos egzempliorių, kuris bus naudojamas sprendžiant fizinį ADC.
# Sukurkite ADS1115 ADC (16 bitų) egzempliorių.. adc1 = Adafruit_ADS1x15.ADS1115 ()
Tada pateikite savo „Adafruit IO“ vartotojo vardą ir „AIO“ raktą.
username = 'įveskite savo vartotojo vardą tarp šių kabučių' AIO_KEY = 'jūsų aio raktas' aio = klientas (vartotojo vardas, AIO_KEY)
Prašome saugoti raktą. Jį galima naudoti norint pasiekti jūsų „Adafruit io“ paskyrą be jūsų leidimo.
Tada sukursime keletą kintamųjų, tokių kaip ADC padidėjimas, norimų pavyzdžių skaičius ir nustatysime apvalinimą, kuris tikrai nėra kritinis.
GAIN = 1 # potencialių verčių ieškokite ads1015 / 1115 dokumentuose. pavyzdžiai = 200 # pavyzdžių, paimtų iš skelbimų, skaičius1115 vietų = int (2) # rinkinio apvalinimas
Tada sukursime tam tikrą laiką, kad galėtume stebėti srovę ir įtampą ir periodiškai siųsti duomenis į „Adafruit io“. „Loop“ prasideda nustatant visus kintamuosius į nulį.
o tiesa: # atstatyti kintamuosius = int (0) datai = datav = maxIValue = 0 #max dabartinė vertė mėginyje maxVValue = 0 #max įtampos vertė imtyje IrmsA0 = 0 # vidutinė šaknies kvadratinė srovė VrmsA1 = 0 # šaknies vidutinė kvadratinė įtampa amperai A0 = 0 # srovės smailės voltai A1 = 0 # įtampos kilovatai = plūdės (0)
Kadangi mes dirbame su kintamosios srovės grandinėmis, SCT-013 išėjimas ir įtampos jutiklis bus sinuso banga, todėl norėdami apskaičiuoti sinusinės bangos srovę ir įtampą, turėsime gauti didžiausias vertes. Norėdami gauti didžiausias vertes, imsime įtampą ir srovę (200 pavyzdžių) ir rasime didžiausias vertes (didžiausias vertes).
skaičiavimui diapazone (pavyzdžiai): datai.insert (count, (abs (adc1.read_adc (0, gain = GAIN)))) datav.insert (count, (abs (adc1.read_adc (1, gain = GAIN)))) # pažiūrėkite, ar turite naują „maxValue“ spausdinimą (datai), jei datai> maxIValue: maxIValue = datai, jei datav> maxVValue: maxVValue = datav
Tada mes standartizuojame vertes, konvertuodami iš ADC reikšmių į faktinę vertę, po kurios mes naudojame šaknies vidurkio lygtį, kad rastume RMS įtampą ir srovę.
#culkuliuokite srovę naudodami atrinktus duomenis # naudojamas sct-013 kalibruojamas 1000mV išėjimui @ 30A. IrmsA0 = plūduriuojantis (maxIValue / float (2047) * 30) IrmsA0 = apvalus (IrmsA0, vietos) amperaiA0 = IrmsA0 / math.sqrt (2) amperaiA0 = apvalus (amperaiA0, vietos) # Apskaičiuokite įtampą VrmsA1 = plūduriuojantis (maxVValue * 1100 / plūdė (2047)) VrmsA1 = apvalus (VrmsA1, vietos) voltaiA1 = VrmsA1 / math.sqrt (2) voltaiA1 = apvalus (voltaiA1, vietos) spausdinimas ('Įtampa: {0}'. formatas (voltaiA1)) spausdinimas ('Dabartinis: {0} '. Formatas (ampsA0))
Tai padarius, apskaičiuojama galia ir duomenys skelbiami adafruit.io
#calculate power power = apvalus (amperaiA0 * voltaiA1, vietos) spausdinimas ('Maitinimas: {0}'. formatas (galia)) #įkelkite duomenis į adafruit.io EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' „EnergyUsage“, galia)
Nemokamų paskyrų atveju „Adafruit“ reikalauja, kad tarp užklausų ar duomenų įkėlimo būtų šiek tiek laiko.
# Palaukite, kol pakartosite ciklo laiką. Miega (0)
Visą projekto kodą galite rasti šio puslapio apačioje
Demonstracija
Užbaigus kodą, išsaugokite jį ir paspauskite paleisties mygtuką ant pitono IDE. Prieš tai įsitikinkite, kad Pi yra prijungtas prie interneto per „WiFi“ ar LAN, o jūsų „aio“ raktas ir vartotojo vardas yra teisingi. Po kurio laiko turėtumėte pradėti matyti energijos duomenis (galią), rodomus Adafruit.io kanale. Mano aparatinės įrangos sąranka demonstracijos metu buvo tokia
Norėdami tęsti viską, galite sukurti informacijos suvestinę svetainėje adafruit.io ir pridėti diagramos komponentą, kad galėtumėte gauti grafinį duomenų vaizdą, kaip parodyta žemiau esančiame paveikslėlyje.
Tai viskas, vaikinai, dabar galite stebėti energijos suvartojimą iš bet kurios pasaulio vietos. Svarbu pažymėti, kad tikrai reikia atlikti daug daugiau koregavimo ir kalibravimo, kad paverstumėte jį tikrai tiksliu sprendimu, tačiau manau, kad tai suteikia jums beveik viską, ko jums reikia.
Nedvejodami užrašykite man klausimus apie projektą per komentarų skiltį. Pabandysiu atsakyti kuo daugiau. Iki kito karto.