Taula de continguts:

BLE fàcil de molt baix consum a Arduino Part 2 - Monitor de temperatura / humitat - Rev 3: 7 passos
BLE fàcil de molt baix consum a Arduino Part 2 - Monitor de temperatura / humitat - Rev 3: 7 passos

Vídeo: BLE fàcil de molt baix consum a Arduino Part 2 - Monitor de temperatura / humitat - Rev 3: 7 passos

Vídeo: BLE fàcil de molt baix consum a Arduino Part 2 - Monitor de temperatura / humitat - Rev 3: 7 passos
Vídeo: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Desembre
Anonim
BLE fàcil de molt baix consum a Arduino Part 2 - Monitor de temperatura / humitat - Rev 3
BLE fàcil de molt baix consum a Arduino Part 2 - Monitor de temperatura / humitat - Rev 3
BLE fàcil de molt baix consum a Arduino Part 2 - Monitor de temperatura / humitat - Rev 3
BLE fàcil de molt baix consum a Arduino Part 2 - Monitor de temperatura / humitat - Rev 3
BLE fàcil de molt baixa potència a Arduino Part 2 - Monitor de temperatura / humitat - Rev 3
BLE fàcil de molt baixa potència a Arduino Part 2 - Monitor de temperatura / humitat - Rev 3

Actualització: 23 de novembre de 2020: primera substitució de 2 bateries AAA des del 15 de gener de 2019, és a dir, 22 mesos per a 2xAAA Alkaline Actualització: 7 d’abril de 2019 - Rev. dades

Actualització: 24 de març de 2019 - Rev.2 de lp_BLE_TempHumidity, afegeix més opcions de gràfic i i2c_ClearBus

Aquest instructiu, un monitor d’humitat de temperatura de molt baixa potència, és la part 2 de 3.

Part 1: construir dispositius BLE de molt baixa potència fàcilment amb les cobertes Arduino configurant Arduino per codificar els dispositius de baixa potència nRF52, el mòdul de programació i mesurant el corrent de subministrament. També cobreix temporitzadors i comparadors especialitzats de baixa potència i entrades rebutjades i l’ús de pfodApp per connectar-se i controlar el dispositiu nRF52.

Part 2: un monitor d’humitat de temperatura de molt baixa potència, aquest, cobreix mitjançant un mòdul Redbear Nano V2 i un sensor de temperatura / humitat Si7021 per construir una bateria / monitor solar de baixa potència. També inclou la modificació de la biblioteca Si7021 perquè sigui de poca potència, l’ajust del dispositiu BLE per reduir el consum actual de <25uA i el disseny d’una pantalla de temperatura / humitat personalitzada per al vostre mòbil.

Part 3: una substitució de Redbear Nano V2 cobreix altres mòduls basats en nRF52 en lloc del Nano V2. Cobreix la selecció de components de subministrament, la construcció, l'eliminació de la protecció de programació de xips nRF52, l'ús de pins NFC com a GPIO normal i la definició d'una nova placa nRF52 a Arduino.

Aquesta instrucció és una aplicació pràctica de la part 1 que construeix dispositius BLE de molt baixa potència fàcils amb Arduino mitjançant la construcció d’un monitor de temperatura i humitat BLE de molt baixa potència. El monitor funcionarà durant anys amb bateries Coin Cell o 2 x AAA, encara més amb assistència solar. Aquest tutorial tracta sobre com ajustar els paràmetres BLE per a un baix consum d'energia i com alimentar el dispositiu des de la bateria O la bateria + solar o solament solar.

A més de mostrar la temperatura i la humitat actuals, el monitor emmagatzema les darreres 36 hores de lectures de 10 minuts i els darrers 10 dies de lectures per hora. Aquests es poden representar al mòbil Android i els valors guardats en un fitxer de registre. No es requereix programació d'Android, pfodApp s'encarrega de tot això. El vostre esbós d’Arduino controla completament la visualització i el gràfic d’Android perquè pugueu personalitzar-lo segons sigui necessari.

S'utilitza una placa Redbear Nano V2 per al component nRF52832 BLE i una placa de separació Sparkfun Si7021 per al sensor de temperatura / humitat. S'utilitza una biblioteca modificada de baixa potència amb el Si7021. Es va dissenyar un petit PCB per contenir el NanoV2 i subministrar components. Tanmateix, com que no s’utilitzen components muntats a la superfície, podeu construir-lo de la mateixa manera al tauler vero. Es cobreixen tres versions d'alimentació. i) Bateria més assistència solar, ii) Només bateria, iii) Només solar. L'opció Solar Only no té emmagatzematge de bateria i, per tant, només funcionarà quan hi hagi poca llum. N’hi ha prou amb una llum lluminosa o un llum d’escriptori.

Esquema

Aquest projecte té 4 parts independents relatives: -

  1. Selecció i construcció de components
  2. Codi: biblioteca de sensors de baixa potència, interfície d'usuari i Arduino Sketch
  3. Mesurant el corrent de subministrament i la durada de la bateria
  4. Alternatives de subministrament: assistència solar, només bateria, només solar

Pas 1: Selecció de components

Selecció de components

Com es va esmentar a la primera part: el truc per obtenir una solució de molt baixa potència és no fer res la major part del temps, minimitzar el corrent a través de resistències de pujada / baixada externes a les entrades i no tenir cap component addicional. Aquest projecte utilitzarà cadascun d’aquests trucs per obtenir una solució de baixa potència.

El component nRF52832

El xip nRF52832 pot funcionar amb una font d'alimentació d'entre 1,7 V i 3,6 V (voltatge màxim absolut 3,9 V). Això significa que podeu alimentar el xip directament des d’una pila de monedes o 2 piles AAA. No obstant això, és prudent afegir un regulador de voltatge per protegir el xip de sobrevolts. Aquest component addicional té un cost d’energia, però en el cas de la placa NanoV2, el regulador integrat, TLV704, consumeix menys de 5,5uA màxim, normalment només 3,4uA. Per a aquest petit consum d’alimentació addicional obtindreu protecció per a entrades de subministrament de fins a 24 V.

El component Si7021

El propi sensor Si7021 dibuixa normalment <1uA quan no es pren una mesura, és a dir, en espera, i fins a 4 mA quan es transmeten les dades mitjançant I2C. Com que no mesurem contínuament, el 4mA no és una part significativa del corrent mitjà de subministrament. Si feu una lectura de 30 segons afegiu menys d’1uA al corrent mitjà de subministrament, consulteu les mesures del corrent de subministrament a continuació.

Hi ha dues taules de separació Si7021 fàcilment disponibles. Un d’Adafruit i un d’Sparkfun. Una mirada ràpida a les dues taules us indicarà que la placa Adafruit té molts més components que la placa Sparkfun, de manera que estareu inclinat a triar la placa Sparkfun. Si observem els esquemes de cada placa, es demostra que la placa Sparkfun és només el sensor nu i dos resisotors de tracció 4k7, mentre que la placa Adafruit té un regulador integrat, MIC5225, que normalment treu 29uA tot el temps. Això és significatiu quan la intensitat total de la resta del circuit és <30uA. Com que ja tenim un regulador per al xip nRF52832, aquest component addicional no és necessari i el Si7021 es pot alimentar a partir d’aquest subministrament de 3,3 V. Així doncs, aquest projecte utilitzarà el tauler Si7021 de Sparkfun.

minimitzar el corrent a través de resistències de pujada / baixada externes a les entrades

Les resistències de captació I2C 4K7 no tenen un valor particularment alt i atrauran 0,7 mA quan es baixen. Això seria un problema si estigués en una entrada de commutador que estigués connectada a terra durant llargs períodes. Tanmateix, en aquest projecte el corrent a través d’aquestes resistències es redueix al mínim només utilitzant la interfície I2C amb poca freqüència i durant poc temps. La majoria de les vegades les línies I2C no s’utilitzen i són altes / triestades, de manera que no circula corrent per aquestes resistències.

Pas 2: construcció

Construcció
Construcció
Construcció
Construcció
Construcció
Construcció

El projecte està construït sobre un petit PCB, però com que no hi ha components SMD, es pot construir igualment fàcilment mitjançant la placa Vero. El PCB ha estat fabricat per pcbcart.com a partir d’aquests fitxers Gerber, TempHumiditySensor_R1.zip.

L’esquema es mostra més amunt. Aquí teniu una versió en pdf.

Llista de peces

Cost aproximat per unitat al desembre de 2018, aproximadament 62 dòlars EUA, excloent l’enviament i el programador de la primera part

  • Redbear NanoV2 ~ 17 dòlars EUA
  • Tauler de sortida Sparkfun Si7021 ~ 8 dòlars EUA
  • 2 cèl·lules solars de 5 x 53 mm x 30 mm 0,15 W 5 V per ex. Sobrevolar ~ 1,10 dòlars EUA
  • 1 x PCB TempHumiditySensor_R1.zip ~ 25 US $ per 5 de descompte a www.pcbcart.com O Tauler Vero (tira de coure), p. Ex. Jaycar HP9540 ~ 5 AUD
  • 2 díodes schottky 1N5819 per exemple Digikey 1N5819FSCT-ND ~ US $ 1
  • 1 x 470R 0,4W 1% resistència p. Ex. Digikey BC3274CT-ND ~ 0,25 dòlars EUA
  • Pins de capçalera masculins de 6 x 6 pins, p. Ex. Sparkfun PRT-00116 ~ 1,5 dòlars EUA
  • saltador femení a femení, per exemple Identificador d'Adafruit: 1950 ~ 2 dòlars EUA
  • Cargols de niló de 3 mm x 12 mm, p. Ex. Jaycar HP0140 ~ 3 AUD
  • Femelles de niló de 3 mm x 12 mm, p. Ex. Jaycar HP0146 ~ 3 AUD
  • Cinta de muntatge permanent Scotch Cat 4010 p.ex. d'Amazon ~ 6,6 dòlars EUA
  • Porta bateries AAA x 2, p. Sparkfun PRT-14219 ~ 1,5 dòlars EUA
  • 2 bateries alcalines AAA 750 mA, p. Sparkfun PRT-09274 ~ 1,0 US $ Aquestes bateries han de durar> 2 anys. Les bateries alcalines Energizer tenen més capacitat
  • Caixa de plàstic (ABS) 83 mm x 54 mm x 31 mm, p. Ex. Jaycar HB6005 ~ 3 AUD
  • pfodApp ~ 10 dòlars EUA
  • 1 x condensador ESR baix de 22 uF 63 V (opcional) per exemple Jaycar RE-6342 ~ 0,5 AUD $ o Digikey P5190-ND ~ 0,25 US $

La construcció és directa. El suport de la bateria i les cèl·lules solars estan fixades a la caixa de plàstic amb cinta de doble cara resistent.

Tingueu en compte el fil d'enllaç Gnd de CLK a GND a la part acabada. S’instal·la DESPRÉS de la programació per evitar que el soroll a l’entrada CLK desencadeni el xip nRF52 en un mode de depuració de corrent elevat

Pas 3: Codi: biblioteca de sensors de baixa potència, interfície d'usuari i Arduino Sketch

Codi: biblioteca de sensors de baixa potència, interfície d'usuari i Arduino Sketch
Codi: biblioteca de sensors de baixa potència, interfície d'usuari i Arduino Sketch
Codi: biblioteca de sensors de baixa potència, interfície d'usuari i Arduino Sketch
Codi: biblioteca de sensors de baixa potència, interfície d'usuari i Arduino Sketch
Codi: biblioteca de sensors de baixa potència, interfície d'usuari i Arduino Sketch
Codi: biblioteca de sensors de baixa potència, interfície d'usuari i Arduino Sketch

Baixeu-vos el codi comprimit, lp_BLE_TempHumidity_R3.zip i descomprimiu-lo al directori Arduino Sketches. També heu d’instal·lar la biblioteca lp_So7021 des d’aquest fitxer zip i també instal·lar la biblioteca pfodParser.

Biblioteca de sensors de baixa potència, lp_Si7021

Tant Adafruit com Sparkfun proporcionen biblioteques de suport per accedir al sensor Si7021, tot i que aquestes dues biblioteques no són adequades per a un ús molt baix d’energia. Tots dos utilitzen un retard (25) al codi per retardar la lectura del sensor mentre pren la mesura. Com es va assenyalar a la primera part, els retards són malvats. El retard Arduino () només manté el microprocessador en funcionament amb energia mentre espera que es retardi el temps de retard. Això trenca la primera regla de BLE de baixa potència, no feu res la major part del temps. La biblioteca de substitució lp_Si7021 substitueix tots els retards per lp_timers que fan dormir el microprocessador mentre s’espera que el sensor acabi de mesurar.

Quina diferència fa la biblioteca lp_Si7021? Utilitzant la biblioteca d’assistència original de l’SparkFun Si7021 i fent una lectura per segon sense impressions serials, s’obté una mitjana de ~ 1,2 mA. En substituir la biblioteca Sparkfun per la biblioteca lp_Si7021 es redueix el corrent mitjà a ~ 10uA, és a dir, 100 vegades menys. En aquest projecte, la velocitat de mesura més ràpida és una vegada cada 30 segons quan el mòbil està connectat, cosa que provoca una intensitat mitjana del sensor inferior a 1uA. Quan no hi ha connexió BLE, la velocitat de mesura és una vegada cada 10 minuts i el corrent mitjà de subministrament del sensor és insignificant.

Interfície d'usuari

A la part superior es mostra la pantalla principal i una vista ampliada de la història horària de 10 dies. Es poden ampliar i panoramitzar les parcel·les en ambdues direccions amb dos dits.

La interfície d'usuari es codifica a l'esbós d'Arduino i després s'envia a pfodApp a la primera connexió on es guarda a la memòria cau per a ús i actualitzacions repetides. La visualització gràfica es basa en dibuixos primitius. Consulteu els controls personalitzats d’Arduino per a Android per obtenir un tutorial sobre com crear els vostres propis controls. Els fitxers Termòmetre, RHGauge i Button contenen les ordres de dibuix d’aquests elements.

Nota: Cap si aquesta pantalla està integrada a pfodApp. Tota la pantalla està totalment controlada pel codi del vostre esbós Arduino

El mètode sendDrawing_z () a l'esbós lp_BLE_TempHumidity_R3.ino defineix la interfície d'usuari.

void sendDrawing_z () {dwgs.start (50, 60, dwgs. WHITE); // el valor predeterminat del fons és BLANC si s’omet, és a dir, inici (50, 60); parser.sendRefreshAndVersion (30000); // torneu a sol·licitar dwg cada 30 segons. això s'ignora si no hi ha cap versió de l'analitzador configurada // toqueu els botons de sobre per forçar les actualitzacions de visualització dwgs.touchZone (). cmd ('u'). size (50, 39).send (); dwgs.pushZero (35, 22, 1.5); // mou el zero al centre de dwg a 35, 22 i escala 1,5 vegades rhGauge.draw (); // dibuixa el control dwgs.popZero (); dwgs.pushZero (18, 33); // moure zero al centre de dwg a 18, l'escala 33 és 1 (per defecte) thermometer.draw (); // dibuixa el control dwgs.popZero ();

dwgs.pushZero (12,5, 43, 0,7); // Mou zero al centre de dwg a 12,5, 43 i escala 0,7

hrs8PlotButton.draw (); // dibuixa el control dwgs.popZero (); dwgs.pushZero (37,5, 43, 0,7); // Mou zero al centre de dwg a 37,5, 43 i escala 0,7 dies1 PlotButton.draw (); // dibuixa el control dwgs.popZero ();

dwgs.pushZero (12,5, 54, 0,7); // Mou zero al centre de dwg a 12,5, 54 i escala 0,7

days3PlotButton.draw (); // dibuixa el control dwgs.popZero (); dwgs.pushZero (37,5, 54, 0,7); // Mou zero al centre de dwg a 37,5, 54 i escala 0,7 dies10PlotButton.draw (); // dibuixa el control dwgs.popZero (); dwgs.end (); }

Les ordres pushZero canvien l'origen i l'escala per dibuixar el següent component. Això us permet canviar fàcilment la mida i la posició dels botons i dels indicadors.

A la primera connexió, la pantalla inicial triga 5 o 6 segons a baixar carregant els ~ 800 bytes que defineixen la pantalla. pfodApp emmagatzema a la memòria cau de la pantalla, de manera que les futures actualitzacions només hauran d'enviar els canvis, mesurar posicions i lectures. Aquestes actualitzacions només triguen un parell de segons a enviar els 128 bytes necessaris per actualitzar la pantalla.

Hi ha cinc (5) zones tàctils actives definides a la pantalla. Cada botó n'ha definit un al mètode draw (), de manera que podeu fer-hi clic per obrir la trama respectiva i la meitat superior de la pantalla es configura com la tercera zona tàctil.

dwgs.touchZone (). cmd ('u'). size (50, 39).send ();

Quan feu clic a la pantalla a sobre dels botons, l'ordre dwg "u" s'envia al vostre esbós per forçar una nova mesura i actualització de pantalla. Normalment, quan es connecta, les actualitzacions només es produeixen cada 30 segons. Cada clic o actualització del dibuix obliga a fer una nova mesura. La resposta de l'esbós d'Arduino a pfodApp es retarda fins que es completa la nova mesura (~ 25 mS) de manera que es pot enviar el valor més recent a l'actualització.

Esbós Arduino

L'Arduino Sketch, lp_BLE_TempHumidity_R3.ino, és una versió millorada de l'esbós d'exemple utilitzat a la part 1. L'esbós lp_BLE_TempHumidity_R3.ino substitueix el menú pel dibuix que es mostra més amunt. També afegeix el suport del sensor lp_Si7021 i les matrius de dades per emmagatzemar les mesures històriques de 10 minuts i cada hora.

La principal complicació de l’esbós de lp_BLE_TempHumidity_R3.ino és gestionar l’enviament de les dades de la trama. A mesura que es fan les mesures, readRHResults () s'encarrega de recollir els resultats i desar-los a les matrius històriques. Les matrius són de 120 llargs, però quan s'envien les dades, els primers 30 punts de dades són per a un interval de temps més precís.

Hi ha uns quants punts que cal tenir en compte a l’hora d’enviar els 200 punts de trama senars a mostrar: -

  1. Cada punt de dades té una longitud de ~ 25 bytes, en format de text CSV. Per tant, 150 punts són 3750 bytes de dades. La classe lp_BLESerial té un buffer de 1536 bytes, 1024 dels quals és prou gran per al missatge pfod més gran. Els altres 512 bytes es reserven per enviar les dades. Un cop les dades històriques han omplert els 512 bytes, l’enviament de dades es retarda fins que hi hagi espai al buffer.
  2. Per evitar que les dades de la trama frenin les actualitzacions de visualització principals, les dades de la trama només s’envien mentre es mostra la pantalla de la trama. Un cop l'usuari torna a la pantalla principal, l'enviament de les dades de la trama es posa en pausa. L'enviament de les dades de la trama es reprèn quan l'usuari fa clic al botó de trama per tornar a mostrar la trama.
  3. Les trames històriques comencen des de 0 (ara) i retrocedeixen en el temps. Si no hi ha hagut cap mesura nova des que es va mostrar l'últim traçat, les dades anteriors que ja es van descarregar es tornaran a mostrar immediatament. Si hi ha una mesura nova, s’afegeix a les dades de la trama anteriors.
  4. Quan el monitor s’encén per primera vegada, no hi ha lectures històriques i 0 s’emmagatzema a les matrius com a lectura no vàlida. Quan es mostra la trama, només s’ometen lectures no vàlides, cosa que resulta en una trama més curta.

Celsius i Fahrenheit

L'esbós lp_BLE_TempHumidity_R3.ino mostra i representa les dades en centígrads. Per convertir els resultats a Fahrenheit, substituïu totes les aparicions de

parser.print (sensor. Temp_RawToFloat (..

amb

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

I substituïu el símbol UnicC degC a Octal / 342 / 204 / 203 pel símbol degF / 342 / 204 / 211

pfodApp mostrarà qualsevol Unicode que el mòbil pugui mostrar.

Consulteu Ús de caràcters no ASCII a Arduino per obtenir més informació. També canvieu la configuració de MIN_C, MAX_C a Thermometer.h. Finalment, ajusteu els límits de la trama com vulgueu, per exemple. canvi | Temp C ~ 32 ~ 8 ~ deg C |

dir

| Temp F ~ 90 ~ 14 ~ deg F |

Pas 4: mesura del corrent de subministrament

Mesura del corrent de subministrament
Mesura del corrent de subministrament

Utilitzant la biblioteca lp_Si7021, fins i tot fer una mesura de temperatura / humitat cada 10 segons només contribueix a ~ 1uA al corrent mitjà de subministrament, de manera que el factor principal en el corrent de subministrament i, per tant, la durada de la bateria és el corrent utilitzat per la publicitat BLE i la connexió i transmissió de dades..

Connecteu la placa de temperatura / humitat al programador descrit a la part 1 tal com es mostra més amunt.

Amb les piles solars i les bateries desconnectades, Vin i Gnd es connecten al programador Vdd i Gnd (els cables groc i verd) i els SWCLK i SWDIO es connecten al Clk i SIO de la placa de capçalera del programador (els cables Blau i Rosa)

Ara podeu programar NanoV2 i mesurar el corrent de subministrament tal com es descriu a la part 1.

Instal·leu la biblioteca Si7021 de baix consum des d’aquest fitxer zip, lp_Si7021.zip i instal·leu la biblioteca pfodParser i descomprimiu lp_BLE_TempHumidity_R3.zip al directori d’esbossos Arduino i programa la placa Temp / Humditiy amb lp_BLE_TempHumidity_R3.ino

Com s’ha esmentat anteriorment, la contribució del sensor és <1uA, de mitjana, a la velocitat de mesura més alta que s’utilitza en aquest projecte, de manera que la publicitat BLE i els paràmetres de connexió són el factor determinant per a la durada de la bateria.

Els paràmetres de publicitat i connexió BLE que afecten el consum actual són: -Tx Power, interval de publicitat, intervals de connexió màxima i mínima i latència d’esclaus.

Nota: mitjançant les connexions anteriors hi ha dos (2) reguladors al subministrament, un a la placa NanoV2 mitjançant Vin i el MAX8881 al subministrament del programador. Això significa que els corrents de subministrament mesurats seran ~ 5uA superiors a l'actual, a causa del segon regulador. Els valors esmentats a continuació són els corrents mesurats menys aquest 5uA addicional.

Tx Power

Els efectes de potència Tx subministren corrent tant quan es connecta com quan es fa publicitat (no connectat). Aquest projecte utilitza la configuració de potència màxima (+4) i proporciona la millor autonomia i la millor immunitat contra el soroll per a les connexions més fiables. Podeu utilitzar el mètode lp_BLESerial setTxPower () per canviar la configuració de potència. Els valors vàlids són, en potència creixent, -40, -30, -20, -16, -12, -8, -4, 0 +4. Cal trucar al mètode lp_BLESerial begin () ABANS de trucar a setTxPower (). Vegeu l’esbós de lp_BLE_TempHumidity_R3.ino.

Podeu experimentar amb la reducció de la potència Tx, però el compromís és més curt i hi ha més caigudes de connexió a causa de la interferència. En aquest projecte, Tx Power es queda per defecte, +4. Com veureu a continuació, fins i tot amb aquesta configuració, encara és possible un subministrament molt baix.

Interval publicitari

Per a una potència Tx determinada, quan no hi ha connexió, l'interval de publicitat estableix el consum actual mitjà. El rang recomanat és de 500 a 1000 mS. Aquí es va utilitzar 2000mS. El compromís és que els intervals publicitaris més llargs fan que el mòbil trobi el dispositiu i estableixi una connexió més lent. Internament, els intervals publicitaris es defineixen en múltiples de 0,625 mS en un rang d'entre 20 i 10,24 segons. El mètode lp_BLESerial setAdvertisingInterval () pren mS com a argument, per comoditat. Per a un interval de publicitat de +4 TxPower i 2000 mS, el consum actual va ser de ~ 18uA. Per a un interval de publicitat de 1000 mS, era de ~ 29uA. Rev 2 va utilitzar un interval de publicitat de 2000 mS, però va provocar connexions lentes. La Rev. 3 ha canviat a un interval de publicitat de 1.000 mS per fer les connexions més ràpides.

Intervals de connexió màxima i mínima

Un cop establerta una connexió, l'interval de connexió determina la freqüència amb què el mòbil es posa en contacte amb el dispositiu. El lp_BLESerial setConnectionInterval () us permet establir el màxim i el mínim suggerits, però el mòbil controla quin és realment l’interval de connexió. Per comoditat, els arguments de setConnectionInterval () són en mS, però internament els intervals de connexió són múltiples d’1,25 mS, en el rang de 7,5 mS a 4 segons.

El paràmetre per defecte és setConnectionInterval (100, 150), és a dir, entre 100 mS i 150 mS com a màxim. L’augment d’aquests valors redueix el corrent de subministrament mentre es connecta, però el compromís és la transmissió de dades més lenta. Cada actualització de la pantalla té aproximadament 7 missatges BLE, mentre que una mesura completa de 36 hores de 10 minuts pren aproximadament 170 missatges BLE. Per tant, augmentar els intervals de connexió alenteix les actualitzacions de pantalla i es visualitza la trama.

La classe lp_BLESerial té un buffer d’enviament de 1536 bytes i només envia un bloc de 20 bytes d’aquest buffer, cada interval màxim de connexió per evitar inundar l’enllaç BLE amb dades. També quan s’envien dades de la trama, l’esbós només envia dades fins que s’espera que s’enviïn 512 bytes i després retarda l’enviament de més dades fins que s’envien algunes dades. Això evita la inundació de memòria intermèdia. Aquesta limitació dels enviaments fa que la transmissió de dades al mòbil sigui fiable, però no està optimitzada per a la màxima rendibilitat.

En aquest projecte, es van deixar els intervals de connexió com a valors predeterminats.

Latència d’esclaus

Quan no hi ha dades per enviar al mòbil, el dispositiu pot ignorar opcionalment alguns dels missatges de connexió del mòbil. Això estalvia energia Tx i corrent de subministrament. El paràmetre de latència esclau és el nombre de missatges de connexió que cal ignorar. El valor per defecte és 0. El mètode lp_BLESerial setSlaveLatency () es pot utilitzar per canviar aquesta configuració.

La latència d'esclau per defecte de 0 va donar ~ 50uA corrent de subministrament, ignorant les actualitzacions de pantalla cada 30 segons, però incloent els missatges keepAlive durant 5 segons. Si definiu la latència de l’esclau a 2 es va obtenir un corrent mitjà de subministrament connectat de ~ 25uA. Un paràmetre de latència esclau de 4 donava ~ 20uA. Els paràmetres superiors no semblaven reduir el corrent de subministrament, de manera que es va utilitzar un paràmetre de latència esclau de 4.

Quan es connecta, cada 30 segons pfodApp sol·licita una actualització de la pantalla. Això obliga a mesurar el sensor i reenvia dades per actualitzar la visualització gràfica. Aquesta actualització resulta en un ~ 66uA addicional durant 2 segons cada 30 segons. És a dir, una mitjana de 4,4 uA durant els 30 segons. Si s’afegeix això al 20uA, es proporciona una corrent mitjana de subministrament de connexió de ~ 25uA

Pas 5: corrent total de subministrament i durada de la bateria

Utilitzant els paràmetres anteriors, tal com s’estableix a lp_BLE_TempHumidity_R3.ino, el corrent total de subministrament en connectar-se i actualitzant la pantalla cada 30 segons, aproximadament 25uA. Quan no està connectat, és aproximadament 29uA.

Per calcular la durada de la bateria s’assumeix un consum continu de corrent de ~ 29uA.

Diverses bateries tenen diferències de capacitat i característiques de voltatge. Les bateries que es consideren aquí són cèl·lules de monedes CR2032, cèl·lules de monedes CR2450 (N), 2 x alcalines AAA, 2 x liti AAA i LiPo.

Resum de la bateria

Si utilitzeu Solar Assist, afegiu un 50% a aquestes xifres de durada de la bateria (suposant que la llum del dia és de 8 hores)

Nota: El condensador LowesR 22uF (C1), a més del condensador NanoV2 22uF incorporat, emmagatzema el corrent de la cèl·lula solar i el subministra per als polsos de corrent TX. D'altra banda, la bateria subministra part del corrent TX. Aquest LowESR de 22uF addicional afegeix aproximadament un 10% al corrent de la bateria quan la cèl·lula solar no és el subministrament, però també amplia la vida de la bateria compensant la resistència interna de la bateria a mesura que la bateria arriba al final de la seva vida útil. Les mesures següents es van prendre SENSE el condensador addicional de 22uF.

CR2032 - 235mAHr - durada de la bateria 10 mesos CR2450 (N) - 650mAHr (540mAHr) - durada de la bateria 2,3 anys (2 anys) 2 x AAA alcalí - 1250 mAHr - durada de la bateria 3,8.yrs2 x AAA de liti - 1200 mAHr - durada de la bateria 4,7 anys Recomanable per LiPo a causa de l’alta autodescàrrega.

CR2032

Aquesta cèl·lula de moneda té una capacitat típica de 235 mAHr (bateria energitzant), un voltatge nominal de 3V i un voltatge de descàrrega especificat de 2V. Això implica una durada de la bateria de 8100hrs o ~ 0,9yr. No obstant això, la resistència interna de la cèl·lula augmenta a mesura que la bateria arriba al final de la seva vida útil i, per tant, pot no ser capaç de proporcionar els impulsos de corrent de pic pic. Es pot utilitzar un condensador de subministrament més gran per reduir aquest efecte, però diguem que té una vida de 10 mesos.

CR2450 (N)

Aquesta cèl·lula de moneda té una capacitat típica de 620mAHr (540mAHr per CR2450N), una tensió nominal de 3V i una tensió de descàrrega especificada de 2V. Això implica una durada de la bateria de 22, 400hrs o ~ 2yr 6m (18600hrs ~ 2yrs 2m per CR2450N). No obstant això, la resistència interna de la cèl·lula augmenta a mesura que la bateria arriba al final de la seva vida útil i, per tant, pot no ser capaç de proporcionar els impulsos de corrent de pic pic. Es pot utilitzar un condensador de subministrament més gran per reduir aquest efecte, però diem una vida útil de 2 anys 4 m (2 anys N).

Nota: La versió CR2450N té un llavi més gruixut que ajuda a evitar una instal·lació incorrecta en un suport CR2450N. Podeu inserir una cel·la CR2450N i CR2450 en un suport CR2450, però no podeu inserir una cel·la CR2450 en un suport CR2450N

2 cèl·lules alcalines AAA

Aquestes bateries tenen una capacitat d’uns 1250 mAHr (bateria energitzant) per a corrents molt baixos, una tensió nominal de 2x1,5V = 3V i una tensió de descàrrega especificada de 2x0,8V = 1,6V. Però aquest voltatge de descàrrega especificat és inferior al voltatge de funcionament del sensor Si7021 (1,9 V), de manera que la bateria només es pot utilitzar fins a ~ 1 V cadascun. Això redueix la capacitat entre un 10% i un 15%, és a dir, ~ 1000mAHr.

Això implica una durada de la bateria de 34, 500 hores o ~ 4 anys. No obstant això, la resistència interna de la cèl·lula augmenta a mesura que la bateria arriba al final de la seva vida útil i, per tant, pot no ser capaç de proporcionar els impulsos de corrent de pic pic. Es pot utilitzar un condensador de subministrament més gran per reduir aquest efecte, però diem una vida útil de 3 a 10 m. Nota Les bateries alcalines tenen una descàrrega automàtica del 2% al 3% anual.

2 cèl·lules de liti AAA

Aquestes bateries tenen una capacitat d’uns 1200 mAHr (bateria energitzant), una tensió nominal de 2x1,7V = 3,4V, a baixos corrents i una tensió descarregada de 2x1,4V = 2,4V. Això implica una durada de la bateria de 41, 400hrs o 4yrs 8m.

Bateria recarregable LiPo

Aquestes bateries tenen diverses capacitats des de 100 mAHr fins a 2000 mAHr, en formats plans, i tenen una tensió carregada de 4,2 V i una tensió descarregada> 2,7 V. Tot i això, tenen una alta descàrrega automàtica del 2% al 3% / mes (és a dir, del 24% al 36% anual) i, per tant, no són tan adequats per a aquesta aplicació com les altres bateries.

Pas 6: alternatives de subministrament: assistència solar, només bateria, només solar

Alternatives de subministrament: assistència solar, només bateria, només solar
Alternatives de subministrament: assistència solar, només bateria, només solar
Alternatives de subministrament: assistència solar, només bateria, només solar
Alternatives de subministrament: assistència solar, només bateria, només solar
Alternatives de subministrament: assistència solar, només bateria, només solar
Alternatives de subministrament: assistència solar, només bateria, només solar
Alternatives de subministrament: assistència solar, només bateria, només solar
Alternatives de subministrament: assistència solar, només bateria, només solar

Bateria més Solar Assist

La construcció anterior utilitza el subministrament de bateria més Solar Assist. Quan els panells solars generen més tensió que la tensió de la bateria, les cèl·lules solars alimentaran el monitor, de manera que s’allargarà la vida de la bateria. Normalment, la durada de la bateria es pot allargar un 50% més.

Els panells solars utilitzats són petits, de 50 mm x 30 mm, són barats, ~ 0,50 dòlars i de poca potència. Són panells de 5V nominalment, però necessiten llum solar directa directa per generar 5V. En aquest projecte es connecten dos panells en sèrie, de manera que col·locar el monitor a prop d’una finestra, fora del sol directe, és suficient per alimentar la bateria. Fins i tot una habitació ben il·luminada o una làmpada d’escriptori són suficients perquè les cèl·lules solars generin> 3,3 V a> 33 uA i es facin càrrec de la bateria.

Es va construir un senzill panell de prova per determinar on es podria col·locar el monitor de temperatura / humitat fora del sol i, tot i així, alimentar-se amb energia solar. Com podeu veure a la foto superior, els dos panells connectats a una resistència de 100 K produeixen 5,64 V a través dels 100 K, és a dir, 56uA de corrent a 5,64 V. Això és més que suficient per alimentar el monitor des de la bateria. Qualsevol lectura de tensió per sobre del voltatge nominal de la bateria de 3V significa que les cèl·lules solars alimentaran el monitor en lloc de la bateria.

Els dos díodes del circuit del monitor d’humitat de temperatura aïllen les cèl·lules solars i les bateries entre si i es protegeixen de la seva connexió en polaritat inversa. La resistència zener de 10V 1W i la sèrie 470R protegeix el regulador de bord del NanoV2 de la sobretensió de dues cèl·lules solars a ple sol, sobretot si s’utilitzen cèl·lules de 12V en lloc de 5V. En funcionament normal a <5V, el zener de 10V només dibuixa ~ 1uA.

Només bateria

Per a un subministrament només de bateria, només ometreu R1, D1 i D3 i les cèl·lules solars. També podeu substituir D1 per un tros de filferro si no voleu protecció contra la polaritat inversa.

Només solar

L’alimentació del monitor només des de Solar Cells, sense bateria, requereix un circuit d’alimentació diferent. El problema és que, mentre el monitor funciona amb 29uA, en encendre el nRF52 atrau ~ 5mA durant 0,32 seg. El circuit mostrat anteriorment (versió pdf) manté el regulador MAX8881 apagat fins que els condensadors d’entrada, 2 x 1000uF, es carreguin fins a 4,04 V. A continuació, el MAX6457 allibera l'entrada MAX8881 SHDN per encendre el nRF52 (NanoV2). Els condensadors de 2 x 1000uF subministren el corrent d'arrencada necessari.

Això permet que el monitor s'encengui tan aviat com hi hagi prou energia solar per mantenir-lo en funcionament a 29uA.

Pas 7: Conclusió

Aquest tutorial ha presentat un monitor d’humitat de temperatura alimentat per bateria / solar com a exemple de projecte BLE de molt baixa potència a Arduino per al xip nRF52832. Corrents de subministrament de ~ 29uA quan s'aconsegueix ajustant els paràmetres de connexió. Això va resultar en una durada de la bateria de la pila de monedes CR2032 que supera els 10 mesos. Més llarg per a piles i piles de monedes de més capacitat. Si afegiu dues cèl·lules solars econòmiques, la vida de la bateria s’allargaria fàcilment un 50% o més. Una llum lluminosa o un llum d’escriptori són suficients per alimentar el monitor de les cèl·lules solars.

Es va presentar un circuit d'alimentació especial per permetre que el monitor funcionés exclusivament a partir de cèl·lules solars de baixa capacitat.

El pfodDesigner gratuït us permet dissenyar menús / submenús, traçar-los en funció de la data / hora i registrar les dades i, a continuació, generar l’esbós Arduino de poca potència. Aquí es va codificar una interfície personalitzada mitjançant primitives de dibuix de pfodApp. La connexió amb pfodApp mostra la interfície d'usuari i actualitza les lectures mentre el monitor utilitza ~ 29uA

No cal programar Android. pfodApp gestiona tot això.

Recomanat: