Índice:

Easy Very Low Power BLE no Arduino Parte 2 - Monitor de temperatura / umidade - Rev 3: 7 etapas
Easy Very Low Power BLE no Arduino Parte 2 - Monitor de temperatura / umidade - Rev 3: 7 etapas

Vídeo: Easy Very Low Power BLE no Arduino Parte 2 - Monitor de temperatura / umidade - Rev 3: 7 etapas

Vídeo: Easy Very Low Power BLE no Arduino Parte 2 - Monitor de temperatura / umidade - Rev 3: 7 etapas
Vídeo: Wireless Soil Moisture Monitor using Arduino & Lora, Soil Moisture Sensor Lora, Arduino LoRa 2024, Novembro
Anonim
Easy Very Low Power BLE no Arduino Parte 2 - Monitor de Temperatura / Umidade - Rev 3
Easy Very Low Power BLE no Arduino Parte 2 - Monitor de Temperatura / Umidade - Rev 3
Easy Very Low Power BLE no Arduino Parte 2 - Monitor de Temperatura / Umidade - Rev 3
Easy Very Low Power BLE no Arduino Parte 2 - Monitor de Temperatura / Umidade - Rev 3
Easy Very Low Power BLE no Arduino Parte 2 - Monitor de Temperatura / Umidade - Rev 3
Easy Very Low Power BLE no Arduino Parte 2 - Monitor de Temperatura / Umidade - Rev 3

Atualização: 23 de novembro de 2020 - Primeira substituição de 2 pilhas AAA desde 15 de janeiro de 2019, ou seja, 22 meses para 2xAAA AlkalineUpdate: 7 de abril de 2019 - Rev 3 de lp_BLE_TempHumidity, adiciona gráficos de data / hora, usando pfodApp V3.0.362 + e aceleração automática ao enviar dados

Atualização: 24 de março de 2019 - Rev 2 de lp_BLE_TempHumidity, adiciona mais opções de plotagem e i2c_ClearBus

Este instrutível, um monitor de umidade e temperatura de energia muito baixa, é a parte 2 de 3.

Parte 1 - Construindo dispositivos BLE de baixíssima potência simplificados com o Arduino cobre a configuração do Arduino para codificar dispositivos de baixa potência nRF52, o módulo de programação e medição da corrente de alimentação. Ele também cobre cronômetros e comparadores especializados de baixa potência e entradas de depuração, além do uso de pfodApp para conectar e controlar o dispositivo nRF52.

Parte 2 - Um Monitor de Umidade de Temperatura de Muito Baixa Energia, este aqui, cobre o uso de um módulo Redbear Nano V2 e um sensor de temperatura / umidade Si7021 para construir uma bateria de baixa energia / monitor solar. Ele também abrange a modificação da biblioteca Si7021 para baixo consumo de energia, o ajuste do dispositivo BLE para reduzir seu consumo de corrente de <25uA e o design de um display personalizado de temperatura / umidade para o seu celular.

Parte 3 - A substituição do Redbear Nano V2 cobre o uso de outros módulos baseados em nRF52 em vez do Nano V2. Ele cobre a seleção de componentes de suprimentos, construção, remoção da proteção de programação do chip nRF52, uso de pinos NFC como GPIO normal e definição de uma nova placa nRF52 no Arduino.

Este instrutível é uma aplicação prática da Parte 1: Construindo dispositivos BLE de baixíssima potência facilitada com o Arduino por meio da construção de um monitor de temperatura e umidade BLE de baixíssima potência. O monitor funcionará por anos com célula tipo moeda ou 2 pilhas AAA, ainda mais com assistência solar. Este tutorial cobre o ajuste dos parâmetros BLE para baixo consumo de energia e como alimentar seu dispositivo com bateria OU bateria + solar OU apenas solar.

Além de exibir a temperatura e a umidade atuais, o monitor armazena as últimas 36 horas de leituras de 10 minutos e os últimos 10 dias de leituras de hora em hora. Eles podem ser mapeados em seu celular Android e os valores salvos em um arquivo de log. Nenhuma programação Android é necessária, pfodApp lida com tudo isso. A exibição e os gráficos do Android são totalmente controlados pelo esboço do Arduino, para que você possa personalizá-lo conforme necessário.

Uma placa Redbear Nano V2 é usada para o componente nRF52832 BLE e uma placa de breakout Sparkfun Si7021 é usada para o sensor de temperatura / umidade. Uma biblioteca modificada de baixa potência é usada com o Si7021. Uma pequena placa de circuito impresso foi projetada para conter o NanoV2 e fornecer componentes. No entanto, uma vez que não há componentes montados na superfície usados, você pode facilmente construir isso na placa vero. Três versões de fonte de alimentação são cobertas. i) Bateria mais assistência solar, ii) Somente bateria, iii) Somente solar. A opção Solar Only não tem armazenamento de bateria e, portanto, só funcionará quando houver alguma luz. Uma luz ambiente ou abajur é suficiente.

