Tabla de contenido:

BLE fácil de muy baja potencia en Arduino Parte 2 - Monitor de temperatura / humedad - Rev 3: 7 pasos
BLE fácil de muy baja potencia en Arduino Parte 2 - Monitor de temperatura / humedad - Rev 3: 7 pasos

Video: BLE fácil de muy baja potencia en Arduino Parte 2 - Monitor de temperatura / humedad - Rev 3: 7 pasos

Video: BLE fácil de muy baja potencia en Arduino Parte 2 - Monitor de temperatura / humedad - Rev 3: 7 pasos
Video: Curso de Arduino - Capitulo 39 - Modulo sensor detector de temperatura y humedad. Como leer valores 2024, Noviembre
Anonim
BLE fácil de muy baja potencia en Arduino Parte 2 - Monitor de temperatura / humedad - Rev 3
BLE fácil de muy baja potencia en Arduino Parte 2 - Monitor de temperatura / humedad - Rev 3
BLE fácil de muy baja potencia en Arduino Parte 2 - Monitor de temperatura / humedad - Rev 3
BLE fácil de muy baja potencia en Arduino Parte 2 - Monitor de temperatura / humedad - Rev 3
BLE fácil de muy baja potencia en Arduino Parte 2 - Monitor de temperatura / humedad - Rev 3
BLE fácil de muy baja potencia en Arduino Parte 2 - Monitor de temperatura / humedad - Rev 3

Actualización: 23 de noviembre de 2020 - Primer reemplazo de 2 pilas AAA desde el 15 de enero de 2019, es decir, 22 meses para 2xAAA Alkaline Actualización: 7 de abril de 2019 - Rev 3 de lp_BLE_TempHumidity, agrega gráficos de fecha / hora, usando pfodApp V3.0.362 +, y aceleración automática al enviar datos

Actualización: 24 de marzo de 2019 - Rev 2 de lp_BLE_TempHumidity, agrega más opciones de trama e i2c_ClearBus

Este instructable, un monitor de humedad de temperatura de muy baja potencia, es la parte 2 de 3.

Parte 1 - Construcción de dispositivos BLE de muy baja potencia de forma fácil con las cubiertas de Arduino que configuran Arduino para codificar dispositivos de baja potencia nRF52, el módulo de programación y la medición de la corriente de suministro. También cubre temporizadores y comparadores especializados de baja potencia y entradas antirrebote y el uso de pfodApp para conectarse y controlar el dispositivo nRF52.

Parte 2 - Un monitor de humedad de temperatura de muy baja potencia, este cubre el uso de un módulo Redbear Nano V2 y un sensor de temperatura / humedad Si7021 para construir una batería de baja potencia / monitor solar. También cubre la modificación de la biblioteca Si7021 para que sea de bajo consumo, el ajuste del dispositivo BLE para reducir su consumo de corriente de <25uA y el diseño de una pantalla personalizada de temperatura / humedad para su móvil.

Parte 3 - Un reemplazo de Redbear Nano V2 cubre el uso de otros módulos basados en nRF52 en lugar del Nano V2. Cubre la selección de los componentes de suministro, la construcción, la eliminación de la protección de programación del chip nRF52, el uso de pines NFC como GPIO normal y la definición de una nueva placa nRF52 en Arduino.

Este instructivo es una aplicación práctica de la Parte 1 Construyendo dispositivos BLE de muy baja potencia facilitados con Arduino mediante la construcción de un monitor de temperatura y humedad BLE de muy baja potencia. El monitor funcionará durante años con Coin Cell o 2 pilas AAA, incluso más con asistencia solar. Este tutorial cubre el ajuste de los parámetros BLE para un bajo consumo de energía y cómo alimentar su dispositivo con batería O batería + solar O solo solar.

Además de mostrar la temperatura y la humedad actuales, el monitor almacena las últimas 36 horas de lecturas de 10 minutos y los últimos 10 días de lecturas por hora. Estos se pueden graficar en su dispositivo móvil Android y los valores se pueden guardar en un archivo de registro. No se requiere programación de Android, pfodApp se encarga de todo eso. La pantalla y los gráficos de Android están completamente controlados por su boceto de Arduino, por lo que puede personalizarlo según sea necesario.

Se utiliza una placa Redbear Nano V2 para el componente nRF52832 BLE y una placa de conexión Sparkfun Si7021 para el sensor de temperatura / humedad. Se utiliza una biblioteca de baja potencia modificada con el Si7021. Se diseñó una pequeña placa de circuito impreso para contener el NanoV2 y suministrar componentes. Sin embargo, dado que no se utilizan componentes de montaje en superficie, puede construirlo fácilmente en la placa vero. Se cubren tres versiones de fuente de alimentación. i) Batería más asistencia solar, ii) Solo batería, iii) Solo solar. La opción Solar Only no tiene almacenamiento de batería y, por lo tanto, solo se ejecutará cuando haya algo de luz. Basta con una luz luminosa para la habitación o una lámpara de escritorio.

Esquema

Este proyecto tiene 4 partes relativamente independientes: -

  1. Selección y construcción de componentes
  2. Código: biblioteca de sensores de baja potencia, interfaz de usuario y boceto de Arduino
  3. Medición de la corriente de suministro y la vida útil de la batería
  4. Alternativas de suministro: asistencia solar, solo batería, solo solar

Paso 1: selección de componentes

Selección de componentes

Como se mencionó en la Parte 1: el truco para obtener una solución de bajo consumo de energía es no hacer nada la mayor parte del tiempo, minimizar la corriente a través de resistencias externas pull-up / pull-down en las entradas y no tener ningún componente adicional. Este proyecto utilizará cada uno de esos trucos para obtener una solución de bajo consumo.

El componente nRF52832

El chip nRF52832 puede funcionar con una fuente de alimentación de entre 1,7 V y 3,6 V (voltaje máximo absoluto 3,9 V). Esto significa que puede alimentar el chip directamente desde una celda de moneda o 2 pilas AAA. Sin embargo, es prudente agregar un regulador de voltaje para proteger el chip de sobrevoltios. Este componente adicional tiene un costo de energía, pero en el caso de la placa NanoV2, el regulador integrado, TLV704, consume menos de 5.5uA como máximo, típicamente solo 3.4uA. Para este pequeño uso adicional de energía, obtiene protección para entradas de suministro de hasta 24 V.

El componente Si7021

El propio sensor Si7021 consume típicamente <1uA cuando no está tomando una medición, es decir, en espera, y hasta 4mA cuando transmite los datos a través de I2C. Dado que no tomamos medidas continuamente, los 4 mA no son una parte significativa de la corriente de suministro promedio. Tomar una lectura de 30 segundos agrega menos de 1uA a la corriente de suministro promedio; consulte las medidas de corriente de suministro a continuación.

Hay dos placas de conexión Si7021 disponibles. Uno de Adafruit y otro de Sparkfun. Un vistazo rápido a los dos tableros le dirá que el tablero Adafruit tiene muchos más componentes que el tablero Sparkfun, por lo que estaría inclinado a elegir el tablero Sparkfun. Al observar los esquemas de cada placa, se muestra que la placa Sparkfun es solo el sensor desnudo y dos resisotores pullup de 4k7, mientras que la placa Adafruit tiene un regulador MIC5225 integrado que normalmente consume 29uA todo el tiempo. Esto es significativo cuando la corriente total para el resto del circuito es <30uA. Como ya tenemos un regulador para el chip nRF52832, este componente adicional no es necesario y el Si7021 se puede alimentar con esa fuente de 3.3V. Entonces, este proyecto utilizará la placa de conexión Si7021 de Sparkfun.

minimizar la corriente a través de resistencias pull-up / pull-down externas en las entradas

Las resistencias pullup 4K7 I2C no tienen un valor particularmente alto y consumirán 0.7mA cuando se bajen. Esto sería un problema si estuvieran en una entrada de interruptor que estuvo conectada a tierra durante períodos prolongados. Sin embargo, en este proyecto, la corriente a través de estas resistencias se minimiza utilizando solo la interfaz I2C con poca frecuencia y por poco tiempo. La mayoría de las veces, las líneas I2C no están en uso y están en estado alto / triestado, por lo que no fluye corriente a través de estas resistencias.

Paso 2: construcción

Construcción
Construcción
Construcción
Construcción
Construcción
Construcción

El proyecto se construye en una pequeña placa de circuito impreso, pero como no hay componentes SMD, se puede construir con la misma facilidad utilizando la placa vero. El PCB fue fabricado por pcbcart.com a partir de estos archivos Gerber, TempHumiditySensor_R1.zip El PCB es de propósito general suficiente para ser utilizado en otros proyectos BLE.

El esquema se muestra arriba. Aquí hay una versión en pdf.

Lista de partes

