Innehållsförteckning:

Enkel mycket låg effekt BLE i Arduino del 2 - Temperatur/fuktighetsmonitor - Rev 3: 7 steg
Enkel mycket låg effekt BLE i Arduino del 2 - Temperatur/fuktighetsmonitor - Rev 3: 7 steg

Video: Enkel mycket låg effekt BLE i Arduino del 2 - Temperatur/fuktighetsmonitor - Rev 3: 7 steg

Video: Enkel mycket låg effekt BLE i Arduino del 2 - Temperatur/fuktighetsmonitor - Rev 3: 7 steg
Video: Управляющая лампа переменного тока с реле 5 В с помощью Arduino 2024, November
Anonim
Enkel mycket låg effekt BLE i Arduino del 2 - Temperatur/fuktighetsmonitor - Rev 3
Enkel mycket låg effekt BLE i Arduino del 2 - Temperatur/fuktighetsmonitor - Rev 3
Enkel mycket låg effekt BLE i Arduino del 2 - Temperatur/fuktighetsmonitor - Rev 3
Enkel mycket låg effekt BLE i Arduino del 2 - Temperatur/fuktighetsmonitor - Rev 3
Enkel mycket låg effekt BLE i Arduino del 2 - Temperatur/fuktighetsmonitor - Rev 3
Enkel mycket låg effekt BLE i Arduino del 2 - Temperatur/fuktighetsmonitor - Rev 3

Uppdatering: 23 november 2020 - Första utbytet av 2 x AAA -batterier sedan 15 januari 2019 dvs 22 månader för 2xAAA AlkalineUpdate: 7 april 2019 - Rev 3 av lp_BLE_TempHumidity, lägger till datum/tid -diagram, med pfodApp V3.0.362+, och automatisk strypning vid sändning data

Uppdatering: 24 mars 2019 - Rev 2 av lp_BLE_TempHumidity, lägger till fler plotalternativ och i2c_ClearBus

Denna instruerbara, en mycket låg effekt temperaturfuktighetsmätare, är del 2 av 3.

Del 1 - Att bygga BLE -enheter med mycket låg effekt enkelt med Arduino -lock som ställer in Arduino för att koda nRF52 -enheter med låg effekt, programmeringsmodulen och mäta strömmen. Den täcker också specialiserade lågeffekttimers och komparatorer och debounced ingångar och använder pfodApp för att ansluta till och styra nRF52 -enheten.

Del 2 - En fuktighetsmonitor med mycket låg effekt, den här, täcker med en Redbear Nano V2 -modul och en Si7021 temperatur- / fuktighetssensor för att bygga ett batteri med låg effekt / solmonitor. Det täcker också att ändra Si7021 -biblioteket till låg effekt, ställa in BLE -enheten för att minska dess nuvarande förbrukning på <25uA och designa en anpassad temperatur/luftfuktighetsdisplay för din mobil.

Del 3 - Ett Redbear Nano V2 -ersättningsskydd med andra nRF52 -baserade moduler istället för Nano V2. Det täcker val av leveranskomponenter, konstruktion, borttagning av nRF52 -chipprogrammeringsskydd, användning av NFC -stift som normalt GPIO och definiering av ett nytt nRF52 -kort i Arduino.

Denna instruerbara är en praktisk tillämpning av del 1 -byggnad med mycket låg effekt BLE -enheter som är enkla med Arduino genom att konstruera en mycket låg effekt BLE temperatur- och luftfuktighetsmonitor. Skärmen kommer att fungera i flera år på Coin Cell eller 2 x AAA -batterier, ännu längre med solhjälp. Denna handledning behandlar inställning av BLE -parametrarna för låg strömförbrukning och hur du driver din enhet från batteri ELLER batteri + endast sol eller EL.

Förutom att visa den aktuella temperaturen och luftfuktigheten, lagrar monitorn de senaste 36 timmarna på 10 minuter och de senaste 10 dagarna med timavläsningar. Dessa kan kartläggas på din Android -mobil och värdena sparas i en loggfil. Ingen Android -programmering krävs, pfodApp hanterar allt detta. Android -skärmen och kartläggningen styrs helt av din Arduino -skiss så att du kan anpassa den efter behov.

Ett Redbear Nano V2 -kort används för nRF52832 BLE -komponenten och ett Sparkfun Si7021 -brytkort används för temperatur- / fuktighetssensorn. Ett modifierat lågeffektsbibliotek används med Si7021. Ett litet kretskort utformades för att rymma NanoV2 och leverera komponenter. Men eftersom det inte används några ytmonterade komponenter kan du lika gärna bygga detta på vero board. Tre strömförsörjningsversioner omfattas. i) Battery plus Solar assist, ii) Only Battery, iii) Only Solar. Alternativet Solar Only har inget batterilagring och fungerar därför bara när det är lite ljus. Ett starkt rumsljus eller en skrivbordslampa är tillräckligt.

Översikt

Detta projekt har 4 relativa oberoende delar:-

  1. Komponentval och konstruktion
  2. Kod - Low Power Sensor Library, användargränssnitt och Arduino Sketch
  3. Mätning av ström och batterilivslängd
  4. Försörjningsalternativ - Solar Assist, Only Battery, Only Solar

Steg 1: Komponentval

Komponentval

Som nämnts i del 1-Tricket för att få en riktigt låg effektlösning är att inte göra någonting för det mesta, minimera strömmen genom externa pull-up/pull-down-motstånd på ingångar och inte ha några extra komponenter. Detta projekt kommer att använda vart och ett av dessa knep för att få en lågeffektslösning.

Komponenten nRF52832

NRF52832 -chipet kan köras med en strömförsörjning mellan 1,7V och 3,6V (absolut maxspänning 3,9V). Det betyder att du kan driva chipet direkt från en myntcell eller 2 x AAA -batterier. Det är dock klokt att lägga till en spänningsregulator för att skydda chipet från överspänning. Denna extra komponent kommer med en energikostnad, men när det gäller NanoV2-kortet förbrukar den inbyggda regulatorn, TLV704, mindre än 5,5uA max, vanligtvis bara 3,4uA. För denna lilla extra strömförbrukning får du skydd för upp till 24V matningsingångar.

Komponenten Si7021

Själva Si7021 -sensorn drar vanligtvis <1uA när man inte tar en mätning, dvs i standby, och upp till 4mA när data överförs via I2C. Eftersom vi inte tar mätningar kontinuerligt är 4mA inte en betydande del av den genomsnittliga matningsströmmen. Att ta en avläsning på väldigt 30 sekunder lägger till mindre än 1uA till den genomsnittliga matningsströmmen, se matningarna för matningsström nedan.

Det finns två lätt tillgängliga Si7021 breakout boards. En från Adafruit och en från Sparkfun. En snabb blick på de två brädorna kommer att berätta att Adafruit -brädan har många fler komponenter än Sparkfun -brädan, så du skulle vara benägen att välja Sparkfun -brädan. Att titta på scheman för varje bräda visar att Sparkfun-kortet bara är den bara sensorn och två 4k7 pullup-resisotorer, medan Adafruit-kortet har en inbyggd, MIC5225, regulator som vanligtvis drar 29uA hela tiden. Detta är signifikant när överströmmen för resten av kretsen är <30uA. Eftersom vi redan har en regulator för nRF52832 -chipet behövs inte denna extra komponent och Si7021 kan drivas från den 3,3V -strömförsörjningen. Så detta projekt kommer att använda Si7021 breakout board från Sparkfun.

minimera strömmen genom externa pull-up/pull-down motstånd på ingångarna

4K7 I2C pullup -motstånden är inte särskilt höga och drar 0,7 mA när de dras lågt. Detta skulle vara ett problem om de var på en switchingång som var jordad under långa perioder. I detta projekt minimeras dock strömmen genom dessa motstånd genom att endast använda I2C -gränssnittet sällan och endast under en kort tid. För det mesta används I2C-ledningarna inte och är höga / tri-tillstånd så att ingen ström flyter genom dessa motstånd.

Steg 2: Konstruktion

Konstruktion
Konstruktion
Konstruktion
Konstruktion
Konstruktion
Konstruktion

Projektet är konstruerat på en liten PCB, men eftersom det inte finns några SMD -komponenter kan det lika gärna byggas med verokort. Kretskortet tillverkades av pcbcart.com från dessa Gerber -filer, TempHumiditySensor_R1.zip Kretskortet är tillräckligt allmänt för att kunna användas för andra BLE -projekt.

Schemat visas ovan. Här är en pdf -version.

Reservdelar

Ungefärlig kostnad per enhet per december 2018, ~ US $ 62, exklusive frakt och programmeraren från del 1

  • Redbear NanoV2 ~ 17 US $
  • Sparkfun Si7021 breakout board ~ US $ 8
  • 2 x 53mm x 30mm 0,15W 5V solceller t.ex. Overfly ~ 1,10 US $
  • 1 x PCB TempHumiditySensor_R1.zip ~ 25 USD för 5 rabatter på www.pcbcart.com ELLER Vero -bräda (bandkoppar) t.ex. Jaycar HP9540 ~ $ 5
  • 2 x 1N5819 schottky -dioder t.ex. Digikey 1N5819FSCT-ND ~ US $ 1
  • 1 x 470R 0,4W 1% motstånd t.ex. Digikey BC3274CT-ND ~ 0,25 US $
  • 6 x 6 -stifts hanstycken, t.ex. Sparkfun PRT-00116 ~ 1,5 US $
  • kvinnlig till kvinnlig bygel t.ex. Adafruit ID: 1950 ~ US $ 2
  • 3 mm x 12 mm nylonskruvar, t.ex. Jaycar HP0140 ~ AUD $ 3
  • 3 mm x 12 mm nylonmuttrar, t.ex. Jaycar HP0146 ~ AUD $ 3
  • Scotch Permanent Monteringstejp Cat 4010 t.ex. från Amazon ~ 6,6 US $
  • AAA x 2 batterihållare, t.ex. Sparkfun PRT-14219 ~ 1,5 US $
  • 2 x AAA 750mA alkaliska batterier, t.ex. Sparkfun PRT-09274 ~ US $ 1.0 Dessa batterier ska hålla> 2 år. Energizer alkaliska batterier har högre kapacitet
  • Plastlåda (ABS) 83 mm x 54 mm x 31 mm, t.ex. Jaycar HB6005 ~ AUD $ 3
  • pfodApp ~ 10 USD
  • 1 x 22uF 63V låg ESR -kondensator (tillval) t.ex. Jaycar RE-6342 ~ 0,5 $ AUD eller Digikey P5190-ND ~ 0,25 US $

Konstruktionen är rakt fram. Batterihållaren och solcellerna fästs i plastlådan med kraftig dubbelsidig tejp.

Notera Gnd -länkledningen från CLK till GND i den färdiga delen. Detta installeras EFTER programmering för att förhindra brus på CLK -ingången från att trigga nRF52 -chipet till ett högaktuellt felsökningsläge

Steg 3: Kod - Low Power Sensor Library, användargränssnitt och Arduino Sketch

Kod - Low Power Sensor Library, användargränssnitt och Arduino Sketch
Kod - Low Power Sensor Library, användargränssnitt och Arduino Sketch
Kod - Low Power Sensor Library, användargränssnitt och Arduino Sketch
Kod - Low Power Sensor Library, användargränssnitt och Arduino Sketch
Kod - Low Power Sensor Library, användargränssnitt och Arduino Sketch
Kod - Low Power Sensor Library, användargränssnitt och Arduino Sketch

Ladda ner zip -koden, lp_BLE_TempHumidity_R3.zip och packa upp den till din Arduino Sketches -katalog. Du måste också installera lp_So7021 -biblioteket från denna zip -fil och även installera pfodParser -biblioteket.

Låg energisensorbibliotek, lp_Si7021

Både Adafruit och Sparkfun tillhandahåller supportbibliotek för åtkomst till Si7021 -sensorn, men båda dessa bibliotek är olämpliga för mycket låg energianvändning. Båda använder en fördröjning (25) i koden för att fördröja läsningen av sensorn medan den mäter. Som framgår av del 1 är förseningar onda. Arduino-fördröjningen () håller bara mikroprocessorn igång med ström medan den väntar på att fördröjningen ska ta slut. Detta bryter mot den första regeln om låg effekt BLE, gör ingenting för det mesta. Lp_Si7021-biblioteket ersätter alla förseningar med lp_timers som gör att mikroprocessorn somnar i väntan på att sensorn ska slutföra mätningen.

Hur stor skillnad gör biblioteket lp_Si7021? Att använda det ursprungliga SparkFun Si7021 -stödbiblioteket och ta en läsning i sekunden utan några seriella utskrifter, drar ~ 1,2mA i genomsnitt. Genom att ersätta Sparkfun -biblioteket med lp_Si7021 -biblioteket minskar medelströmmen till ~ 10uA, dvs 100 gånger mindre. I detta projekt är den snabbaste mäthastigheten en gång var 30: e sekund när mobilen är ansluten, vilket resulterar i en genomsnittlig sensorström på mindre än 1uA. När det inte finns någon BLE -anslutning är mäthastigheten en gång var tionde minut och den genomsnittliga sensorströmmen är försumbar.

Användargränssnitt

Ovan är huvudskärmen och en zoomad vy av 10 -dagars timhistorik. Plots kan zoomas och panoreras i båda riktningarna med två fingrar.

Användargränssnittet är kodat i Arduino -skissen och skickas sedan till pfodApp på den första anslutningen där det cachas för upprepad användning och uppdateringar. Den grafiska displayen är byggd på ritning av primitiv. Se Anpassade Arduino -kontroller för Android för en handledning om hur du bygger dina egna kontroller. Termometer-, RHGauge- och knappfilerna innehåller ritningskommandon för dessa objekt.

Obs! Ingen om den här skärmen är inbyggd i pfodApp. Hela displayen styrs helt av koden i din Arduino -skiss

Metoden sendDrawing_z () i skissen lp_BLE_TempHumidity_R3.ino definierar användargränssnittet.

void sendDrawing_z () {dwgs.start (50, 60, dwgs. WHITE); // bakgrundsinställningar för VIT om de utelämnas, dvs start (50, 60); parser.sendRefreshAndVersion (30000); // begär om dwg var 30: e sekund. detta ignoreras om ingen parserversion är inställd // tryck på knapparna ovan för att tvinga fram uppdateringar dwgs.touchZone (). cmd ('u'). storlek (50, 39).send (); dwgs.pushZero (35, 22, 1.5); // flytta noll till mitten av dwg till 35, 22 och skala 1,5 gånger rhGauge.draw (); // rita kontrollen dwgs.popZero (); dwgs.pushZero (18, 33); // flytta noll till centrum av dwg till 18, skala 33 är 1 (standard) termometer. dra (); // rita kontrollen dwgs.popZero ();

dwgs.pushZero (12,5, 43, 0,7); // flytta noll till mitten av dwg till 12,5, 43 och skala med 0,7

hrs8PlotButton.draw (); // rita kontrollen dwgs.popZero (); dwgs.pushZero (37,5, 43, 0,7); // flytta noll till mitten av dwg till 37,5, 43 och skala med 0,7 dagar1PlotButton.draw (); // rita kontrollen dwgs.popZero ();

dwgs.pushZero (12,5, 54, 0,7); // flytta noll till centrum av dwg till 12,5, 54 och skala med 0,7

days3PlotButton.draw (); // rita kontrollen dwgs.popZero (); dwgs.pushZero (37,5, 54, 0,7); // flytta noll till mitten av dwg till 37,5, 54 och skala med 0,7 dagar10PlotButton.draw (); // rita kontrollen dwgs.popZero (); dwgs.end (); }

PushZero -kommandona ändrar ursprung och skalning för att rita nästa komponent. Detta låter dig enkelt ändra storlek och position på knapparna och mätarna.

Vid den första anslutningen tar den första skärmen 5 eller 6 sekunder att ladda ner ~ 800 byte som definierar skärmen. pfodApp cachar displayen så framtida uppdateringar behöver bara skicka ändringarna, mätpositionerna och avläsningarna. Dessa uppdateringar tar bara ett par sekunder att skicka de 128 bytes som behövs för att uppdatera skärmen.

Det finns fem (5) aktiva pekzoner definierade på displayen. Varje knapp har en definierad i dess draw () -metod, så du kan klicka på den för att öppna respektive plot, och den övre halvan av skärmen konfigureras som den tredje pekzonen

dwgs.touchZone (). cmd ('u'). storlek (50, 39). skicka ();

När du klickar på skärmen ovanför knapparna skickas kommandot 'u' dwg till din skiss för att tvinga fram en ny mätning och skärmuppdatering. Normalt när det är anslutet sker uppdateringar bara var 30: e sekund. Varje klick eller uppdatering av ritningen tvingar fram en ny mätning. Svaret från Arduino -skissen till pfodApp fördröjs tills den nya mätningen är klar (~ 25 ms) så att det senaste värdet kan skickas i uppdateringen.

Arduino Sketch

Arduino Sketch, lp_BLE_TempHumidity_R3.ino, är en förbättrad version av exempelskissen som används i del 1. Skissen lp_BLE_TempHumidity_R3.ino ersätter menyn med ritningen som visas ovan. Det lägger också till lp_Si7021 sensorstöd och datarrayer för att lagra historiska mätningar på 10 minuter och timme.

Huvudkomplikationen i lp_BLE_TempHumidity_R3.ino -skissen är att hantera att skicka plotdata. När mätningarna görs hanterar readRHResults () att samla in resultaten och spara dem i de historiska matriserna. Arrayerna är 120 långa men när data skickas är de första 30 datapunkterna för med ett finare tidsintervall.

Det finns några punkter som du måste ta hand om när du skickar de 200 udda tomtpunkterna för att visa:-

  1. Varje datapunkt är ~ 25 byte lång, i CSV -textformat. Så 150 poäng är 3750 byte data. Klassen lp_BLESerial har en buffert på 1536 byte, varav 1024 är tillräckligt stor för det största pfod -meddelandet. De andra 512 byten är reserverade för att skicka data. När de historiska data har fyllt 512 byte fördröjs sändning av ytterligare data tills det finns utrymme i bufferten.
  2. För att undvika att plottdata saktar ner huvudskärmsuppdateringarna skickas plottdata bara medan plotskärmen visas. När användaren återgår till huvudskärmen pausas sändningen av plottdata. Skicka plottdata återupptas när användaren klickar på plottknappen för att visa tomten igen.
  3. De historiska tomterna börjar från 0 (nu) och går bakåt i tiden. Om det inte har gjorts någon ny mätning sedan den senaste plotten visades, visas den tidigare data som redan laddades ner omedelbart igen. Om det finns en ny mätning läggs den till i tidigare plottdata.
  4. När monitorn startas först finns det inga historiska avläsningar och 0 lagras i matriserna som en ogiltig avläsning. När plotten visas hoppas bara ogiltiga avläsningar över, vilket resulterar i en kortare plot.

Celsius och Fahrenheit

Skissen lp_BLE_TempHumidity_R3.ino visar och plottar data i Celsius. För att konvertera resultaten till Fahrenheit ersätt alla förekomster av

parser.print (sensor. Temp_RawToFloat (..

med

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

Och ersätt unicode degC -symbolen i Octal / 342 / 204 / 203 med degF -symbolen / 342 / 204 / 211

pfodApp kommer att visa alla Unicode du mobil kan visa.

Se Använda icke-ASCII-tecken i Arduino för mer information. Ändra även MIN_C, MAX_C inställningarna i termometer. H. Slutligen justera tomtgränserna som du önskar t.ex. ändra | Temp C ~ 32 ~ 8 ~ deg C |

att säga

| Temp F ~ 90 ~ 14 ~ deg F |

Steg 4: Mätning av matningsströmmen

Mätning av matningsström
Mätning av matningsström

Genom att använda lp_Si7021 -biblioteket, till och med att ta en temperatur/luftfuktighetsmätning var 10: e sekund, bidrar bara ~ 1uA till den genomsnittliga matningsströmmen, så huvudfaktorn i matningsströmmen och därmed batterilivslängden är den ström som används av BLE -annonsering och anslutning och dataöverföring.

Anslut temperatur-/luftfuktighetskortet till programmeraren som beskrivs i del 1 enligt ovan.

Med solcellerna och batterierna urkopplade är Vin och Gnd anslutna till programmerarens Vdd och Gnd (de gula och gröna ledarna) och SWCLK och SWDIO ansluts till Clk och SIO på programmerarens huvudkort (de blå och rosa ledarna)

Du kan nu programmera NanoV2 och mäta matningsströmmen enligt beskrivningen i del 1.

Installera Si7021 -biblioteket med låg effekt från denna zip -fil, lp_Si7021.zip och installera pfodParser -biblioteket och packa upp lp_BLE_TempHumidity_R3.zip till din Arduino -skisskatalog och programmera temp/humditiy -kortet med lp_BLE_TempHumidity_R3.ino

Som nämnts ovan är sensorns bidrag <1uA, i genomsnitt, vid den högsta mäthastigheten som används i detta projekt, så BLE -reklam- och anslutningsparametrarna är den avgörande faktorn för batteriets livslängd.

BLE-reklam- och anslutningsparametrarna som påverkar strömförbrukningen är: -Tx Power, Advertising Interval, Max and Min Connection Intervals och Slave Latency.

Obs: Med anslutningarna ovan finns två (2) regulatorer i matningen, en på NanoV2 -kortet via Vin och MAX8881 på programmerarens matning. Det betyder att de uppmätta matningsströmmarna kommer att vara ~ 5uA högre än de faktiska, på grund av den andra regulatorn. Värdena som anges nedan är de uppmätta strömmarna minus denna extra 5uA.

Tx Power

Tx Effekteffekter levererar ström både när den är ansluten och vid reklam (ej ansluten). Detta projekt använder inställningen för maximal effekt (+4) och ger bästa räckvidd och största brusimmunitet för de mest pålitliga anslutningarna. Du kan använda metoden lp_BLESerial setTxPower () för att ändra effektinställningen. Giltiga värden är, i ökande effekt, -40, -30, -20, -16, -12, -8, -4, 0 +4. Du måste anropa metoden lp_BLESeriell start () FÖR du ringer setTxPower (). Se skissen lp_BLE_TempHumidity_R3.ino.

Du kan experimentera med att minska Tx Power, men kompromissen är kortare räckvidd och fler anslutningsavbrott på grund av störningar. I detta projekt är Tx Power kvar som standard, +4. Som du ser nedan, även med denna inställning, är mycket låg matningsström fortfarande möjlig.

Reklamintervall

För en given Tx -effekt, när det inte finns någon anslutning, anger reklamintervallet den genomsnittliga strömförbrukningen. Det rekommenderade intervallet är 500 till 1000mS. Här användes 2000mS. Kompromissen är att längre reklamintervaller innebär att det är långsammare för din mobil att hitta enheten och upprätta en anslutning. Internt sätts reklamintervallen i multiplar av 0,625mS i intervallet 20mS till 10,24sek. Metoden lp_BLESerial setAdvertisingInterval () tar mS som argument, för enkelhets skull. För +4 TxPower och 2000mS reklamintervall var den nuvarande förbrukningen ~ 18uA. För 1000mS reklamintervall var det ~ 29uA. Rev 2 använde 2000 mS reklamintervall men detta resulterade i långsamma anslutningar. Rev 3 ändrades till 1000 mS reklamintervall för att göra anslutningar snabbare.

Max och min anslutningsintervall

När en anslutning upprättats bestämmer anslutningsintervallet hur ofta mobilen kontaktar enheten. Med lp_BLESerial setConnectionInterval () kan du ställa in föreslagna max och min, men mobilen styr vad anslutningsintervallet faktiskt är. För enkelhets skull är argumenten till setConnectionInterval () i mS, men internt är anslutningsintervallen i multipel av 1,25mS, i intervallet 7,5mS till 4sec.

Standardinställningen är setConnectionInterval (100, 150) dvs min 100mS till max 150mS. Att öka dessa värden minskar matningsströmmen medan den är ansluten, men kompromissen är långsammare överföring av data. Varje uppdatering av skärmen tar cirka 7 BLE -meddelanden, medan hela 36 timmar på 10 min mätningar tar cirka 170 BLE -meddelanden. Så att öka anslutningsintervallen saktar ner skärmuppdateringarna och tomten visas.

Klassen lp_BLESerial har en sändningsbuffert på 1536 byte och skickar endast ett block med 20 byte från denna buffert, varje max anslutningsintervall för att förhindra översvämning av BLE -länken med data. Vid skicka av plottdata skickar skissen endast data tills 512 byte väntar på att skickas och fördröjer sedan att skicka mer data tills vissa data har skickats. Detta undviker översvämningsskicka buffert. Denna strypning av sändningarna gör dataöverföringen till mobilen pålitlig, men den är inte optimerad för maximal genomsläpp.

I detta projekt lämnades anslutningsintervallen som standardvärden.

Slavlatens

När det inte finns någon data att skicka till mobilen kan enheten valfritt ignorera några av anslutningsmeddelandena från mobilen. Detta sparar Tx -ström och matningsström. Inställningen Slave Latency är antalet anslutningsmeddelanden som ska ignoreras. Standard är 0. Metoden lp_BLESerial setSlaveLatency () kan användas för att ändra denna inställning.

Standard Slave Latency på 0 gav ~ 50uA matningsström, ignorerade skärmuppdateringarna var 30: e sekund, men inklusive keepAlive -meddelanden mycket 5 sekunder. Att ställa in Slave Latency till 2 gav en genomsnittlig ansluten matningsström på ~ 25uA. En Slave Latency -inställning på 4 gav ~ 20uA. Högre inställningar tycktes inte minska matningsströmmen så en slavlatensinställning på 4 användes.

När den är ansluten begär var 30: e sekund pfodApp en skärmuppdatering. Detta tvingar fram en sensormätning och skickar tillbaka data för att uppdatera den grafiska displayen. Denna uppdatering resulterar i en extra ~ 66uA i 2 sekunder var 30: e sekund. Det är i genomsnitt 4,4uA under de 30 sekunderna. Att lägga till detta till 20uA ger en genomsnittlig anslutningsström på ~ 25uA

Steg 5: Total ström och batterilivslängd

Med hjälp av inställningarna ovan, som anges i lp_BLE_TempHumidity_R3.ino, den totala försörjningsströmmen vid anslutning och uppdatering av displayen var 30: e sekund, cirka 25uA. När den inte är ansluten är den ungefär 29uA.

För beräkning av batteritid antas en kontinuerlig strömförbrukning på ~ 29uA.

Olika batterier har olika kapacitet och spänningsegenskaper. De här batterierna är CR2032 -myntcell, CR2450 (N) myntcell, 2 x AAA Alkaline, 2 x AAA litium och LiPo.

Batterisammanfattning

Om du använder Solar Assist lägger du till 50% till dessa batteritidssiffror (med 8 timmars ljus per dag)

Obs: 22uF LowESR -kondensatorn (C1), förutom den inbyggda NanoV2 22uF -kondensatorn, lagrar solcellsströmmen och levererar den sedan för TX -strömpulserna. Annars levererar batteriet en del av TX -strömmen. Denna extra 22uF LowESR tillför cirka 10% till batteriströmmen när solcellen inte är strömförsörjning, men förlänger också batteriets livslängd genom att kompensera för det stigande batteriets interna motstånd när batteriet når livets slut. Mätningarna nedan gjordes UTAN den extra 22uF kondensatorn.

CR2032 - 235mAHr - batteritid 10 månaderCR2450 (N) - 650mAHr (540mAHr) - batterilivslängd 2,3 år (2yrs) 2 x AAA Alkalisk - 1250mAHr - batterilivslängd 3,8.yrs2 x AAA Litium - 1200mAHr - batterilivslängd 4,7 år LiPo laddningsbar - rekommenderas inte på grund av hög självurladdning.

CR2032

Denna myntcell har en kapacitet på vanligtvis 235mAHr (Energizer Battery), en nominell spänning på 3V och en specificerad urladdningsspänning på 2V. Detta innebär en batteritid på 8100 timmar eller ~ 0,9 år. Det interna cellmotståndet ökar dock när batteriet når livets slut och kan därför inte ge topp -Tx -strömpulser. En större försörjningskondensator kan användas för att minska denna effekt, men säg 10 månaders livslängd.

CR2450 (N)

Denna myntcell har en kapacitet på vanligtvis 620mAHr (540mAHr för CR2450N), en nominell spänning på 3V och en specificerad urladdningsspänning på 2V. Detta innebär en batteritid på 22, 400 timmar eller ~ 2 år 6 m (18600 timmar ~ 2 år 2 m för CR2450N). Det interna cellmotståndet ökar dock när batteriet når livets slut och kan därför inte ge topp -Tx -strömpulser. En större matningskondensator kan användas för att minska denna effekt, men säg 2 år 4 m (2 år N) livslängd.

Obs: CR2450N -versionen har en tjockare läpp som hjälper till att förhindra felaktig installation i en CR2450N -hållare. Du kan sätta in en CR2450N- och CR2450 -cell i en CR2450 -hållare men du kan inte infoga en CR2450 -cell i en CR2450N -hållare

2 x AAA alkaliska celler

Dessa batterier har en kapacitet på cirka 1250mAHr (Energizer Battery) för mycket låga strömmar, en nominell spänning på 2x1,5V = 3V och en specificerad urladdningsspänning på 2x0,8V = 1,6V. Men denna specificerade urladdningsspänning är mindre än driftsspänningen för Si7021 -sensorn (1,9V) så att batteriet bara kan användas ner till ~ 1V vardera. Detta minskar kapaciteten med cirka 10% till 15% dvs ~ 1000mAHr.

Detta innebär en batteritid på 34, 500 timmar eller ~ 4 år. Det interna cellmotståndet ökar dock när batteriet når livets slut och kan därför inte ge topp -Tx -strömpulser. En större matningskondensator kan användas för att minska denna effekt, men säg 3 år 10 m livslängd. Obs! Alkaliska batterier har en självurladdning på 2% till 3% per år.

2 x AAA litiumceller

Dessa batterier har en kapacitet på cirka 1200mAHr (Energizer Battery), en nominell spänning på 2x1.7V = 3.4V, vid låga strömmar och en urladdad spänning på 2x1.4V = 2.4V. Detta innebär en batteritid på 41, 400 timmar eller 4 år 8 m.

LiPo uppladdningsbart batteri

Dessa batterier finns i olika kapaciteter från 100mAHr till 2000mAHr, i platta format, och har en laddad spänning på 4,2V och en urladdad spänning på> 2,7V. De har dock en hög självurladdning på 2% -3%/månad (dvs. 24% till 36% per år) och är därför inte lika lämpliga för denna applikation som de andra batterierna.

Steg 6: Tillförselalternativ - Solar Assist, Only Battery, Only Solar

Försörjningsalternativ - Solar Assist, Only Battery, Only Solar
Försörjningsalternativ - Solar Assist, Only Battery, Only Solar
Försörjningsalternativ - Solar Assist, Only Battery, Only Solar
Försörjningsalternativ - Solar Assist, Only Battery, Only Solar
Försörjningsalternativ - Solar Assist, Only Battery, Only Solar
Försörjningsalternativ - Solar Assist, Only Battery, Only Solar
Försörjningsalternativ - Solar Assist, Only Battery, Only Solar
Försörjningsalternativ - Solar Assist, Only Battery, Only Solar

Batteri plus Solar Assist

Konstruktionen ovan använder batteriet plus Solar Assist -försörjning. När solpanelerna genererar mer spänning än batterispänningen, kommer solcellerna att driva bildskärmen, vilket förlänger batteriets livslängd. Normalt kan batteriets livslängd förlängas med ytterligare 50%.

De solpaneler som används är små, 50 mm x 30 mm, billiga, ~ 0,50 dollar och låg effekt. De är nominellt 5V -paneler, men behöver fullt direkt starkt solljus för att generera 5V. I detta projekt är två paneler anslutna i serie så att det är tillräckligt att placera bildskärmen någonstans nära ett fönster, i direkt solljus, för att byta ut batteriet. Även ett väl upplyst rum eller en skrivbordslampa räcker för att solcellerna ska generera> 3,3V vid> 33uA och ta över från batteriet.

En enkel testpanel konstruerades för att avgöra var temperatur / luftfuktighetsmonitorn kunde placeras, ur solen och fortfarande vara soldriven. Som du kan se på bilden ovan producerar de två panelerna som är anslutna till ett 100K -motstånd 5.64V över 100K, dvs 56uA -ström vid 5.64V. Detta är mer än tillräckligt med att ta över skärmen från batteriet. Varje spänningsavläsning över den nominella batterispänningen på 3V betyder att solcellerna kommer att driva bildskärmen istället för batteriet.

De två dioderna i temperaturfuktighetsövervakningskretsen isolerar solcellerna och batterierna från varandra och skyddar mot att ansluta dem i omvänd polaritet. 10V 1W zener och motståndet i 470R-serien skyddar NanoV2: s inbyggda regulator från överspänning från två solceller i full sol, särskilt om 12V-celler råkar användas istället för 5V-celler. Vid normal drift vid <5V drar 10V -zenern endast ~ 1uA.

Endast batteri

För enbart batteri, utelämna bara R1, D1 och D3 och solcellerna. Du kan också ersätta D1 med en tråd om du inte vill ha skydd mot omvänd polaritet.

Endast solceller

Att bara driva bildskärmen från solceller, utan batteri, kräver en annan strömförsörjningskrets. Problemet är att medan monitorn fungerar på 29uA, drar nRF52 upp ~ 5mA i 0,32 sek vid uppstart. Kretsen som visas ovan (pdf -version) håller MAX8881 -regulatorn avstängd tills ingångskondensatorerna, 2 x 1000uF, laddas upp till 4,04V. Sedan släpper MAX6457 MAX8881 SHDN -ingången för att slå på nRF52 (NanoV2) De 2 x 1000uF kondensatorerna ger den nödvändiga startströmmen.

Detta låter bildskärmen starta så snart det finns tillräckligt med solenergi och hålla den igång vid 29uA.

Steg 7: Slutsats

Denna handledning har presenterat en batteri-/soldriven temperaturfuktighetsmonitor som ett exempel på ett mycket lågt effekt BLE -projekt i Arduino för nRF52832 -chipet. Matningsströmmar på ~ 29uA uppnås genom att ställa in anslutningsparametrarna. Detta resulterade i en CR2032 knappcellsbatterilivslängd som översteg 10 månader. Längre för myntceller och batterier med högre kapacitet. Att lägga till två billiga solceller förlängde enkelt batteriets livslängd med 50% eller mer. Ett starkt rumsljus eller en skrivbordslampa är tillräckligt för att driva bildskärmen från solcellerna.

En speciell strömkrets presenterades för att tillåta att monitorn körs enbart från solceller med låg kapacitet.

Den fria pfodDesigner låter dig designa menyer/undermenyer, plotta mot datum/tid och logga data och sedan generera Arduino-skissen med låg effekt åt dig. Här kodades ett anpassat gränssnitt med pfodApp -ritningsprimitiv. Anslutning med pfodApp visar användargränssnittet och uppdaterar avläsningarna medan monitorn använder ~ 29uA

Ingen Android -programmering krävs. pfodApp hanterar allt detta.

Rekommenderad: