Turinys:
- 1 žingsnis: komponentų pasirinkimas
- 2 žingsnis: Statyba
- 3 žingsnis: kodas - mažos galios jutiklių biblioteka, vartotojo sąsaja ir „Arduino“eskizas
- 4 žingsnis: tiekimo srovės matavimas
- 5 veiksmas: bendra maitinimo srovė ir baterijos veikimo laikas
- 6 veiksmas: tiekimo alternatyvos - „Solar Assist“, tik baterija, tik „Solar“
- 7 žingsnis: Išvada
Video: Lengvas labai mažos galios BLE „Arduino“2 dalis. Temperatūros/drėgmės monitorius - 3 red. 7 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:44
Atnaujinimas: 2020 m. Lapkričio 23 d. - Pirmasis 2 x AAA baterijų pakeitimas nuo 2019 m. Sausio 15 d., Ty 22 mėnesiai 2xAAA šarminiams. Atnaujinimas: 2019 m. Balandžio 7 d. duomenis
Atnaujinimas: 2019 m. Kovo 24 d. - „lp_BLE_TempHumidity“2 -oji versija, pridėta daugiau sklypo parinkčių ir „i2c_ClearBus“
Šis pamokomas labai žemos galios temperatūros drėgmės monitorius yra 2 dalis iš 3.
1 dalis. Lengvai kuriant labai mažos galios BLE įrenginius naudojant „Arduino“dangtelius, nustatant „Arduino“koduojant nRF52 mažos galios įrenginius, programavimo modulį ir matuojant maitinimo srovę. Ji taip pat apima specializuotus mažos galios laikmačius ir lyginamuosius įrenginius bei atjungtas įvestis ir naudojant „pfodApp“, norint prisijungti prie „nRF52“įrenginio ir jį valdyti.
2 dalis. Labai žemos galios temperatūros drėgmės monitorius, šis, apima „Redbear Nano V2“modulio ir Si7021 temperatūros / drėgmės jutiklio naudojimą, kad būtų sukurtas mažos galios akumuliatorius / saulės monitorius. Tai taip pat apima Si7021 bibliotekos pakeitimą mažos galios, BLE įrenginio derinimą, kad būtų sumažintas jo dabartinis suvartojimas <25uA, ir sukurti individualų temperatūros/drėgmės ekraną jūsų mobiliajam telefonui.
3 dalis. „Redbear Nano V2“pakeitimo dangteliai, naudojantys kitus „nRF52“modulius, o ne „Nano V2“. Tai apima tiekimo komponentų pasirinkimą, konstrukciją, nRF52 lusto programavimo apsaugos pašalinimą, NFC kaiščių naudojimą kaip įprastą GPIO ir naujos nRF52 plokštės nustatymą „Arduino“.
Šis nurodymas yra praktinis 1 dalies „Labai mažos galios BLE“įrenginių pritaikymas, kurį lengva padaryti naudojant „Arduino“, sukuriant labai mažos galios BLE temperatūros ir drėgmės monitorių. Monitorius daugelį metų veiks naudojant monetų elementą arba 2 x AAA baterijas, dar ilgiau - su saulės pagalba. Ši pamoka apima BLE parametrų derinimą, kad būtų sunaudojama mažai energijos, ir kaip maitinti įrenginį iš akumuliatoriaus ARBA baterijos + tik saulės arba saulės.
Monitorius ne tik rodo esamą temperatūrą ir drėgmę, bet ir saugo paskutinius 36 val. 10 min. Rodmenis ir paskutines 10 val. Rodmenų dienų. Jie gali būti pažymėti „Android“mobiliajame telefone ir vertės išsaugotos žurnalo faile. „Android“programavimas nereikalingas, visa tai tvarko „pfodApp“. „Android“ekraną ir diagramas visiškai valdo jūsų „Arduino“eskizas, todėl galite jį pritaikyti pagal poreikį.
„Redbear Nano V2“plokštė naudojama nRF52832 BLE komponentui, o „Sparkfun Si7021“pertraukimo plokštė naudojama temperatūros / drėgmės jutikliui. Su Si7021 naudojama modifikuota mažos galios biblioteka. Maža PCB buvo sukurta laikyti „NanoV2“ir tiekti komponentus. Tačiau kadangi nenaudojami ant paviršiaus montuojami komponentai, jūs galite tai padaryti taip pat lengvai ant vero plokštės. Apžvelgiamos trys maitinimo šaltinio versijos. i) Baterija ir saulės pagalba, ii) Tik baterija, iii) Tik saulės energija. „Solar Only“parinktis neturi akumuliatoriaus saugyklos, todėl veiks tik tada, kai bus šiek tiek šviesos. Pakanka ryškios kambario šviesos arba stalinės lempos.
Kontūras
Šį projektą sudaro 4 santykinai nepriklausomos dalys:-
- Komponentų pasirinkimas ir konstrukcija
- Kodas - mažos galios jutiklių biblioteka, vartotojo sąsaja ir „Arduino“eskizas
- Tiekimo srovės ir baterijos veikimo laiko matavimas
- Tiekimo alternatyvos - „Solar Assist“, „Battery Only“, „Solar Only“
1 žingsnis: komponentų pasirinkimas
Komponentų pasirinkimas
Kaip minėta 1 dalyje. Tikrai mažos galios sprendimo gavimo būdas yra dažniausiai nieko nedaryti, sumažinti įvesties srovę per išorinius ištraukiamus/nusileidžiančius rezistorius ir neturėti jokių papildomų komponentų. Šis projektas naudos kiekvieną iš šių gudrybių, kad gautų mažos galios sprendimą.
Komponentas nRF52832
„NRF52832“lustas gali veikti nuo 1,7 V iki 3,6 V maitinimo šaltinio (absoliuti maksimali įtampa 3,9 V). Tai reiškia, kad lustą galite maitinti tiesiai iš monetos elemento arba 2 x AAA baterijų. Tačiau protinga pridėti įtampos reguliatorių, kuris apsaugotų lustą nuo įtampos. Šis papildomas komponentas kainuoja energiją, tačiau „NanoV2“plokštės atveju borto reguliatorius TLV704 sunaudoja mažiau nei 5,5uA, dažniausiai tik 3,4uA. Dėl šio nedidelio papildomo energijos suvartojimo jūs gaunate apsaugą iki 24 V maitinimo šaltinių.
Si7021 komponentas
Pats „Si7021“jutiklis paprastai ima <1uA, kai neatliekamas matavimas, ty budėjimo režimu, ir iki 4 mA, kai duomenys perduodami per I2C. Kadangi mes nuolat neatliekame matavimų, 4 mA nėra didelė vidutinės tiekimo srovės dalis. Per 30 sekundžių nuskaitymas prideda mažiau nei 1uA prie vidutinės tiekimo srovės, žr. Toliau pateiktus tiekimo srovės matavimus.
Yra dvi lengvai prieinamos Si7021 pertraukimo plokštės. Vienas iš „Adafruit“ir vienas iš „Sparkfun“. Greitas žvilgsnis į dvi lentas parodys, kad „Adafruit“plokštėje yra daug daugiau komponentų nei „Sparkfun“plokštėje, todėl būsite linkę rinktis „Sparkfun“lentą. Pažvelgus į kiekvienos plokštės schemas, matyti, kad „Sparkfun“plokštė yra tik plikas jutiklis ir du 4k7 prisitraukimo rezistoriai, o „Adafruit“plokštėje yra įmontuotas MIC5225 reguliatorius, kuris paprastai visą laiką traukia 29uA. Tai reikšminga, kai visa srovė likusiai grandinei yra <30uA. Kadangi jau turime nRF52832 lusto reguliatorių, šis papildomas komponentas nereikalingas ir Si7021 gali būti maitinamas iš to 3,3 V maitinimo šaltinio. Taigi šiame projekte bus naudojama „Sparkfun“siurbimo plokštė Si7021.
iki minimumo sumažinkite srovę per įvesties išorinius traukimo/nuleidimo rezistorius
„4K7 I2C“traukos rezistoriai nėra ypač vertingi ir, traukiant žemai, suvartos 0,7 mA. Tai būtų problema, jei jie būtų jungiklio įvestyje, kuri ilgą laiką buvo įžeminta. Tačiau šiame projekte srovė per šiuos rezistorius yra sumažinta tik naudojant I2C sąsają retai ir tik trumpą laiką. Dažniausiai I2C linijos nenaudojamos ir yra aukštos / trijų būsenų, todėl per šiuos rezistorius neteka srovė.
2 žingsnis: Statyba
Projektas pastatytas ant mažos PCB, tačiau kadangi nėra SMD komponentų, jį taip pat lengva sukurti naudojant „vero“plokštę. PCB pagamino pcbcart.com iš šių Gerber failų, TempHumiditySensor_R1.zip. PCB yra pakankamai bendro naudojimo, kad būtų galima naudoti kitiems BLE projektams.
Schema parodyta aukščiau. Čia yra pdf versija.
Dalių sąrašas
Apytikslė vieneto kaina 2018 m. Gruodžio mėn., ~ 62 USD, neįskaitant siuntimo ir programuotojo iš 1 dalies
- „Redbear NanoV2“~ 17 USD
- „Sparkfun Si7021“pertraukimo lenta ~ 8 USD
- 2 x 53 mm x 30 mm 0,15 W 5V saulės elementai, pvz. „Overfly“- 1,10 USD
- 1 x PCB TempHumiditySensor_R1.zip ~ 25 USD už 5 nuolaidas www.pcbcart.com ARBA „Vero“plokštė (juostelinė varinė), pvz. „Jaycar HP9540“~ 5 AUD
- 2 x 1N5819 schottky diodai, pvz. Digikey 1N5819FSCT-ND ~ 1 USD
- 1 x 470R 0,4W 1% rezistorius pvz. „Digikey BC3274CT-ND“~ 0,25 USD
- 6 x 6 kontaktų išoriniai kaiščiai, pvz. „Sparkfun PRT-00116“-1,5 USD
- megztinis iš moters į moterį pvz. „Adafruit“ID: 1950 ~ 2 USD
- 3 mm x 12 mm nailono varžtai, pvz. „Jaycar HP0140“~ 3 AUD
- 3 mm x 12 mm nailono veržlės, pvz. „Jaycar HP0146“- 3 AUD
- Scotch Permanent Mounting Tape Cat 4010 pvz. iš „Amazon“~ 6,6 USD
- AAA x 2 baterijos laikiklis, pvz. „Sparkfun PRT-14219“-1,5 USD
- 2 x AAA 750mA šarminės baterijos, pvz. „Sparkfun“PRT-09274 ~ 1,0 USD Šios baterijos turėtų trukti ilgiau nei 2 metus. „Energizer“šarminės baterijos yra didesnės talpos
- Plastikinė dėžutė (ABS) 83 mm x 54 mm x 31 mm, pvz. „Jaycar HB6005“- 3 AUD
- „pfodApp“~ 10 USD
- 1 x 22uF 63V žemo ESR kondensatorius (neprivaloma), pvz. „Jaycar RE-6342“-0,5 AUD arba „Digikey P5190-ND“-0,25 USD
Konstrukcija yra tiesiai į priekį. Akumuliatoriaus laikiklis ir saulės elementai pritvirtinami prie plastikinės dėžutės su didele dvipuse juosta.
Atkreipkite dėmesį į Gnd jungties laidą nuo CLK iki GND baigtoje dalyje. Tai įdiegta po programavimo, kad CLK įvesties triukšmas nesukeltų nRF52 lusto į didelės srovės derinimo režimą
3 žingsnis: kodas - mažos galios jutiklių biblioteka, vartotojo sąsaja ir „Arduino“eskizas
Atsisiųskite pašto kodą „lp_BLE_TempHumidity_R3.zip“ir išpakuokite jį į „Arduino Sketches“katalogą. Taip pat turite įdiegti biblioteką lp_So7021 iš šio ZIP failo ir taip pat įdiegti „pfodParser“biblioteką.
Mažos galios jutiklių biblioteka, lp_Si7021
Tiek „Adafruit“, tiek „Sparkfun“teikia palaikymo bibliotekas, kad galėtų pasiekti Si7021 jutiklį, tačiau abi šios bibliotekos netinkamos naudoti labai mažai energijos. Abu naudoja kodo delsą (25), kad atidėtų jutiklio skaitymą, kol jis matuoja. Kaip nurodyta 1 dalyje, vėlavimas yra blogas. „Arduino delay“() tiesiog palaiko mikroprocesoriaus veikimą, naudodamas energiją, kol laukia, kol vėluoja laikas. Tai pažeidžia pirmąją mažos galios BLE taisyklę, dažniausiai nieko nedarykite. Pakaitinė lp_Si7021 biblioteka visus vėlavimus pakeičia lp_timers, kurie užmigdo mikroprocesorių laukdami, kol jutiklis baigs matavimą.
Kiek skiriasi „lp_Si7021“biblioteka? Naudojant originalią „SparkFun Si7021“palaikymo biblioteką ir vieną skaitymą per sekundę be serijos spaudinių, gaunamas ~ 1,2 mA vidurkis. Pakeitus „Sparkfun“biblioteką „lp_Si7021“biblioteka, vidutinė srovė sumažėja iki ~ 10uA, t.y. 100 kartų mažiau. Šiame projekte greičiausias matavimo dažnis yra kartą per 30 sekundžių, kai prijungtas mobilusis, todėl vidutinė jutiklio srovė yra mažesnė nei 1uA. Kai nėra BLE jungties, matavimo dažnis yra kartą per 10 minučių, o vidutinė jutiklio maitinimo srovė yra nereikšminga.
Vartotojo sąsaja
Viršuje yra pagrindinis ekranas ir padidintas 10 dienų valandos istorijos vaizdas. Sklypus galima priartinti ir pasukti abiem kryptimis dviem pirštais.
Vartotojo sąsaja yra užkoduota „Arduino“eskize, o tada siunčiama į „pfodApp“per pirmąjį ryšį, kur ji yra talpykloje pakartotiniam naudojimui ir atnaujinimams. Grafinis ekranas sudarytas iš piešimo primityvų. Žiūrėkite „Android“skirtus „Arduino“valdiklius, kad sužinotumėte, kaip sukurti savo valdiklius. Failuose „Termometras“, „RHGauge“ir „Button“yra tų elementų piešimo komandos.
Pastaba: nėra, jei šis ekranas yra integruotas į „pfodApp“. Visas ekranas yra visiškai valdomas jūsų „Arduino“eskizo kodu
Eskizo „lp_BLE_TempHumidity_R3.ino“metodas sendDrawing_z () apibrėžia vartotojo sąsają.
void sendDrawing_z () {dwgs.start (50, 60, dwgs. WHITE); // fonas pagal nutylėjimą yra BALTAS, jei praleistas, t.y. pradžia (50, 60); parser.sendRefreshAndVersion (30000); // iš naujo prašyti dwg kas 30 sek. į tai nekreipiama dėmesio, jei nenustatyta analizatoriaus versija // palieskite aukščiau esančius mygtukus, kad priverstinai atnaujintumėte dwgs.touchZone (). cmd ('u'). size (50, 39).send (); dwgs.pushZero (35, 22, 1,5); // perkelti nulį į dwg centrą iki 35, 22 ir 1,5 karto padidinti rhGauge.draw (); // nupieškite valdiklį dwgs.popZero (); dwgs.pushZero (18, 33); // perkelti nulį į dwg centrą iki 18, 33 skalė yra 1 (numatytasis) termometras.draw (); // nupieškite valdiklį dwgs.popZero ();
dwgs.pushZero (12,5, 43, 0,7); // perkelkite nulį į dwg centrą iki 12,5, 43 ir skalę 0,7
hrs8PlotButton.draw (); // nupieškite valdiklį dwgs.popZero (); dwgs.pushZero (37,5, 43, 0,7); // perkelti nulį į dwg centrą iki 37,5, 43 ir padidinti 0,7 dienos1PlotButton.draw (); // nupieškite valdiklį dwgs.popZero ();
dwgs.pushZero (12,5, 54, 0,7); // perkelkite nulį į dwg centrą iki 12,5, 54 ir padidinkite 0,7
days3PlotButton.draw (); // nupieškite valdiklį dwgs.popZero (); dwgs.pushZero (37,5, 54, 0,7); // perkelti nulį į dwg centrą iki 37,5, 54 ir padidinti 0,7 dienos10PlotButton.draw (); // nupieškite valdiklį dwgs.popZero (); dwgs.end (); }
„PushZero“komandos keičia kito komponento piešimo kilmę ir mastelį. Tai leidžia lengvai pakeisti mygtukų ir matuoklių dydį ir padėtį.
Pirmą kartą prisijungus, pradinis ekranas užtrunka 5 ar 6 sekundes, kol įkeliami ~ 800 baitų, kurie apibrėžia ekraną. „pfodApp“išsaugo ekraną talpykloje, todėl būsimiems atnaujinimams reikia tik siųsti pakeitimus, matuoti pozicijas ir rodmenis. Šie atnaujinimai užtrunka tik kelias sekundes, kol 128 baitai turi atnaujinti ekraną.
Ekrane yra nustatytos penkios (5) aktyvios jutiklinės zonos. Kiekvienas mygtukas turi vieną apibrėžtą metodą draw (), todėl galite spustelėti jį, kad atidarytumėte atitinkamą grafiką, o viršutinė ekrano pusė sukonfigūruota kaip trečioji jutiklinė zona
dwgs.touchZone (). cmd ('u'). dydis (50, 39).siųsti ();
Kai spustelėsite ekraną virš mygtukų, komanda „u“dwg siunčiama į jūsų eskizą, kad būtų priverstas atlikti naują matavimą ir atnaujinti ekraną. Paprastai prisijungus atnaujinimai vyksta tik kas 30 sekundžių. Kiekvienas piešinio paspaudimas ar atnaujinimas priverčia atlikti naują matavimą. Atsakymas iš „Arduino“eskizo į „pfodApp“atidedamas, kol bus baigtas naujas matavimas (~ 25 mS), kad atnaujinus būtų galima atsiųsti naujausią vertę.
Arduino eskizas
„Arduino“eskizas, lp_BLE_TempHumidity_R3.ino, yra patobulinta 1 dalyje naudojamo eskizo pavyzdžio versija. „Lp_BLE_TempHumidity_R3.ino“eskizas meniu pakeičia aukščiau pateiktu piešiniu. Jis taip pat prideda lp_Si7021 jutiklių palaikymą ir duomenų masyvus, kad būtų galima išsaugoti 10 minučių ir valandinius istorinius matavimus.
Pagrindinė „lp_BLE_TempHumidity_R3.ino“eskizo komplikacija yra siužeto duomenų siuntimas. Atliekant matavimus, readRHResults () tvarko rezultatų surinkimą ir išsaugojimą istoriniuose masyvuose. Masyvai yra 120 ilgio, tačiau kai duomenys siunčiami, pirmieji 30 duomenų taškų yra skirti smulkesniam laiko tarpui.
Siunčiant rodyti 200 nelyginių brėžinių taškų, reikia atsižvelgti į keletą punktų:-
- Kiekvienas duomenų taškas yra ~ 25 baitų ilgio CSV teksto formatu. Taigi 150 taškų yra 3750 baitų duomenų. „Lp_BLESerial“klasėje yra 1536 baitų buferis, iš kurio 1024 yra pakankamai didelis, kad būtų galima pateikti didžiausią pfod pranešimą. Kiti 512 baitai yra skirti duomenims siųsti. Kai istoriniai duomenys užpildys 512 baitų, tolimesnių duomenų siuntimas bus atidėtas, kol buferyje atsiras vietos.
- Kad brėžinio duomenys nebūtų sulėtinti pagrindinio ekrano atnaujinimų, sklypo duomenys siunčiami tik tuo metu, kai rodomas brėžinio ekranas. Kai vartotojas grįžta į pagrindinį ekraną, siužeto duomenų siuntimas pristabdomas. Sklypo duomenų siuntimas atnaujinamas, kai vartotojas spustelėja brėžinio mygtuką, kad vėl būtų rodomas sklypas.
- Istoriniai siužetai prasideda nuo 0 (dabar) ir eina atgal laiku. Jei po paskutinio brėžinio rodymo nebuvo atliktas naujas matavimas, ankstesni duomenys, kurie jau buvo atsisiųsti, iškart vėl rodomi. Jei yra naujas matavimas, jis pridedamas prie ankstesnių sklypo duomenų.
- Kai monitorius pirmą kartą įjungiamas, istorinių rodmenų nėra ir 0 masyvuose saugomas kaip netinkamas rodmuo. Kai rodomas brėžinys, neteisingi rodmenys tiesiog praleidžiami, todėl grafikas yra trumpesnis.
Celsijaus ir Farenheito
„Lp_BLE_TempHumidity_R3.ino“eskizas rodo ir piešia duomenis Celsijaus laipsniais. Norėdami konvertuoti rezultatus į Fahrenheitą, pakeiskite visus įvykius
parser.print (sensor. Temp_RawToFloat (..
su
parseris.print (sensor. CtoF (sensor. Temp_RawToFloat (…
Unicode degC simbolį Octal / 342 / 204 / 203 pakeiskite degF simboliu / 342 / 204 / 211
„pfodApp“parodys bet kurį „Unicode“, kurį gali rodyti jūsų mobilusis telefonas.
Norėdami gauti daugiau informacijos, žr. Ne ASCII simbolių naudojimas „Arduino“. Taip pat pakeiskite MIN_C, MAX_C nustatymus termometre. H. Galiausiai sureguliuokite sklypo ribas, kaip norite, pvz. pokytis | Temp C ~ 32 ~ 8 ~ deg C |
sakyti
| Temperatūra F ~ 90 ~ 14 ~ deg F |
4 žingsnis: tiekimo srovės matavimas
Naudojant biblioteką „lp_Si7021“, net ir matuojant temperatūrą/drėgmę kas 10 sekundžių, vidutinė maitinimo srovė prisideda tik ~ 1uA, todėl pagrindinis tiekimo srovės, taigi ir baterijos veikimo, veiksnys yra srovė, naudojama BLE reklamai ir ryšiui bei duomenų perdavimui..
Prijunkite temperatūros/drėgmės plokštę prie 1 dalyje aprašyto programuotojo, kaip parodyta aukščiau.
Kai saulės elementai ir baterijos yra atjungti, „Vin“ir „Gnd“yra prijungti prie programuotojo „Vdd“ir „Gnd“(geltonos ir žalios spalvos laidai), o „SWCLK“ir „SWDIO“- prie programuotojo antraštės „Clk“ir „SIO“(mėlynos ir rožinės spalvos laidai).
Dabar galite užprogramuoti „NanoV2“ir išmatuoti maitinimo srovę, kaip aprašyta 1 dalyje.
Įdiekite mažos galios Si7021 biblioteką iš šio ZIP failo, lp_Si7021.zip ir įdiekite „pfodParser“biblioteką bei išpakuokite „lp_BLE_TempHumidity_R3.zip“į „Arduino“eskizų katalogą ir užprogramuokite „Temp/Humditiy“plokštę naudodami lp_BLE_TempHumidity_R3.ino
Kaip minėta aukščiau, jutiklio indėlis yra <1uA, vidutinis, naudojant didžiausią šiame projekte naudojamą matavimo greitį, todėl BLE reklama ir ryšio parametrai yra lemiamas akumuliatoriaus veikimo laikas.
BLE reklamos ir ryšio parametrai, turintys įtakos dabartiniam vartojimui, yra šie:-„Tx Power“, reklamos intervalas, maksimalus ir minimalus ryšio intervalai ir vergų vėlavimas.
Pastaba: naudojant aukščiau pateiktas jungtis, tiekime yra du (2) reguliatoriai, vienas „NanoV2“plokštėje per „Vin“, o MAX8881 - programuotojo maitinimo šaltinyje. Tai reiškia, kad dėl antrojo reguliatoriaus išmatuotos tiekimo srovės bus ~ 5uA didesnės nei faktinės. Žemiau pateiktos vertės yra išmatuotos srovės, atėmus šį papildomą 5uA.
Tx galia
Tx Maitinimo efektai tiekia srovę tiek prijungus, tiek reklamuojant (neprisijungus). Šis projektas naudoja didžiausios galios nustatymą (+4) ir užtikrina geriausią diapazoną ir didžiausią triukšmo atsparumą patikimiausiems ryšiams. Norėdami pakeisti galios nustatymą, galite naudoti metodą lp_BLESerial setTxPower (). Galiojančios vertės yra didėjančia galia -40, -30, -20, -16, -12, -8, -4, 0 +4. Prieš skambindami setTxPower (), turite paskambinti metodu lp_BLESerial begin (). Peržiūrėkite lp_BLE_TempHumidity_R3.ino eskizą.
Galite eksperimentuoti mažindami „Tx Power“, tačiau kompromisas yra mažesnis, o ryšys nutrūksta dėl trikdžių. Šiame projekte „Tx Power“paliekama numatytoji reikšmė - +4. Kaip matysite toliau, net ir pasirinkus šį nustatymą, vis tiek galima pasiekti labai mažą maitinimo srovę.
Reklamos intervalas
Esant tam tikrai „Tx Power“, kai nėra ryšio, reklamos intervalas nustato vidutines srovės sąnaudas. Rekomenduojamas diapazonas yra nuo 500 iki 1000 mS. Čia buvo naudojamas 2000 mS. Kompromisas yra tas, kad ilgesni reklamos intervalai reiškia, kad jūsų mobilusis telefonas lėčiau suranda įrenginį ir nustato ryšį. Viduje reklamos intervalai nustatyti 0,625 mS kartotiniais intervale nuo 20 mS iki 10,24 sek. Naudojant metodą lp_BLESerial setAdvertisingInterval (), patogumo dėlei mS yra argumentas. +4 TxPower ir 2000mS reklamos intervalas dabartinis suvartojimas buvo ~ 18uA. 1000 mS reklamos intervalas buvo ~ 29uA. 2 -ajame leidime buvo naudojamas 2000 mS reklamos intervalas, tačiau tai lėmė ryšius. 3 pakeitimas pakeistas į 1000 mS reklamos intervalą, kad ryšiai būtų greitesni.
Maksimalus ir minimalus ryšio intervalai
Užmezgus ryšį, ryšio intervalas nustato, kaip dažnai mobilusis telefonas kontaktuoja su įrenginiu. „Lp_BLESerial setConnectionInterval“() leidžia nustatyti siūlomą maksimumą ir min., Tačiau mobilusis valdo, koks iš tikrųjų yra ryšio intervalas. Patogumo dėlei argumentai setConnectionInterval () yra mS, bet viduje prisijungimo intervalai yra 1,25 mS, nuo 7,5 mS iki 4 sek.
Numatytasis nustatymas yra nustatytasConnectionInterval (100, 150), t. Y. Nuo 100 mS iki max 150 mS. Padidinus šias vertes prijungimo metu sumažėja maitinimo srovė, tačiau kompromisas yra lėtesnis duomenų perdavimas. Kiekvienas ekrano atnaujinimas užtrunka apie 7 BLE pranešimus, o visos 36 valandų 10 minučių matavimai užtrunka apie 170 BLE pranešimų. Taigi, padidinus ryšio intervalus, sulėtėja ekrano atnaujinimas ir grafikas.
„Lp_BLESerial“klasėje yra 1536 baitų siuntimo buferis ir iš šio buferio siunčiamas tik vienas 20 baitų blokas, kiekvienas maksimalus ryšio intervalas, kad būtų išvengta BLE nuorodos užtvindymo duomenimis. Be to, siunčiant sklypo duomenis, eskizas siunčia duomenis tik tol, kol laukiama 512 baitų, tada vėluoja siųsti daugiau duomenų, kol bus išsiųsti kai kurie duomenys. Taip išvengiama siuntimo buferio užtvindymo. Šis siuntimo slopinimas daro duomenų perdavimą į mobilųjį patikimą, tačiau jis nėra optimizuotas maksimaliam perdavimui.
Šiame projekte prisijungimo intervalai buvo palikti kaip numatytosios vertės.
Vergų vėlavimas
Kai nėra duomenų, kuriuos reikia siųsti į mobilųjį telefoną, įrenginys gali pasirinktinai ignoruoti kai kuriuos ryšio pranešimus iš mobiliojo telefono. Tai taupo „Tx Power“ir maitinimo srovę. Slave Latentity nustatymas - tai ryšio pranešimų, kurių reikia nepaisyti, skaičius. Numatytasis yra 0. Šiam nustatymui pakeisti gali būti naudojamas lp_BLESerial setSlaveLatency () metodas.
Numatytasis vergų vėlavimas 0 davė ~ 50uA maitinimo srovę, nekreipdamas dėmesio į ekrano atnaujinimus kas 30 sekundžių, tačiau įskaitant „KeepAlive“pranešimus labai 5 sekundes. Nustačius vergų delsą į 2, vidutinė prijungto maitinimo srovė buvo ~ 25uA. Vergų delsos nustatymas 4 davė ~ 20uA. Atrodo, kad aukštesni nustatymai nesumažina tiekimo srovės, todėl buvo naudojamas 4 pavaldumo delsos nustatymas.
Prisijungus, kas 30 sekundžių „pfodApp“prašo atnaujinti ekraną. Tai priverčia matuoti jutiklį ir siunčia atgal duomenis, kad atnaujintų grafinį ekraną. Šis atnaujinimas suteikia papildomą ~ 66uA 2 sekundes po 30 sekundžių. Tai yra vidutiniškai 4,4uA per 30 sekundžių. Pridėjus tai prie 20uA, gaunama vidutinė prijungimo srovės srovė ~ 25uA
5 veiksmas: bendra maitinimo srovė ir baterijos veikimo laikas
Naudojant aukščiau pateiktus nustatymus, nustatytus lp_BLE_TempHumidity_R3.ino, bendra tiekimo srovė prijungus ir atnaujinant ekraną kas 30 sekundžių, maždaug 25uA. Kai neprijungtas, jis yra maždaug 29uA.
Norint apskaičiuoti baterijos veikimo laiką, manoma, kad nuolatinė srovė yra ~ 29uA.
Įvairios baterijos turi skirtingą talpą ir įtampos charakteristikas. Čia aptariamos baterijos CR2032, CR2450 (N), 2 x AAA šarminės, 2 x AAA ličio ir LiPo.
Akumuliatoriaus suvestinė
Jei naudojate „Solar Assist“, prie šių akumuliatoriaus veikimo laikų pridėkite 50% (darant prielaidą, kad apšvietimas yra 8 valandos per dieną)
Pastaba: 22uF LowESR kondensatorius (C1), be įmontuoto „NanoV2 22uF“kondensatoriaus, saugo saulės elementų srovę ir tiekia ją TX srovės impulsams. Kitaip tariant, akumuliatorius tiekia dalį TX srovės. Šis papildomas 22uF LowESR prideda apie 10% akumuliatoriaus srovės, kai saulės elementas nėra maitinimo šaltinis, tačiau taip pat prailgina baterijos veikimo laiką, kompensuodamas didėjantį vidinį akumuliatoriaus pasipriešinimą, kai baterija baigiasi. Žemiau pateikti matavimai atlikti be papildomo 22uF kondensatoriaus.
CR2032 - 235 mAh - baterijos veikimo laikas 10 mėnesių dėl didelio savaiminio išsikrovimo.
CR2032
Šios monetos elemento talpa paprastai yra 235 mAh („Energizer Battery“), vardinė 3 V įtampa ir nurodyta 2 V iškrovos įtampa. Tai reiškia, kad baterijos veikimo laikas yra 8100 valandų arba ~ 0,9 metų. Tačiau vidinis elementų pasipriešinimas didėja, kai akumuliatorius baigiasi, todėl gali nepavykti pateikti maksimalių Tx srovės impulsų. Norint sumažinti šį efektą, galima naudoti didesnį tiekimo kondensatorių, bet, tarkim, 10 mėnesių.
CR2450 (N)
Šios monetos elemento talpa paprastai yra 620mAHr (540mAHr CR2450N), vardinė 3 V įtampa ir nurodyta 2 V išleidimo įtampa. Tai reiškia, kad baterijos veikimo laikas yra 22, 400 val. Arba ~ 2 metai 6 m (CR2450N - 18600 val. - 2 m. 2 m.). Tačiau vidinis elementų pasipriešinimas didėja, kai akumuliatorius baigiasi, todėl gali nepavykti pateikti maksimalių Tx srovės impulsų. Šiam poveikiui sumažinti galima naudoti didesnį tiekimo kondensatorių, tačiau, tarkime, 2 metų 4 m (2 metų N) tarnavimo laiką.
Pastaba: CR2450N versija turi storesnę lūpą, kuri padeda išvengti netinkamo montavimo CR2450N laikiklyje. Galite įterpti CR2450N ir CR2450 langelį į CR2450 laikiklį, bet negalite įterpti CR2450 langelio į CR2450N laikiklį
2 x AAA šarminės ląstelės
Šios baterijos yra apie 1250 mAh („Energizer Battery“) talpos labai mažoms srovėms, nominali įtampa yra 2x1,5 V = 3 V ir nurodyta iškrovos įtampa yra 2x0,8 V = 1,6 V. Tačiau ši nurodyta iškrovos įtampa yra mažesnė už Si7021 jutiklio darbinę įtampą (1,9 V), todėl bateriją galima naudoti tik iki ~ 1V. Tai sumažina talpą maždaug 10% iki 15%, ty ~ 1000 mAh.
Tai reiškia, kad baterijos veikimo laikas yra 34, 500 valandų arba ~ 4 metai. Tačiau vidinis elementų pasipriešinimas didėja, kai akumuliatorius baigiasi, todėl gali nepavykti pateikti maksimalių Tx srovės impulsų. Norint sumažinti šį efektą, galima naudoti didesnį tiekimo kondensatorių, tačiau, tarkime, 3 metų 10 m. Pastaba Šarminės baterijos savaime išsikrauna nuo 2% iki 3% per metus.
2 x AAA ličio elementai
Šių akumuliatorių talpa yra apie 1200 mAh („Energizer Battery“), nominali įtampa yra 2x1,7 V = 3,4 V, esant mažoms srovėms, ir iškrovos įtampa yra 2x1,4 V = 2,4 V. Tai reiškia, kad baterijos veikimo laikas yra 41, 400 val. Arba 4 metai 8 m.
Įkraunama LiPo baterija
Šios baterijos yra įvairios talpos - nuo 100 mAh iki 2000 mAh, plokščio formato, jų įkrovimo įtampa yra 4,2 V, o iškrovimo įtampa -> 2,7 V. Tačiau jie savaime išsikrauna 2–3% per mėnesį (t. Y. Nuo 24% iki 36% per metus), todėl nėra tokie tinkami šiam darbui kaip kitos baterijos.
6 veiksmas: tiekimo alternatyvos - „Solar Assist“, tik baterija, tik „Solar“
Baterija ir „Solar Assist“
Aukščiau pateikta konstrukcija naudoja „Battery plus Solar Assist“maitinimo šaltinį. Kai saulės baterijos sukuria didesnę įtampą nei akumuliatoriaus įtampa, saulės elementai maitina monitorių, taip prailgindami baterijos veikimo laiką. Paprastai baterijos tarnavimo laikas gali būti pratęstas dar 50%.
Naudojamos saulės baterijos yra mažos, 50 mm x 30 mm, pigios, ~ 0,50 USD ir mažos galios. Paprastai tai yra 5 V plokštės, tačiau norint gauti 5 V, jiems reikia tiesioginių ryškių saulės spindulių. Šiame projekte dvi plokštės yra sujungtos nuosekliai, kad pakeltumėte monitorių šalia lango, kur nėra tiesioginių saulės spindulių, pakanka pakeisti bateriją. Net ir gerai apšviesto kambario arba stalinės lempos pakanka, kad saulės elementai generuotų> 3.3V esant> 33uA ir perimtų iš akumuliatoriaus.
Buvo sukurta paprasta bandymų panelė, skirta nustatyti, kur galima būtų patalpinti temperatūros / drėgmės monitorių, esantį saulėje ir vis tiek būti maitinamas saulės energija. Kaip matote iš aukščiau esančios nuotraukos, dvi plokštės, prijungtos prie 100K rezistoriaus, sukuria 5,64 V per 100K, ty 56uA srovę esant 5,64 V. Tai yra daugiau nei pakankamas monitoriaus maitinimas iš akumuliatoriaus. Bet kokia įtampa, viršijanti nominalią 3 V akumuliatoriaus įtampą, reiškia, kad saulės baterijos maitins monitorių, o ne akumuliatorių.
Du diodai, esantys temperatūros drėgmės monitoriaus grandinėje, atskiria vienas nuo kito saulės elementus ir baterijas ir saugo, kad jie nebūtų sujungti atvirkštinio poliškumo. 10 V 1 W „Zener“ir 470R serijos rezistorius apsaugo „NanoV2“įmontuotą reguliatorių nuo per didelės įtampos, kurią sukelia du saulės elementai, ypač esant saulei, ypač jei 12 V elementai naudojami vietoj 5 V. Įprastai veikiant esant <5V, 10V „Zener“traukia tik ~ 1uA.
Tik baterija
Jei norite tiekti tik akumuliatorių, tiesiog praleiskite R1, D1 ir D3 bei saulės elementus. D1 taip pat galite pakeisti vielos gabalu, jei nenorite apsaugos nuo atvirkštinio poliškumo.
Tik Saulės
Norint maitinti monitorių tik iš saulės elementų, be akumuliatoriaus, reikalinga kitokia maitinimo grandinė. Problema ta, kad nors monitorius veiks esant 29uA, įjungus „nRF52“0,32 sek. Pritraukia ~ 5 mA. Aukščiau parodyta grandinė (pdf versija) išjungia MAX8881 reguliatorių, kol įvesties kondensatoriai, 2 x 1000uF, įkraunami iki 4,04 V. Tada MAX6457 išleidžia MAX8881 SHDN įvestį, kad įjungtų nRF52 (NanoV2). 2 x 1000uF kondensatoriai tiekia reikiamą paleidimo srovę.
Tai leidžia monitoriui įsijungti, kai tik pakanka saulės energijos, kad jis veiktų esant 29uA.
7 žingsnis: Išvada
Šioje pamokoje buvo pateiktas baterijos/saulės energija varomas temperatūros drėgnumo monitorius, kaip pavyzdys labai mažos galios BLE projektas „Arduino“, skirtas lustui nRF52832. Tiekimo srovės ~ 29uA, kur pasiekiamos derinant ryšio parametrus. Dėl to CR2032 monetos elementų baterijos tarnavimo laikas viršijo 10 mėnesių. Ilgesnis didesnės talpos monetų elementams ir baterijoms. Pridėjus du pigius saulės elementus, baterijos veikimo laikas lengvai pailgėjo 50% ar daugiau. Norint apšviesti monitorių nuo saulės elementų, pakanka ryškios kambario šviesos arba stalinės lempos.
Buvo pristatyta speciali maitinimo grandinė, leidžianti valdyti monitorių tik iš mažos talpos saulės elementų.
Nemokamas „pfodDesigner“leidžia jums sukurti meniu/antrinius meniu, sudaryti grafiką pagal datą/laiką ir registruoti duomenis, tada sugeneruoti jums mažos galios „Arduino“eskizą. Čia pasirinktinė sąsaja buvo užkoduota naudojant „pfodApp“piešimo primityvus. Prisijungus prie „pfodApp“rodoma vartotojo sąsaja ir atnaujinami rodmenys, kol monitorius naudoja ~ 29uA
„Android“programavimas nereikalingas. „pfodApp“visa tai tvarko.
Rekomenduojamas:
Temperatūros, drėgmės monitorius - „Arduino Mega + Ethernet W5100“: 5 žingsniai
Temperatūros, drėgmės monitorius - „Arduino Mega + Ethernet W5100“: 1 modulis - FLAT - aparatinė įranga: „Arduino Mega 2560 Wiznet W5100 Ethernet“skydas 8x DS18B20 temperatūros jutiklis „OneWire“magistralėje - padalintas į 4 „OneWire“magistrales (2,4,1,1) 2x skaitmeninė temperatūra ir drėgmės jutiklis DHT22 (AM2302) 1x temperatūros ir drėgmės
Temperatūros ir drėgmės monitorius: 7 žingsniai
Temperatūros ir drėgmės monitorius: Yra du tikri ugnies būdai, kaip greitai sunaikinti augalus. Pirmasis būdas yra juos iškepti arba užšaldyti iki kraštutinės temperatūros. Arba, laistydami juos per arba per daug, jie nudžius arba supūva šaknys. Žinoma, ten
Lengvas labai mažos galios BLE „Arduino“3 dalyje - „Nano V2“pakeitimas - 3 pakeitimas: 7 žingsniai (su nuotraukomis)
Lengvas labai mažos galios BLE „Arduino“3 dalyje - „Nano V2“pakeitimas - 3 red.: Atnaujinimas: 2019 m. Balandžio 7 d. - „lp_BLE_TempHumidity“3 versija, prideda datos ir laiko grafikus, naudojant „pfodApp V3.0.362+“, ir automatinį droselį siunčiant duomenis Atnaujinta: kovo 24 d. 2019 m. - „lp_BLE_TempHumidity“2 -oji versija, pridėta daugiau siužeto parinkčių ir „i2c_ClearBus“, pridėta GT832E
Belaidis drėgmės monitorius (ESP8266 + drėgmės jutiklis): 5 žingsniai
Belaidis drėgmės monitorius (ESP8266 + drėgmės jutiklis): perku petražoles puode, o didžiąją dienos dalį dirva buvo sausa. Taigi aš nusprendžiu atlikti šį projektą, apie dirvožemio drėgmės jutimą puode su petražolėmis, kad patikrintų, kada man reikia užpilti dirvą vandeniu. Manau, kad šis jutiklis (talpinis drėgmės jutiklis v1.2) yra geras, nes
Mažos galios „Arduino“temperatūros monitorius: 4 žingsniai
Mažos galios „Arduino“temperatūros monitorius: šioje instrukcijoje mes sukuriame dar vieną temperatūros monitorių, naudojant DS18B20 temperatūros jutiklį. Tačiau šis projektas yra kitoks. Jis gali tarnauti su baterijomis beveik 1,5 metų! Taip! Naudodami „Arduino“mažos galios biblioteką, galime įgyvendinti šį projektą