Costo aproximado por unidad a diciembre de 2018, ~ US $ 62, excluyendo el envío y el programador de la Parte 1

  • Redbear NanoV2 ~ US $ 17
  • Tablero de ruptura Sparkfun Si7021 ~ US $ 8
  • 2 x 53 mm x 30 mm 0,15 W 5 V células solares, p. Ej. Sobrevuelo ~ US $ 1.10
  • 1 x PCB TempHumiditySensor_R1.zip ~ US $ 25 por 5 de descuento en www.pcbcart.com O placa Vero (tira de cobre) p. Ej. Jaycar HP9540 ~ 5 dólares australianos
  • 2 diodos Schottky 1N5819, p. Ej. Digikey 1N5819FSCT-ND ~ 1 dólar estadounidense
  • 1 x 470R 0,4 W 1% de resistencia, p. Ej. Digikey BC3274CT-ND ~ Nosotros $ 0,25
  • 6 pines de cabezal macho de 6 pines, p. Ej. Sparkfun PRT-00116 ~ Nosotros $ 1,5
  • saltador de mujer a mujer, p. ej. Identificación de Adafruit: 1950 ~ US $ 2
  • Tornillos de nailon de 3 mm x 12 mm, p. Ej. Jaycar HP0140 ~ AUD $ 3
  • Tuercas de nailon de 3 mm x 12 mm, p. Ej. Jaycar HP0146 ~ 3 AUD
  • Cinta de montaje permanente Scotch Cat 4010 p. Ej. desde Amazon ~ US $ 6.6
  • Soporte para pilas AAA x 2, p. Ej. Sparkfun PRT-14219 ~ Nosotros $ 1,5
  • 2 pilas alcalinas AAA de 750 mA, p. Ej. Sparkfun PRT-09274 ~ US $ 1.0 Estas baterías deberían durar> 2 años. Las pilas alcalinas Energizer tienen mayor capacidad
  • Caja de plástico (ABS) 83 mm x 54 mm x 31 mm, p. Ej. Jaycar HB6005 ~ 3 AUD
  • pfodApp ~ US $ 10
  • 1 condensador ESR bajo de 22 uF 63 V (opcional), p. Ej. Jaycar RE-6342 ~ AUD $ 0.5 o Digikey P5190-ND ~ US $ 0.25

La construcción es sencilla. El soporte de la batería y las células solares están asegurados a la caja de plástico con cinta adhesiva de doble cara resistente.

Tenga en cuenta el cable de enlace de tierra desde CLK a GND en la pieza terminada. Esto se instala DESPUÉS de la programación para evitar que el ruido en la entrada CLK active el chip nRF52 en un modo de depuración de alta corriente

Paso 3: Código: biblioteca de sensores de baja potencia, interfaz de usuario y boceto de Arduino

Código: biblioteca de sensores de baja potencia, interfaz de usuario y boceto de Arduino
Código: biblioteca de sensores de baja potencia, interfaz de usuario y boceto de Arduino
Código: biblioteca de sensores de baja potencia, interfaz de usuario y boceto de Arduino
Código: biblioteca de sensores de baja potencia, interfaz de usuario y boceto de Arduino
Código: biblioteca de sensores de baja potencia, interfaz de usuario y boceto de Arduino
Código: biblioteca de sensores de baja potencia, interfaz de usuario y boceto de Arduino

Descargue el código comprimido, lp_BLE_TempHumidity_R3.zip, y descomprímalo en su directorio Arduino Sketches. También debe instalar la biblioteca lp_So7021 desde este archivo zip y también instalar la biblioteca pfodParser.

Biblioteca de sensores de baja potencia, lp_Si7021

Tanto Adafruit como Sparkfun proporcionan bibliotecas de soporte para acceder al sensor Si7021, sin embargo, ambas bibliotecas no son adecuadas para un uso muy bajo de energía. Ambos usan un retraso (25) en el código para retrasar la lectura del sensor mientras toma su medida. Como se señaló en la Parte 1, las demoras son malas. El retardo de Arduino () simplemente mantiene el microprocesador funcionando usando energía mientras espera que el retardo se agote. Esto rompe la primera regla de BLE de baja potencia, no haga nada la mayor parte del tiempo. La biblioteca lp_Si7021 de reemplazo reemplaza todos los retrasos con lp_timers que ponen el microprocesador en suspensión mientras espera que el sensor termine su medición.

¿Qué diferencia hace la biblioteca lp_Si7021? Usando la biblioteca de soporte SparkFun Si7021 original y tomando una lectura por segundo sin impresiones en serie, dibuja un promedio de ~ 1.2mA. Reemplazar la biblioteca Sparkfun con la biblioteca lp_Si7021 reduce la corriente promedio a ~ 10uA, es decir, 100 veces menos. En este proyecto, la tasa de medición más rápida es una vez cada 30 segundos cuando el móvil está conectado, lo que da como resultado una corriente media del sensor de menos de 1uA. Cuando no hay conexión BLE, la velocidad de medición es una vez cada 10 minutos y la corriente de suministro promedio del sensor es insignificante.

Interfaz de usuario

Arriba está la visualización de la pantalla principal y una vista ampliada del historial horario de 10 días. Los gráficos se pueden ampliar y desplazar en ambas direcciones con dos dedos.

La interfaz de usuario se codifica en el boceto de Arduino y luego se envía a pfodApp en la primera conexión donde se almacena en caché para uso repetido y actualizaciones. La pantalla gráfica se construye a partir de primitivas de dibujo. Consulte Controles Arduino personalizados para Android para obtener un tutorial sobre cómo crear sus propios controles. Los archivos Thermometer, RHGauge y Button contienen los comandos de dibujo para esos elementos.

Nota: Ninguno si esta pantalla está integrada en pfodApp. Toda la pantalla está completamente controlada por el código en su boceto de Arduino

El método sendDrawing_z () en el esquema lp_BLE_TempHumidity_R3.ino define la interfaz de usuario.

void sendDrawing_z () {dwgs.start (50, 60, dwgs. WHITE); // el fondo por defecto es BLANCO si se omite, es decir, inicio (50, 60); parser.sendRefreshAndVersion (30000); // volver a solicitar dwg cada 30 segundos. esto se ignora si no se ha configurado ninguna versión del analizador // toque los botones de arriba para forzar las actualizaciones de visualización dwgs.touchZone (). cmd ('u'). size (50, 39).send (); dwgs.pushZero (35, 22, 1,5); // mover cero al centro de dwg a 35, 22 y escalar en 1,5 veces rhGauge.draw (); // dibuja el control dwgs.popZero (); dwgs.pushZero (18, 33); // mover cero al centro de dwg a 18, 33 escala es 1 (predeterminado) thermometer.draw (); // dibuja el control dwgs.popZero ();

dwgs.pushZero (12,5, 43, 0,7); // mover cero al centro de dwg a 12.5, 43 y escalar en 0.7

hrs8PlotButton.draw (); // dibuja el control dwgs.popZero (); dwgs.pushZero (37,5, 43, 0,7); // mover cero al centro de dwg a 37.5, 43 y escalar en 0.7 días1PlotButton.draw (); // dibuja el control dwgs.popZero ();

dwgs.pushZero (12,5, 54, 0,7); // mover cero al centro de dwg a 12.5, 54 y escalar en 0.7

days3PlotButton.draw (); // dibuja el control dwgs.popZero (); dwgs.pushZero (37,5, 54, 0,7); // mover cero al centro de dwg a 37.5, 54 y escalar en 0.7 días10PlotButton.draw (); // dibuja el control dwgs.popZero (); dwgs.end (); }

Los comandos pushZero cambian el origen y la escala para dibujar el siguiente componente. Esto le permite cambiar fácilmente el tamaño y la posición de los botones e indicadores.

En la primera conexión, la pantalla inicial tarda 5 o 6 segundos en descargar los ~ 800 bytes que definen la pantalla. pfodApp almacena en caché la pantalla, por lo que las actualizaciones futuras solo necesitan enviar los cambios, las posiciones de los indicadores y las lecturas. Estas actualizaciones solo tardan un par de segundos en enviar los 128 bytes necesarios para actualizar la pantalla.

Hay cinco (5) zonas táctiles activas definidas en la pantalla. Cada botón tiene uno definido en su método draw (), por lo que puede hacer clic en él para abrir el gráfico respectivo, y la mitad superior de la pantalla se configura como la tercera zona táctil.

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

Cuando hace clic en la pantalla sobre los botones, el comando 'u' dwg se envía a su boceto para forzar una nueva medición y actualización de pantalla. Normalmente, cuando está conectado, las actualizaciones solo ocurren cada 30 segundos. Cada clic o actualización del dibujo fuerza una nueva medición. La respuesta del boceto de Arduino a pfodApp se retrasa hasta que se completa la nueva medición (~ 25 mS) para que se pueda enviar el último valor en la actualización.

Bosquejo de Arduino

El boceto de Arduino, lp_BLE_TempHumidity_R3.ino, es una versión mejorada del boceto de ejemplo utilizado en la Parte 1. El boceto lp_BLE_TempHumidity_R3.ino reemplaza el menú con el dibujo que se muestra arriba. También agrega el soporte del sensor lp_Si7021 y matrices de datos para almacenar las mediciones históricas de 10 minutos y por hora.

La principal complicación en el boceto lp_BLE_TempHumidity_R3.ino es manejar el envío de los datos de la trama. A medida que se realizan las mediciones, readRHResults () se encarga de recopilar los resultados y guardarlos en las matrices históricas. Las matrices tienen una longitud de 120, pero cuando se envían los datos, los primeros 30 puntos de datos son para un intervalo de tiempo más fino.

Hay algunos puntos que se deben tener en cuenta al enviar los 200 puntos de trazado impares para mostrar: -

  1. Cada punto de datos tiene ~ 25 bytes de longitud, en formato de texto CSV. Entonces 150 puntos son 3750 bytes de datos. La clase lp_BLESerial tiene un búfer de 1536 bytes, 1024 de los cuales son lo suficientemente grandes para el mensaje pfod más grande. Los otros 512 bytes están reservados para enviar los datos. Una vez que los datos históricos han llenado los 512 bytes, el envío de más datos se retrasa hasta que haya espacio en el búfer.
  2. Para evitar que los datos del gráfico ralenticen las actualizaciones de la pantalla principal, los datos del gráfico solo se envían mientras se muestra la pantalla del gráfico. Una vez que el usuario vuelve a la pantalla principal, se detiene el envío de los datos del gráfico. El envío de los datos de la gráfica se reanuda cuando el usuario hace clic en el botón de la gráfica para mostrar la gráfica nuevamente.
  3. Las gráficas históricas comienzan desde 0 (ahora) y retroceden en el tiempo. Si no ha habido una nueva medición desde que se mostró el último gráfico, los datos anteriores que ya se descargaron se muestran nuevamente inmediatamente. Si hay una nueva medición, se agrega a los datos de la gráfica anterior.
  4. Cuando el monitor se enciende por primera vez, no hay lecturas históricas y 0 se almacena en las matrices como una lectura no válida. Cuando se muestra el gráfico, las lecturas no válidas simplemente se omiten, lo que resulta en un gráfico más corto.

Celsius y Fahrenheit

El boceto lp_BLE_TempHumidity_R3.ino muestra y traza los datos en grados Celsius. Para convertir los resultados a Fahrenheit, reemplace todas las apariciones de

parser.print (sensor. Temp_RawToFloat (..

con

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

Y reemplace el símbolo unicode degC en Octal / 342 / 204 / 203 con el símbolo degF / 342 / 204 / 211

pfodApp mostrará cualquier Unicode que pueda mostrar su dispositivo móvil.

Consulte Uso de caracteres no ASCII en Arduino para obtener más detalles. También cambie la configuración MIN_C, MAX_C en Thermometer.h. Finalmente, ajuste los límites de la trama como desee, p. Ej. cambiar | Temp C ~ 32 ~ 8 ~ deg C |

decir

| Temperatura F ~ 90 ~ 14 ~ grados F |

Paso 4: medición de la corriente de suministro

Medición de la corriente de suministro
Medición de la corriente de suministro

Usando la biblioteca lp_Si7021, incluso tomar una medición de temperatura / humedad cada 10 segundos solo contribuye ~ 1uA a la corriente de suministro promedio, por lo que el factor principal en la corriente de suministro y, por lo tanto, la duración de la batería es la corriente utilizada por la publicidad BLE y la conexión y transmisión de datos..

Conecte la placa de Temperatura / Humedad al Programador descrito en la Parte 1 como se muestra arriba.

Con las celdas solares y las baterías desconectadas, Vin y Gnd se conectan al Vdd y Gnd del programador (los cables amarillo y verde) y el SWCLK y SWDIO se conectan al Clk y SIO de la placa de cabecera del programador (los cables azul y rosa)

Ahora puede programar NanoV2 y medir la corriente de suministro como se describe en la Parte 1.

Instale la biblioteca Si7021 de bajo consumo de este archivo zip, lp_Si7021.zip e instale la biblioteca pfodParser y descomprima lp_BLE_TempHumidity_R3.zip en su directorio de bocetos Arduino y programe la placa Temp / Humditiy con lp_BLE_TempHumidity_R3.ino

Como se mencionó anteriormente, la contribución del sensor es <1uA, promedio, a la tasa de medición más alta utilizada en este proyecto, por lo que los parámetros de conexión y publicidad BLE son el factor determinante para la vida útil de la batería.

Los parámetros de conexión y publicidad BLE que afectan el consumo de corriente son: -Tx Potencia, Intervalo de publicidad, Intervalos de conexión máxima y mínima y Latencia del esclavo.

Nota: Usando las conexiones anteriores, hay dos (2) reguladores en el suministro, uno en la placa NanoV2 a través de Vin y el MAX8881 en el suministro del programador. Esto significa que las corrientes de suministro medidas serán ~ 5uA más altas que las reales, debido al segundo regulador. Los valores que se indican a continuación son las corrientes medidas menos estos 5uA adicionales.

Poder TX

Los efectos Tx Power suministran corriente tanto cuando están conectados como cuando se anuncian (no conectados). Este proyecto utiliza la configuración de potencia máxima (+4) y proporciona el mejor rango y la mayor inmunidad al ruido para las conexiones más confiables. Puede usar el método lp_BLESerial setTxPower () para cambiar la configuración de energía. Los valores válidos son, en potencia creciente, -40, -30, -20, -16, -12, -8, -4, 0 +4. Debe llamar al método lp_BLESerial begin () ANTES de llamar a setTxPower (). Vea el boceto de lp_BLE_TempHumidity_R3.ino.

Puede experimentar con la reducción de Tx Power, pero el compromiso es un rango más corto y más interrupciones de la conexión debido a la interferencia. En este proyecto, Tx Power se deja en su valor predeterminado, +4. Como verá a continuación, incluso con esta configuración, todavía es posible una corriente de suministro muy baja.

Intervalo de publicidad

Para una potencia Tx dada, cuando no hay conexión, el intervalo de publicidad establece el consumo de corriente promedio. El rango recomendado es de 500 a 1000 mS. Aquí se utilizó 2000mS. El compromiso es que los intervalos publicitarios más largos significan que es más lento para su móvil encontrar el dispositivo y establecer una conexión. Internamente, los intervalos de publicidad se establecen en múltiplos de 0,625 mS en el rango de 20 mS a 10,24 s. El método lp_BLESerial setAdvertisingInterval () toma mS como argumento, por conveniencia. Para +4 TxPower e intervalo de publicidad de 2000mS, el consumo de corriente fue ~ 18uA. Para el intervalo de publicidad de 1000 mS, fue ~ 29uA. Rev 2 usó un intervalo de publicidad de 2000 ms, pero esto resultó en conexiones lentas. Rev 3 cambió a un intervalo de publicidad de 1000 mS para que las conexiones sean más rápidas.

Intervalos de conexión máximos y mínimos

Una vez que se establece una conexión, el intervalo de conexión determina la frecuencia con la que el móvil se pone en contacto con el dispositivo. El lp_BLESerial setConnectionInterval () le permite establecer el máximo y el mínimo sugeridos, sin embargo, el móvil controla cuál es realmente el intervalo de conexión. Por conveniencia, los argumentos de setConnectionInterval () están en mS, pero internamente los intervalos de conexión están en múltiplos de 1.25 mS, en el rango de 7.5 mS a 4 segundos.

La configuración predeterminada es setConnectionInterval (100, 150), es decir, un mínimo de 100 mS a un máximo de 150 mS. El aumento de estos valores reduce la corriente de suministro mientras está conectado, pero el compromiso es una transmisión de datos más lenta. Cada actualización de la pantalla toma alrededor de 7 mensajes BLE, mientras que 36 horas completas de mediciones de 10 minutos toman alrededor de 170 mensajes BLE. Por lo tanto, aumentar los intervalos de conexión ralentiza las actualizaciones de la pantalla y se muestra el gráfico.

La clase lp_BLESerial tiene un búfer de envío de 1536 bytes y solo envía un bloque de 20 bytes desde este búfer, cada intervalo máximo de conexión para evitar inundar el enlace BLE con datos. Además, al enviar datos de trazado, el boceto solo envía datos hasta que 512 bytes estén esperando ser enviados y luego retrasa el envío de más datos hasta que se hayan enviado algunos datos. Esto evita la saturación del búfer de envío. Esta limitación de los envíos hace que la transmisión de datos al móvil sea confiable, pero no está optimizada para un rendimiento máximo.

En este proyecto, los intervalos de conexión se dejaron como valores predeterminados.

Latencia de esclavo

Cuando no hay datos para enviar al móvil, el dispositivo puede, opcionalmente, ignorar algunos de los mensajes de conexión del móvil. Esto ahorra Tx Power y suministro de corriente. La configuración de Latencia de esclavo es la cantidad de mensajes de conexión que se deben ignorar. El valor predeterminado es 0. El método lp_BLESerial setSlaveLatency () se puede utilizar para cambiar esta configuración.

La latencia de esclavo predeterminada de 0 proporcionó una corriente de suministro de ~ 50uA, ignorando las actualizaciones de pantalla cada 30 segundos, pero incluyendo los mensajes keepAlive cada 5 segundos. Al establecer la latencia del esclavo en 2, se obtuvo una corriente de suministro conectada promedio de ~ 25uA. Un ajuste de latencia de esclavo de 4 dio ~ 20uA. Los ajustes más altos no parecían reducir la corriente de suministro, por lo que se utilizó un ajuste de latencia esclava de 4.

Cuando está conectado, cada 30 segundos pfodApp solicita una actualización de pantalla. Esto fuerza una medición del sensor y envía datos para actualizar la pantalla gráfica. Esta actualización da como resultado ~ 66uA extra durante 2 segundos cada 30 segundos. Eso es un promedio de 4.4uA durante los 30 segundos. Agregando esto a los 20uA, se obtiene una corriente de suministro de conexión promedio de ~ 25uA

Paso 5: Corriente de suministro total y duración de la batería

Usando la configuración anterior, según lo establecido en lp_BLE_TempHumidity_R3.ino, la corriente de suministro total cuando está conectado y actualizando la pantalla cada 30 segundos, aproximadamente 25uA. Cuando no está conectado, es de aproximadamente 29uA.

Para calcular la duración de la batería, se supone un consumo de corriente continuo de ~ 29uA.

Varias baterías tienen diferentes capacidades y características de voltaje. Las baterías consideradas aquí son de celda de moneda CR2032, celda de moneda CR2450 (N), 2 x AAA alcalinas, 2 x AAA de litio y LiPo.

Resumen de la batería

Si usa Solar Assist, agregue un 50% a estas cifras de duración de la batería (asumiendo 8 horas de luz al día)

Nota: El condensador 22uF LowESR (C1), además del condensador NanoV2 22uF integrado, almacena la corriente de la celda solar y luego la suministra para los pulsos de corriente TX. De lo contrario, la batería suministra algo de la corriente TX. Este LowESR adicional de 22uF agrega aproximadamente un 10% a la corriente de la batería cuando la celda solar no es el suministro, pero también extiende la vida útil de la batería al compensar el aumento de la resistencia interna de la batería a medida que la batería llega al final de su vida útil. Las siguientes medidas se tomaron SIN el condensador adicional de 22uF.

CR2032 - 235mAHr - duración de la batería 10 meses CR2450 (N) - 650mAHr (540mAHr) - duración de la batería 2,3 años (2 años) 2 x AAA alcalinas - 1250mAHr - duración de la batería 3,8 años 2 x AAA de litio - 1200mAHr - duración de la batería 4,7 años LiPo recargable - no recomendado debido a la alta autodescarga.

CR2032

Esta celda de botón tiene una capacidad típica de 235 mAHr (batería energizante), un voltaje nominal de 3 V y un voltaje de descarga especificado de 2 V. Esto implica una duración de la batería de 8100 horas o ~ 0,9 años. Sin embargo, la resistencia de la celda interna aumenta a medida que la batería llega al final de su vida útil y, por lo tanto, es posible que no pueda proporcionar los pulsos de corriente de Tx máximos. Se puede usar un capacitor de suministro más grande para reducir este efecto, pero digamos 10 meses de vida útil.

CR2450 (N)

Esta celda de botón tiene una capacidad típica de 620 mAHr (540 mAHr para CR2450N), un voltaje nominal de 3V y un voltaje de descarga especificado de 2V. Esto implica una duración de la batería de 22, 400 horas o ~ 2 años 6 m (18600 horas ~ 2 años 2 m para CR2450N). Sin embargo, la resistencia de la celda interna aumenta a medida que la batería llega al final de su vida útil y, por lo tanto, es posible que no pueda proporcionar los pulsos de corriente de Tx máximos. Se puede usar un condensador de suministro más grande para reducir este efecto, pero digamos que la vida útil es de 2 años 4 m (2 años N).

Nota: La versión CR2450N tiene un borde más grueso que ayuda a evitar una instalación incorrecta en un soporte CR2450N. Puede insertar una celda CR2450N y CR2450 en un soporte CR2450, pero no puede insertar una celda CR2450 en un soporte CR2450N

2 pilas alcalinas AAA

Estas baterías tienen una capacidad de aproximadamente 1250mAHr (Batería Energizer) para corrientes muy bajas, un voltaje nominal de 2x1.5V = 3V y un voltaje de descarga especificado de 2x0.8V = 1.6V. Pero este voltaje de descarga especificado es menor que el voltaje de operación del sensor Si7021 (1.9V) por lo que la batería solo se puede usar hasta ~ 1V cada una. Esto reduce la capacidad entre un 10% y un 15%, es decir, ~ 1000 mAHr.

Esto implica una duración de la batería de 34, 500 horas o ~ 4 años. Sin embargo, la resistencia de la celda interna aumenta a medida que la batería llega al final de su vida útil y, por lo tanto, es posible que no pueda proporcionar los pulsos de corriente de Tx máximos. Se puede usar un condensador de suministro más grande para reducir este efecto, pero digamos que tiene una vida útil de 3 años y 10 m. Nota Las pilas alcalinas tienen una autodescarga del 2% al 3% anual.

2 x pilas de litio AAA

Estas baterías tienen una capacidad de aproximadamente 1200mAHr (Batería Energizer), un voltaje nominal de 2x1.7V = 3.4V, a bajas corrientes, y un voltaje descargado de 2x1.4V = 2.4V. Esto implica una duración de la batería de 41, 400 horas o 4 años 8 m.

Batería recargable LiPo

Estas baterías vienen en varias capacidades desde 100mAHr hasta 2000mAHr, en formatos planos, y tienen un voltaje de carga de 4.2V y un voltaje de descarga de> 2.7V. Sin embargo, tienen una alta autodescarga de 2% -3% / mes (es decir, 24% a 36% por año) y, por lo tanto, no son tan adecuadas para esta aplicación como las otras baterías.

Paso 6: Alternativas de suministro: asistencia solar, solo batería, solo solar

Alternativas de suministro: asistencia solar, solo batería, solo solar
Alternativas de suministro: asistencia solar, solo batería, solo solar
Alternativas de suministro: asistencia solar, solo batería, solo solar
Alternativas de suministro: asistencia solar, solo batería, solo solar
Alternativas de suministro: asistencia solar, solo batería, solo solar
Alternativas de suministro: asistencia solar, solo batería, solo solar
Alternativas de suministro: asistencia solar, solo batería, solo solar
Alternativas de suministro: asistencia solar, solo batería, solo solar

Batería más asistencia solar

La construcción anterior utiliza el suministro de batería más asistencia solar. Cuando los paneles solares generan más voltaje que el voltaje de la batería, las células solares alimentarán el monitor, extendiendo así la vida útil de la batería. Por lo general, la vida útil de la batería se puede extender en otro 50%.

Los paneles solares utilizados son pequeños, 50 mm x 30 mm, baratos, ~ $ 0,50 y de baja potencia. Son, nominalmente, paneles de 5V, pero necesitan luz solar directa y brillante para generar 5V. En este proyecto, dos paneles están conectados en serie de modo que colocar el monitor en algún lugar cerca de una ventana, fuera de la luz solar directa, sea suficiente para reemplazar la energía de la batería. Incluso una habitación bien iluminada, o una lámpara de escritorio, es suficiente para que las células solares generen> 3.3V a> 33uA y sustituyan a la batería.

Se construyó un panel de prueba simple para determinar dónde se podría colocar el monitor de temperatura / humedad, fuera del sol y aún con energía solar. Como puede ver en la foto de arriba, los dos paneles conectados a una resistencia de 100K producen 5.64V a través de los 100K, es decir, 56uA de corriente a 5.64V. Esto es más que suficiente para poder alimentar el monitor con la batería. Cualquier lectura de voltaje por encima del voltaje nominal de la batería de 3 V significa que las células solares alimentarán el monitor en lugar de la batería.

Los dos diodos en el circuito del monitor de temperatura y humedad aíslan las células solares y las baterías entre sí y evitan que se conecten en polaridad inversa. El resistor de la serie Zener y 470R de 10V 1W protege el regulador a bordo del NanoV2 de la sobretensión de dos celdas solares a pleno sol, especialmente si se utilizan celdas de 12V en lugar de las de 5V. En funcionamiento normal a <5V, el zener de 10V solo consume ~ 1uA.

Solo batería

Para un suministro solo de batería, simplemente omita R1, D1 y D3 y las células solares. También puede reemplazar D1 con un trozo de cable si no desea protección de polaridad inversa.

Solo solar

Alimentar el monitor solo con celdas solares, sin batería, requiere un circuito de suministro de energía diferente. El problema es que mientras que el monitor funcionará con 29uA, al encender el nRF52 consume ~ 5mA durante 0.32 seg. El circuito que se muestra arriba (versión pdf) mantiene el regulador MAX8881 apagado hasta que los capacitores de entrada, 2 x 1000uF, se cargan hasta 4.04V. Luego, el MAX6457 libera la entrada MAX8881 SHDN para encender el nRF52 (NanoV2) Los condensadores de 2 x 1000uF suministran la corriente de arranque necesaria.

Esto permite que el monitor se encienda tan pronto como haya suficiente energía solar para mantenerlo funcionando a 29uA.

Paso 7: Conclusión

Este tutorial ha presentado un monitor de temperatura y humedad alimentado por batería / energía solar como ejemplo de un proyecto BLE de muy baja potencia en Arduino para el chip nRF52832. Las corrientes de suministro de ~ 29uA se logran ajustando los parámetros de conexión. Esto resultó en una duración de la batería de celda de moneda CR2032 superior a 10 meses. Más largo para pilas de botón y baterías de mayor capacidad. Agregar dos celdas solares baratas extendió fácilmente la vida útil de la batería en un 50% o más. Una luz brillante en la habitación o una lámpara de escritorio es suficiente para alimentar el monitor con las células solares.

Se presentó un circuito de alimentación especial para permitir que el monitor funcione únicamente con células solares de baja capacidad.

El pfodDesigner gratuito le permite diseñar menús / submenús, trazar contra fecha / hora y registrar datos y luego generar el boceto de Arduino de bajo consumo para usted. Aquí se codificó una interfaz personalizada utilizando primitivas de dibujo pfodApp. La conexión con pfodApp muestra la interfaz de usuario y actualiza las lecturas mientras el monitor usa ~ 29uA

No se requiere programación de Android. pfodApp maneja todo eso.

Recomendado: