INHOUDSOPGAWE:

Maklik baie lae krag BLE in Arduino Deel 2 - Temperatuur-/humiditeitsmonitor - Rev 3: 7 stappe
Maklik baie lae krag BLE in Arduino Deel 2 - Temperatuur-/humiditeitsmonitor - Rev 3: 7 stappe

Video: Maklik baie lae krag BLE in Arduino Deel 2 - Temperatuur-/humiditeitsmonitor - Rev 3: 7 stappe

Video: Maklik baie lae krag BLE in Arduino Deel 2 - Temperatuur-/humiditeitsmonitor - Rev 3: 7 stappe
Video: SKR 1.4 - Основы с новой прошивкой Marlin 2.0.9.1 2024, November
Anonim
Maklik baie lae krag BLE in Arduino Deel 2 - Temperatuur-/humiditeitsmonitor - Rev 3
Maklik baie lae krag BLE in Arduino Deel 2 - Temperatuur-/humiditeitsmonitor - Rev 3
Maklik baie lae krag BLE in Arduino Deel 2 - Temperatuur-/humiditeitsmonitor - Rev 3
Maklik baie lae krag BLE in Arduino Deel 2 - Temperatuur-/humiditeitsmonitor - Rev 3
Maklik baie lae krag BLE in Arduino Deel 2 - Temperatuur-/humiditeitsmonitor - Rev 3
Maklik baie lae krag BLE in Arduino Deel 2 - Temperatuur-/humiditeitsmonitor - Rev 3

Opdatering: 23 November 2020 - Eerste vervanging van 2 x AAA -batterye sedert 15 Januarie 2019, dws 22 maande vir 2xAAA Alkaline Update: 7 April 2019 - Rev 3 van lp_BLE_TempHumidity, voeg datum-/tydplotte by, met behulp van pfodApp V3.0.362+, en outomatiese versnelling by stuur data

Opdatering: 24 Maart 2019 - Rev 2 van lp_BLE_TempHumidity, voeg meer plotopsies en i2c_ClearBus by

Hierdie instruksie, 'n baie lae krag temperatuur humiditeitsmonitor, is deel 2 van 3.

Deel 1 - Bou baie lae krag BLE -toestelle, maklik gemaak met Arduino -omhulsels om Arduino op te stel om nRF52 laesterk toestelle, die programmeermodule en die meting van die stroom. Dit dek ook gespesialiseerde laestroom -timers en vergelykers en ingevoerde insette en die gebruik van pfodApp om aan te sluit op en die nRF52 -toestel te beheer.

Deel 2 - 'n Baie lae krag temperatuur humiditeitsmonitor, hierdie een, dek die gebruik van 'n Redbear Nano V2 -module en 'n Si7021 temperatuur- / humiditeitsensor om 'n battery met lae krag / sonmonitor te bou. Dit dek ook die aanpassing van die Si7021 -biblioteek tot lae krag, die instelling van die BLE -toestel om sy huidige verbruik van <25uA te verminder en 'n pasgemaakte temperatuur/humiditeitsvertoning vir u selfoon te ontwerp.

Deel 3 - 'n Redbear Nano V2 -vervangingsbedekking wat ander nRF52 -gebaseerde modules gebruik in plaas van die Nano V2. Dit dek die keuse van toevoerkomponente, konstruksie, die verwydering van die nRF52 -chipprogrammeringsbeskerming, die gebruik van NFC -penne as normale GPIO en die definisie van 'n nuwe nRF52 -bord in Arduino.

Hierdie instruksies is 'n praktiese toepassing van deel 1 -gebou met 'n baie lae krag BLE -toestelle wat maklik gemaak is met Arduino deur die bou van 'n baie lae krag BLE temperatuur- en humiditeitsmonitor. Die monitor sal jare lank op Coin Cell of 2 x AAA -batterye werk, selfs langer met sonkraghulp. Hierdie handleiding behandel die instelling van die BLE -parameters vir 'n lae kragverbruik en hoe u u toestel slegs van battery OF battery + sonkrag OF sonkrag kan dryf.

Behalwe die huidige temperatuur en humiditeit, bewaar die monitor die laaste 36 uur van 10 minute lesings en die laaste 10 dae van uurlesings. Dit kan op u Android -selfoon getoon word en die waardes word in 'n loglêer gestoor. Geen Android -programmering is nodig nie; pfodApp hanteer dit alles. Die Android -skerm en grafiek word volledig beheer deur u Arduino -skets, sodat u dit kan aanpas soos benodig.

'N Redbear Nano V2 -bord word gebruik vir die nRF52832 BLE -komponent en 'n Sparkfun Si7021 -uitbreekbord word gebruik vir die temperatuur- / humiditeitsensor. 'N Gewysigde lae -kragbiblioteek word gebruik met die Si7021. 'N Klein PCB is ontwerp om die NanoV2 en komponente te voorsien. Aangesien daar geen komponente op die oppervlak gebruik word nie, kan u dit net so maklik op vero -bord bou. Drie kragtoevoerweergawes word gedek. i) Battery plus Solar assist, ii) Only Battery, iii) Only Solar. Die Solar Only -opsie het geen batterystoor nie, en dit werk slegs as daar lig is. 'N Helder kamerlig of lessenaarlamp is voldoende.

Buitelyn

Hierdie projek het 4 relatiewe onafhanklike dele:-

  1. Seleksie en konstruksie van komponente
  2. Kode - Biblioteek met lae kragsensor, gebruikerskoppelvlak en Arduino -skets
  3. Meet voedingsstroom en batterylewe
  4. Voorsieningsalternatiewe - Sonkraghulp, Slegs battery, Slegs sonkrag

Stap 1: Seleksie van komponente

Komponentkeuse

Soos genoem in Deel 1-Die truuk om 'n oplossing met 'n baie lae krag te kry, is om meestal niks te doen nie, die stroom te verminder deur eksterne optel-/aftrekweerstands op insette en geen ekstra komponente te hê nie. Hierdie projek sal elkeen van die truuks gebruik om 'n oplossing met 'n lae krag te kry.

Die nRF52832 -komponent

Die nRF52832 -chip kan werk met 'n kragtoevoer van tussen 1.7V en 3.6V (absolute maksimum spanning 3.9V). Dit beteken dat u die chip direk vanaf 'n muntstuk of 2 x AAA -batterye kan dryf. Dit is egter verstandig om 'n spanningsreguleerder by te voeg om die chip teen oorvolt te beskerm. Hierdie ekstra komponent het 'n kragkoste, maar in die geval van die NanoV2-bord verbruik die boordreguleerder, TLV704, minder as 5.5uA maksimum, gewoonlik slegs 3.4uA. Vir hierdie klein ekstra kragverbruik kry u beskerming vir tot 24V toevoerinsette.

Die Si7021 -komponent

Die Si7021 -sensor self teken gewoonlik <1uA as hy geen meting neem nie, dit wil sê in stand -by, en tot 4mA wanneer die data via I2C gestuur word. Aangesien ons nie voortdurend meet nie, is die 4mA nie 'n belangrike deel van die gemiddelde toevoerstroom nie. Met 'n lesing van baie 30 sekondes word minder as 1uA bygevoeg tot die gemiddelde toevoerstroom, sien die metings van stroom onder.

Daar is twee gerieflike Si7021 -uitbreekborde. Een van Adafruit en een van Sparkfun. 'N Vinnige blik op die twee borde sal u vertel dat die Adafruit -bord baie meer komponente bevat as die Sparkfun -bord, sodat u geneig sou wees om die Sparkfun -bord te kies. As ons na die skemas vir elke bord kyk, blyk dit dat die Sparkfun-bord slegs die kaal sensor en twee 4k7 pullup-resisotors is, terwyl die Adafruit-bord 'n ingeboude MIC5225-reguleerder het wat gewoonlik 29uA trek. Dit is beduidend wanneer die totale stroom vir die res van die stroombaan <30uA is. Aangesien ons reeds 'n reguleerder vir die nRF52832 -chip het, is hierdie ekstra komponent nie nodig nie en kan die Si7021 van die 3.3V -voeding voorsien word. Hierdie projek gebruik dus die Si7021 -uitbreekbord van Sparkfun.

verminder die stroom deur eksterne optel-/aftrekweerstands op insette

Die 4K7 I2C pullup -weerstande het nie 'n baie hoë waarde nie en sal 0,7mA trek as dit laag word. Dit sou 'n probleem wees as hulle op 'n skakelaarinvoer was wat vir lang periodes gegrond was. In hierdie projek word die stroom deur hierdie weerstande egter geminimaliseer deur slegs die I2C -koppelvlak selde en slegs vir 'n kort tydjie te gebruik. Die I2C-lyne word meestal nie gebruik nie en is in hoë / dristatus, sodat daar geen stroom deur hierdie weerstande vloei nie.

Stap 2: Konstruksie

Konstruksie
Konstruksie
Konstruksie
Konstruksie
Konstruksie
Konstruksie

Die projek is op 'n klein PCB gebou, maar aangesien daar geen SMD -komponente is nie, kan dit net so maklik met vero -bord gebou word. Die PCB is vervaardig deur pcbcart.com uit hierdie Gerber -lêers, TempHumiditySensor_R1.zip Die PCB is algemeen genoeg om vir ander BLE -projekte gebruik te word.

Die skematiese weergawe hierbo. Hier is 'n pdf -weergawe.

Onderdele lys

Geskatte koste per eenheid op Desember 2018, ~ US $ 62, uitgesluit aflewering en die programmeerder uit Deel 1

  • Redbear NanoV2 ~ US $ 17
  • Sparkfun Si7021 uitbreekbord ~ US $ 8
  • 2 x 53mm x 30mm 0,15W 5V sonselle, bv. Overfly ~ US $ 1,10
  • 1 x PCB TempHumiditySensor_R1.zip ~ US $ 25 vir 5 af www.pcbcart.com OF Vero -bord (strook koper) bv. Jaycar HP9540 ~ AUD $ 5
  • 2 x 1N5819 schottky diodes, bv. Digikey 1N5819FSCT-ND ~ US $ 1
  • 1 x 470R 0.4W 1% weerstand bv. Digikey BC3274CT-ND ~ 0,25 dollar
  • 6 x 6 pen mannetjieskoppenne bv. Sparkfun PRT-00116 ~ US $ 1.5
  • vroulike tot vroulike trui bv. Adafruit ID: 1950 ~ US $ 2
  • 3mm x 12mm nylon skroewe, bv. Jaycar HP0140 ~ AUD $ 3
  • 3mm x 12mm nylon moere, bv. Jaycar HP0146 ~ AUD $ 3
  • Scotch Permanent Mounting Tape Cat 4010 bv. van Amazon ~ 6,6 dollar
  • AAA x 2 batteryhouer, bv. Sparkfun PRT-14219 ~ 1.5 $
  • 2 x AAA 750mA alkaliese batterye, bv. Sparkfun PRT-09274 ~ US $ 1.0 Hierdie batterye behoort> 2 jaar te hou. Energizer alkaliese batterye het 'n hoër kapasiteit
  • Plastiekboks (ABS) 83 mm x 54 mm x 31 mm, bv. Jaycar HB6005 ~ AUD $ 3
  • pfodApp ~ US $ 10
  • 1 x 22uF 63V Lae ESR -kondensator (opsioneel) bv. Jaycar RE-6342 ~ AUD $ 0.5 of Digikey P5190-ND ~ US $ 0.25

Die konstruksie is reguit vorentoe. Die batteryhouer en die sonselle word vasgemaak aan die plastiekboks met dubbelzijdige band.

Let op die Gnd -skakeldraad van die CLK na GND in die voltooide deel. Dit word geïnstalleer NA die programmering om te verhoed dat geraas op die CLK -invoer die nRF52 -chip in 'n hoë huidige ontfoutingsmodus veroorsaak

Stap 3: Kode - Lae krag sensor biblioteek, gebruikerskoppelvlak en Arduino Sketch

Kode - Biblioteek met lae kragsensor, gebruikerskoppelvlak en Arduino -skets
Kode - Biblioteek met lae kragsensor, gebruikerskoppelvlak en Arduino -skets
Kode - Biblioteek met lae kragsensor, gebruikerskoppelvlak en Arduino -skets
Kode - Biblioteek met lae kragsensor, gebruikerskoppelvlak en Arduino -skets
Kode - Biblioteek met lae kragsensor, gebruikerskoppelvlak en Arduino -skets
Kode - Biblioteek met lae kragsensor, gebruikerskoppelvlak en Arduino -skets

Laai die poskode, lp_BLE_TempHumidity_R3.zip af, en pak dit uit in u Arduino Sketches -gids. U moet ook die lp_So7021 -biblioteek vanuit hierdie zip -lêer installeer en ook die pfodParser -biblioteek installeer.

Lae krag sensor biblioteek, lp_Si7021

Beide Adafruit en Sparkfun bied ondersteuningsbiblioteke vir toegang tot die Si7021 -sensor, maar beide die biblioteke is nie geskik vir 'n baie lae kragverbruik nie. Albei gebruik 'n vertraging (25) in die kode om die lees van die sensor te vertraag terwyl dit die meting neem. Soos in deel 1 opgemerk, is vertragings kwaad. Die Arduino-vertraging () laat die mikroverwerker net met krag werk terwyl dit wag totdat die vertraging uit is. Dit breek die eerste reël van lae krag BLE, doen meestal niks. Die vervangende lp_Si7021-biblioteek vervang alle vertragings met lp_timers wat die mikroverwerker aan die slaap maak terwyl hy wag totdat die sensor sy meting voltooi het.

Hoeveel verskil die biblioteek lp_Si7021? As u die oorspronklike SparkFun Si7021 -ondersteuningsbiblioteek gebruik en 'n sekonde lees sonder seriële afdrukke, trek u 'n gemiddelde van ~ 1,2 mA. Deur die Sparkfun -biblioteek te vervang deur die lp_Si7021 -biblioteek, verminder die gemiddelde stroom tot ~ 10uA, oftewel 100 keer minder. In hierdie projek is die vinnigste metingsnelheid een keer elke 30 sekondes wanneer die selfoon gekoppel is, wat 'n gemiddelde sensorstroom van minder as 1uA tot gevolg het. As daar geen BLE -verbinding is nie, is die metingsnelheid een keer elke 10 minute en is die gemiddelde sensortoevoerstroom onbeduidend.

Gebruikerskoppelvlak

Hierbo is die hoofskerm en 'n ingezoomde aansig van die geskiedenis van die 10 dae per uur. Plotte kan met twee vingers in twee rigtings ingezoem en getrek word.

Die gebruikerskoppelvlak word in die Arduino -skets gekodeer en dan na die eerste verbinding na pfodApp gestuur, waar word dit in die kas vir herhaalde gebruik en opdaterings gestuur. Die grafiese vertoning is opgebou uit die teken van primitiewe. Sien Custom Arduino Controls vir Android vir 'n handleiding oor hoe u u eie kontroles kan bou. Die termometer-, RHGauge- en knoppie -lêers bevat die tekenopdragte vir die items.

Let wel: niks as hierdie skerm in pfodApp ingebou is nie. Die hele skerm word volledig beheer deur die kode in u Arduino -skets

Die metode sendDrawing_z () in die skets lp_BLE_TempHumidity_R3.ino definieer die gebruikerskoppelvlak.

void sendDrawing_z () {dwgs.start (50, 60, dwgs. WHITE); // agtergrond standaard op WIT as weggelaat, d.w.s. begin (50, 60); parser.sendRefreshAndVersion (30000); // versoek dwg elke 30 sekondes weer dit word geïgnoreer as geen parser -weergawe ingestel is nie // raak knoppies hierbo om die opdaterings dwgs.touchZone (). cmd ('u'). size (50, 39).send () te dwing; dwgs.pushZero (35, 22, 1.5); // beweeg nul na middelpunt van dwg na 35, 22 en skaal 1,5 keer rhGauge.draw (); // teken die kontrole dwgs.popZero (); dwgs.pushZero (18, 33); // beweeg nul na middelpunt van dwg na 18, 33 skaal is 1 (standaard) termometer.draw (); // teken die kontrole dwgs.popZero ();

dwgs.pushZero (12.5, 43, 0.7); // beweeg nul na middelpunt van dwg na 12.5, 43 en skaal met 0.7

hrs8PlotButton.draw (); // teken die kontrole dwgs.popZero (); dwgs.pushZero (37,5, 43, 0,7); // beweeg nul na middelpunt van dwg na 37,5, 43 en skaal met 0,7 dae1PlotButton.draw (); // teken die kontrole dwgs.popZero ();

dwgs.pushZero (12,5, 54, 0,7); // beweeg nul na middelpunt van dwg na 12,5, 54 en skaal met 0,7

days3PlotButton.draw (); // teken die kontrole dwgs.popZero (); dwgs.pushZero (37,5, 54, 0,7); // skuif nul na middelpunt van dwg na 37,5, 54 en skaal met 0,7 dae10PlotButton.draw (); // teken die kontrole dwgs.popZero (); dwgs.end (); }

Die pushZero -opdragte verander die oorsprong en skaal om die volgende komponent te teken. Hiermee kan u die grootte en posisie van die knoppies en meters maklik verander.

By die eerste verbinding neem die aanvanklike skerm 5 of 6 sekondes om die ~ 800 grepe wat die skerm definieer, af te laai. pfodApp laai die skerm in die kas, sodat toekomstige opdaterings slegs die veranderinge, posisies en metings hoef te stuur. Hierdie opdaterings neem slegs 'n paar sekondes om die 128 grepe te stuur om die skerm op te dateer.

Daar is vyf (5) aktiewe aanraakgebiede wat op die skerm gedefinieer word. Elke knoppie het een gedefinieer in sy teken () metode, sodat u daarop kan klik om die onderskeie plot oop te maak, en die boonste helfte van die skerm is gekonfigureer as die derde aanraakgebied

dwgs.touchZone (). cmd ('u'). grootte (50, 39).stuur ();

As u op die skerm bo die knoppies klik, word die 'u' dwg -opdrag na u skets gestuur om 'n nuwe meting en skermopdatering af te dwing. Gewoonlik vind opdaterings slegs elke 30 sekondes plaas wanneer dit gekoppel is. Elke klik of herlaai van die tekening dwing 'n nuwe meting. Die reaksie van die Arduino -skets op pfodApp word vertraag totdat die nuwe meting voltooi is (~ 25mS), sodat die nuutste waarde in die opdatering gestuur kan word.

Arduino Skets

Die Arduino Sketch, lp_BLE_TempHumidity_R3.ino, is 'n verbeterde weergawe van die voorbeeldskets wat in Deel 1. gebruik word. Die lp_BLE_TempHumidity_R3.ino -skets vervang die spyskaart met die tekening hierbo. Dit voeg ook die lp_Si7021 sensorondersteuning en data -skikkings by om die historiese metings van 10 minute en uurliks op te slaan.

Die belangrikste komplikasie in die lp_BLE_TempHumidity_R3.ino -skets is om die plotdata te stuur. Terwyl die metings gemaak word, hanteer readRHResults () die versameling van die resultate en stoor dit in die historiese skikkings. Die skikkings is 120 lank, maar as die data gestuur word, is die eerste 30 datapunte vir 'n fyner tydsinterval.

Daar is 'n paar punte wat u moet oppas wanneer u die 200 vreemde plotpunte na die skerm stuur:-

  1. Elke datapunt is ~ 25 grepe lank, in CSV -teksformaat. Dus is 150 punte 3750 grepe data. Die lp_BLESerial -klas het 'n buffer van 1536 byte, waarvan 1024 groot genoeg is vir die grootste pfod -boodskap. Die ander 512 grepe is gereserveer vir die stuur van die data. Sodra die historiese data die 512 grepe gevul het, word die stuur van verdere data vertraag totdat daar ruimte in die buffer is.
  2. Om te verhoed dat die plotdata die hoofopdaterings vertraag, word die plotdata slegs gestuur terwyl die plotskerm vertoon word. Sodra die gebruiker terugkeer na die hoofskerm, word die stuur van die plotdata onderbreek. Die stuur van die plotdata word hervat wanneer die gebruiker op die plotknoppie klik om die plot weer te vertoon.
  3. Die historiese erwe begin vanaf 0 (nou) en gaan mettertyd agteruit. As daar geen nuwe meting was sedert die laaste grafiek vertoon is nie, word die vorige data wat reeds afgelaai is, onmiddellik weer vertoon. As daar 'n nuwe meting is, word dit by die vorige plotdata gevoeg.
  4. As die monitor die eerste keer aangeskakel word, is daar geen historiese metings nie en word 0 as ongeldig in die skikkings gestoor. As die plot vertoon word, word ongeldige lesings net oorgeslaan, wat lei tot 'n korter plot.

Celsius en Fahrenheit

Die skets lp_BLE_TempHumidity_R3.ino vertoon en teken die data in Celsius. Om die resultate na Fahrenheit om te skakel, vervang alle voorvalle van

parser.print (sensor. Temp_RawToFloat (..

met

parser.print (sensor. CtoF (sensor. Temp_RawToFloat (…

En vervang die unicode degC -simbool in Octal / 342 / 204 / 203 met die degF -simbool / 342 / 204 / 211

pfodApp sal enige Unicode wat u selfoon kan vertoon, vertoon.

Sien Die gebruik van nie-ASCII-tekens in Arduino vir meer besonderhede. Verander ook die MIN_C, MAX_C instellings in Termometer. H. Pas laastens die plotgrense aan soos u wil, bv. verander | Temp C ~ 32 ~ 8 ~ deg C |

om te sê

| Temp F ~ 90 ~ 14 ~ deg F |

Stap 4: Meet die voedingsstroom

Meet die voedingsstroom
Meet die voedingsstroom

Deur die lp_Si7021 -biblioteek te gebruik, dra selfs elke 10 sekondes 'n temperatuur-/humiditeitsmeting slegs ~ 1uA by tot die gemiddelde toevoerstroom, dus die belangrikste faktor in die voedingsstroom en dus die batterylewe is die stroom wat deur die BLE -advertensies en -verbinding en data -oordrag gebruik word..

Koppel die temperatuur-/humiditeitskaart aan die programmeerder beskryf in Deel 1 soos hierbo getoon.

As die sonselle en batterye ontkoppel is, word Vin en Gnd gekoppel aan die programmeerder se Vdd en Gnd (die geel en groen leidings) en die SWCLK en SWDIO word verbind met die Clk en SIO van die programmeerkopbord (die blou en pienk leidings)

U kan nou NanoV2 programmeer en die voedingsstroom meet soos beskryf in Deel 1.

Installeer die lae -krag Si7021 -biblioteek uit hierdie zip -lêer, lp_Si7021.zip en installeer die pfodParser -biblioteek en pak lp_BLE_TempHumidity_R3.zip uit in u Arduino -sketsgids en programmeer die Temp/Humditiy -bord met lp_BLE_TempHumidity_R3.ino

Soos hierbo genoem, is die bydrae van die sensor <1uA, gemiddeld, teen die hoogste metingsnelheid wat in hierdie projek gebruik word, dus is die BLE -advertensie- en verbindingsparameters die bepalende faktor vir die batterylewe.

Die BLE-advertensie- en verbindingsparameters wat die huidige verbruik beïnvloed, is: -Tx Power, Advertising Interval, Max and Min Connection Intervals, and Slave Latency.

Opmerking: met behulp van die verbindings hierbo is daar twee (2) reguleerders in die toevoer, een op die NanoV2 -bord via Vin en die MAX8881 op die toevoer van die programmeerder. Dit beteken dat die gemete toevoerstrome ~ 5uA hoër sal wees as die werklike, as gevolg van die tweede reguleerder. Die waardes hieronder is die gemete strome minus hierdie ekstra 5uA.

Tx krag

Tx Krageffekte verskaf stroom beide wanneer dit gekoppel is en as dit adverteer (nie gekoppel nie). Hierdie projek gebruik die maksimum kraginstelling (+4) en bied die beste omvang en die grootste geraas -immuniteit vir die betroubaarste verbindings. U kan die metode lp_BLESerial setTxPower () gebruik om die kraginstelling te verander. Geldige waardes is, in toenemende krag, -40, -30, -20, -16, -12, -8, -4, 0 +4. U moet die metode lp_BLES Serial begin () bel voordat u setTxPower () bel. Sien die skets lp_BLE_TempHumidity_R3.ino.

U kan eksperimenteer met die vermindering van die Tx Power, maar die kompromie is korter en meer verbindingsuitval as gevolg van inmenging. In hierdie projek word die Tx Power by verstek +4. Soos u hieronder sal sien, is selfs 'n lae voedingsstroom steeds moontlik, selfs met hierdie instelling.

Advertensie -interval

As daar geen verbinding is nie, stel die advertensie -interval vir 'n gegewe Tx -krag die gemiddelde huidige verbruik in. Die aanbevole reeks is 500 tot 1000mS. Hier is 2000mS gebruik. Die kompromie is dat langer advertensie -tussenposes beteken dat u mobiele toestel stadiger is om die toestel te vind en 'n verbinding tot stand te bring. Intern word die advertensieintervalle in veelvoude van 0,625mS in die reeks 20mS tot 10,24sek gestel. Die metode lp_BLESerial setAdvertisingInterval () neem mS as argument, gerieflik. Vir +4 TxPower en 2000mS advertensieinterval was die huidige verbruik ~ 18uA. Vir 'n advertensie -interval van 1000mS was dit ~ 29uA. Rev 2 het 'n advertensie -interval van 2000 mS gebruik, maar dit het gelei tot stadige verbindings. Rev 3 verander na 'n advertensie -interval van 1000 ms om verbindings vinniger te maak.

Max en min verbindingsintervalle

Sodra 'n verbinding tot stand gekom het, bepaal die verbindingsinterval hoe gereeld die selfoon die toestel kontak. Met die lp_BLESerial setConnectionInterval () kan u die voorgestelde maksimum en min stel, maar die selfoon bepaal wat die verbindingsinterval eintlik is. Vir die gerief is die argumente om setConnectionInterval () in mS, maar intern is die verbindingsintervalle in veelvoud van 1.25mS, in die reeks 7.5mS tot 4sec.

Die standaardinstelling is setConnectionInterval (100, 150) dws min 100mS tot maksimum 150mS. Deur hierdie waardes te verhoog, verminder die toevoerstroom terwyl dit verbind is, maar die kompromie is 'n stadiger oordrag van data. Elke opdatering van die skerm neem ongeveer 7 BLE -boodskappe, terwyl 'n volledige meting van 36 uur van 10 minute ongeveer 170 BLE -boodskappe neem. Deur die verbindingsintervalle te verhoog, vertraag die skermopdaterings en word die plot vertoon.

Die lp_BLESerial -klas het 'n stuurstuurbuffer van 1536 bytes en stuur slegs een blok van 20 grepe uit hierdie buffer, elke maksimum verbindingsinterval om te voorkom dat die BLE -skakel oorstroom word met data. By die stuur van plotdata stuur die skets slegs data totdat 512 grepe wag om gestuur te word, en dan vertraag die stuur van meer data totdat sommige data gestuur is. Dit vermy oorstromingsbuffer. Hierdie versnelling van die sendings maak die data -oordrag na die selfoon betroubaar, maar dit is nie geoptimaliseer vir maksimum deurvoer nie.

In hierdie projek is die verbindingsintervalle as die standaardwaardes gelaat.

Slawe latensie

As daar geen data na die selfoon gestuur moet word nie, kan die toestel opsioneel sommige van die verbindingsboodskappe van die selfoon ignoreer. Dit bespaar Tx -krag en toevoerstroom. Die instelling Slave Latency is die aantal verbindingsboodskappe wat u moet ignoreer. Die standaard is 0. Die metode lp_BLESerial setSlaveLatency () kan gebruik word om hierdie instelling te verander.

Die standaard Slave Latency van 0 het ~ 50uA voedingsstroom gegee, en die opdaterings van die skerm word elke 30 sek. Geïgnoreer, maar die keepAlive -boodskappe is baie 5 sekondes ingesluit. Deur die Slave Latency op 2 in te stel, het 'n gemiddelde gekoppelde voedingsstroom van ~ 25uA gegee. 'N Slave Latency -instelling van 4 het ~ 20uA. Dit lyk nie asof hoër instellings die toevoerstroom verminder nie, dus is 'n Slave Latency -instelling van 4 gebruik.

As dit gekoppel is, versoek pfodApp elke 30 sekondes 'n skermopdatering. Dit dwing 'n sensormeting en stuur data terug om die grafiese vertoning by te werk. Hierdie opdatering lei tot 'n ekstra ~ 66uA vir 2 sekondes elke 30 sek. Dit is gemiddeld 4.4uA oor die 30 sekondes. As u dit by die 20uA voeg, kry u 'n gemiddelde aansluitstroom van ~ 25uA

Stap 5: Totale toevoerstroom en batterylewe

Deur die bogenoemde instellings te gebruik, soos gestel in lp_BLE_TempHumidity_R3.ino, die totale toevoerstroom wanneer dit gekoppel is en die skerm elke 30 sekondes bywerk, ongeveer 25uA. As dit nie gekoppel is nie, is dit ongeveer 29uA.

Vir die berekening van die batteryleeftyd word 'n konstante stroomverbruik van ~ 29uA aanvaar.

Verskeie batterye het verskillende kapasiteite en spanningseienskappe. Die batterye wat hier oorweeg word, is CR2032 -muntsel, CR2450 (N) muntsel, 2 x AAA Alkaline, 2 x AAA Litium en LiPo.

Battery opsomming

As u Solar Assist gebruik, voeg dan 50% by tot die batteryleeftyd (met 8 uur per dag lig)

Opmerking: die 22uF LowESR -kondensator (C1), benewens die ingeboude NanoV2 22uF -kondensator, stoor die sonselstroom en verskaf dit dan vir die TX -stroompulse. Andersins lewer die battery 'n deel van die TX -stroom. Hierdie ekstra 22uF LowESR voeg ongeveer 10% by tot die batterystroom wanneer die sonkrag nie die kragbron is nie, maar verleng ook die batterylewe deur te vergoed vir die stygende interne weerstand van die battery namate die battery eindig. Die onderstaande metings is geneem SONDER die ekstra 22uF kapasitor.

CR2032 - 235mAHr - batterylewe 10 maandeCR2450 (N) - 650mAHr (540mAHr) - batterylewe 2,3 jr (2jr) 2 x AAA Alkalies - 1250mAHr - batterylewe 3.8.yrs2 x AAA Litium - 1200mAHr - batterylewe 4.7 jr LiPo herlaaibaar - word nie aanbeveel nie as gevolg van hoë selfafskeiding.

CR2032

Hierdie muntsel het 'n kapasiteit van tipies 235mAHr (energizer battery), 'n nominale spanning van 3V en 'n gespesifiseerde ontladingspanning van 2V. Dit impliseer 'n batterylewe van 8100 uur of ~ 0,9 jaar. Die interne selweerstand neem egter toe namate die battery die einde van sy lewensduur bereik, en kan dus nie die maksimum Tx -stroompulse lewer nie. 'N Groter toevoerkapasitor kan gebruik word om hierdie effek te verminder, maar sê 10 maande se lewensduur.

CR2450 (N)

Hierdie muntsel het 'n kapasiteit van tipies 620mAHr (540mAHr vir CR2450N), 'n nominale spanning van 3V en 'n gespesifiseerde ontladingspanning van 2V. Dit impliseer 'n batterylewe van 22, 400 uur of ~ 2jr 6m (18600h ~ 2jr 2m vir CR2450N). Die interne selweerstand neem egter toe namate die battery die einde van sy lewensduur bereik, en kan dus nie die maksimum Tx -stroompulse lewer nie. 'N Groter toevoerkondensator kan gebruik word om hierdie effek te verminder, maar sê 2jr 4m (2jr) lewensduur.

Let wel: Die CR2450N -weergawe het 'n dikker lip wat help om verkeerde installering in 'n CR2450N -houer te voorkom. U kan 'n CR2450N- en CR2450 -sel in 'n CR2450 -houer plaas, maar u kan nie 'n CR2450 -sel in 'n CR2450N -houer plaas nie

2 x AAA alkaliese selle

Hierdie batterye het 'n kapasiteit van ongeveer 1250mAHr (Energizer Battery) vir baie lae strome, 'n nominale spanning van 2x1.5V = 3V en 'n gespesifiseerde ontladingspanning van 2x0.8V = 1.6V. Maar hierdie gespesifiseerde ontladingspanning is minder as die werkspanning van die Si7021 -sensor (1.9V), sodat die battery slegs tot ~ 1V elk gebruik kan word. Dit verminder die kapasiteit met ongeveer 10% tot 15%, dit wil sê ~ 1000mAHr.

Dit impliseer 'n batterylewe van 34, 500 uur of ~ 4 jaar. Die interne selweerstand neem egter toe namate die battery die einde van sy lewensduur bereik, en kan dus nie die maksimum Tx -stroompulse lewer nie. 'N Groter toevoerkondensator kan gebruik word om hierdie effek te verminder, maar sê 3 jaar 10m lewensduur. Let op Alkaliese batterye het 'n selfontlading van 2% tot 3% per jaar.

2 x AAA litium selle

Hierdie batterye het 'n kapasiteit van ongeveer 1200mAHr (Energizer Battery), 'n nominale spanning van 2x1.7V = 3.4V, by lae strome, en 'n ontlaaide spanning van 2x1.4V = 2.4V. Dit impliseer 'n batterylewe van 41, 400 uur of 4 jaar 8 m.

LiPo herlaaibare battery

Hierdie batterye kom in verskillende kapasiteite van 100mAHr tot 2000mAHr, in plat formate, en het 'n laaispanning van 4.2V en 'n ontlaaide spanning van> 2.7V. Hulle het egter 'n hoë selfontlading van 2% -3%/maand (dws 24% tot 36% per jaar) en is dus nie so geskik vir hierdie toepassing as die ander batterye nie.

Stap 6: Voorsieningsalternatiewe - Sonkraghulp, Slegs battery, Slegs sonkrag

Voorsieningsalternatiewe - Sonkraghulp, Slegs battery, Slegs sonkrag
Voorsieningsalternatiewe - Sonkraghulp, Slegs battery, Slegs sonkrag
Voorsieningsalternatiewe - Sonkraghulp, Slegs battery, Slegs sonkrag
Voorsieningsalternatiewe - Sonkraghulp, Slegs battery, Slegs sonkrag
Voorsieningsalternatiewe - Sonkraghulp, Slegs battery, Slegs sonkrag
Voorsieningsalternatiewe - Sonkraghulp, Slegs battery, Slegs sonkrag
Voorsieningsalternatiewe - Sonkraghulp, Slegs battery, Slegs sonkrag
Voorsieningsalternatiewe - Sonkraghulp, Slegs battery, Slegs sonkrag

Battery plus Solar Assist

Die konstruksie hierbo gebruik die Battery plus Solar Assist -toevoer. As die sonpanele meer spanning opwek as die batteryspanning, sal die sonkrag die monitor voed, wat die batterylewe verleng. Die batterylewe kan gewoonlik met nog 50%verleng word.

Die sonpanele wat gebruik word, is klein, 50 mm x 30 mm, goedkoop, ongeveer $ 0,50 en lae krag. Hulle is nominaal 5V -panele, maar benodig volle direkte helder sonlig om 5V op te wek. In hierdie projek word twee panele in serie gekoppel, sodat die monitor naby die venster, uit direkte sonlig, voldoende is om die batterykrag te vervang. Selfs 'n goed beligte kamer, of 'n lessenaarlamp, is genoeg vir die sonselle om> 3.3V by> 33uA op te wek en van die battery oor te neem.

'N Eenvoudige toetspaneel is opgestel om te bepaal waar die temperatuur- / humiditeitsmonitor uit die son geplaas kan word en steeds deur sonkrag aangedryf kan word. Soos u op die foto hierbo kan sien, lewer die twee panele wat gekoppel is aan 'n 100K -weerstand 5.64V oor die 100K, dws 56uA -stroom by 5.64V. Dit is meer as voldoende om die monitor van die battery af te stuur. Enige spanningslesing bo die nominale batteryspanning van 3V beteken dat die sonselle die monitor in plaas van die battery sal aandryf.

Die twee diodes in die temperatuurvogtigheidsmonitor -kring isoleer die sonselle en die batterye van mekaar en voorkom dat hulle in omgekeerde polariteit verbind word. Die 10V 1W zener en die weerstand van die 470R-reeks beskerm die NanoV2 se boordreguleerder teen oorspanning van twee sonselle in volle son, veral as 12V-selle in plaas van 5V-selle gebruik word. In normale werking by <5V trek die 10V zener slegs ~ 1uA.

Slegs battery

As u slegs 'n battery benodig, moet u R1, D1 en D3 en die sonselle weglaat. U kan D1 ook deur 'n stuk draad vervang as u nie beskerming teen omgekeerde polariteit wil hê nie.

Slegs sonkrag

Om die monitor slegs van sonkrag af te laai, sonder battery, benodig 'n ander kragtoevoer. Die probleem is dat terwyl die monitor op 29uA werk, die nRF52 by aanskakel ~ 5mA vir 0,32 sek. Die stroombaan hierbo (pdf -weergawe) hou die MAX8881 -reguleerder af totdat die ingangskondensators, 2 x 1000uF, tot 4,04V laai. Dan stel die MAX6457 die MAX8881 SHDN -invoer vry om die nRF52 (NanoV2) aan te skakel. Die 2 x 1000uF -kondensators voorsien die nodige opstartstroom.

Dit laat die monitor aanskakel sodra daar genoeg sonkrag is, en laat dit op 29uA werk.

Stap 7: Gevolgtrekking

Hierdie handleiding bied 'n battery/sonkrag -temperatuurvochtigheidsmonitor aan as 'n voorbeeld van 'n baie lae krag BLE -projek in Arduino vir die nRF52832 -chip. Verskaf strome van ~ 29uA waar dit bereik word deur die verbindingsparameters aan te pas. Dit het gelei tot 'n CR2032 -batteryleeftyd van meer as 10 maande. Langer vir muntcelle en batterye met 'n hoër kapasiteit. Deur twee goedkoop sonselle by te voeg, kan u die batteryleeftyd met 50% of meer verleng. 'N Helder kamerlig of 'n lessenaarlamp is voldoende om die monitor van die sonselle af te dryf.

'N Spesiale kragkring is aangebied om die monitor bloot van sonkragselle met lae kapasiteit te laat werk.

Met die gratis pfodDesigner kan u spyskaarte/sub-spyskaarte ontwerp, data en tyd teken en data aanteken en dan die Arduino-skets met 'n lae krag vir u genereer. Hier is 'n pasgemaakte koppelvlak gekodeer met behulp van pfodApp -tekenprititiewe. As u met pfodApp skakel, word die gebruikerskoppelvlak vertoon en word die lesings opgedateer terwyl die monitor ~ 29uA gebruik

Geen Android -programmering is nodig nie. pfodApp hanteer dit alles.

Aanbeveel: