Sommario:

Facile BLE a bassissima potenza in Arduino Parte 2 -- Monitoraggio temperatura/umidità -- Rev 3: 7 passaggi
Facile BLE a bassissima potenza in Arduino Parte 2 -- Monitoraggio temperatura/umidità -- Rev 3: 7 passaggi

Video: Facile BLE a bassissima potenza in Arduino Parte 2 -- Monitoraggio temperatura/umidità -- Rev 3: 7 passaggi

Video: Facile BLE a bassissima potenza in Arduino Parte 2 -- Monitoraggio temperatura/umidità -- Rev 3: 7 passaggi
Video: Arduino: serbatoio a riempimento automatico (parte 3) stripled WS2812B 2024, Novembre
Anonim
Facile BLE a bassissima potenza in Arduino Parte 2 -- Monitoraggio temperatura/umidità -- Rev 3
Facile BLE a bassissima potenza in Arduino Parte 2 -- Monitoraggio temperatura/umidità -- Rev 3
Facile BLE a bassissima potenza in Arduino Parte 2 -- Monitoraggio temperatura/umidità -- Rev 3
Facile BLE a bassissima potenza in Arduino Parte 2 -- Monitoraggio temperatura/umidità -- Rev 3
Facile BLE a bassissima potenza in Arduino Parte 2 -- Monitoraggio temperatura/umidità -- Rev 3
Facile BLE a bassissima potenza in Arduino Parte 2 -- Monitoraggio temperatura/umidità -- Rev 3

Aggiornamento: 23 novembre 2020 – Prima sostituzione di 2 batterie AAA dal 15 gennaio 2019, ovvero 22 mesi per 2 batterie alcaline AAA Aggiornamento: 7 aprile 2019 – Rev 3 di lp_BLE_TempHumidity, aggiunge grafici data/ora, utilizzando pfodApp V3.0.362+ e limitazione automatica durante l'invio dati

Aggiornamento: 24 marzo 2019 – Rev 2 di lp_BLE_TempHumidity, aggiunge più opzioni di trama e i2c_ClearBus

Questo istruibile, un monitor di umidità della temperatura a bassissima potenza, è la parte 2 di 3.

Parte 1 – Costruire dispositivi BLE a bassissima potenza semplificati con Arduino copre la configurazione di Arduino per codificare i dispositivi a bassa potenza nRF52, il modulo di programmazione e la misurazione della corrente di alimentazione. Copre anche timer e comparatori specializzati a bassa potenza e ingressi antirimbalzo e l'utilizzo di pfodApp per connettersi e controllare il dispositivo nRF52.

Parte 2 – Un monitor di umidità della temperatura a bassissima potenza, questo, copre l'utilizzo di un modulo Redbear Nano V2 e un sensore di temperatura/umidità Si7021 per costruire una batteria a bassa potenza / monitor solare. Copre anche la modifica della libreria Si7021 in modo che sia a bassa potenza, la regolazione del dispositivo BLE per ridurre il suo consumo di corrente di <25uA e la progettazione di un display di temperatura/umidità personalizzato per il tuo cellulare.

Parte 3 – Una copertura sostitutiva Redbear Nano V2 che utilizza altri moduli basati su nRF52 invece del Nano V2. Copre la selezione dei componenti di alimentazione, la costruzione, la rimozione della protezione di programmazione del chip nRF52, l'utilizzo dei pin NFC come un normale GPIO e la definizione di una nuova scheda nRF52 in Arduino.

Questa istruzione è un'applicazione pratica della Parte 1 Costruire dispositivi BLE a potenza molto bassa resa facile con Arduino costruendo un monitor di temperatura e umidità BLE a potenza molto bassa. Il monitor funzionerà per anni con batterie a bottone o 2 batterie AAA, anche più a lungo con l'assistenza solare. Questo tutorial copre la regolazione dei parametri BLE per un basso consumo energetico e come alimentare il dispositivo da batteria O batteria + solare O solo solare.

Oltre a visualizzare la temperatura e l'umidità correnti, il monitor memorizza le ultime 36 ore di letture di 10 minuti e gli ultimi 10 giorni di letture orarie. Questi possono essere tracciati sul tuo cellulare Android e i valori salvati in un file di registro. Non è richiesta alcuna programmazione Android, pfodApp gestisce tutto questo. Il display e i grafici di Android sono completamente controllati dal tuo schizzo Arduino, quindi puoi personalizzarlo come richiesto.

Una scheda Redbear Nano V2 viene utilizzata per il componente nRF52832 BLE e una scheda breakout Sparkfun Si7021 viene utilizzata per il sensore di temperatura/umidità. Con Si7021 viene utilizzata una libreria a bassa potenza modificata. Un piccolo PCB è stato progettato per contenere il NanoV2 e fornire i componenti. Tuttavia, poiché non vengono utilizzati componenti montati in superficie, puoi facilmente costruirlo su una scheda vero. Sono previste tre versioni di alimentazione. i) Batteria più assistenza solare, ii) Solo batteria, iii) Solo energia solare. L'opzione Solo solare non ha alcun accumulo di batteria e quindi funzionerà solo quando c'è luce. È sufficiente una luce luminosa per la stanza o una lampada da tavolo.

Contorno

Questo progetto ha 4 parti indipendenti relative:-

  1. Selezione e costruzione dei componenti
  2. Codice: libreria di sensori a bassa potenza, interfaccia utente e schizzo Arduino
  3. Misurazione della corrente di alimentazione e della durata della batteria
  4. Alternative di alimentazione: Solar Assist, solo batteria, solo solare

Passaggio 1: selezione dei componenti

Selezione dei componenti

Come menzionato nella Parte 1 – Il trucco per ottenere una soluzione a potenza davvero bassa è non fare nulla per la maggior parte del tempo, ridurre al minimo la corrente attraverso i resistori pull-up/pull-down esterni sugli ingressi e non avere componenti aggiuntivi. Questo progetto utilizzerà ciascuno di questi trucchi per ottenere una soluzione a basso consumo.

Il componente nRF52832

Il chip nRF52832 può funzionare con un'alimentazione compresa tra 1,7 V e 3,6 V (tensione massima assoluta 3,9 V). Ciò significa che è possibile alimentare il chip direttamente da una pila a bottone o da 2 batterie AAA. Tuttavia è prudente aggiungere un regolatore di tensione per proteggere il chip da sovratensioni. Questo componente aggiuntivo ha un costo di alimentazione, ma nel caso della scheda NanoV2 il regolatore di bordo, TLV704, consuma meno di 5,5 uA max, in genere solo 3,4 uA. Per questo piccolo consumo extra di energia si ottiene protezione per ingressi di alimentazione fino a 24V.

Il componente Si7021

Il sensore Si7021 stesso assorbe in genere <1uA quando non esegue una misurazione, ovvero in standby, e fino a 4mA quando trasmette i dati tramite I2C. Poiché non effettuiamo misurazioni continuamente, i 4 mA non sono una parte significativa della corrente di alimentazione media. Effettuare una lettura ogni 30 secondi aggiunge meno di 1uA alla corrente di alimentazione media, vedere le misurazioni della corrente di alimentazione di seguito.

Ci sono due schede breakout Si7021 prontamente disponibili. Uno di Adafruit e uno di Sparkfun. Una rapida occhiata alle due tavole ti dirà che la tavola Adafruit ha molti più componenti della tavola Sparkfun, quindi saresti propenso a scegliere la tavola Sparkfun. Guardando gli schemi per ogni scheda mostra che la scheda Sparkfun è solo il sensore nudo e due resistori pullup 4k7, mentre la scheda Adafruit ha un regolatore integrato, MIC5225, che di solito assorbe 29uA tutto il tempo. Questo è significativo quando la corrente totale per il resto del circuito è <30uA. Poiché disponiamo già di un regolatore per il chip nRF52832, questo componente aggiuntivo non è necessario e il Si7021 può essere alimentato da quell'alimentazione da 3,3 V. Quindi questo progetto utilizzerà la breakout board Si7021 di Sparkfun.

minimizzare la corrente attraverso resistori pull-up/pull-down esterni sugli ingressi

I resistori di pullup 4K7 I2C non hanno un valore particolarmente elevato e assorbiranno 0,7 mA quando vengono abbassati. Questo sarebbe un problema se si trovassero su un ingresso dell'interruttore che è stato messo a terra per lunghi periodi. Tuttavia, in questo progetto, la corrente attraverso questi resistori viene ridotta al minimo utilizzando solo l'interfaccia I2C di rado e solo per un breve periodo. La maggior parte delle volte le linee I2C non sono in uso e sono alte/tri-state, quindi nessuna corrente scorre attraverso questi resistori.

Fase 2: Costruzione

Costruzione
Costruzione
Costruzione
Costruzione
Costruzione
Costruzione

Il progetto è costruito su un piccolo PCB, ma poiché non ci sono componenti SMD, può essere costruito altrettanto facilmente usando la scheda vero. Il PCB è stato prodotto da pcbcart.com da questi file Gerber, TempHumiditySensor_R1.zip Il PCB è abbastanza generico da essere utilizzato per altri progetti BLE.

Lo schema è mostrato sopra. Ecco una versione in pdf.

Elenco delle parti

Costo approssimativo per unità a dicembre 2018, ~US$62, escluse le spese di spedizione e il programmatore dalla Parte 1

  • Redbear NanoV2 ~ US $ 17
  • Scheda breakout Sparkfun Si7021 ~US $ 8
  • 2 x 53 mm x 30 mm 0,15 W 5 V celle solari ad es. Sorvolare ~US $ 1,10
  • 1 x PCB TempHumiditySensor_R1.zip ~US $ 25 per 5 di sconto www.pcbcart.com OPPURE scheda Vero (striscia di rame) ad es. Jaycar HP9540 ~AUD$5
  • 2 x 1N5819 diodi Schottky ad es. Digikey 1N5819FSCT-ND ~ 1 USD
  • 1 x 470R 0.4W 1% resistore ad es. Digikey BC3274CT-ND ~ 0,25 USD
  • 6 x 6 pin di intestazione maschio, ad es. Sparkfun PRT-00116 ~1,5 USD
  • ponticello da femmina a femmina, ad es. ID Adafruit: 1950 ~US$2
  • Viti in nylon da 3 mm x 12 mm, ad es. Jaycar HP0140 ~AUD$3
  • Dadi in nylon da 3 mm x 12 mm, ad es. Jaycar HP0146 ~AUD$3
  • Nastro di montaggio permanente Scotch Cat 4010 ad es. da Amazon ~ US $ 6,6
  • Portabatterie AAA x 2, ad es. Sparkfun PRT-14219 ~1,5 USD
  • 2 batterie alcaline AAA da 750 mA, ad es. Sparkfun PRT-09274 ~US$1.0 Queste batterie dovrebbero durare >2 anni. Le batterie alcaline Energizer hanno una capacità maggiore
  • Scatola di plastica (ABS) 83 mm x 54 mm x 31 mm, ad es. Jaycar HB6005 ~AUD$3
  • pfodApp ~ US $ 10
  • 1 x 22uF 63V Condensatore a bassa ESR (opzionale) ad es. Jaycar RE-6342 ~AUD$0,5 o Digikey P5190-ND ~US$0,25

La costruzione è semplice. Il supporto della batteria e le celle solari sono fissati alla scatola di plastica con nastro biadesivo resistente.

Notare il filo di collegamento Gnd da CLK a GND nella parte finita. Questo viene installato DOPO la programmazione per evitare che il rumore sull'ingresso CLK attivi il chip nRF52 in una modalità di debug ad alta corrente

Passaggio 3: codice: libreria di sensori a bassa potenza, interfaccia utente e schizzo Arduino

Codice: libreria di sensori a bassa potenza, interfaccia utente e schizzo Arduino
Codice: libreria di sensori a bassa potenza, interfaccia utente e schizzo Arduino
Codice: libreria di sensori a bassa potenza, interfaccia utente e schizzo Arduino
Codice: libreria di sensori a bassa potenza, interfaccia utente e schizzo Arduino
Codice: libreria di sensori a bassa potenza, interfaccia utente e schizzo Arduino
Codice: libreria di sensori a bassa potenza, interfaccia utente e schizzo Arduino

Scarica il codice zippato, lp_BLE_TempHumidity_R3.zip, e decomprimilo nella directory di Arduino Sketches. È inoltre necessario installare la libreria lp_So7021 da questo file zip e installare anche la libreria pfodParser.

Libreria di sensori a bassa potenza, lp_Si7021

Sia Adafruit che Sparkfun forniscono librerie di supporto per accedere al sensore Si7021, tuttavia entrambe queste librerie non sono adatte per un consumo energetico molto basso. Entrambi utilizzano un ritardo (25) nel codice per ritardare la lettura del sensore mentre sta effettuando la misurazione. Come notato nella prima parte, i ritardi sono malvagi. L'Arduino delay() fa semplicemente funzionare il microprocessore usando l'alimentazione mentre attende che il ritardo scada. Questo infrange la prima regola del BLE a bassa potenza, non fare nulla per la maggior parte del tempo. La libreria sostitutiva lp_Si7021, sostituisce tutti i ritardi con lp_timer che mettono il microprocessore in stop in attesa che il sensore termini la sua misurazione.

Quanta differenza fa la libreria lp_Si7021? Utilizzando la libreria di supporto SparkFun Si7021 originale e prendendo una lettura al secondo senza stampe seriali, si ottiene una media di circa 1,2 mA. La sostituzione della libreria Sparkfun con la libreria lp_Si7021 riduce la corrente media a ~10uA, ovvero 100 volte inferiore. In questo progetto la velocità di misurazione più veloce è una volta ogni 30 secondi quando il cellulare è collegato, il che si traduce in una corrente media del sensore inferiore a 1uA. In assenza di connessione BLE, la velocità di misurazione è una volta ogni 10 minuti e la corrente di alimentazione media del sensore è trascurabile.

Interfaccia utente

Sopra c'è la schermata principale e una vista ingrandita della cronologia oraria di 10 giorni. I grafici possono essere ingranditi e spostati in entrambe le direzioni, utilizzando due dita.

L'interfaccia utente è codificata nello sketch Arduino e quindi inviata a pfodApp alla prima connessione dove viene memorizzata nella cache per l'uso e gli aggiornamenti ripetuti. Il display grafico è costruito da primitive di disegno. Vedi Custom Arduino Controls for Android per un tutorial su come costruire i tuoi controlli. I file Thermometer, RHGauge e Button contengono i comandi di disegno per quegli elementi.

Nota: nessuno se questo display è integrato in pfodApp. L'intero display è completamente controllato dal codice nel tuo sketch Arduino

Il metodo sendDrawing_z() nello sketch lp_BLE_TempHumidity_R3.ino definisce l'interfaccia utente.

void sendDrawing_z() { dwgs.start(50, 60, dwgs. WHITE); // il valore predefinito di sfondo è BIANCO se omesso, ad esempio start(50, 60); parser.sendRefreshAndVersion(30000); // richiedi dwg ogni 30sec sec. questo viene ignorato se non è impostata alcuna versione del parser // tocca i pulsanti sopra per forzare gli aggiornamenti del display dwgs.touchZone().cmd('u').size(50, 39).send(); dwgs.pushZero(35, 22, 1.5); // sposta zero al centro di dwg a 35, 22 e ridimensiona di 1,5 volte rhGauge.draw(); // disegna il controllo dwgs.popZero(); dwgs.pushZero(18, 33); // sposta zero al centro di dwg a 18, 33 la scala è 1 (predefinito) termometro.draw(); // disegna il controllo dwgs.popZero();

dwgs.pushZero(12.5, 43, 0.7); // sposta zero al centro di dwg su 12,5, 43 e ridimensiona di 0,7

hrs8PlotButton.draw(); // disegna il controllo dwgs.popZero(); dwgs.pushZero(37.5, 43, 0.7); // sposta zero al centro di dwg a 37.5, 43 e ridimensiona di 0.7 giorni1PlotButton.draw(); // disegna il controllo dwgs.popZero();

dwgs.pushZero(12.5, 54, 0.7); // sposta zero al centro di dwg su 12,5, 54 e ridimensiona di 0,7

days3PlotButton.draw(); // disegna il controllo dwgs.popZero(); dwgs.pushZero(37.5, 54, 0.7); // sposta zero al centro di dwg a 37.5, 54 e ridimensiona di 0.7 days10PlotButton.draw(); // disegna il controllo dwgs.popZero(); dwgs.end(); }

I comandi pushZero modificano l'origine e la scala per disegnare il componente successivo. Ciò consente di modificare facilmente le dimensioni e la posizione dei pulsanti e degli indicatori.

Alla prima connessione la visualizzazione iniziale impiega 5 o 6 sec per scaricare i ~800 byte che definiscono la visualizzazione. pfodApp memorizza nella cache il display in modo che gli aggiornamenti futuri debbano solo inviare le modifiche, le posizioni degli indicatori e le letture. Questi aggiornamenti richiedono solo un paio di secondi per inviare i 128 byte necessari per aggiornare il display.

Ci sono cinque (5) zone tattili attive definite nel display. Ogni pulsante ne ha uno definito nel suo metodo draw(), quindi puoi fare clic su di esso per aprire il rispettivo grafico e la metà superiore dello schermo è configurata come terza zona touch

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

Quando fai clic sullo schermo sopra i pulsanti, il comando 'u' dwg viene inviato al tuo schizzo per forzare una nuova misurazione e l'aggiornamento dello schermo. Normalmente quando è connesso, gli aggiornamenti avvengono solo ogni 30 secondi. Ogni clic o aggiornamento del disegno forza una nuova misurazione. La risposta dallo sketch Arduino a pfodApp viene ritardata fino al completamento della nuova misurazione (~25mS) in modo che l'ultimo valore possa essere inviato nell'aggiornamento.

Arduino Sketch

Lo sketch Arduino, lp_BLE_TempHumidity_R3.ino, è una versione migliorata dello sketch di esempio utilizzato nella Parte 1. Lo sketch lp_BLE_TempHumidity_R3.ino sostituisce il menu con il disegno mostrato sopra. Aggiunge anche il supporto del sensore lp_Si7021 e array di dati per memorizzare le misurazioni storiche di 10 minuti e orarie.

La principale complicazione nello sketch lp_BLE_TempHumidity_R3.ino è gestire l'invio dei dati del grafico. Man mano che le misurazioni vengono eseguite, readRHResults() gestisce la raccolta dei risultati e il loro salvataggio negli array storici. Gli array sono lunghi 120 ma quando i dati vengono inviati i primi 30 punti dati sono per un intervallo di tempo più preciso.

Ci sono alcuni punti da tenere in considerazione quando si inviano i 200 punti dispari della trama da visualizzare: -

  1. Ogni punto dati è lungo ~25 byte, in formato testo CSV. Quindi 150 punti sono 3750 byte di dati. La classe lp_BLESerial ha un buffer di 1536 byte, 1024 dei quali sono abbastanza grandi per il messaggio pfod più grande. Gli altri 512 byte sono riservati all'invio dei dati. Una volta che i dati storici hanno riempito i 512 byte, l'invio di ulteriori dati viene ritardato fino a quando non c'è spazio nel buffer.
  2. Per evitare che i dati del grafico rallentino gli aggiornamenti del display principale, i dati del grafico vengono inviati solo mentre è visualizzata la schermata del grafico. Quando l'utente torna alla schermata principale, l'invio dei dati del grafico viene sospeso. L'invio dei dati del grafico viene ripreso quando l'utente fa clic sul pulsante del grafico per visualizzare nuovamente il grafico.
  3. I grafici storici iniziano da 0 (ora) e vanno indietro nel tempo. Se non ci sono state nuove misurazioni dall'ultima visualizzazione del grafico, i dati precedenti che erano già stati scaricati vengono visualizzati di nuovo immediatamente. Se è presente una nuova misurazione, questa viene aggiunta ai dati del tracciato precedente.
  4. Quando il monitor viene acceso per la prima volta, non ci sono letture storiche e 0 viene memorizzato negli array come lettura non valida. Quando viene visualizzato il grafico, le letture non valide vengono semplicemente saltate, risultando in un grafico più breve.

Celsius e Fahrenheit

Lo schizzo lp_BLE_TempHumidity_R3.ino visualizza e traccia i dati in gradi Celsius. Per convertire i risultati in Fahrenheit, sostituire tutte le occorrenze di

parser.print(sensor. Temp_RawToFloat(..

insieme a

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

E sostituisci il simbolo unicode degC in Octal \342\204\203 con il simbolo degF \342\204\211

pfodApp visualizzerà qualsiasi Unicode che è possibile visualizzare sul cellulare.

Vedere Utilizzo di caratteri non ASCII in Arduino per maggiori dettagli. Modificare anche le impostazioni MIN_C, MAX_C in Thermometer.h. Infine regola i limiti della trama come desideri, ad es. cambia |Temp C~32~8~gradi C|

dire

|Temp F~90~14~gradi F|

Passaggio 4: misurazione della corrente di alimentazione

Misurazione della corrente di alimentazione
Misurazione della corrente di alimentazione

Utilizzando la libreria lp_Si7021, anche l'esecuzione di una misurazione di temperatura/umidità ogni 10 secondi contribuisce solo a ~1uA alla corrente di alimentazione media, quindi il fattore principale nella corrente di alimentazione e quindi nella durata della batteria è la corrente utilizzata dalla pubblicità BLE, dalla connessione e dalla trasmissione dei dati.

Collegare la scheda Temperatura/Umidità al Programmatore descritto nella Parte 1 come mostrato sopra.

Con le celle solari e le batterie scollegate, Vin e Gnd sono collegati ai Vdd e Gnd del programmatore (i cavi Giallo e Verde) e SWCLK e SWDIO sono collegati ai Clk e SIO della scheda di testata del programmatore (i cavi Blu e Rosa)

Ora puoi programmare NanoV2 e misurare la corrente di alimentazione come descritto nella Parte 1.

Installa la libreria Si7021 a bassa potenza da questo file zip, lp_Si7021.zip e installa la libreria pfodParser e decomprimi lp_BLE_TempHumidity_R3.zip nella directory degli sketch Arduino e programma la scheda Temp/Humditiy con lp_BLE_TempHumidity_R3.ino

Come accennato in precedenza, il contributo del sensore è <1uA, medio, al tasso di misurazione più alto utilizzato in questo progetto, quindi la pubblicità BLE e i parametri di connessione sono il fattore determinante per la durata della batteria.

La pubblicità BLE e i parametri di connessione che influenzano il consumo di corrente sono:-Tx Power, Advertising Interval, Max e Min Connection Intervals e Slave Latency.

Nota: Utilizzando le connessioni sopra ci sono due (2) regolatori nell'alimentazione, uno sulla scheda NanoV2 tramite Vin e il MAX8881 sull'alimentazione del programmatore. Ciò significa che le correnti di alimentazione misurate saranno ~5uA superiori a quelle effettive, a causa del secondo regolatore. I valori citati di seguito sono le correnti misurate meno questi 5uA aggiuntivi.

Potenza Tx

Gli effetti Tx Power forniscono corrente sia quando connesso che quando è pubblicitario (non connesso). Questo progetto utilizza l'impostazione della potenza massima (+4) e fornisce la migliore portata e la massima immunità ai disturbi per le connessioni più affidabili. È possibile utilizzare il metodo lp_BLESerial setTxPower() per modificare l'impostazione di alimentazione. I valori validi sono, in potenza crescente, -40, -30, -20, -16, -12, -8, -4, 0 +4. È necessario chiamare il metodo lp_BLESerial begin() PRIMA di chiamare setTxPower(). Vedere lo schizzo lp_BLE_TempHumidity_R3.ino.

Puoi provare a ridurre la potenza Tx, ma il compromesso è un raggio più breve e più interruzioni di connessione dovute a interferenze. In questo progetto il Tx Power è lasciato al suo valore predefinito, +4. Come vedrai di seguito, anche con questa impostazione, sono ancora possibili correnti di alimentazione molto basse.

Intervallo di pubblicità

Per una data Potenza Tx, in assenza di connessione, l'Intervallo Pubblicità imposta il consumo medio di corrente. L'intervallo consigliato è compreso tra 500 e 1000 ms. Qui è stato utilizzato 2000mS. Il compromesso è che intervalli di pubblicità più lunghi significano che è più lento per il tuo cellulare trovare il dispositivo e impostare una connessione. Internamente, gli intervalli di pubblicità sono impostati in multipli di 0,625 ms nell'intervallo da 20 ms a 10,24 secondi. Il metodo lp_BLESerial setAdvertisingInterval() accetta mS come argomento, per comodità. Per +4 TxPower e intervallo di pubblicità 2000mS il consumo di corrente è stato di ~18uA. Per l'intervallo pubblicitario di 1000 ms, era ~ 29 uA. La versione 2 utilizzava un intervallo di pubblicità di 2000 ms, ma ciò comportava connessioni lente. La Rev 3 è stata modificata in un intervallo pubblicitario di 1000 ms per rendere le connessioni più veloci.

Intervalli di connessione massimi e minimi

Una volta stabilita la connessione, l'intervallo di connessione determina la frequenza con cui il cellulare contatta il dispositivo. Lp_BLESerial setConnectionInterval() ti consente di impostare il massimo e il minimo suggeriti, tuttavia il cellulare controlla quale sia effettivamente l'intervallo di connessione. Per comodità gli argomenti per setConnectionInterval() sono in mS, ma internamente gli intervalli di connessione sono multipli di 1,25 mS, nell'intervallo da 7,5 mS a 4 sec.

L'impostazione predefinita è setConnectionInterval(100, 150) cioè da min 100mS a max 150mS. L'aumento di questi valori riduce la corrente di alimentazione durante la connessione, ma il compromesso è una trasmissione dei dati più lenta. Ogni aggiornamento dello schermo richiede circa 7 messaggi BLE, mentre 36 ore complete di misurazioni di 10 minuti richiedono circa 170 messaggi BLE. Quindi l'aumento degli intervalli di connessione rallenta gli aggiornamenti dello schermo e la visualizzazione della trama.

La classe lp_BLESerial ha un buffer di invio di 1536 byte e invia solo un blocco di 20 byte da questo buffer, ogni intervallo massimo di connessione per evitare che il collegamento BLE venga inondato di dati. Inoltre, quando si inviano i dati del tracciato, lo schizzo invia i dati solo fino a quando 512 byte sono in attesa di essere inviati, quindi ritarda l'invio di più dati fino a quando non sono stati inviati alcuni dati. Questo evita l'allagamento del buffer di invio. Questa limitazione degli invii rende la trasmissione dei dati al cellulare affidabile, ma non è ottimizzata per il massimo throughput.

In questo progetto gli intervalli di connessione sono stati lasciati come valori predefiniti.

Latenza dello schiavo

Quando non ci sono dati da inviare al cellulare, il dispositivo può facoltativamente ignorare alcuni dei messaggi di connessione dal cellulare. Ciò consente di risparmiare Tx Power e corrente di alimentazione. L'impostazione Latenza slave è il numero di messaggi di connessione da ignorare. Il valore predefinito è 0. Il metodo lp_BLESerial setSlaveLatency() può essere utilizzato per modificare questa impostazione.

La latenza slave predefinita di 0 ha fornito una corrente di alimentazione di ~50uA, ignorando gli aggiornamenti dello schermo ogni 30 secondi, ma includendo i messaggi keepAlive ogni 5 secondi. Impostando la Latenza dello Slave su 2 si ottiene una corrente di alimentazione collegata media di ~25uA. Un'impostazione di Latenza Slave di 4 ha fornito ~20uA. Impostazioni più elevate non sembravano ridurre la corrente di alimentazione, quindi è stata utilizzata un'impostazione di Latenza Slave di 4.

Una volta connesso, ogni 30 secondi pfodApp richiede un aggiornamento del display. Ciò forza una misurazione del sensore e invia i dati per aggiornare il display grafico. Questo aggiornamento si traduce in ~66uA in più per 2 secondi ogni 30 secondi. Questa è una media di 4.4uA nei 30 secondi. Aggiungendo questo ai 20uA, si ottiene una corrente di alimentazione di connessione media di ~25uA

Passaggio 5: corrente di alimentazione totale e durata della batteria

Utilizzando le impostazioni di cui sopra, come impostato in lp_BLE_TempHumidity_R3.ino, la corrente di alimentazione totale quando connesso e aggiornando il display ogni 30 secondi, circa 25 uA. Quando non è connesso, è di circa 29uA.

Per calcolare la durata della batteria si presume un assorbimento di corrente continuo di ~29uA.

Varie batterie hanno capacità e caratteristiche di tensione diverse. Le batterie qui considerate sono cella a bottone CR2032, cella a bottone CR2450 (N), 2 x AAA alcaline, 2 x AAA al litio e LiPo.

Riepilogo batteria

Se si utilizza Solar Assist, aggiungere il 50% a queste cifre sulla durata della batteria (supponendo 8 ore di luce al giorno)

Nota: Il condensatore 22uF LowESR (C1), oltre al condensatore NanoV2 22uF a bordo, immagazzina la corrente della cella solare e poi la fornisce per gli impulsi di corrente TX. Altrimenti la batteria fornisce parte della corrente TX. Questo 22uF LowESR aggiuntivo aggiunge circa il 10% alla corrente della batteria quando la cella solare non è alimentata, ma estende anche la durata della batteria compensando l'aumento della resistenza interna della batteria quando la batteria raggiunge la fine della vita utile. Le misurazioni di seguito sono state effettuate SENZA il condensatore aggiuntivo da 22 uF.

CR2032 – 235 mAHr – durata della batteria 10 mesi CR2450 (N) – 650 mAHr (540 mAHr) – durata della batteria 2,3 anni (2 anni) 2 x AAA alcaline – 1250 mAHr – durata della batteria 3,8 anni 2 x AAA al litio – 1200 mAHr – durata della batteria 4,7 anni LiPo ricaricabile – non consigliato a causa dell'elevata autoscarica.

CR2032

Questa cella a bottone ha una capacità tipica di 235 mAHr (batteria Energizer), una tensione nominale di 3 V e una tensione di scarica specificata di 2 V. Ciò implica una durata della batteria di 8100 ore o ~ 0,9 anni. Tuttavia, la resistenza della cella interna aumenta quando la batteria raggiunge la fine della vita utile e quindi potrebbe non essere in grado di fornire gli impulsi di corrente Tx di picco. Un condensatore di alimentazione più grande può essere utilizzato per ridurre questo effetto, ma diciamo 10 mesi di vita.

CR2450 (N)

Questa cella a bottone ha una capacità tipica di 620 mAHr (540 mAHr per CR2450N), una tensione nominale di 3 V e una tensione di scarica specificata di 2 V. Ciò implica una durata della batteria di 22, 400 ore o ~ 2 anni 6 m (18600 ore ~ 2 anni 2 m per CR2450N). Tuttavia, la resistenza della cella interna aumenta quando la batteria raggiunge la fine della vita utile e quindi potrebbe non essere in grado di fornire gli impulsi di corrente Tx di picco. Un condensatore di alimentazione più grande può essere utilizzato per ridurre questo effetto, ma diciamo 2 anni 4 m (2 anni N).

Nota: la versione CR2450N ha un labbro più spesso che aiuta a prevenire l'installazione errata in un supporto CR2450N. È possibile inserire una cella CR2450N e CR2450 in un supporto CR2450 ma non è possibile inserire una cella CR2450 in un supporto CR2450N

2 celle alcaline AAA

Queste batterie hanno una capacità di circa 1250mAHr (Energizer Battery) per correnti molto basse, una tensione nominale di 2x1.5V = 3V e una tensione di scarica specificata di 2x0.8V = 1.6V. Ma questa tensione di scarica specificata è inferiore alla tensione operativa del sensore Si7021 (1,9 V), quindi la batteria può essere utilizzata solo fino a ~ 1 V ciascuna. Ciò riduce la capacità di circa il 10% - 15%, ovvero ~1000 mAHr.

Ciò implica una durata della batteria di 34, 500 ore o ~ 4 anni. Tuttavia, la resistenza interna della cella aumenta man mano che la batteria raggiunge la fine della vita utile e quindi potrebbe non essere in grado di fornire gli impulsi di corrente Tx di picco. Un condensatore di alimentazione più grande può essere utilizzato per ridurre questo effetto, ma diciamo 3 anni e 10 m di vita. Nota Le batterie alcaline hanno un'autoscarica dal 2% al 3% all'anno.

2 celle al litio AAA

Queste batterie hanno una capacità di circa 1200mAHr (Energizer Battery), una tensione nominale di 2x1,7V = 3,4V, a basse correnti, e una tensione di scarica di 2x1,4V = 2,4V. Ciò implica una durata della batteria di 41, 400 ore o 4 anni 8 m.

Batteria ricaricabile LiPo

Queste batterie sono disponibili in varie capacità da 100 mAHr a 2000 mAHr, in formati piatti e hanno una tensione di carica di 4,2 V e una tensione di scarica di > 2,7 V. Tuttavia hanno un'elevata autoscarica del 2%-3%/mese (cioè dal 24% al 36% all'anno) e quindi non sono adatte a questa applicazione come le altre batterie.

Passaggio 6: alternative di alimentazione: assistenza solare, solo batteria, solo solare

Alternative di alimentazione: Solar Assist, solo batteria, solo solare
Alternative di alimentazione: Solar Assist, solo batteria, solo solare
Alternative di alimentazione: Solar Assist, solo batteria, solo solare
Alternative di alimentazione: Solar Assist, solo batteria, solo solare
Alternative di alimentazione: Solar Assist, solo batteria, solo solare
Alternative di alimentazione: Solar Assist, solo batteria, solo solare
Alternative di alimentazione: Solar Assist, solo batteria, solo solare
Alternative di alimentazione: Solar Assist, solo batteria, solo solare

Batteria più Solar Assist

La costruzione di cui sopra utilizza l'alimentazione Battery plus Solar Assist. Quando i pannelli solari generano più tensione rispetto alla tensione della batteria, le celle solari alimenteranno il monitor, prolungando così la durata della batteria. In genere la durata della batteria può essere estesa di un altro 50%.

I pannelli solari utilizzati sono piccoli, 50 mm x 30 mm, economici, ~ $ 0,50 e a bassa potenza. Sono nominalmente pannelli da 5V, ma necessitano di piena luce solare diretta per generare 5V. In questo progetto due pannelli sono collegati in serie in modo che posizionare il monitor vicino a una finestra, al riparo dal sole diretto, sia sufficiente per alimentare la batteria. Anche una stanza ben illuminata, o una lampada da tavolo, è sufficiente affinché le celle solari generino >3,3V a >33uA e sostituiscano la batteria.

È stato costruito un semplice pannello di prova per determinare dove potrebbe essere posizionato il monitor di temperatura/umidità, al riparo dal sole e comunque alimentato a energia solare. Come puoi vedere dalla foto sopra, i due pannelli collegati a un resistore da 100K producono 5,64 V sui 100 K, ovvero 56 uA di corrente a 5,64 V. Questo è più che sufficiente per alimentare il monitor dalla batteria. Qualsiasi lettura di tensione al di sopra della tensione nominale della batteria di 3V significa che le celle solari alimenteranno il monitor invece della batteria.

I due diodi nel circuito di monitoraggio dell'umidità della temperatura isolano le celle solari e le batterie l'una dall'altra e prevengono il collegamento con polarità inversa. Il resistore zener e serie 470R da 10V 1W protegge il regolatore di bordo del NanoV2 dalla sovratensione di due celle solari in pieno sole, in particolare se si utilizzano celle da 12V invece di quelle da 5V. Durante il normale funzionamento a <5V, lo zener da 10V assorbe solo ~1uA.

Solo batteria

Per un'alimentazione solo a batteria, ometti R1, D1 e D3 e le celle solari. Puoi anche sostituire D1 con un pezzo di filo se non vuoi la protezione dall'inversione di polarità.

Solo solare

L'alimentazione del monitor solo da celle solari, senza batteria, richiede un circuito di alimentazione diverso. Il problema è che mentre il monitor funzionerà a 29uA, all'accensione l'nRF52 assorbe ~5mA per 0,32 sec. Il circuito mostrato sopra (versione pdf) tiene spento il regolatore MAX8881 fino a quando i condensatori di ingresso, 2 x 1000uF, si caricano fino a 4.04V. Quindi il MAX6457 rilascia l'ingresso SHDN del MAX8881 per alimentare l'nRF52 (NanoV2) I condensatori 2 x 1000uF forniscono la corrente di avviamento necessaria.

Ciò consente al monitor di accendersi non appena c'è abbastanza energia solare per mantenerlo in funzione a 29uA.

Passaggio 7: conclusione

Questo tutorial ha presentato un monitor di umidità della temperatura alimentato a batteria/solare come esempio di progetto BLE a bassissima potenza in Arduino per il chip nRF52832. Correnti di alimentazione di ~29uA ottenute regolando i parametri di connessione. Ciò ha comportato una durata della batteria a bottone CR2032 superiore a 10 mesi. Più lungo per pile a bottone e batterie di maggiore capacità. L'aggiunta di due celle solari a basso costo ha facilmente esteso la durata della batteria del 50% o più. Per alimentare il monitor con le celle solari è sufficiente una luce brillante da una stanza o una lampada da tavolo.

È stato presentato uno speciale circuito di alimentazione per consentire al monitor di funzionare esclusivamente con celle solari a bassa capacità.

Il pfodDesigner gratuito ti consente di progettare menu/sottomenu, tracciare dati su data/ora e registrare dati e quindi generare lo schizzo Arduino a bassa potenza per te. Qui è stata codificata un'interfaccia personalizzata utilizzando le primitive di disegno pfodApp. La connessione con pfodApp visualizza l'interfaccia utente e aggiorna le letture mentre il monitor utilizza ~29uA

Non è richiesta alcuna programmazione Android. pfodApp gestisce tutto questo.