Contorno

Este projeto tem 4 partes independentes relativas: -

  1. Seleção e construção de componentes
  2. Code - Biblioteca de Sensores de Baixa Potência, Interface do Usuário e Arduino Sketch
  3. Medindo a corrente de alimentação e a vida útil da bateria
  4. Alternativas de abastecimento - Solar Assist, Battery Only, Solar Only

Etapa 1: Seleção de componentes

Seleção de Componente

Como mencionado na Parte 1 - O truque para obter uma solução de energia realmente baixa é não fazer nada na maioria das vezes, minimizar a corrente através de resistores pull-up / pull-down externos nas entradas e não ter nenhum componente extra. Este projeto usará cada um desses truques para obter uma solução de baixo consumo de energia.

O componente nRF52832

O chip nRF52832 pode funcionar com uma fonte de alimentação entre 1,7 V e 3,6 V (tensão máxima absoluta de 3,9 V). Isso significa que você pode alimentar o chip diretamente de uma célula tipo moeda ou 2 pilhas AAA. No entanto, é prudente adicionar um regulador de tensão para proteger o chip de mais de volts. Este componente extra vem com um custo de energia, mas no caso da placa NanoV2, o regulador on-board, TLV704, consome menos de 5,5uA no máximo, normalmente apenas 3,4uA. Para este pequeno uso de energia extra, você obtém proteção para entradas de alimentação de até 24V.

O componente Si7021

O próprio sensor Si7021 desenha normalmente <1uA quando não está fazendo uma medição, ou seja, em espera, e até 4mA ao transmitir os dados via I2C. Como não fazemos medições continuamente, 4mA não é uma parte significativa da corrente de alimentação média. Fazer uma leitura de 30 segundos adiciona menos de 1uA à corrente de alimentação média, consulte as medições de corrente de alimentação abaixo.

Existem duas placas de breakout Si7021 prontamente disponíveis. Um da Adafruit e um da Sparkfun. Uma rápida olhada nas duas placas irá dizer-lhe que a placa Adafruit tem muito mais componentes do que a placa Sparkfun, então você estaria inclinado a escolher a placa Sparkfun. Olhando os esquemas para cada placa mostra que a placa Sparkfun é apenas o sensor vazio e dois resistores pullup 4k7, enquanto a placa Adafruit tem um regulador integrado, MIC5225, que normalmente consome 29uA o tempo todo. Isso é significativo quando a corrente total para o resto do circuito é <30uA. Como já temos um regulador para o chip nRF52832, este componente extra não é necessário e o Si7021 pode ser alimentado por essa fonte de 3,3V. Portanto, este projeto usará a placa de breakout Si7021 da Sparkfun.

minimizar a corrente por meio de resistores externos pull-up / pull-down nas entradas

Os resistores pullup I2C de 4 K7 não têm um valor particularmente alto e vão consumir 0,7 mA quando puxados para baixo. Isso seria um problema se eles estivessem em uma entrada de switch que foi aterrada por longos períodos. No entanto, neste projeto, a corrente através desses resistores é minimizada pelo uso da interface I2C raramente e por um curto período de tempo. Na maioria das vezes, as linhas I2C não estão em uso e são de estado alto / triplo, portanto, nenhuma corrente flui por esses resistores.

Etapa 2: construção

Construção
Construção
Construção
Construção
Construção
Construção

O projeto é construído em um pequeno PCB, mas como não há componentes SMD, pode ser facilmente construído usando placa vero. O PCB foi fabricado pela pcbcart.com a partir desses arquivos Gerber, TempHumiditySensor_R1.zip O PCB é de uso geral o suficiente para ser usado em outros projetos BLE.

O esquema é mostrado acima. Aqui está uma versão em pdf.

Lista de Peças

Custo aproximado por unidade em dezembro de 2018, ~ US $ 62, excluindo frete e o programador da Parte 1

  • Redbear NanoV2 ~ US $ 17
  • Placa de apoio Sparkfun Si7021 ~ US $ 8
  • 2 x 53 mm x 30 mm células solares 0,15 W 5 V, por ex. Sobrevoar ~ US $ 1,10
  • 1 x PCB TempHumiditySensor_R1.zip ~ US $ 25 por 5 de desconto em www.pcbcart.com OU placa Vero (tira de cobre), por exemplo Jaycar HP9540 ~ AUD $ 5
  • 2 x díodos schottky 1N5819, por ex. Digikey 1N5819FSCT-ND ~ US $ 1
  • 1 x 470R 0,4W 1% resistor, por ex. Digikey BC3274CT-ND ~ US $ 0,25
  • 6 x 6 pinos de encaixe macho, por ex. Sparkfun PRT-00116 ~ US $ 1,5
  • jumper feminino para feminino, por ex. ID de Adafruit: 1950 ~ US $ 2
  • Parafusos de náilon de 3 mm x 12 mm, por ex. Jaycar HP0140 ~ AUD $ 3
  • Porcas de náilon de 3 mm x 12 mm, por ex. Jaycar HP0146 ~ AUD $ 3
  • Fita de montagem permanente Scotch Cat 4010, por ex. da Amazon ~ US $ 6,6
  • Porta-pilhas AAA x 2, por ex. Sparkfun PRT-14219 ~ US $ 1,5
  • 2 pilhas alcalinas AAA 750mA, por ex. Sparkfun PRT-09274 ~ US $ 1,0 Essas baterias devem durar> 2 anos. As baterias alcalinas Energizer têm maior capacidade
  • Caixa de plástico (ABS) 83 mm x 54 mm x 31 mm, por ex. Jaycar HB6005 ~ AUD $ 3
  • pfodApp ~ US $ 10
  • 1 x 22uF 63V Low ESR Capacitor (opcional), por exemplo Jaycar RE-6342 ~ AUD $ 0,5 ou Digikey P5190-ND ~ US $ 0,25

A construção é simples. O suporte da bateria e as células solares são fixados à caixa de plástico com fita dupla-face resistente.

Observe o fio do link Gnd do CLK ao GND na peça acabada. Ele é instalado APÓS a programação para evitar que ruído na entrada CLK acione o chip nRF52 em um modo de depuração de alta corrente

Etapa 3: Código - Biblioteca de sensores de baixa potência, interface do usuário e esboço do Arduino

Code - Biblioteca de Sensores de Baixa Potência, Interface do Usuário e Arduino Sketch
Code - Biblioteca de Sensores de Baixa Potência, Interface do Usuário e Arduino Sketch
Code - Biblioteca de Sensores de Baixa Potência, Interface do Usuário e Arduino Sketch
Code - Biblioteca de Sensores de Baixa Potência, Interface do Usuário e Arduino Sketch
Code - Biblioteca de Sensores de Baixa Potência, Interface do Usuário e Arduino Sketch
Code - Biblioteca de Sensores de Baixa Potência, Interface do Usuário e Arduino Sketch

Baixe o código zipado, lp_BLE_TempHumidity_R3.zip, e descompacte-o no diretório Arduino Sketches. Você também precisa instalar a biblioteca lp_So7021 deste arquivo zip e também instalar a biblioteca pfodParser.

Biblioteca de sensores de baixa potência, lp_Si7021

Tanto Adafruit quanto Sparkfun fornecem bibliotecas de suporte para acessar o sensor Si7021, no entanto, ambas as bibliotecas são inadequadas para uso de energia muito baixa. Ambos usam um retardo (25) no código para retardar a leitura do sensor enquanto ele está fazendo sua medição. Conforme observado na Parte 1, os atrasos são maus. O atraso do Arduino () apenas mantém o microprocessador funcionando usando energia enquanto ele aguarda o tempo limite do atraso. Isso quebra a primeira regra de BLE de baixa potência, não faça nada na maioria das vezes. A biblioteca lp_Si7021 de substituição substitui todos os atrasos por lp_timers que colocam o microprocessador em hibernação enquanto espera o sensor terminar sua medição.

Quanta diferença a biblioteca lp_Si7021 faz? Usando a biblioteca de suporte SparkFun Si7021 original e fazendo uma leitura por segundo, sem nenhuma impressão serial, a média é de aproximadamente 1,2 mA. Substituir a biblioteca Sparkfun pela biblioteca lp_Si7021 reduz a corrente média para ~ 10uA, ou seja, 100 vezes menos. Neste projeto, a taxa de medição mais rápida é uma vez a cada 30 segundos quando o celular está conectado, o que resulta em uma corrente média do sensor de menos de 1uA. Quando não há conexão BLE, a taxa de medição é uma vez a cada 10 minutos e a corrente média de alimentação do sensor é insignificante.

Interface de usuário

Acima está a tela principal e uma visão ampliada do histórico de 10 dias por hora. Os gráficos podem ser ampliados e panorâmicos em ambas as direções, usando dois dedos.

A interface do usuário é codificada no esboço do Arduino e enviada para pfodApp na primeira conexão, onde é armazenada em cache para uso repetido e atualizações. A exibição gráfica é construída a partir de primitivos de desenho. Consulte Custom Arduino Controls for Android para um tutorial sobre como construir seus próprios controles. Os arquivos Thermometer, RHGauge e Button contêm os comandos de desenho para esses itens.

Nota: Nenhum se esta exibição for incorporada ao pfodApp. A exibição inteira é completamente controlada pelo código em seu esboço do Arduino

O método sendDrawing_z () no esboço lp_BLE_TempHumidity_R3.ino define a interface do usuário.

void sendDrawing_z () {dwgs.start (50, 60, dwgs. WHITE); // o padrão de fundo é BRANCO se omitido, ou seja, start (50, 60); parser.sendRefreshAndVersion (30000); // re-solicitar dwg a cada 30 seg. isso é ignorado se nenhuma versão do analisador for configurada // toque nos botões acima para forçar as atualizações de exibição dwgs.touchZone (). cmd ('u'). size (50, 39).send (); dwgs.pushZero (35, 22, 1,5); // move zero para o centro de dwg para 35, 22 e escala em 1,5 vezes rhGauge.draw (); // desenha o controle dwgs.popZero (); dwgs.pushZero (18, 33); // mover zero para o centro de dwg para 18, 33 a escala é 1 (padrão) thermometer.draw (); // desenha o controle dwgs.popZero ();

dwgs.pushZero (12,5, 43, 0,7); // move zero para o centro de dwg para 12,5, 43 e escala em 0,7

hrs8PlotButton.draw (); // desenha o controle dwgs.popZero (); dwgs.pushZero (37,5, 43, 0,7); // move zero para o centro de dwg para 37,5, 43 e escala em 0,7 dias1PlotButton.draw (); // desenha o controle dwgs.popZero ();

dwgs.pushZero (12,5, 54, 0,7); // move zero para o centro de dwg para 12,5, 54 e escala em 0,7

days3PlotButton.draw (); // desenha o controle dwgs.popZero (); dwgs.pushZero (37,5, 54, 0,7); // move zero para o centro de dwg para 37,5, 54 e escala em 0,7 dias10PlotButton.draw (); // desenha o controle dwgs.popZero (); dwgs.end (); }

Os comandos pushZero alteram a origem e a escala para desenhar o próximo componente. Isso permite que você altere facilmente o tamanho e a posição dos botões e medidores.

Na primeira conexão, a exibição inicial leva 5 ou 6 segundos para baixar os ~ 800 bytes que definem a exibição. pfodApp armazena em cache o display para que as atualizações futuras só precisem enviar as alterações, posições do medidor e leituras. Essas atualizações levam apenas alguns segundos para enviar os 128 bytes necessários para atualizar o display.

Existem cinco (5) zonas de toque ativas definidas no visor. Cada botão tem um definido em seu método draw (), então você pode clicar nele para abrir o respectivo gráfico, e a metade superior da tela é configurada como a terceira zona de toque

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

Quando você clica na tela acima dos botões, o comando 'u' dwg é enviado ao seu esboço para forçar uma nova medição e atualização da tela. Normalmente, quando conectado, as atualizações acontecem apenas a cada 30 segundos. Cada clique ou atualização do desenho força uma nova medição. A resposta do esboço do Arduino para pfodApp é atrasada até que a nova medição seja concluída (~ 25 ms) para que o valor mais recente possa ser enviado na atualização.

Arduino Sketch

O esboço do Arduino, lp_BLE_TempHumidity_R3.ino, é uma versão aprimorada do esboço de exemplo usado na Parte 1. O esboço lp_BLE_TempHumidity_R3.ino substitui o menu pelo desenho mostrado acima. Ele também adiciona o suporte do sensor lp_Si7021 e matrizes de dados para armazenar as medições históricas de 10 minutos e horas.

A principal complicação no esboço lp_BLE_TempHumidity_R3.ino é lidar com o envio dos dados do gráfico. Conforme as medições são feitas, readRHResults () lida com a coleta dos resultados e salvando-os nas matrizes históricas. As matrizes têm 120 comprimento, mas quando os dados são enviados, os primeiros 30 pontos de dados são para um intervalo de tempo mais preciso.

Existem alguns pontos que devem ser tomados em consideração ao enviar os 200 pontos de plotagem ímpares para exibição: -

  1. Cada ponto de dados tem aproximadamente 25 bytes de comprimento, em formato de texto CSV. Portanto, 150 pontos equivalem a 3750 bytes de dados. A classe lp_BLESerial tem um buffer de 1536 bytes, 1024 dos quais é grande o suficiente para a maior mensagem pfod. Os outros 512 bytes são reservados para o envio de dados. Uma vez que os dados históricos tenham preenchido os 512 bytes, o envio de dados adicionais é atrasado até que haja espaço no buffer.
  2. Para evitar que os dados do gráfico retardem as atualizações da tela principal, os dados do gráfico são enviados apenas enquanto a tela do gráfico é exibida. Uma vez que o usuário volta para a tela principal, o envio dos dados do gráfico é pausado. O envio dos dados do gráfico é retomado quando o usuário clica no botão do gráfico para exibir o gráfico novamente.
  3. Os gráficos históricos começam do 0 (agora) e retrocedem no tempo. Se não houve nenhuma nova medição desde que o último gráfico foi exibido, os dados anteriores que já foram baixados são apenas exibidos novamente imediatamente. Se houver uma nova medição, ela será adicionada aos dados do gráfico anteriores.
  4. Quando o monitor é ligado pela primeira vez, não há leituras históricas e 0 é armazenado nas matrizes como uma leitura inválida. Quando o gráfico é exibido, as leituras inválidas são simplesmente ignoradas, resultando em um gráfico mais curto.

Celsius e Fahrenheit

O esboço lp_BLE_TempHumidity_R3.ino exibe e plota os dados em Celsius. Para converter os resultados em Fahrenheit, substitua todas as ocorrências de

parser.print (sensor. Temp_RawToFloat (..

com

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

E substitua o símbolo unicode degC em Octal / 342 / 204 / 203 pelo símbolo degF / 342 / 204 / 211

pfodApp exibirá qualquer Unicode que você pode exibir no celular.

Consulte Usando caracteres não ASCII no Arduino para obter mais detalhes. Altere também as configurações MIN_C, MAX_C em Thermometer.h. Finalmente ajuste os limites do gráfico como desejar, por exemplo alterar | Temp C ~ 32 ~ 8 ~ graus C |

dizer

| Temp F ~ 90 ~ 14 ~ graus F |

Etapa 4: Medir a corrente de alimentação

Medindo a corrente de suprimento
Medindo a corrente de suprimento

Usando a biblioteca lp_Si7021, mesmo fazer uma medição de temperatura / umidade a cada 10 segundos contribui apenas com ~ 1uA para a corrente de alimentação média, portanto, o principal fator na corrente de alimentação e, portanto, a vida útil da bateria é a corrente usada pela publicidade BLE e conexão e transmissão de dados.

Conecte a placa de Temperatura / Umidade ao Programador descrito na Parte 1 conforme mostrado acima.

Com as células solares e baterias desconectadas, Vin e Gnd são conectados ao Vdd e Gnd do programador (os fios amarelo e verde) e o SWCLK e SWDIO são conectados ao Clk e SIO da placa do cabeçalho do programador (os fios azul e rosa)

Agora você pode programar o NanoV2 e medir a corrente de alimentação conforme descrito na Parte 1.

Instale a biblioteca Si7021 de baixo consumo deste arquivo zip, lp_Si7021.zip e instale a biblioteca pfodParser e descompacte lp_BLE_TempHumidity_R3.zip para o diretório de esboços do Arduino e programe a placa Temp / Humditiy com lp_BLE_TempHumidity_R3.ino

Como mencionado acima, a contribuição do sensor é <1uA, em média, na taxa de medição mais alta usada neste projeto, então a publicidade BLE e os parâmetros de conexão são o fator determinante para a vida da bateria.

Os parâmetros de publicidade e conexão BLE que afetam o consumo de corrente são: -Tx Power, Advertising Interval, Max e Min Connection Intervals e Slave Latency.

Nota: Usando as conexões acima, existem dois (2) reguladores na fonte, um na placa NanoV2 via Vin e o MAX8881 na fonte do programador. Isso significa que as correntes de alimentação medidas serão ~ 5uA mais altas do que a real, devido ao segundo regulador. Os valores citados abaixo são as correntes medidas menos esses 5uA extras.

Tx Power

Os efeitos Tx Power fornecem corrente tanto quando conectado quanto quando anunciado (não conectado). Este projeto usa a configuração de potência máxima (+4) e fornece o melhor alcance e maior imunidade a ruído para as conexões mais confiáveis. Você pode usar o método lp_BLESerial setTxPower () para alterar a configuração de energia. Os valores válidos são, na potência crescente, -40, -30, -20, -16, -12, -8, -4, 0 +4. Você deve chamar o método lp_BLESerial begin () ANTES de chamar setTxPower (). Veja o esboço lp_BLE_TempHumidity_R3.ino.

Você pode experimentar reduzir o Tx Power, mas o compromisso é um alcance mais curto e mais interrupções de conexão devido à interferência. Neste projeto, o Tx Power é deixado em seu padrão, +4. Como você verá abaixo, mesmo com esta configuração, correntes de alimentação muito baixas ainda são possíveis.

Intervalo de Publicidade

Para uma dada Tx Power, quando não há conexão, o Advertising Interval define o consumo médio de corrente. O intervalo recomendado é de 500 a 1000 ms. Aqui, 2000mS foi usado. O compromisso é que intervalos de publicidade mais longos significam que é mais lento para o seu celular encontrar o dispositivo e estabelecer uma conexão. Internamente, os intervalos de publicidade são definidos em múltiplos de 0,625 ms no intervalo de 20 ms a 10,24 segundos. O método lp_BLESerial setAdvertisingInterval () leva mS como o argumento, por conveniência. Para +4 TxPower e intervalo de publicidade de 2000mS, o consumo atual foi de ~ 18uA. Para intervalo de publicidade de 1000mS, era ~ 29uA. O Rev 2 usou intervalo de publicidade de 2.000 ms, mas isso resultou em conexões lentas. A Rev 3 mudou para intervalo de publicidade de 1000mS para tornar as conexões mais rápidas.

Intervalos máximos e mínimos de conexão

Uma vez que a conexão é estabelecida, o intervalo de conexão determina com que freqüência o celular entra em contato com o dispositivo. O lp_BLESerial setConnectionInterval () permite que você defina o máximo e o mínimo sugeridos, no entanto, o celular controla o que o intervalo de conexão realmente é. Por conveniência, os argumentos para setConnectionInterval () estão em ms, mas internamente os intervalos de conexão são múltiplos de 1,25 ms, na faixa de 7,5 ms a 4 segundos.

A configuração padrão é setConnectionInterval (100, 150) ou seja, mínimo de 100 ms a máximo de 150 ms. Aumentar esses valores reduz a corrente de alimentação enquanto conectado, mas o compromisso é a transmissão de dados mais lenta. Cada atualização da tela leva cerca de 7 mensagens BLE, enquanto 36 horas completas de medições de 10 minutos levam cerca de 170 mensagens BLE. Portanto, aumentar os intervalos de conexão desacelera as atualizações de tela e as exibições do gráfico.

A classe lp_BLESerial tem um buffer de envio de 1536 bytes e envia apenas um bloco de 20 bytes desse buffer, cada intervalo máximo de conexão para evitar inundar o link BLE com dados. Além disso, ao enviar dados de plotagem, o esboço apenas envia dados até que 512 bytes estejam esperando para serem enviados e, em seguida, atrasa o envio de mais dados até que alguns dados tenham sido enviados. Isso evita inundar o buffer de envio. Essa limitação dos envios torna a transmissão de dados para o celular confiável, mas não é otimizada para o rendimento máximo.

Neste projeto, os intervalos de conexão foram deixados como valores padrão.

Latência Escravo

Quando não há dados para enviar ao celular, o dispositivo pode, opcionalmente, ignorar algumas das mensagens de conexão do celular. Isso economiza Tx Power e corrente de alimentação. A configuração Slave Latency é o número de mensagens de conexão a serem ignoradas. O padrão é 0. O método lp_BLESerial setSlaveLatency () pode ser usado para alterar essa configuração.

A latência escrava padrão de 0 forneceu corrente de suprimento de ~ 50uA, ignorando as atualizações de tela a cada 30 segundos, mas incluindo as mensagens keepAlive por 5 segundos. Definir a latência do escravo para 2 deu uma corrente de alimentação conectada média de ~ 25uA. Uma configuração de latência escrava de 4 deu ~ 20uA. Configurações mais altas não parecem reduzir a corrente de alimentação, então uma configuração de latência escrava de 4 foi usada.

Quando conectado, a cada 30 segundos, o pfodApp solicita uma atualização de exibição. Isso força uma medição do sensor e envia de volta os dados para atualizar a exibição gráfica. Esta atualização resulta em um extra de ~ 66uA por 2 segundos a cada 30 segundos. Isso é uma média de 4,4uA ao longo de 30 segundos. Adicionando isso a 20uA, dá uma corrente de alimentação de conexão média de ~ 25uA

Etapa 5: corrente de alimentação total e vida útil da bateria

Usando as configurações acima, conforme definido em lp_BLE_TempHumidity_R3.ino, a corrente de fornecimento total quando conectado e atualizando a tela a cada 30 segundos, aproximadamente 25uA. Quando não conectado, é de aproximadamente 29uA.

Para calcular a vida da bateria, um consumo contínuo de corrente de ~ 29uA é considerado.

Várias baterias têm capacidades e características de tensão diferentes. As baterias consideradas aqui são célula tipo moeda CR2032, célula tipo moeda CR2450 (N), 2 pilhas alcalinas AAA, 2 pilhas AAA de lítio e LiPo.

Resumo da bateria

Se estiver usando o Solar Assist, adicione 50% a esses valores de vida útil da bateria (assumindo 8 horas por dia)

Observação: O capacitor 22uF LowESR (C1), além do capacitor NanoV2 22uF integrado, armazena a corrente da célula solar e a fornece para os pulsos de corrente TX. Caso contrário, a bateria fornece um pouco da corrente TX. Este 22uF LowESR extra adiciona cerca de 10% à corrente da bateria quando a célula solar não é a fonte, mas também estende a vida útil da bateria, compensando o aumento da resistência interna da bateria quando ela chega ao fim da vida útil. As medições abaixo foram feitas SEM o capacitor adicional de 22uF.

CR2032 - 235mAHr - duração da bateria 10 mesesCR2450 (N) - 650mAHr (540mAHr) - duração da bateria 2,3 anos (2 anos) 2 x AAA alcalino - 1250mAHr - duração da bateria 3,8.yrs2 x AAA Lítio - 1200mAHr - duração da bateria 4,7 anos LiPo recarregável - não recomendado devido à alta autodescarga.

CR2032

Esta célula tipo moeda tem capacidade típica de 235mAHr (bateria Energizer), uma voltagem nominal de 3V e uma voltagem de descarga especificada de 2V. Isso implica em uma vida útil da bateria de 8100 horas ou ~ 0,9 anos. No entanto, a resistência da célula interna aumenta à medida que a bateria chega ao fim da vida útil e, portanto, pode não ser capaz de fornecer os pulsos de corrente Tx de pico. Um capacitor de alimentação maior pode ser usado para reduzir esse efeito, mas digamos 10 meses de vida.

CR2450 (N)

Esta célula tipo moeda tem capacidade típica de 620mAHr (540mAHr para CR2450N), uma voltagem nominal de 3V e uma voltagem de descarga especificada de 2V. Isso implica em uma vida útil da bateria de 22, 400 horas ou ~ 2 anos 6m (18600 horas ~ 2 anos 2m para CR2450N). No entanto, a resistência da célula interna aumenta à medida que a bateria chega ao fim da vida útil e, portanto, pode não ser capaz de fornecer os pulsos de corrente Tx de pico. Um capacitor de alimentação maior pode ser usado para reduzir esse efeito, mas digamos de 2 anos 4m (2 anos N) de vida.

Nota: A versão CR2450N tem uma borda mais espessa que ajuda a evitar a instalação incorreta em um suporte CR2450N. Você pode inserir uma célula CR2450N e CR2450 em um suporte CR2450, mas não pode inserir uma célula CR2450 em um suporte CR2450N

2 x células alcalinas AAA

Essas baterias têm uma capacidade de cerca de 1250mAHr (Bateria Energizer) para correntes muito baixas, uma tensão nominal de 2x1,5 V = 3 V e uma tensão de descarga especificada de 2x0,8 V = 1,6 V. Mas esta tensão de descarga especificada é menor do que a tensão operacional do sensor Si7021 (1,9 V), então a bateria só pode ser usada até ~ 1 V cada. Isso reduz a capacidade em cerca de 10% a 15%, ou seja, ~ 1000 mAHr.

Isso implica em uma vida útil da bateria de 34, 500 horas ou ~ 4 anos. No entanto, a resistência da célula interna aumenta à medida que a bateria chega ao fim da vida útil e, portanto, pode não ser capaz de fornecer os pulsos de corrente Tx de pico. Um capacitor de alimentação maior pode ser usado para reduzir esse efeito, mas digamos 3 anos de vida 10m. Observação As baterias alcalinas têm uma autodescarga de 2% a 3% ao ano.

2 x células de lítio AAA

Essas baterias têm uma capacidade de cerca de 1200mAHr (Bateria Energizer), uma tensão nominal de 2x1,7V = 3,4V, em baixas correntes, e uma tensão descarregada de 2x1,4V = 2,4V. Isso implica em uma vida útil da bateria de 41, 400 horas ou 4 anos e 8m.

Bateria recarregável lipo

Essas baterias vêm em várias capacidades de 100mAHr a 2000mAHr, em formatos planos, e têm uma tensão carregada de 4,2V e uma tensão descarregada de> 2,7V. No entanto, eles têm uma alta autodescarga de 2% -3% / mês (ou seja, 24% a 36% ao ano) e, portanto, não são tão adequados para esta aplicação quanto as outras baterias.

Etapa 6: alternativas de fornecimento - assistência solar, apenas bateria, apenas solar

Alternativas de abastecimento - Solar Assist, Battery Only, Solar Only
Alternativas de abastecimento - Solar Assist, Battery Only, Solar Only
Alternativas de abastecimento - Solar Assist, Battery Only, Solar Only
Alternativas de abastecimento - Solar Assist, Battery Only, Solar Only
Alternativas de abastecimento - Solar Assist, Battery Only, Solar Only
Alternativas de abastecimento - Solar Assist, Battery Only, Solar Only
Alternativas de abastecimento - Solar Assist, Battery Only, Solar Only
Alternativas de abastecimento - Solar Assist, Battery Only, Solar Only

Bateria mais Solar Assist

A construção acima usa a fonte de bateria mais Solar Assist. Quando os painéis solares geram mais voltagem do que a voltagem da bateria, as células solares alimentam o monitor, prolongando assim a vida útil da bateria. Normalmente, a vida útil da bateria pode ser estendida em mais 50%.

Os painéis solares usados são pequenos, 50 mm x 30 mm, baratos, ~ $ 0,50 e de baixo consumo. Eles são, nominalmente, painéis de 5V, mas precisam de luz solar direta e direta para gerar 5V. Neste projeto, dois painéis são conectados em série de modo que colocar o monitor em algum lugar próximo a uma janela, fora da luz direta do sol, seja suficiente para substituir a bateria. Mesmo uma sala bem iluminada, ou uma lâmpada de mesa, é o suficiente para que as células solares gerem> 3,3 V a> 33uA e substituam a bateria.

Um painel de teste simples foi construído para determinar onde o Monitor de Temperatura / Umidade poderia ser colocado, longe do sol e ainda com energia solar. Como você pode ver na foto acima, os dois painéis conectados a um resistor de 100K estão produzindo 5,64V em 100K, ou seja, uma corrente de 56uA em 5,64V. Isso é mais do que suficiente para controlar a alimentação do monitor com a bateria. Qualquer leitura de tensão acima da tensão nominal da bateria de 3 V significa que as células solares irão alimentar o monitor em vez da bateria.

Os dois diodos no circuito do Monitor de Temperatura e Umidade isolam as células solares e as baterias uma da outra e evitam conectá-las na polaridade reversa. O resistor da série 10V 1W zener e 470R protege o regulador on-board do NanoV2 contra sobretensão de duas células solares em pleno sol, particularmente se células de 12V forem usadas em vez de 5V. Em operação normal a <5 V, o 10V zener consome apenas ~ 1uA.

Apenas bateria

Para uma fonte apenas de bateria, apenas omita R1, D1 e D3 e as células solares. Você também pode substituir D1 por um pedaço de fio se não quiser proteção contra polaridade reversa.

Solar Only

Ligar o monitor apenas com células solares, sem bateria, requer um circuito de alimentação diferente. O problema é que enquanto o monitor opera em 29uA, ao ligar o nRF52 consome ~ 5mA por 0,32 seg. O circuito mostrado acima (versão pdf) mantém o regulador MAX8881 desligado até que os capacitores de entrada, 2 x 1000uF, carreguem até 4,04V. Em seguida, o MAX6457 libera a entrada SHDN do MAX8881 para ligar o nRF52 (NanoV2). Os capacitores de 2 x 1000uF fornecem a corrente de inicialização necessária.

Isso permite que o monitor seja ligado assim que houver energia solar suficiente para mantê-lo funcionando a 29uA.

Etapa 7: Conclusão

Este tutorial apresentou um Monitor de Umidade de Temperatura alimentado por bateria / energia solar como um exemplo de projeto BLE de energia muito baixa no Arduino para o chip nRF52832. Correntes de alimentação de ~ 29uA foram obtidas ajustando-se os parâmetros de conexão. Isso resultou em uma vida útil da bateria de célula tipo moeda CR2032 superior a 10 meses. Mais longo para pilhas e baterias tipo moeda de maior capacidade. Adicionar duas células solares baratas estendeu facilmente a vida útil da bateria em 50% ou mais. Uma luz de ambiente forte ou uma lâmpada de mesa é suficiente para alimentar o monitor a partir das células solares.

Um circuito de alimentação especial foi apresentado para permitir que o monitor funcione exclusivamente com células solares de baixa capacidade.

O pfodDesigner gratuito permite projetar menus / submenus, traçar data / hora e dados de registro e, em seguida, gerar o esboço do Arduino de baixo consumo para você. Aqui, uma interface personalizada foi codificada usando primitivas de desenho pfodApp. A conexão com pfodApp exibe a interface do usuário e atualiza as leituras enquanto o monitor está usando ~ 29uA

Nenhuma programação Android é necessária. pfodApp trata de tudo isso.

Recomendado: