Cuprins:

BLE ușor de putere foarte mică în Arduino Partea 2 - Monitor de temperatură / umiditate - Rev. 3: 7 pași
BLE ușor de putere foarte mică în Arduino Partea 2 - Monitor de temperatură / umiditate - Rev. 3: 7 pași

Video: BLE ușor de putere foarte mică în Arduino Partea 2 - Monitor de temperatură / umiditate - Rev. 3: 7 pași

Video: BLE ușor de putere foarte mică în Arduino Partea 2 - Monitor de temperatură / umiditate - Rev. 3: 7 pași
Video: High Density 2022 2024, Noiembrie
Anonim
BLE ușor de putere foarte mică în Arduino Partea 2 - Monitor de temperatură / umiditate - Rev.3
BLE ușor de putere foarte mică în Arduino Partea 2 - Monitor de temperatură / umiditate - Rev.3
BLE ușor de putere foarte mică în Arduino Partea 2 - Monitor de temperatură / umiditate - Rev.3
BLE ușor de putere foarte mică în Arduino Partea 2 - Monitor de temperatură / umiditate - Rev.3
BLE ușor de putere foarte mică în Arduino Partea 2 - Monitor de temperatură / umiditate - Rev.3
BLE ușor de putere foarte mică în Arduino Partea 2 - Monitor de temperatură / umiditate - Rev.3

Actualizare: 23 noiembrie 2020 - Prima înlocuire a 2 baterii AAA începând cu 15 ianuarie 2019, adică 22 de luni pentru 2xAAA Alcaline Actualizare: 7 aprilie 2019 - Rev 3 din lp_BLE_TempHumidity, adaugă graficele de dată / oră, utilizând pfodApp V3.0.362 + și reglare automată la trimitere date

Actualizare: 24 martie 2019 - Rev. 2 din lp_BLE_TempHumidity, adaugă mai multe opțiuni de complot și i2c_ClearBus

Acest instructabil, un monitor de umiditate a temperaturii de putere foarte scăzută, este partea 2 din 3.

Partea 1 - Construirea dispozitivelor BLE de putere foarte redusă simplificată cu Arduino acoperă configurarea Arduino pentru a codifica dispozitivele cu putere redusă nRF52, modulul de programare și măsurarea curentului de alimentare. De asemenea, acoperă temporizatoare și comparatoare specializate de consum redus și intrările reduse și utilizarea pfodApp pentru conectarea și controlul dispozitivului nRF52.

Partea 2 - Un monitor de umiditate cu temperatură de putere foarte scăzută, acesta acoperă folosind un modul Redbear Nano V2 și un senzor de temperatură / umiditate Si7021 pentru a construi o baterie / monitor solar cu putere redusă. De asemenea, acoperă modificarea bibliotecii Si7021 pentru a avea o putere redusă, reglarea dispozitivului BLE pentru a reduce consumul curent de <25uA și proiectarea unui afișaj personalizat de temperatură / umiditate pentru telefonul dvs. mobil.

Partea 3 - O înlocuire Redbear Nano V2 acoperă folosind alte module bazate pe nRF52 în loc de Nano V2. Acoperă selectarea componentelor de alimentare, construcția, eliminarea protecției de programare a cipului nRF52, utilizarea pinilor NFC ca GPIO normal și definirea unei noi plăci nRF52 în Arduino.

Această instrucțiune este o aplicație practică a dispozitivului BLE de construcție a părții 1, ușor de utilizat cu Arduino, prin construirea unui monitor BLE de temperatură și umiditate foarte redus. Monitorul va funcționa ani de zile cu baterii Coin Cell sau 2 x AAA, chiar mai mult cu asistență solară. Acest tutorial acoperă reglarea parametrilor BLE pentru un consum redus de energie și cum să vă alimentați dispozitivul de la baterie SAU baterie + solar SAU numai solar.

Pe lângă afișarea temperaturii și umidității actuale, monitorul stochează ultimele 36 de ore de 10 minute și ultimele 10 zile de lecturi orare. Acestea pot fi graficate pe mobilul dvs. Android și valorile salvate într-un fișier jurnal. Nu este necesară programarea Android, pfodApp gestionează toate acestea. Afișarea și graficarea Android sunt complet controlate de schița dvs. Arduino, astfel încât să o puteți personaliza după cum este necesar.

O placă Redbear Nano V2 este utilizată pentru componenta nRF52832 BLE și o placă Sparkfun Si7021 este utilizată pentru senzorul de temperatură / umiditate. O bibliotecă modificată de consum redus este utilizată cu Si7021. Un mic PCB a fost proiectat pentru a conține NanoV2 și pentru a furniza componentele. Cu toate acestea, deoarece nu există componente montate pe suprafață utilizate, puteți construi la fel de ușor acest lucru pe placa VERO. Sunt acoperite trei versiuni de alimentare. i) Baterie plus asistență solară, ii) Numai baterie, iii) Numai solar. Opțiunea Solar Only nu are stocare a bateriei și, prin urmare, va rula numai atunci când există puțină lumină. Este suficientă o lumină luminoasă a camerei sau o lampă de birou.

Contur

Acest proiect are 4 părți relative relative: -

  1. Selecția și construcția componentelor
  2. Cod - Bibliotecă senzor de putere redusă, interfață utilizator și schiță Arduino
  3. Măsurarea curentului de alimentare și a duratei de viață a bateriei
  4. Alternative de aprovizionare - Solar Assist, numai baterie, numai solar

Pasul 1: Selectarea componentelor

Selectarea componentelor

Așa cum s-a menționat în partea 1 - Trucul pentru a obține o soluție cu putere foarte mică este să nu faci nimic de cele mai multe ori, să minimizezi curentul prin rezistențe externe de tragere / tragere la intrări și să nu ai componente suplimentare. Acest proiect va folosi fiecare dintre aceste trucuri pentru a obține o soluție de consum redus.

Componenta nRF52832

Cipul nRF52832 poate funcționa cu o sursă de alimentare între 1,7 V și 3,6 V (tensiune maximă absolută 3,9 V). Aceasta înseamnă că ați putea alimenta cipul direct dintr-o celulă monedă sau 2 baterii AAA. Cu toate acestea, este prudent să adăugați un regulator de tensiune pentru a proteja cipul de peste volți. Această componentă suplimentară vine cu un cost de putere, dar în cazul plăcii NanoV2, regulatorul de bord, TLV704, consumă mai puțin de 5,5 uA max, de obicei doar 3,4 uA. Pentru acest consum suplimentar mic de energie, beneficiați de protecție pentru intrări de alimentare de până la 24V.

Componenta Si7021

Senzorul Si7021 însuși atrage în mod tipic <1uA atunci când nu efectuează o măsurătoare, adică în standby și până la 4mA atunci când transmite datele prin I2C. Deoarece nu luăm măsurători continuu, 4mA nu este o parte semnificativă a curentului mediu de alimentare. Dacă efectuați o citire de 30 de secunde, se adaugă mai puțin de 1 uA curentului mediu de alimentare, consultați măsurătorile curentului de alimentare de mai jos.

Există două plăci de scurgere Si7021 ușor disponibile. Unul de la Adafruit și unul de la Sparkfun. O privire rapidă către cele două plăci vă va spune că placa Adafruit are multe mai multe componente decât placa Sparkfun, deci veți fi înclinați să alegeți placa Sparkfun. Uitându-ne la schemele pentru fiecare placă, se arată că placa Sparkfun este doar senzorul gol și doi rezisotori de tracțiune 4k7, în timp ce placa Adafruit are un regulator integrat, MIC5225, care atrage de obicei 29uA tot timpul. Acest lucru este semnificativ atunci când curentul total pentru restul circuitului este <30uA. Întrucât avem deja un regulator pentru cipul nRF52832, această componentă suplimentară nu este necesară, iar Si7021 poate fi alimentat din această sursă de 3.3V. Deci, acest proiect va folosi placa de ieșire Si7021 de la Sparkfun.

minimizați curentul prin rezistențe externe pull-up / pull-down la intrări

Rezistențele de tragere 4K7 I2C nu au o valoare deosebit de ridicată și vor atrage 0,7mA atunci când vor fi scăzute. Aceasta ar fi o problemă dacă ar fi pe o intrare de comutator care a fost împământată pentru perioade lungi de timp. Cu toate acestea, în acest proiect, curentul prin aceste rezistențe este redus la minimum prin utilizarea interfeței I2C numai rareori și doar pentru o perioadă scurtă de timp. De cele mai multe ori liniile I2C nu sunt utilizate și sunt ridicate / tri-state, astfel încât nu curge curent prin aceste rezistențe.

Pasul 2: Construcție

Constructie
Constructie
Constructie
Constructie
Constructie
Constructie

Proiectul este construit pe un PCB mic, dar din moment ce nu există componente SMD, acesta poate fi la fel de ușor de construit folosind placa Vero. PCB-ul a fost fabricat de pcbcart.com din aceste fișiere Gerber, TempHumiditySensor_R1.zip PCB-ul este suficient de general pentru a fi utilizat pentru alte proiecte BLE.

Schema este prezentată mai sus. Iată o versiune pdf.

Lista de componente

Costul aproximativ pe unitate în decembrie 2018, ~ 62 USD, cu excepția transportului și a programatorului din partea 1

  • Redbear NanoV2 ~ 17 USD
  • Placă Sparkfun Si7021 ~ 8 USD
  • 2 x 53mm x 30mm 0,15W 5V celule solare de ex. Overfly ~ 1,10 USD
  • 1 x PCB TempHumiditySensor_R1.zip ~ 25 USD pentru 5 de pe www.pcbcart.com SAU placa Vero (bandă de cupru) de ex. Jaycar HP9540 ~ AUD 5 USD
  • 2 diode schottky 1N5819 de ex. Digikey 1N5819FSCT-ND ~ 1 USD
  • 1 x 470R 0.4W 1% rezistor de ex. Digikey BC3274CT-ND ~ 0,25 USD
  • 6 x 6 pini tată de ex. Sparkfun PRT-00116 ~ 1,5 USD
  • jumper de la femeie la femeie de ex. ID Adafruit: 1950 ~ 2 USD
  • Șuruburi din nailon de 3 mm x 12 mm, de ex. Jaycar HP0140 ~ AUD 3 USD
  • Piulițe de nailon de 3 mm x 12 mm, de ex. Jaycar HP0146 ~ AUD 3 USD
  • Bandă de montare permanentă Scotch Cat 4010 de ex. de la Amazon ~ 6,6 USD
  • Suport baterie AAA x 2, de ex. Sparkfun PRT-14219 ~ 1,5 USD
  • 2 baterii alcaline AAA 750mA, de ex. Sparkfun PRT-09274 ~ US $ 1,0 Aceste baterii ar trebui să dureze> 2 ani. Bateriile alcaline Energizer au o capacitate mai mare
  • Cutie de plastic (ABS) 83mm x 54mm x 31mm, de ex. Jaycar HB6005 ~ AUD 3 USD
  • pfodApp ~ 10 USD
  • 1 x 22uF 63V condensator ESR scăzut (opțional) de ex. Jaycar RE-6342 ~ AUD 0,5 USD sau Digikey P5190-ND ~ 0,25 USD

Construcția este directă. Suportul bateriei și celulele solare sunt fixate pe cutia de plastic cu bandă dublă pentru față grea.

Rețineți firul de legătură Gnd de la CLK la GND în partea finită. Acesta este instalat DUPĂ programare pentru a preveni zgomotul de pe intrarea CLK de la declanșarea cipului nRF52 într-un mod de depanare cu curent ridicat

Pasul 3: Cod - Bibliotecă senzor de putere redusă, interfață utilizator și schiță Arduino

Cod - Bibliotecă senzor de putere redusă, interfață utilizator și schiță Arduino
Cod - Bibliotecă senzor de putere redusă, interfață utilizator și schiță Arduino
Cod - Bibliotecă senzor de putere redusă, interfață utilizator și schiță Arduino
Cod - Bibliotecă senzor de putere redusă, interfață utilizator și schiță Arduino
Cod - Bibliotecă senzor de putere redusă, interfață utilizator și schiță Arduino
Cod - Bibliotecă senzor de putere redusă, interfață utilizator și schiță Arduino

Descărcați codul zip, lp_BLE_TempHumidity_R3.zip și dezarhivați-l în directorul Arduino Sketches. De asemenea, trebuie să instalați biblioteca lp_So7021 din acest fișier zip și, de asemenea, să instalați biblioteca pfodParser.

Biblioteca senzorului de putere redusă, lp_Si7021

Atât Adafruit, cât și Sparkfun oferă biblioteci de asistență pentru a accesa senzorul Si7021, totuși ambele biblioteci nu sunt potrivite pentru o utilizare foarte redusă. Ambele folosesc o întârziere (25) în cod pentru a întârzia citirea senzorului în timp ce acesta își ia măsurarea. După cum sa menționat în partea 1, întârzierile sunt rele. Întârzierea Arduino () doar menține microprocesorul în funcțiune folosind alimentarea în timp ce așteaptă întârzierea. Acest lucru încalcă prima regulă a puterii reduse BLE, nu face nimic de cele mai multe ori. Biblioteca de înlocuire lp_Si7021 înlocuiește toate întârzierile cu lp_timers care aduc microprocesorul în așteptare în timp ce așteaptă ca senzorul să-și termine măsurarea.

Cât de mult face diferența biblioteca lp_Si7021? Folosind biblioteca originală de asistență SparkFun Si7021 și luând o lectură pe secundă fără imprimări seriale, se obține o medie de ~ 1,2 mA. Înlocuirea bibliotecii Sparkfun cu biblioteca lp_Si7021 reduce curentul mediu la ~ 10uA, adică de 100 de ori mai puțin. În acest proiect, cea mai rapidă rată de măsurare este o dată la 30 de secunde când telefonul este conectat, ceea ce duce la un curent mediu al senzorului mai mic de 1uA. Când nu există o conexiune BLE, rata de măsurare este o dată la 10 minute și curentul mediu de alimentare al senzorului este neglijabil.

Interfața cu utilizatorul

Deasupra este afișarea ecranului principal și o vizualizare mărită a istoricului orar de 10 zile. Parcele pot fi mărite și panoramate în ambele direcții, folosind două degete.

Interfața cu utilizatorul este codificată în schița Arduino și apoi trimisă la pfodApp la prima conexiune unde este stocată în cache pentru utilizare și actualizări repetate. Afișajul grafic este construit din desenele primitive. Consultați Controalele Arduino personalizate pentru Android pentru un tutorial despre cum să vă creați propriile controale. Fișierele Thermometer, RHGauge și Button conțin comenzile de desen pentru acele articole.

Notă: Niciuna dacă acest ecran este încorporat în pfodApp. Întregul ecran este complet controlat de codul din schița dvs. Arduino

Metoda sendDrawing_z () din schița lp_BLE_TempHumidity_R3.ino definește interfața cu utilizatorul.

void sendDrawing_z () {dwgs.start (50, 60, dwgs. WHITE); // valorile implicite ale fundalului sunt WHITE dacă sunt omise, adică start (50, 60); parser.sendRefreshAndVersion (30000); // solicitați din nou dwg la fiecare 30 de secunde. acest lucru este ignorat dacă nu există set de versiuni de analizor // atingeți butoanele de deasupra pentru a forța afișarea actualizărilor dwgs.touchZone (). cmd ('u'). size (50, 39).send (); dwgs.pushZero (35, 22, 1.5); // mutați zero la centrul dwg la 35, 22 și scalați de 1,5 ori rhGauge.draw (); // desenează controlul dwgs.popZero (); dwgs.pushZero (18, 33); // mutați zero la centrul dwg la 18, scara 33 este 1 (implicit) thermometer.draw (); // desenează controlul dwgs.popZero ();

dwgs.pushZero (12,5, 43, 0,7); // mutați zero la centrul dwg la 12,5, 43 și scalați cu 0,7

hrs8PlotButton.draw (); // desenează controlul dwgs.popZero (); dwgs.pushZero (37,5, 43, 0,7); // mutați zero la centrul dwg la 37,5, 43 și scalați cu 0,7 zile1PlotButton.draw (); // desenează controlul dwgs.popZero ();

dwgs.pushZero (12,5, 54, 0,7); // mutați zero la centrul dwg la 12,5, 54 și scalați cu 0,7

days3PlotButton.draw (); // desenează controlul dwgs.popZero (); dwgs.pushZero (37,5, 54, 0,7); // mutați zero la centrul dwg la 37,5, 54 și scalați cu 0,7 zile10PlotButton.draw (); // desenează controlul dwgs.popZero (); dwgs.end (); }

Comenzile pushZero modifică originea și scalarea pentru desenarea următoarei componente. Acest lucru vă permite să modificați cu ușurință dimensiunea și poziția butoanelor și a indicatorilor.

La prima conexiune, afișajul inițial durează 5 sau 6 secunde pentru a încărca în jos ~ 800 octeți care definesc afișajul. pfodApp memorează în cache afișajul, astfel încât actualizările viitoare trebuie doar să trimită modificările, pozițiile gabaritului și citirile. Aceste actualizări durează doar câteva secunde pentru a trimite 128 de octeți necesari pentru a actualiza afișajul.

Există cinci (5) zone tactile active definite pe afișaj. Fiecare buton are unul definit în metoda sa draw (), deci puteți face clic pe acesta pentru a deschide graficul respectiv, iar jumătatea superioară a ecranului este configurată ca a treia zonă tactilă

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

Când faceți clic pe ecran deasupra butoanelor, comanda „u” dwg este trimisă la schița dvs. pentru a forța o nouă măsurare și actualizare a ecranului. În mod normal, când sunteți conectat, actualizările au loc numai la fiecare 30 de secunde. Fiecare clic sau reîmprospătare a desenului forțează o nouă măsurare. Răspunsul de la schița Arduino la pfodApp este întârziat până la finalizarea noii măsurători (~ 25mS), astfel încât cea mai recentă valoare să poată fi trimisă în actualizare.

Schiță Arduino

Schița Arduino, lp_BLE_TempHumidity_R3.ino, este o versiune îmbunătățită a schiței de exemplu folosită în partea 1. Schița lp_BLE_TempHumidity_R3.ino înlocuiește meniul cu desenul de mai sus. De asemenea, adaugă suportul senzorului lp_Si7021 și matrice de date pentru a stoca măsurătorile istorice de 10 minute și orare.

Principala complicație în schița lp_BLE_TempHumidity_R3.ino este de a gestiona trimiterea datelor de parcela. Pe măsură ce măsurătorile sunt făcute readRHResults () gestionează colectarea rezultatelor și salvarea lor în matricile istorice. Tablourile sunt 120 lungi, dar când datele sunt trimise, primele 30 de puncte de date sunt pentru un interval de timp mai fin.

Există câteva puncte de care trebuie să aveți grijă atunci când trimiteți cele 200 de puncte de complot impare pentru a afișa: -

  1. Fiecare punct de date are o lungime de ~ 25 octeți, în format text CSV. Deci, 150 de puncte reprezintă 3750 de octeți de date. Clasa lp_BLESerial are un buffer de 1536 octeți, din care 1024 este suficient de mare pentru cel mai mare mesaj pfod. Celelalte 512 octeți sunt rezervate pentru trimiterea datelor. Odată ce datele istorice au completat cei 512 octeți, trimiterea de date suplimentare este întârziată până când există spațiu în buffer.
  2. Pentru a evita ca datele graficului să încetinească actualizările principale ale afișajului, datele graficului sunt trimise numai în timp ce este afișat ecranul graficului. Odată ce utilizatorul revine la ecranul principal, trimiterea datelor parcelei este întreruptă. Trimiterea datelor despre grafic se reia când utilizatorul face clic pe butonul de grafic pentru a afișa din nou graficul.
  3. Comploturile istorice încep de la 0 (acum) și merg înapoi în timp. Dacă nu a existat nicio măsurare nouă de când a fost afișat ultimul grafic, datele anterioare care au fost deja descărcate sunt afișate din nou imediat. Dacă există o nouă măsurare, atunci aceasta se adaugă la datele anterioare ale graficului.
  4. Când monitorul este pornit pentru prima dată, nu există citiri istorice și 0 este stocat în tablouri ca o lectură nevalidă. Când se afișează complotul, citirile nevalide sunt doar omise, rezultând un complot mai scurt.

Celsius și Fahrenheit

Schița lp_BLE_TempHumidity_R3.ino afișează și trasează datele în Celsius. Pentru a converti rezultatele în Fahrenheit înlocuiți toate aparițiile de

parser.print (sensor. Temp_RawToFloat (..

cu

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

Și înlocuiți simbolul degC unicode în Octal / 342 / 204 / 203 cu simbolul degF / 342 / 204 / 211

pfodApp va afișa orice Unicode pe care îl puteți afișa telefonul mobil.

Consultați Utilizarea caracterelor non-ASCII în Arduino pentru mai multe detalii. De asemenea, modificați setările MIN_C, MAX_C din Thermometer.h. În cele din urmă, ajustați limitele parcelei după cum doriți, de exemplu modificare | Temp C ~ 32 ~ 8 ~ deg C |

a zice

| Temp F ~ 90 ~ 14 ~ deg F |

Pasul 4: Măsurarea curentului de alimentare

Măsurarea curentului de alimentare
Măsurarea curentului de alimentare

Utilizând biblioteca lp_Si7021, chiar și măsurarea temperaturii / umidității la fiecare 10 secunde contribuie doar la ~ 1uA la curentul mediu de alimentare, deci factorul principal în curentul de alimentare și, prin urmare, durata de viață a bateriei este curentul utilizat de publicitatea BLE și conexiunea și transmiterea datelor.

Conectați placa de temperatură / umiditate la programatorul descris în partea 1, așa cum se arată mai sus.

Cu celulele solare și bateriile deconectate, Vin și Gnd sunt conectate la programatorul Vdd și Gnd (cablurile galbene și verzi), iar SWCLK și SWDIO sunt conectate la Clk și SIO ale plăcii antetului programatorului (cablurile albastru și roz)

Acum puteți programa NanoV2 și puteți măsura curentul de alimentare așa cum este descris în partea 1.

Instalați biblioteca Si7021 de consum redus din acest fișier zip, lp_Si7021.zip și instalați biblioteca pfodParser și dezarhivați lp_BLE_TempHumidity_R3.zip în directorul de schițe Arduino și programați placa Temp / Humditiy cu lp_BLE_TempHumidity_R3.ino

După cum sa menționat mai sus, contribuția senzorului este <1uA, în medie, la cea mai mare rată de măsurare utilizată în acest proiect, astfel încât parametrii de publicitate și conexiune BLE sunt factorul determinant pentru durata de viață a bateriei.

Parametrii de publicitate și conexiune BLE care afectează consumul de curent sunt: -Tx Power, Advertising Interval, Max și Min Connection Intervals și Slave Latency.

Notă: Folosind conexiunile de mai sus există două (2) regulatoare în sursă, unul pe placa NanoV2 prin Vin și MAX8881 pe sursa programatorului. Aceasta înseamnă că curenții de alimentare măsurați vor fi cu ~ 5uA mai mari decât efectiv, datorită celui de-al doilea regulator. Valorile citate mai jos sunt curenții măsurați minus acest 5uA suplimentar.

Putere Tx

Efectele de alimentare Tx furnizează curent atât la conectare, cât și la publicitate (neconectat). Acest proiect utilizează setarea de putere maximă (+4) și oferă cea mai bună autonomie și cea mai mare imunitate la zgomot pentru cele mai fiabile conexiuni. Puteți utiliza metoda lp_BLESerial setTxPower () pentru a modifica setarea de putere. Valorile valide sunt, în creștere a puterii, -40, -30, -20, -16, -12, -8, -4, 0 +4. Trebuie să apelați metoda lp_BLESerial begin () ÎNAINTE să apelați setTxPower (). Consultați schița lp_BLE_TempHumidity_R3.ino.

Puteți experimenta cu reducerea puterii Tx, dar compromisul este cu o rază mai mică de acțiune și mai multe întreruperi ale conexiunii datorită interferențelor. În acest proiect, puterea Tx este lăsată la valoarea implicită, +4. După cum veți vedea mai jos, chiar și cu această setare, curentul de alimentare foarte scăzut este încă posibil.

Interval de publicitate

Pentru o anumită putere Tx, atunci când nu există nicio conexiune, Intervalul de publicitate stabilește consumul mediu curent. Gama recomandată este de 500 până la 1000mS. Aici a fost utilizat 2000mS. Compromisul constă în faptul că intervale de publicitate mai lungi înseamnă că este mai lent pentru dispozitivul dvs. mobil să găsească dispozitivul și să configureze o conexiune. Pe plan intern, intervalele de publicitate sunt setate în multipli de 0,625mS în intervalul 20mS la 10,24sec. Metoda lp_BLESerial setAdvertisingInterval () ia mS ca argument, pentru comoditate. Pentru +4 TxPower și 2000mS intervalul de publicitate, consumul curent a fost de ~ 18uA. Pentru un interval de publicitate de 1000 mS, a fost ~ 29uA. Rev 2 a folosit un interval de publicitate de 2000 mS, dar acest lucru a dus la conexiuni lente. Rev 3 s-a schimbat în 1000mS interval de publicitate pentru a face conexiunile mai rapide.

Intervalele de conexiune Max și Min

După stabilirea unei conexiuni, intervalul de conexiune determină cât de des contactează dispozitivul mobil. Lp_BLESerial setConnectionInterval () vă permite să setați max și min sugerate, totuși mobilul controlează care este de fapt intervalul de conexiune. Pentru comoditate, argumentele setConnectionInterval () sunt în mS, dar la intervale interne conexiunile sunt multiple de 1,25mS, în intervalul 7,5mS la 4sec.

Setarea implicită este setConnectionInterval (100, 150), adică min 100mS până la max 150mS. Creșterea acestor valori reduce curentul de alimentare în timp ce sunteți conectat, dar compromisul este transmiterea mai lentă a datelor. Fiecare actualizare a ecranului durează aproximativ 7 mesaje BLE, în timp ce o măsurare completă de 36 de ore de 10 minute durează aproximativ 170 de mesaje BLE. Deci, creșterea intervalelor de conexiune încetinește actualizările ecranului și afișarea graficului.

Clasa lp_BLESerial are un buffer de trimitere de 1536 octeți și trimite doar un bloc de 20 de octeți din acest buffer, fiecare interval maxim de conexiune pentru a preveni inundarea legăturii BLE cu date. De asemenea, la trimiterea datelor de complot, schița trimite doar date până când 512 octeți așteaptă să fie trimise, apoi întârzie trimiterea mai multor date până când unele date au fost trimise. Acest lucru evită inundațiile de tampon de trimitere. Această limitare a trimiterilor face ca transmisia datelor către mobil să fie fiabilă, dar nu este optimizată pentru puterea maximă.

În acest proiect, intervalele de conexiune au fost lăsate ca valori implicite.

Latenta sclavului

Atunci când nu există date de trimis către mobil, dispozitivul poate ignora opțional unele dintre mesajele de conectare de pe mobil. Acest lucru economisește puterea Tx și curentul de alimentare. Setarea Slave Latency este numărul de mesaje de conexiune de ignorat. Valoarea implicită este 0. Metoda lp_BLESerial setSlaveLatency () poate fi utilizată pentru a modifica această setare.

Latența Slave implicită de 0 a dat ~ 50uA curent de alimentare, ignorând actualizările de ecran la fiecare 30 de secunde, dar incluzând mesajele keepAlive foarte 5 secunde. Setarea latenței slave la 2 a dat un curent mediu de alimentare conectat de ~ 25uA. O setare de latență sclavă de 4 a dat ~ 20uA. Setările mai ridicate nu par să reducă curentul de alimentare, astfel încât a fost utilizată o setare Slave Latency de 4.

Când este conectat, la fiecare 30 de secunde pfodApp solicită o actualizare a afișajului. Aceasta forțează o măsurare a senzorului și trimite datele înapoi pentru a actualiza afișajul grafic. Această actualizare are ca rezultat un ~ 66uA suplimentar timp de 2 secunde la fiecare 30 de secunde. Aceasta este o medie de 4,4 uA pe parcursul celor 30 de secunde. Adăugând acest lucru la 20uA, se obține un curent mediu de alimentare a conexiunii de ~ 25uA

Pasul 5: curentul total de alimentare și durata de viață a bateriei

Folosind setările de mai sus, așa cum sunt setate în lp_BLE_TempHumidity_R3.ino, curentul total de alimentare la conectare și actualizarea afișajului la fiecare 30 de secunde, aproximativ 25uA. Când nu este conectat, este aproximativ 29uA.

Pentru calcularea duratei de viață a bateriei se presupune un consum continuu de curent de ~ 29uA.

Diverse baterii au capacități diferite și caracteristici de tensiune. Bateriile luate în considerare aici sunt celule de monede CR2032, celule de monede CR2450 (N), 2 x alcaline AAA, 2 x litiu AAA și LiPo.

Rezumatul bateriei

Dacă utilizați Solar Assist, adăugați 50% la aceste valori ale duratei de viață a bateriei (presupunând că lumina zilei este de 8 ore)

Notă: Condensatorul 22uF LowESR (C1), pe lângă condensatorul NanoV2 22uF de la bord, stochează curentul celulei solare și apoi îl alimentează pentru impulsurile de curent TX. Altfel înțeles, bateria furnizează o parte din curentul TX. Acest LowESR suplimentar de 22 uF adaugă aproximativ 10% curentului bateriei atunci când celula solară nu este sursa de alimentare, dar extinde și durata de viață a bateriei prin compensarea creșterii rezistenței interne a bateriei pe măsură ce bateria ajunge la sfârșitul duratei de viață. Măsurătorile de mai jos au fost luate FĂRĂ condensatorul suplimentar de 22 uF.

CR2032 - 235mAHr - durata de viață a bateriei 10 luni CR2450 (N) - 650mAHr (540mAHr) - durata de viață a bateriei 2,3 ani (2 ani) 2 x AAA alcalin - 1250mAHr - durata de viață a bateriei 3,8.yrs2 x AAA Lithium - 1200mAHr - durata de viață a bateriei 4,7 ani LiPo reîncărcabil datorită auto-descărcării mari.

CR2032

Această celulă monedă are o capacitate de 235mAHr (baterie energizantă), o tensiune nominală de 3V și o tensiune de descărcare specificată de 2V. Aceasta implică o durată de viață a bateriei de 8100 ore sau ~ 0,9 ani. Cu toate acestea, rezistența internă a celulei crește pe măsură ce bateria ajunge la sfârșitul duratei de viață și, prin urmare, este posibil să nu poată furniza impulsurile de curent de vârf Tx. Un condensator de alimentare mai mare poate fi folosit pentru a reduce acest efect, dar să spunem 10 luni de viață.

CR2450 (N)

Această celulă monedă are o capacitate de 620mAHr (540mAHr pentru CR2450N), o tensiune nominală de 3V și o tensiune de descărcare specificată de 2V. Aceasta implică o durată de viață a bateriei de 22, 400 ore sau ~ 2 ani 6 m (18600 ore ~ 2 ani 2 m pentru CR2450N). Cu toate acestea, rezistența internă a celulei crește pe măsură ce bateria ajunge la sfârșitul duratei de viață și, prin urmare, este posibil să nu poată furniza impulsurile de curent de vârf Tx. Un condensator de alimentare mai mare poate fi folosit pentru a reduce acest efect, dar să spunem viață de 2 ani 4 m (2 ani N).

Notă: Versiunea CR2450N are o buză mai groasă care ajută la prevenirea instalării incorecte într-un suport CR2450N. Puteți introduce o celulă CR2450N și CR2450 într-un suport CR2450, dar nu puteți introduce o celulă CR2450 într-un suport CR2450N

2 x celule alcaline AAA

Aceste baterii au o capacitate de aproximativ 1250mAHr (baterie energizantă) pentru curenți foarte mici, o tensiune nominală de 2x1,5V = 3V și o tensiune de descărcare specificată de 2x0,8V = 1,6V. Dar această tensiune de descărcare specificată este mai mică decât tensiunea de funcționare a senzorului Si7021 (1,9V), astfel încât bateria poate fi utilizată doar până la ~ 1V fiecare. Aceasta reduce capacitatea cu aproximativ 10% până la 15%, adică ~ 1000mAHr.

Aceasta implică o durată de viață a bateriei de 34, 500 ore sau ~ 4 ani. Cu toate acestea, rezistența internă a celulei crește pe măsură ce bateria ajunge la sfârșitul duratei de viață și, prin urmare, este posibil să nu poată furniza impulsurile de curent de vârf Tx. Un condensator de alimentare mai mare poate fi utilizat pentru a reduce acest efect, dar să spunem 3 ani 10m viață. Notă Bateriile alcaline au o descărcare automată de 2% până la 3% pe an.

2 x celule de litiu AAA

Aceste baterii au o capacitate de aproximativ 1200mAHr (Energizer Battery), o tensiune nominală de 2x1,7V = 3,4V, la curenți mici și o tensiune descărcată de 2x1,4V = 2,4V. Aceasta implică o durată de viață a bateriei de 41, 400 ore sau 4 ani 8 m.

Baterie reîncărcabilă LiPo

Aceste baterii au diverse capacități de la 100mAHr la 2000mAHr, în formate plate, și au o tensiune încărcată de 4,2V și o tensiune descărcată> 2,7V. Cu toate acestea, au o auto-descărcare mare de 2% -3% / lună (adică 24% până la 36% pe an) și, prin urmare, nu sunt la fel de potrivite pentru această aplicație ca celelalte baterii.

Pasul 6: Furnizați alternative - Solar Assist, numai baterie, numai solar

Alternative de aprovizionare - Solar Assist, numai baterie, numai solar
Alternative de aprovizionare - Solar Assist, numai baterie, numai solar
Alternative de aprovizionare - Solar Assist, numai baterie, numai solar
Alternative de aprovizionare - Solar Assist, numai baterie, numai solar
Alternative de aprovizionare - Solar Assist, numai baterie, numai solar
Alternative de aprovizionare - Solar Assist, numai baterie, numai solar
Alternative de aprovizionare - Solar Assist, numai baterie, numai solar
Alternative de aprovizionare - Solar Assist, numai baterie, numai solar

Baterie plus Solar Assist

Construcția de mai sus folosește alimentarea cu baterie plus Solar Assist. Atunci când panourile solare generează mai multă tensiune decât tensiunea bateriei, celulele solare vor alimenta monitorul, prelungind astfel durata de viață a bateriei. De obicei, durata de viață a bateriei poate fi extinsă cu încă 50%.

Panourile solare utilizate sunt mici, 50 mm x 30 mm, ieftine, ~ 0,50 USD și cu putere redusă. Acestea sunt nominal panouri de 5V, dar au nevoie de lumina directă a soarelui directă pentru a genera 5V. În acest proiect, două panouri sunt conectate în serie, astfel încât amplasarea monitorului în apropierea unei ferestre, în afara soarelui direct, este suficientă pentru a înlocui puterea bateriei. Chiar și o cameră bine luminată sau o lampă de birou este suficientă pentru ca celulele solare să genereze> 3,3 V la> 33 uA și să preia din baterie.

A fost construit un simplu panou de testare pentru a determina unde ar putea fi amplasat monitorul de temperatură / umiditate, în afara soarelui și care ar putea fi alimentat încă cu energie solară. După cum puteți vedea din fotografia de mai sus, cele două panouri conectate la un rezistor de 100K produc 5.64V pe 100K, adică 56uA curent la 5.64V. Aceasta este mai mult decât suficientă preluarea alimentării monitorului de la baterie. Orice citire de tensiune peste tensiunea nominală a bateriei de 3V înseamnă că celulele solare vor alimenta monitorul în locul bateriei.

Cele două diode din circuitul de monitorizare a umidității temperaturii izolează celulele solare și bateriile unele de altele și protejează împotriva conectării lor în polaritate inversă. Rezistorul 10V 1W zener și seria 470R protejează regulatorul de la NanoV2 de la supratensiune de la două celule solare în plin soare, mai ales dacă se folosesc celule de 12V în locul celor de 5V. În funcționare normală la <5V, zenerul de 10V atrage doar ~ 1uA.

Numai baterie

Pentru o alimentare numai cu baterie, omiteți doar R1, D1 și D3 și celulele solare. De asemenea, puteți înlocui D1 cu o bucată de sârmă dacă nu doriți o protecție inversă a polarității.

Numai solar

Alimentarea monitorului numai de la Solar Cells, fără baterie, necesită un circuit de alimentare diferit. Problema este că, în timp ce monitorul va funcționa pe 29uA, la pornire nRF52 atrage ~ 5mA timp de 0,32 sec. Circuitul prezentat mai sus (versiunea pdf) ține regulatorul MAX8881 oprit până când condensatorii de intrare, 2 x 1000uF, se încarcă până la 4,04V. Apoi MAX6457 eliberează intrarea MAX8881 SHDN pentru a porni nRF52 (NanoV2) Condensatoarele de 2 x 1000uF furnizează curentul de pornire necesar.

Acest lucru permite alimentarea monitorului de îndată ce există suficientă energie solară, menținându-l să funcționeze la 29uA.

Pasul 7: Concluzie

Acest tutorial a prezentat un monitor de umiditate a temperaturii alimentat cu baterie / solar ca exemplu de proiect BLE de foarte mică putere în Arduino pentru cipul nRF52832. Curenții de alimentare de ~ 29uA au fost obținuți prin reglarea parametrilor conexiunii. A rezultat o durată de viață a bateriei cu celule monede CR2032 care depășește 10 luni. Mai mult pentru baterii și celule de monede de capacitate mai mare. Adăugarea a două celule solare ieftine a extins cu ușurință durata de viață a bateriei cu 50% sau mai mult. O lumină luminoasă a camerei sau o lampă de birou sunt suficiente pentru a alimenta monitorul din celulele solare.

A fost prezentat un circuit special de alimentare pentru a permite monitorului să ruleze pur și simplu din celule solare de capacitate redusă.

PfodDesigner gratuit vă permite să proiectați meniuri / submeniuri, să faceți grafic în funcție de dată / oră și să jucați datele și apoi să generați schița Arduino de putere redusă pentru dvs. Aici a fost codificată o interfață personalizată folosind primitive de desen pfodApp. Conectarea cu pfodApp afișează interfața utilizatorului și actualizează citirile în timp ce monitorul utilizează ~ 29uA

Nu este necesară programarea Android. pfodApp se ocupă de toate acestea.

Recomandat: