Sisällysluettelo:
- Vaihe 1: Komponenttien valinta
- Vaihe 2: Rakentaminen
- Vaihe 3: Koodi - Pienitehoinen anturikirjasto, käyttöliittymä ja Arduino -luonnos
- Vaihe 4: Syöttövirran mittaus
- Vaihe 5: Kokonaisvirta ja akun käyttöikä
- Vaihe 6: Toimitusvaihtoehdot - Solar Assist, vain akku, vain aurinko
- Vaihe 7: Johtopäätös
Video: Helppo erittäin pienitehoinen BLE Arduinossa Osa 2 - Lämpötilan/kosteuden valvonta - Rev 3: 7 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 08:59
Päivitys: 23. marraskuuta 2020 - Ensimmäinen 2 x AAA -pariston vaihto 15. tammikuuta 2019 lähtien eli 22 kuukautta 2xAAA -alkaliparistolle Päivitys: 7. huhtikuuta 2019 - lp_BLE_TempHumidity -versio 3, lisää päivämäärä- ja aikakaaviot käyttämällä pfodApp V3.0.362+-toimintoa ja automaattista kuristusta lähetettäessä tiedot
Päivitys: 24. maaliskuuta 2019 - lp_BLE_TempHumidity Rev 2, lisää piirtovaihtoehtoja ja i2c_ClearBus
Tämä ohje, erittäin alhaisen tehon lämpötilan kosteusmonitori, on osa 2/3.
Osa 1 - Hyvin pienitehoisten BLE -laitteiden rakentaminen helpoksi Arduinon kansien avulla Arduinon asettaminen koodaamaan nRF52 pienitehoiset laitteet, ohjelmointimoduuli ja syöttövirran mittaus. Se kattaa myös erikoistehokkaat pienitehoiset ajastimet ja vertailijat sekä poistetut tulot ja pfodApp -sovelluksen käyttämisen nRF52 -laitteen yhdistämiseen ja ohjaamiseen.
Osa 2 - Erittäin matalan tehon lämpötilan kosteusmonitori, tämä, kattaa Redbear Nano V2 -moduulin ja Si7021 -lämpötila- / kosteusanturin käytön pienitehoisen akun / aurinkomonitorin rakentamiseen. Se kattaa myös Si7021 -kirjaston muuttamisen pienitehoiseksi, BLE -laitteen virittämisen sen nykyisen kulutuksen pienentämiseksi <25uA ja mukautetun lämpötila-/kosteusnäytön suunnittelun matkapuhelimeesi.
Osa 3 - Redbear Nano V2 -suojakannet, joissa käytetään muita nRF52 -pohjaisia moduuleja Nano V2: n sijaan. Se kattaa syöttökomponenttien valinnan, rakentamisen, nRF52 -sirun ohjelmointisuojauksen poistamisen, NFC -nastojen käytön normaalina GPIO: na ja uuden nRF52 -kortin määrittämisen Arduinossa.
Tämä opas on käytännön sovellus osassa 1 Rakennetaan erittäin pienitehoisia BLE -laitteita, jotka on helppo tehdä Arduinolla rakentamalla erittäin pienitehoinen BLE -lämpötila- ja kosteusmonitori. Näyttö toimii vuosia kolikkokennolla tai 2 x AAA -paristolla, jopa pidempään aurinkoavustimella. Tämä opetusohjelma kattaa BLE -parametrien virittämisen alhaiselle virrankulutukselle ja laitteen virran saamiseksi paristosta TAI akusta + vain aurinko- tai aurinkoenergiasta.
Sen lisäksi, että näyttö näyttää nykyisen lämpötilan ja kosteuden, näyttö tallentaa viimeiset 36 tuntia 10 minuutin mittausta ja viimeiset 10 päivää tunnit. Nämä voidaan kartoittaa Android -mobiililaitteellasi ja arvot voidaan tallentaa lokitiedostoon. Android -ohjelmointia ei tarvita, pfodApp hoitaa kaiken. Android -näyttöä ja -kartoitusta ohjaa täysin Arduino -luonnoksesi, joten voit muokata sitä tarpeen mukaan.
Redbear Nano V2 -korttia käytetään nRF52832 BLE -komponenttiin ja Sparkfun Si7021 -katkaisulautaa lämpötila- / kosteusanturiin. Si7021: n kanssa käytetään muokattua pienitehoista kirjastoa. Pieni piirilevy on suunniteltu pitämään NanoV2 ja syöttämään komponentteja. Koska pinta -asennettavia komponentteja ei kuitenkaan käytetä, voit rakentaa tämän yhtä helposti vero -levylle. Mukana on kolme virtalähdeversiota. i) Akku ja aurinkopaneeli, ii) Vain akku, iii) Vain aurinko. Solar Only -vaihtoehdossa ei ole akkua, joten se toimii vain, kun valoa on vähän. Kirkas huonevalo tai pöytävalaisin riittää.
Ääriviivat
Tässä projektissa on 4 suhteellisen itsenäistä osaa:-
- Komponenttien valinta ja rakenne
- Koodi - Pienitehoinen anturikirjasto, käyttöliittymä ja Arduino Sketch
- Syöttövirran ja akun käyttöiän mittaaminen
- Toimitusvaihtoehdot - Solar Assist, vain akku, vain aurinko
Vaihe 1: Komponenttien valinta
Komponenttien valinta
Kuten osassa 1 mainittiin-Temppu todella pienitehoisen ratkaisun saamiseksi on olla tekemättä mitään suurimman osan ajasta, minimoida virta tulojen ulkoisten vetävien/vedettävien vastusten avulla eikä niissä ole ylimääräisiä komponentteja. Tämä projekti käyttää kaikkia näitä temppuja saadakseen pienitehoisen ratkaisun.
Komponentti nRF52832
NRF52832 -siru voi toimia 1,7 V: n ja 3,6 V: n (absoluuttinen maksimijännite 3,9 V) virtalähteellä. Tämä tarkoittaa, että voit käyttää sirua suoraan nappiparista tai 2 x AAA -paristosta. On kuitenkin järkevää lisätä jännitesäädin, joka suojaa sirua ylijännitteiltä. Tämä lisäkomponentti maksaa virran, mutta NanoV2-kortin tapauksessa sisäinen säädin, TLV704, kuluttaa alle 5,5 uA, tyypillisesti vain 3,4 uA. Tätä pientä lisävirtaa varten saat suojan jopa 24 V: n syöttötuloille.
Si7021 -komponentti
Itse Si7021 -anturi kuluttaa tyypillisesti <1uA, kun mittausta ei suoriteta, eli valmiustilassa, ja jopa 4 mA, kun tietoja siirretään I2C: n kautta. Koska emme tee mittauksia jatkuvasti, 4 mA ei ole merkittävä osa keskimääräistä syöttövirtaa. Kun lukeminen kestää hyvin 30 sekuntia, keskimääräinen syöttövirta on alle 1 uA, katso alla olevat syöttövirran mittaukset.
Saatavilla on kaksi Si7021 -katkaisulautaa. Yksi Adafruitista ja toinen Sparkfunista. Nopea vilkaisu kahteen lautaan kertoo, että Adafruit -levyssä on paljon enemmän osia kuin Sparkfun -levyssä, joten olisit taipuvainen valitsemaan Sparkfun -levyn. Kunkin piirilevyn kaavioiden tarkastelu osoittaa, että Sparkfun-kortti on vain paljas anturi ja kaksi 4k7-vetovastusresistoria, kun taas Adafruit-kortissa on sisäinen MIC5225-säädin, joka tyypillisesti kuluttaa 29uA koko ajan. Tämä on merkittävää, kun koko piirin loppuvirta on <30uA. Koska meillä on jo säädin nRF52832 -sirulle, tätä lisäkomponenttia ei tarvita ja Si7021 voidaan käyttää 3,3 V: n jännitteellä. Joten tässä projektissa käytetään Sparkfunin Si7021 -katkaisulautaa.
minimoi virta tulojen ulkoisten vetävien/vedettävien vastusten avulla
4K7 I2C -vetovastus ei ole erityisen arvokas, ja se vetää 0,7 mA, kun se vedetään alhaiseksi. Tämä olisi ongelma, jos ne olisivat kytkimen tulossa, joka oli maadoitettu pitkään. Tässä projektissa näiden vastusten kautta kulkeva virta minimoidaan kuitenkin vain käyttämällä I2C -rajapintaa harvoin ja vain lyhyen ajan. Suurimman osan ajasta I2C-linjat eivät ole käytössä ja ovat korkeassa / kolmitilassa, joten virtaa ei kulje näiden vastuksien läpi.
Vaihe 2: Rakentaminen
Projekti on rakennettu pienelle piirilevylle, mutta koska siinä ei ole SMD -komponentteja, se voidaan rakentaa yhtä helposti käyttämällä vero -levyä. PCBcart.com valmisti piirilevyn näistä Gerber -tiedostoista, TempHumiditySensor_R1.zip Piirilevy on riittävän yleinen käytettäväksi muissa BLE -projekteissa.
Kaavio on esitetty yllä. Tässä on pdf -versio.
Osaluettelo
Arvioidut yksikkökustannukset joulukuun 2018 aikana, ~ US $ 62, ilman toimituskuluja ja ohjelmoijaa osasta 1
- Redbear NanoV2 ~ 17 dollaria
- Sparkfun Si7021 -katkaisulauta ~ 8 dollaria
- 2 x 53mm x 30mm 0,15W 5V aurinkokennoja, esim. Overfly ~ US $ 1.10
- 1 x piirilevy TempHumiditySensor_R1.zip ~ US $ 5 5 off www.pcbcart.com OR Vero board (strip kupari), esim. Jaycar HP9540 ~ AUD 5 dollaria
- 2 x 1N5819 schottky -diodia, esim. Digikey 1N5819FSCT-ND ~ US $ 1
- 1 x 470R 0,4W 1% vastus esim. Digikey BC3274CT-ND ~ US $ 0.25
- 6 x 6 -nastainen urospistoke, esim. Sparkfun PRT-00116 ~ 1,5 dollaria
- naispuolinen naarashyppy esim. Adafruit -tunnus: 1950 ~ US $ 2
- 3 mm x 12 mm nailonruuvit, esim. Jaycar HP0140 ~ 3 AUD
- 3 mm x 12 mm nailonmutterit, esim. Jaycar HP0146 ~ 3 dollaria
- Scotch Pysyvä asennusnauha Cat 4010 esim. Amazonista ~ US $ 6.6
- AAA x 2 paristopidike, esim. Sparkfun PRT-14219 ~ 1,5 dollaria
- 2 x AAA 750mA alkaliparistoa, esim. Sparkfun PRT-09274 ~ US $ 1.0 Näiden paristojen pitäisi kestää> 2 vuotta. Energizer -alkaliparistojen kapasiteetti on suurempi
- Muovilaatikko (ABS) 83 mm x 54 mm x 31 mm, esim. Jaycar HB6005 ~ 3 AUD
- pfodApp ~ 10 dollaria
- 1 x 22uF 63V matala ESR -kondensaattori (valinnainen), esim. Jaycar RE-6342 ~ AUD $ 0.5 tai Digikey P5190-ND ~ US $ 0.25
Rakenne on suoraan eteenpäin. Paristopidike ja aurinkokennot on kiinnitetty muovilaatikkoon raskaalla kaksipuolisella teipillä.
Huomaa Gnd -linkkilanka CLK: sta GND: hen valmiissa osassa. Tämä asennetaan ohjelmoinnin JÄLKEEN estääkseen kohinaa CLK -tulossa käynnistämästä nRF52 -sirun suurvirran virheenkorjaustilaan
Vaihe 3: Koodi - Pienitehoinen anturikirjasto, käyttöliittymä ja Arduino -luonnos
Lataa zip -koodi lp_BLE_TempHumidity_R3.zip ja pura se Arduino Sketches -hakemistoosi. Sinun on myös asennettava lp_So7021 -kirjasto tästä zip -tiedostosta ja asennettava myös pfodParser -kirjasto.
Pienitehoinen anturikirjasto, lp_Si7021
Sekä Adafruit että Sparkfun tarjoavat tukikirjastoja Si7021 -anturin käyttämiseen, mutta molemmat kirjastot eivät sovellu erittäin pieneen virrankulutukseen. Molemmat käyttävät viivettä (25) koodissa viivyttääkseen anturin lukemista mittauksen aikana. Kuten osassa 1 todettiin, viiveet ovat pahoja. Arduino-viive () pitää mikroprosessorin vain käynnissä virran avulla odottaessaan viiveen aikakatkaisua. Tämä rikkoo pienitehoisen BLE: n ensimmäisen säännön, älä tee mitään suurimman osan ajasta. Korvaava lp_Si7021-kirjasto korvaa kaikki viiveet lp_timers-toiminnolla, joka laittaa mikroprosessorin nukkumaan odottaessaan anturin mittauksen päättymistä.
Kuinka paljon eroa lp_Si7021 -kirjastolla on? Käyttämällä alkuperäistä SparkFun Si7021 -tukikirjastoa ja ottamalla yksi lukema sekunnissa ilman sarjakuvia, keskiarvo on ~ 1,2 mA. Sparkfun -kirjaston korvaaminen lp_Si7021 -kirjastolla vähentää keskimääräisen virran ~ 10uA, eli 100 kertaa vähemmän. Tässä projektissa nopein mittausnopeus on kerran 30 sekunnissa, kun matkapuhelin on kytketty, mikä johtaa keskimääräiseen anturivirtaan alle 1uA. Jos BLE -yhteyttä ei ole, mittausnopeus on kerran 10 minuutissa ja anturin keskimääräinen syöttövirta on vähäinen.
Käyttöliittymä
Yllä on päänäyttö ja zoomattu näkymä 10 päivän tuntihistoriasta. Kaavioita voidaan zoomata ja panoroida molempiin suuntiin kahdella sormella.
Käyttöliittymä koodataan Arduino -luonnoksessa ja lähetetään sitten pfodApp -sovellukseen ensimmäisessä yhteydessä, jossa se tallennetaan välimuistiin toistuvaa käyttöä ja päivityksiä varten. Graafinen näyttö on rakennettu piirtämisen primitiiveistä. Katso mukautetut Arduino -ohjaimet Androidille opetusohjelma omien säätimien rakentamisesta. Lämpömittari-, RHGauge- ja Button -tiedostot sisältävät näiden kohteiden piirustuskomennot.
Huomautus: Ei mitään, jos tämä näyttö on sisäänrakennettu pfodApp -sovellukseen. Koko näyttöä ohjataan täysin Arduino -luonnoksesi koodilla
SendDrawing_z () -menetelmä lp_BLE_TempHumidity_R3.ino -luonnoksessa määrittelee käyttöliittymän.
void sendDrawing_z () {dwgs.start (50, 60, dwgs. WHITE); // taustan oletusarvo on VALKOINEN, jos se jätetään pois, eli aloita (50, 60); parser.sendRefreshAndVersion (30000); // pyydä dwg uudelleen 30 sekunnin välein tämä jätetään huomiotta, jos jäsennysversiota ei ole asetettu // pakota näytön päivitykset koskettamalla yllä olevia painikkeita dwgs.touchZone (). cmd ('u'). koko (50, 39).send (); dwgs.pushZero (35, 22, 1.5); // siirrä nolla dwg: n keskelle arvoon 35, 22 ja skaalaa 1,5 kertaa rhGauge.draw (); // piirrä ohjaus dwgs.popZero (); dwgs.pushZero (18, 33); // siirrä nolla dwg: n keskelle arvoon 18, 33 asteikko on 1 (oletus) lämpömittari.draw (); // piirrä ohjaus dwgs.popZero ();
dwgs.pushZero (12,5, 43, 0,7); // siirrä nolla dwg: n keskelle arvoon 12,5, 43 ja skaalaa 0,7
hrs8PlotButton.draw (); // piirrä ohjaus dwgs.popZero (); dwgs.pushZero (37,5, 43, 0,7); // siirrä nolla dwg: n keskelle 37,5, 43 ja skaalaa 0,7 päivää1PlotButton.draw (); // piirrä ohjaus dwgs.popZero ();
dwgs.pushZero (12,5, 54, 0,7); // siirrä nolla dwg: n keskelle arvoon 12,5, 54 ja skaalaa 0,7
days3PlotButton.draw (); // piirrä ohjaus dwgs.popZero (); dwgs.pushZero (37,5, 54, 0,7); // siirrä nolla dwg: n keskelle 37,5, 54 ja skaalaa 0,7 päivää10PlotButton.draw (); // piirrä ohjaus dwgs.popZero (); dwgs.end (); }
PushZero -komennot muuttavat seuraavan komponentin piirtämisen alkuperää ja skaalausta. Tämän avulla voit helposti muuttaa painikkeiden ja mittarien kokoa ja sijaintia.
Ensimmäisellä liitännällä aloitusnäyttö kestää 5 tai 6 sekuntia ladatakseen noin 800 tavua, jotka määrittävät näytön. pfodApp tallentaa näytön välimuistiin, joten tulevien päivitysten on lähetettävä vain muutokset, mittarien sijainnit ja lukemat. Nämä päivitykset kestävät vain muutaman sekunnin, ennen kuin 128 tavua päivitetään näyttö.
Näytössä on viisi (5) aktiivista kosketusaluetta. Jokaisella painikkeella on oma draw () -menetelmänsä
dwgs.touchZone (). cmd ('u'). koko (50, 39). lähetä ();
Kun napsautat painiketta painikkeiden yläpuolella, u -dwg -komento lähetetään luonnokseen pakottaaksesi uuden mittauksen ja näytön päivityksen. Normaalisti, kun yhteys on muodostettu, päivitykset tapahtuvat vain 30 sekunnin välein. Jokainen piirustuksen napsautus tai päivitys pakottaa uuden mittauksen. Vastaus Arduinon luonnoksesta pfodAppiin viivästyy, kunnes uusi mittaus on valmis (~ 25mS), jotta päivityksen viimeisin arvo voidaan lähettää.
Arduino -luonnos
Arduino -luonnos, lp_BLE_TempHumidity_R3.ino, on parannettu versio osassa 1 käytetystä esimerkkiluonnoksesta. Lp_BLE_TempHumidity_R3.ino -luonnos korvaa valikon yllä esitetyllä piirustuksella. Se lisää myös lp_Si7021 -anturituen ja datamatriisit 10 minuutin ja tunnin mittaisten mittausten tallentamiseen.
Suurin komplikaatio lp_BLE_TempHumidity_R3.ino -luonnoksessa on juontidatan lähettämisen käsittely. Kun mittauksia tehdään, readRHResults () käsittelee tulosten keräämisen ja tallentamisen historiallisiin matriiseihin. Taulukot ovat 120 pitkiä, mutta kun data lähetetään, ensimmäiset 30 datapistettä ovat hienommalla aikavälillä.
Muutamia kohtia on otettava huomioon lähetettäessä 200 paritonta kuvaajapistettä näytettäväksi:-
- Jokainen datapiste on ~ 25 tavua pitkä CSV -tekstimuodossa. Joten 150 pistettä on 3750 tavua dataa. Lp_BLESerial -luokassa on 1536 tavun puskuri, josta 1024 on riittävän suuri suurimmalle pfod -sanomalle. Muut 512 tavua on varattu datan lähettämiseen. Kun historiatiedot ovat täyttäneet 512 tavua, lisätietojen lähettäminen viivästyy, kunnes puskurissa on tilaa.
- Jotta kuvaajatiedot eivät hidasta päänäytön päivityksiä, kuvaajatiedot lähetetään vain, kun kuvaajanäyttö on näkyvissä. Kun käyttäjä vaihtaa takaisin päänäyttöön, kuvaajan tietojen lähettäminen keskeytetään. Kaavion tietojen lähettäminen jatkuu, kun käyttäjä napsauttaa kuvaajapainiketta näyttääkseen kaavion uudelleen.
- Historialliset juonet alkavat nollasta (nyt) ja menevät taaksepäin ajassa. Jos viimeisen kuvaajan näyttämisen jälkeen ei ole tehty uusia mittauksia, aiemmin ladatut tiedot näytetään heti uudelleen. Jos on uusi mittaus, se lisätään edelliseen kuvaajaan.
- Kun näyttö käynnistetään ensimmäisen kerran, historiallisia lukemia ei ole ja 0 tallennetaan matriiseihin virheellisenä lukemana. Kun kuvaaja näytetään, virheelliset lukemat ohitetaan, mikä johtaa lyhyempään kuvaajaan.
Celsius ja Fahrenheit
Lp_BLE_TempHumidity_R3.ino -luonnos näyttää ja piirtää tiedot Celsius -asteina. Jos haluat muuntaa tulokset Fahrenheit -asteiksi, korvaa kaikki esiintymät
parser.print (sensor. Temp_RawToFloat (..
kanssa
parser.print (sensor. CtoF (sensor. Temp_RawToFloat (…
Ja korvaa Unicode -degC -symboli Octal / 342 / 204 / 203: ssa degF -symbolilla / 342 / 204 / 211
pfodApp näyttää kaikki Unicode -koodit, joita mobiililaitteesi voi näyttää.
Katso lisätietoja muiden kuin ASCII-merkkien käyttämisestä Arduinossa. Muuta myös MIN_C, MAX_C asetuksia lämpömittarissa. H. Säädä lopuksi kuvaajan rajat haluamallasi tavalla, esim. muutos | Lämpötila C ~ 32 ~ 8 ~ deg C |
sanoa
| Lämpötila F ~ 90 ~ 14 ~ deg F |
Vaihe 4: Syöttövirran mittaus
Käyttämällä lp_Si7021 -kirjastoa jopa lämpötila-/kosteusmittausten ottaminen 10 sekunnin välein lisää vain ~ 1uA keskimääräiseen syöttövirtaan, joten syöttövirran ja siten akun käyttöiän tärkein tekijä on BLE -mainonnan ja yhteyden sekä tiedonsiirron käyttämä virta.
Liitä lämpötila-/kosteuslevy osassa 1 kuvattuun ohjelmoijaan yllä kuvatulla tavalla.
Kun aurinkokennot ja paristot on irrotettu pistorasiasta, Vin ja Gnd on kytketty ohjelmoijan Vdd- ja Gnd -liittimiin (keltainen ja vihreä johto) ja SWCLK ja SWDIO yhdistetään ohjelmointilaitteen Clk- ja SIO -liittimiin (sininen ja vaaleanpunainen johto)
Voit nyt ohjelmoida NanoV2: n ja mitata syöttövirran osassa 1 kuvatulla tavalla.
Asenna pienitehoinen Si7021 -kirjasto tästä zip -tiedostosta, lp_Si7021.zip ja asenna pfodParser -kirjasto ja pura lp_BLE_TempHumidity_R3.zip Arduino -luonnoshakemistoosi ja ohjelmoi Temp/Humditiy -levy levylle lp_BLE_TempHumidity_R3.ino
Kuten edellä mainittiin, anturin osuus on keskimäärin <1uA korkeimmalla mittausnopeudella, jota tässä projektissa käytetään, joten BLE -mainonta ja liitäntäparametrit ovat akun käyttöiän määräävä tekijä.
BLE-mainonta- ja yhteysparametrit, jotka vaikuttavat virrankulutukseen, ovat: -Tx-teho, mainosväli, enimmäis- ja vähimmäisliitäntävälit ja orjaviive.
Huomautus: Edellä olevien liitäntöjen avulla virtalähteessä on kaksi (2) säädintä, yksi NanoV2 -kortilla Vinin kautta ja MAX8881 ohjelmoijan virralla. Tämä tarkoittaa, että mitatut syöttövirrat ovat ~ 5uA korkeammat kuin todellinen toisen säätimen vuoksi. Alla mainitut arvot ovat mitatut virrat miinus tämä ylimääräinen 5uA.
Lähetysteho
Tx Virtatehosteiden syöttövirta sekä yhdistettynä että mainostettaessa (ei kytketty). Tämä projekti käyttää suurinta tehoasetusta (+4) ja tarjoaa parhaan kantaman ja parhaan kohinaneston luotettavimmille yhteyksille. Voit muuttaa tehoasetusta lp_BLESerial setTxPower () -menetelmällä. Kelvolliset arvot ovat kasvavassa tehossa -40, -30, -20, -16, -12, -8, -4, 0 +4. Sinun on kutsuttava lp_BLESerial begin () -menetelmä ENNEN kuin kutsut setTxPower (). Katso lp_BLE_TempHumidity_R3.ino -luonnos.
Voit kokeilla Tx -tehon vähentämistä, mutta kompromissi on lyhyempi kantama ja enemmän häiriöitä aiheuttavia yhteyden katkoksia. Tässä projektissa lähetysteho jätetään oletusarvoonsa, +4. Kuten alla näet, erittäin alhainen syöttövirta on edelleen mahdollista tällä asetuksella.
Mainontaväli
Tietylle lähetysteholle, kun yhteyttä ei ole, mainosväli asettaa keskimääräisen virrankulutuksen. Suositeltu alue on 500 - 1000 mS. Tässä käytettiin 2000 mS. Kompromissi on, että pidemmät mainosvälit tarkoittavat, että matkapuhelimesi löytää laitteen hitaammin ja muodostaa yhteyden. Sisäisesti mainosvälit asetetaan 0,625 mS: n kerrannaisina alueella 20 mS - 10,24 s. Lp_BLESerial setAdvertisingInterval () -metodi käyttää mS -argumenttia mukavuuden vuoksi. +4 TxPower- ja 2000mS -mainosvälillä virrankulutus oli ~ 18uA. 1000 mS: n mainosvälillä se oli ~ 29uA. Rev 2 käytti 2000 mS mainosväliä, mutta tämä johti hitaisiin yhteyksiin. Rev 3 muutettiin 1000 mS: n mainosväliksi, jotta yhteydet nopeutuisivat.
Maksimi- ja min. Yhteysvälit
Kun yhteys on muodostettu, yhteysväli määrittää, kuinka usein matkapuhelin ottaa yhteyttä laitteeseen. Lp_BLESerial setConnectionInterval (): n avulla voit asettaa ehdotetut maksimi- ja minimäärät, mutta matkapuhelin ohjaa sitä, mikä yhteysväli todellisuudessa on. Mukavuuden vuoksi argumentit setConnectionInterval () ovat mS, mutta sisäisesti yhteysvälit ovat moninkertaisia 1,25 mS, alueella 7,5 mS - 4 s.
Oletusasetus on setConnectionInterval (100, 150) eli min. 100 mS - enintään 150 mS. Näiden arvojen lisääminen vähentää syöttövirtaa ollessaan kytkettynä, mutta kompromissi on hitaampi tiedonsiirto. Jokainen näytön päivitys kestää noin 7 BLE -viestiä, kun taas 36 tunnin 10 minuutin mittaukset vievät noin 170 BLE -viestiä. Joten yhteysvälien pidentäminen hidastaa näytön päivityksiä ja kaavio näkyy.
Lp_BLESerial -luokassa on 1536 tavun lähetyspuskuri ja se lähettää vain yhden 20 tavun lohkon tästä puskurista, kukin enimmäisliitäntäväli estääkseen BLE -linkin tulvan dataan. Myös kaaviotietoja lähetettäessä luonnos lähettää vain tietoja, kunnes 512 tavua odottavat lähettämistä, ja sitten viivästyttää lisädatan lähettämistä, kunnes osa tiedoista on lähetetty. Tämä välttää lähetyspuskurin tulvan. Tämä lähetysten kuristus tekee tiedonsiirrosta matkapuhelimeen luotettavan, mutta sitä ei ole optimoitu maksimaaliseen läpivientiin.
Tässä projektissa yhteysvälit jätettiin oletusarvoiksi.
Orjan viive
Kun mobiililaitteeseen lähetettävää dataa ei ole, laite voi valinnaisesti jättää huomiotta jotkin matkapuhelimesta tulevat yhteysviestit. Tämä säästää lähetystehoa ja syöttövirtaa. Orjaviiveasetus on ohitettavien yhteysviestien määrä. Oletus on 0. Lp_BLESerial setSlaveLatency () -menetelmää voidaan käyttää tämän asetuksen muuttamiseen.
Oletusarvoinen orjaviive 0 antoi ~ 50 uA syöttövirtaa, jättäen huomiotta näytön päivitykset 30 sekunnin välein, mutta KeepAlive -viestit mukaan lukien 5 sekuntia. Kun orjaviive asetettiin arvoon 2, keskimääräinen kytketty syöttövirta oli ~ 25uA. Orjan latenssi -asetus 4 antoi ~ 20uA. Korkeammat asetukset eivät näyttäneet vähentävän syöttövirtaa, joten käytettiin orjaviiveasetusta 4.
Kun yhteys on muodostettu, 30 sekunnin välein pfodApp pyytää näytön päivitystä. Tämä pakottaa anturin mittauksen ja lähettää takaisin tiedot päivittääkseen graafisen näytön. Tämä päivitys tuottaa ylimääräisen ~ 66uA 2 sekunnin ajan 30 sekunnin ajan. Tämä on keskimäärin 4,4 uA 30 sekunnin aikana. Tämän lisääminen 20uA: han antaa keskimääräisen liitäntävirran ~ 25uA
Vaihe 5: Kokonaisvirta ja akun käyttöikä
Käyttämällä yllä olevia asetuksia, jotka on määritetty kohdassa lp_BLE_TempHumidity_R3.ino, kokonaissyöttövirta yhdistettynä ja näyttöä päivitetään 30 sekunnin välein, noin 25 uA. Kun sitä ei ole kytketty, se on noin 29uA.
Akun käyttöiän laskemiseksi oletetaan jatkuvan virrankulutuksen ~ 29uA.
Eri akuilla on eri kapasiteetti ja jänniteominaisuudet. Tässä käytettävät paristot ovat CR2032 -nappiparisto, CR2450 (N) -nappikenno, 2 x AAA -alkali, 2 x AAA -litium ja LiPo.
Akun yhteenveto
Jos käytät Solar Assist -toimintoa, lisää 50% akun käyttöikään (olettaen, että valo on 8 tuntia päivässä)
Huomautus: 22uF LowESR -kondensaattori (C1), sisäänrakennetun NanoV2 22uF -kondensaattorin lisäksi, tallentaa aurinkokennovirran ja syöttää sen sitten lähetysvirtapulsseille. Muuten akku syöttää osan lähetysvirrasta. Tämä ylimääräinen 22uF LowESR lisää noin 10% akun virrasta, kun aurinkokenno ei ole virtalähde, mutta myös pidentää akun käyttöikää kompensoimalla nousevaa akun sisäistä vastusta akun käyttöiän lopussa. Alla olevat mittaukset tehtiin ILMAN ylimääräistä 22uF kondensaattoria.
CR2032 - 235mAHr - pariston kesto 10 kuukautta korkean itsepurkautumisen vuoksi.
CR2032
Tämän nappikennon kapasiteetti on tyypillisesti 235 mAh (Energizer -akku), nimellisjännite 3 V ja määritetty purkausjännite 2 V. Tämä tarkoittaa, että akun kesto on 8100 tuntia tai ~ 0,9 vuotta. Kuitenkin sisäinen kennon vastus kasvaa akun käyttöiän lopussa, joten se ei ehkä pysty tarjoamaan huippu -Tx -virtapulsseja. Suurempaa syöttökondensaattoria voidaan käyttää tämän vaikutuksen vähentämiseen, mutta sanotaan, että käyttöikä on 10 kuukautta.
CR2450 (N)
Tämän nappikennon kapasiteetti on tyypillisesti 620mAHr (540mAHr CR2450N: lle), nimellisjännite 3V ja määritetty purkausjännite 2V. Tämä tarkoittaa, että akun kesto on 22, 400 tuntia tai ~ 2 vuotta 6 metriä (18600 tuntia - 2 vuotta 2 metriä CR2450N: ssä). Kuitenkin sisäinen kennon vastus kasvaa akun käyttöiän lopussa, joten se ei ehkä pysty tarjoamaan huippu -Tx -virtapulsseja. Suurempaa syöttökondensaattoria voidaan käyttää tämän vaikutuksen vähentämiseen, mutta sanotaan, että käyttöikä on 2 vuotta 4 metriä (2 vuotta N).
Huomautus: CR2450N -versiossa on paksumpi huuli, joka auttaa estämään virheellisen asennuksen CR2450N -pidikkeeseen. Voit lisätä CR2450N- ja CR2450 -solun CR2450 -pidikkeeseen, mutta et voi lisätä CR2450N -solua CR2450N -pidikkeeseen
2 x AAA -alkalisolut
Näiden akkujen kapasiteetti on noin 1250 mAh (Energizer Battery) erittäin pienille virroille, nimellisjännite 2x1,5 V = 3 V ja määritetty purkausjännite 2x0,8 V = 1,6 V. Tämä määritetty purkausjännite on kuitenkin pienempi kuin Si7021 -anturin käyttöjännite (1,9 V), joten akkua voidaan käyttää vain ~ 1 V: iin asti. Tämä vähentää kapasiteettia noin 10% - 15% eli ~ 1000 mAh.
Tämä tarkoittaa, että akun kesto on 34, 500 tuntia tai ~ 4 vuotta. Kuitenkin sisäinen kennon vastus kasvaa akun käyttöiän lopussa, joten se ei ehkä pysty tarjoamaan huippu -Tx -virtapulsseja. Suurempaa syöttökondensaattoria voidaan käyttää tämän vaikutuksen vähentämiseen, mutta sanotaan 3 vuoden ja 10 metrin käyttöiän. Huomautus Alkaliparistojen itsepurkautuminen on 2–3% vuodessa.
2 x AAA -litium -kennot
Näiden akkujen kapasiteetti on noin 1200 mAh (Energizer Battery), nimellisjännite on 2x1,7 V = 3,4 V pienillä virroilla ja purkautuva jännite on 2x1,4 V = 2,4 V. Tämä tarkoittaa, että akun kesto on 41, 400 tuntia tai 4 vuotta 8 m.
Ladattava LiPo -akku
Näitä paristoja on saatavana eri kapasiteeteilla 100 mAh - 2000 mAh, litteissä muodoissa, ja niiden varausjännite on 4,2 V ja purkausjännite> 2,7 V. Niiden itsepurkautuminen on kuitenkin korkeaa 2–3%/kk (eli 24–36% vuodessa), joten ne eivät ole yhtä sopivia tähän sovellukseen kuin muut akut.
Vaihe 6: Toimitusvaihtoehdot - Solar Assist, vain akku, vain aurinko
Akku ja Solar Assist
Yllä oleva rakenne käyttää Battery plus Solar Assist -lähdettä. Kun aurinkopaneelit tuottavat enemmän jännitettä kuin akun jännite, aurinkokennot käyttävät näyttöä, mikä pidentää akun käyttöikää. Tyypillisesti akun käyttöikää voidaan pidentää vielä 50%.
Aurinkopaneelit ovat pieniä, 50 mm x 30 mm, halpoja, ~ 0,50 dollaria ja pienitehoisia. Ne ovat nimellisesti 5 V: n paneeleja, mutta tarvitsevat täyden suoran kirkkaan auringonvalon 5 V: n tuottamiseksi. Tässä projektissa kaksi paneelia on kytketty sarjaan siten, että näytön sijoittaminen ikkunan lähelle, suoraan auringonvaloon, riittää vaihtamaan pariston. Jopa hyvin valaistu huone tai pöytälamppu riittää aurinkokennojen tuottamaan> 3.3V> 33uA ja ottamaan akun.
Yksinkertainen testipaneeli rakennettiin määrittämään, mihin lämpötila- / kosteusmonitori voitaisiin sijoittaa, poissa auringosta ja silti aurinkoenergialla. Kuten yllä olevasta kuvasta näkyy, kaksi 100K: n vastukseen kytkettyä paneelia tuottavat 5,64 V: n 100K: n yli, eli 56uA: n virran 5,64 V: n jännitteellä. Tämä on enemmän kuin riittävä monitorin virran ottaminen akusta. Jos jännitteen lukema on yli 3 V: n akun nimellisjännitteen, aurinkokennot saavat virtansa näytöstä akun sijaan.
Lämpötilan kosteusmonitorin piirin kaksi diodia eristävät aurinkokennot ja akut toisistaan ja estävät niiden kytkemistä päinvastaiseen napaisuuteen. 10 V: n 1 W: n zener- ja 470R-sarjan vastus suojaa NanoV2: n sisäistä säädintä kahden aurinkokennon ylijännitteeltä auringossa, varsinkin jos 12 V: n kennoja käytetään 5 V: n sijaan. Normaalikäytössä <5V, 10V zener kuluttaa vain ~ 1uA.
Vain akku
Jos käytät vain akkua, jätä R1, D1 ja D3 ja aurinkokennot pois. Voit myös korvata D1: n johdolla, jos et halua napaisuussuojaa.
Vain aurinko
Näytön virransyöttö vain aurinkokennoista ilman akkua vaatii eri virtalähteen. Ongelmana on, että vaikka näyttö toimii 29 uA: n virralla, nRF52: n virta kytkettäessä virtaa ~ 5 mA 0,32 sekunnin ajaksi. Yllä oleva piiri (pdf -versio) pitää MAX8881 -säätimen pois päältä, kunnes tulokondensaattorit, 2 x 1000uF, latautuvat 4,04 V. Sitten MAX6457 vapauttaa MAX8881 SHDN -tulon nRF52: n (NanoV2) käynnistämiseksi. 2 x 1000uF kondensaattorit syöttävät tarvittavan käynnistysvirran.
Tämä antaa näytön virran heti, kun aurinkovoimaa on riittävästi, pitää se käynnissä 29uA: n teholla.
Vaihe 7: Johtopäätös
Tässä opetusohjelmassa on esitetty paristo-/aurinkoenergialla toimiva lämpötilan kosteusmonitori esimerkkinä erittäin pienitehoisesta BLE -projektista Arduinossa nRF52832 -sirulle. Syöttövirrat ~ 29uA, jos ne saavutetaan virittämällä yhteysparametrit. Tämän seurauksena CR2032 -nappipariston käyttöikä ylitti 10 kuukautta. Pidempään suuremman kapasiteetin nappikennoille ja paristoille. Kahden halvan aurinkokennon lisääminen pidentää akun käyttöikää helposti 50% tai enemmän. Kirkas huonevalo tai pöytälamppu riittää näytön virran saamiseen aurinkokennoista.
Esitettiin erityinen virtapiiri, jonka avulla näyttöä voidaan käyttää puhtaasti pienikapasiteettisista aurinkokennoista.
Ilmaisen pfodDesignerin avulla voit suunnitella valikoita/alivalikoita, piirtää päivämäärän ja kellonajan mukaan ja lokitietoja ja luoda sitten pienitehoisen Arduino-luonnoksen puolestasi. Tässä mukautettu käyttöliittymä koodattiin käyttäen pfodApp -piirustusprimaatiiveja. Yhdistäminen pfodAppiin näyttää käyttöliittymän ja päivittää lukemat, kun näyttö käyttää ~ 29uA
Android -ohjelmointia ei tarvita. pfodApp hoitaa kaiken.
Suositeltava:
Erittäin pienitehoinen WiFi-kotiautomaatiojärjestelmä: 6 vaihetta (kuvilla)
Erittäin pienitehoinen WiFi-kodin automaatiojärjestelmä: Tässä projektissa näytämme, kuinka voit rakentaa paikallisen perusautomaatiojärjestelmän muutamassa vaiheessa. Aiomme käyttää Raspberry Pi: tä, joka toimii keskeisenä WiFi -laitteena. Kun taas päätesolmuissa aiomme käyttää IOT Cricketiä akkutehon valmistamiseen
Erittäin pienitehoinen, vahvan putken vahvistin: 13 vaihetta (kuvilla)
Erittäin pienitehoinen, korkean vahvistuksen putkivahvistin: Minun kaltaisille makuuhuoneen rokkareille ei ole mitään pahempaa kuin meluvalitukset. Toisaalta on sääli, että 50 W: n vahvistin on kytketty kuormaan, joka haihduttaa melkein kaiken lämmössä. Siksi yritin rakentaa suuren vahvistuksen esivahvistimen, joka perustuu perheeseen
Erittäin pienitehoinen kellarin tulvahälytys ESP8266: 3 askelta
Erittäin pienitehoinen kellarikellon tulvahälytin ESP8266: Hei! Vaikka se ei ole mukava paikka, mutta keskuslämmitys b
Arduinon erittäin pienitehoinen sääasema: 5 vaihetta
Arduino Ultra Low Power Weather Station: Tämä opas näyttää, kuinka rakentaa erittäin pienitehoinen sääasema käyttämällä arduino nano, bme 280 ja rf433 -radiomoduulia, joka kestää noin 1,5-2 vuotta 2 LiPo 18650 -laitteella ja laajentaa sitä lisäämällä antureita ja aurinkokennoa
DIY MusiLED, musiikin synkronoidut LEDit yhdellä napsautuksella Windows- ja Linux-sovelluksella (32- ja 64-bittinen). Helppo luoda, helppo käyttää, helppo siirtää: 3 vaihetta
DIY MusiLED, musiikin synkronoidut LEDit yhdellä napsautuksella Windows- ja Linux-sovelluksella (32- ja 64-bittinen). Helppo luoda, Helppo käyttää, Helppo siirtää: Tämä projekti auttaa sinua liittämään 18 LEDiä (6 punaista + 6 sinistä + 6 keltaista) Arduino-korttiin ja analysoimaan tietokoneen äänikortin reaaliaikaisia signaaleja ja välittämään ne LEDit sytyttävät ne beat -tehosteiden mukaan (virveli, korkea hattu, potku)