Table des matières:

BLE facile à très faible consommation dans Arduino Partie 2 - Moniteur de température/humidité - Rév 3: 7 étapes
BLE facile à très faible consommation dans Arduino Partie 2 - Moniteur de température/humidité - Rév 3: 7 étapes

Vidéo: BLE facile à très faible consommation dans Arduino Partie 2 - Moniteur de température/humidité - Rév 3: 7 étapes

Vidéo: BLE facile à très faible consommation dans Arduino Partie 2 - Moniteur de température/humidité - Rév 3: 7 étapes
Vidéo: Les poules peuvent vivre sans tête ! Le Saviez-vous ? 2024, Novembre
Anonim
BLE facile à très faible consommation dans Arduino Partie 2 - Moniteur de température/humidité - Rév 3
BLE facile à très faible consommation dans Arduino Partie 2 - Moniteur de température/humidité - Rév 3
BLE facile à très faible consommation dans Arduino Partie 2 - Moniteur de température/humidité - Rév 3
BLE facile à très faible consommation dans Arduino Partie 2 - Moniteur de température/humidité - Rév 3
BLE facile à très faible consommation dans Arduino Partie 2 - Moniteur de température/humidité - Rév 3
BLE facile à très faible consommation dans Arduino Partie 2 - Moniteur de température/humidité - Rév 3

Mise à jour: 23 novembre 2020 – Premier remplacement de 2 piles AAA depuis le 15 janvier 2019 soit 22 mois pour 2 piles alcalines AAA Mise à jour: 7 avril 2019 – Rév 3 de lp_BLE_TempHumidity, ajoute des tracés Date/Heure, en utilisant pfodApp V3.0.362+, et auto throttling lors de l'envoi Les données

Mise à jour: 24 mars 2019 – Rév 2 de lp_BLE_TempHumidity, ajoute plus d'options de tracé et i2c_ClearBus

Cette instructable, un moniteur d'humidité de température de très faible puissance, est la partie 2 sur 3.

Partie 1 - Construire des appareils BLE à très faible consommation en toute simplicité avec Arduino couvre la configuration d'Arduino pour coder les appareils à faible consommation nRF52, le module de programmation et la mesure du courant d'alimentation. Il couvre également les minuteries et les comparateurs spécialisés à faible consommation, les entrées anti-rebond et l'utilisation de pfodApp pour se connecter et contrôler le périphérique nRF52.

Partie 2 - Un moniteur d'humidité et de température à très faible puissance, celui-ci, couvre l'utilisation d'un module Redbear Nano V2 et d'un capteur de température/humidité Si7021 pour construire une batterie / moniteur solaire à faible consommation. Il couvre également la modification de la bibliothèque Si7021 pour qu'elle soit à faible consommation d'énergie, le réglage du périphérique BLE pour réduire sa consommation de courant de <25uA et la conception d'un affichage de température/humidité personnalisé pour votre mobile.

Partie 3 - Un remplacement Redbear Nano V2 utilise d'autres modules basés sur nRF52 au lieu du Nano V2. Il couvre la sélection des composants d'alimentation, la construction, la suppression de la protection de programmation de la puce nRF52, l'utilisation de broches NFC comme GPIO normales et la définition d'une nouvelle carte nRF52 dans Arduino.

Cette instructable est une application pratique de la partie 1 Construire des appareils BLE à très faible consommation en toute simplicité avec Arduino en construisant un moniteur de température et d'humidité BLE à très faible consommation. Le moniteur fonctionnera pendant des années avec une pile bouton ou 2 piles AAA, encore plus longtemps avec l'assistance solaire. Ce tutoriel couvre le réglage des paramètres BLE pour une faible consommation d'énergie et comment alimenter votre appareil à partir de la batterie OU de la batterie + solaire OU solaire uniquement.

En plus d'afficher la température et l'humidité actuelles, le moniteur stocke les 36 dernières heures de lectures de 10 minutes et les 10 derniers jours de lectures horaires. Ceux-ci peuvent être tracés sur votre mobile Android et les valeurs enregistrées dans un fichier journal. Aucune programmation Android n'est requise, pfodApp gère tout cela. L'affichage et la cartographie Android sont entièrement contrôlés par votre croquis Arduino afin que vous puissiez le personnaliser selon vos besoins.

Une carte Redbear Nano V2 est utilisée pour le composant BLE nRF52832 et une carte de dérivation Sparkfun Si7021 est utilisée pour le capteur de température/humidité. Une bibliothèque basse consommation modifiée est utilisée avec le Si7021. Un petit PCB a été conçu pour contenir le NanoV2 et les composants d'alimentation. Cependant, comme aucun composant monté en surface n'est utilisé, vous pouvez tout aussi facilement le construire sur une carte vero. Trois versions d'alimentation sont couvertes. i) Batterie plus assistance solaire, ii) Batterie uniquement, iii) Solaire uniquement. L'option Solaire uniquement n'a pas de stockage de batterie et ne fonctionnera donc que lorsqu'il y a un peu de lumière. Une lumière de chambre ou une lampe de bureau lumineuse est suffisante.

Contour

Ce projet comporte 4 parties indépendantes relatives:-

  1. Sélection et construction des composants
  2. Code - Bibliothèque de capteurs de faible puissance, interface utilisateur et croquis Arduino
  3. Mesure du courant d'alimentation et de la durée de vie de la batterie
  4. Alternatives d'approvisionnement - Assistance solaire, batterie uniquement, solaire uniquement

Étape 1: Sélection des composants

Sélection des composants

Comme mentionné dans la partie 1 – L'astuce pour obtenir une solution à très faible consommation d'énergie est de ne rien faire la plupart du temps, de minimiser le courant via des résistances pull-up/pull-down externes sur les entrées et de ne pas avoir de composants supplémentaires. Ce projet utilisera chacune de ces astuces pour obtenir une solution à faible consommation d'énergie.

Le composant nRF52832

La puce nRF52832 peut fonctionner avec une alimentation comprise entre 1,7 V et 3,6 V (tension maximale absolue de 3,9 V). Cela signifie que vous pouvez alimenter la puce directement à partir d'une pile bouton ou de 2 piles AAA. Cependant, il est prudent d'ajouter un régulateur de tension pour protéger la puce des surtensions. Ce composant supplémentaire a un coût d'alimentation, mais dans le cas de la carte NanoV2, le régulateur embarqué, TLV704, consomme moins de 5,5 uA max, généralement seulement 3,4 uA. Pour cette petite consommation d'énergie supplémentaire, vous bénéficiez d'une protection pour les entrées d'alimentation jusqu'à 24 V.

Le composant Si7021

Le capteur Si7021 lui-même consomme généralement <1uA lorsqu'il ne prend pas de mesure, c'est-à-dire en veille, et jusqu'à 4mA lors de la transmission des données via I2C. Comme nous ne prenons pas de mesure en continu, le 4 mA n'est pas une partie importante du courant d'alimentation moyen. Prendre une lecture toutes les 30 secondes ajoute moins de 1uA au courant d'alimentation moyen, voir les mesures de courant d'alimentation ci-dessous.

Il existe deux cartes de dérivation Si7021 facilement disponibles. Un d'Adafruit et un de Sparkfun. Un rapide coup d'œil aux deux cartes vous dira que la carte Adafruit a beaucoup plus de composants que la carte Sparkfun, vous seriez donc enclin à choisir la carte Sparkfun. L'examen des schémas de chaque carte montre que la carte Sparkfun n'est que le capteur nu et deux résistances de rappel 4k7, tandis que la carte Adafruit a un régulateur intégré, MIC5225, qui consomme généralement 29 uA tout le temps. Ceci est important lorsque le courant global pour le reste du circuit est <30uA. Comme nous avons déjà un régulateur pour la puce nRF52832, ce composant supplémentaire n'est pas nécessaire et le Si7021 peut être alimenté à partir de cette alimentation 3,3V. Ce projet utilisera donc la carte de dérivation Si7021 de Sparkfun.

minimiser le courant via des résistances pull-up/pull-down externes sur les entrées

Les résistances de rappel 4K7 I2C n'ont pas une valeur particulièrement élevée et consomment 0,7 mA lorsqu'elles sont abaissées. Ce serait un problème s'ils se trouvaient sur une entrée de commutateur mise à la terre pendant de longues périodes. Cependant, dans ce projet, le courant traversant ces résistances est minimisé en n'utilisant que rarement et pendant une courte période l'interface I2C. La plupart du temps, les lignes I2C ne sont pas utilisées et sont à haut / trois états, donc aucun courant ne traverse ces résistances.

Étape 2: Construction

Construction
Construction
Construction
Construction
Construction
Construction

Le projet est construit sur un petit PCB, mais comme il n'y a pas de composants SMD, il peut être tout aussi facilement construit à l'aide d'une carte vero. Le PCB a été fabriqué par pcbcart.com à partir de ces fichiers Gerber, TempHumiditySensor_R1.zip Le PCB est suffisamment polyvalent pour être utilisé pour d'autres projets BLE.

Le schéma est montré ci-dessus. Voici une version pdf.

Liste des pièces

Coût approximatif par unité en décembre 2018, ~ 62 $ US, hors frais d'expédition et du programmeur de la partie 1

  • Ours rouge NanoV2 ~ 17 $ US
  • Carte de dérivation Sparkfun Si7021 ~ 8 $ US
  • 2 cellules solaires 53 mm x 30 mm 0,15 W 5 V, par ex. Survol ~ 1,10 $ US
  • 1 x PCB TempHumiditySensor_R1.zip ~ 25 $ US pour 5 de réduction www.pcbcart.com OU carte Vero (bande de cuivre) par ex. Jaycar HP9540 ~ AUD$5
  • 2 diodes Schottky 1N5819, par ex. Digikey 1N5819FSCT-ND ~1 $ US
  • 1 x 470R 0.4W 1% résistance par ex. Digikey BC3274CT-ND ~0,25 $ US
  • 6 broches mâles à 6 broches, par ex. Sparkfun PRT-00116 ~1,5 $ US
  • cavalier femelle à femelle, par ex. ID Adafruit: 1950 ~ 2 $ US
  • Vis en nylon de 3 mm x 12 mm, par ex. Jaycar HP0140 ~ 3 AUD$
  • Écrous en nylon de 3 mm x 12 mm, par ex. Jaycar HP0146 ~ 3 AUD$
  • Ruban de montage permanent Scotch Cat 4010, par ex. d'Amazon ~6,6 $ US
  • Support de pile AAA x 2, par ex. Sparkfun PRT-14219 ~1,5 $ US
  • 2 piles alcalines AAA 750mA, par ex. Sparkfun PRT-09274 ~1,0 $ US Ces piles devraient durer > 2 ans. Les piles alcalines Energizer ont une capacité plus élevée
  • Boîte en plastique (ABS) 83 mm x 54 mm x 31 mm, par ex. Jaycar HB6005 ~ 3 AUD$
  • pfodApp ~10 $ US
  • 1 x condensateur faible ESR 22uF 63V (en option) par ex. Jaycar RE-6342 ~0,5 AUD ou Digikey P5190-ND ~0,25 USD

La construction est simple. Le support de batterie et les cellules solaires sont fixés à la boîte en plastique avec du ruban adhésif double face très résistant.

Notez le fil de liaison Gnd du CLK à GND dans la pièce finie. Ceci est installé APRÈS la programmation pour empêcher le bruit sur l'entrée CLK de déclencher la puce nRF52 dans un mode de débogage à courant élevé

Étape 3: Code - Bibliothèque de capteurs de faible puissance, interface utilisateur et croquis Arduino

Code - Bibliothèque de capteurs de faible puissance, interface utilisateur et croquis Arduino
Code - Bibliothèque de capteurs de faible puissance, interface utilisateur et croquis Arduino
Code - Bibliothèque de capteurs de faible puissance, interface utilisateur et croquis Arduino
Code - Bibliothèque de capteurs de faible puissance, interface utilisateur et croquis Arduino
Code - Bibliothèque de capteurs de faible puissance, interface utilisateur et croquis Arduino
Code - Bibliothèque de capteurs de faible puissance, interface utilisateur et croquis Arduino

Téléchargez le code zippé, lp_BLE_TempHumidity_R3.zip, et décompressez-le dans votre répertoire Arduino Sketches. Vous devez également installer la bibliothèque lp_So7021 à partir de ce fichier zip et également installer la bibliothèque pfodParser.

Bibliothèque de capteurs de faible puissance, lp_Si7021

Adafruit et Sparkfun fournissent tous deux des bibliothèques de support pour accéder au capteur Si7021, mais ces deux bibliothèques ne conviennent pas à une utilisation à très faible consommation d'énergie. Les deux utilisent un délai (25) dans le code pour retarder la lecture du capteur pendant qu'il prend sa mesure. Comme indiqué dans la partie 1, les retards sont mauvais. Le délai Arduino () maintient simplement le microprocesseur en fonctionnement en utilisant l'alimentation pendant qu'il attend que le délai expire. Cela enfreint la première règle du BLE basse consommation, ne rien faire la plupart du temps. La librairie de remplacement lp_Si7021, remplace tous les retards par des lp_timers qui mettent le microprocesseur en veille en attendant que le capteur termine sa mesure.

Quelle différence la bibliothèque lp_Si7021 fait-elle ? En utilisant la bibliothèque de prise en charge SparkFun Si7021 d'origine et en prenant une lecture par seconde sans aucune impression série, on obtient une moyenne d'environ 1,2 mA. Le remplacement de la librairie Sparkfun par la librairie lp_Si7021 réduit le courant moyen à ~10uA, soit 100 fois moins. Dans ce projet, le taux de mesure le plus rapide est une fois toutes les 30 secondes lorsque le mobile est connecté, ce qui se traduit par un courant de capteur moyen inférieur à 1 uA. Lorsqu'il n'y a pas de connexion BLE, la fréquence de mesure est d'une fois toutes les 10 minutes et le courant d'alimentation moyen du capteur est négligeable.

Interface utilisateur

Ci-dessus se trouve l'affichage de l'écran principal et une vue agrandie de l'historique horaire sur 10 jours. Les tracés peuvent être agrandis et panoramiques dans les deux sens, à l'aide de deux doigts.

L'interface utilisateur est codée dans l'esquisse Arduino, puis envoyée à pfodApp lors de la première connexion où elle est mise en cache pour une utilisation et des mises à jour répétées. L'affichage graphique est construit à partir de primitives de dessin. Voir Contrôles Arduino personnalisés pour Android pour un didacticiel sur la façon de créer vos propres contrôles. Les fichiers Thermometer, RHGauge et Button contiennent les commandes de dessin pour ces éléments.

Remarque: aucun si cet affichage est intégré à pfodApp. L'ensemble de l'affichage est entièrement contrôlé par le code de votre croquis Arduino

La méthode sendDrawing_z() dans l'esquisse lp_BLE_TempHumidity_R3.ino définit l'interface utilisateur.

void sendDrawing_z() { dwgs.start (50, 60, dwgs. WHITE); // l'arrière-plan par défaut est BLANC s'il est omis, c'est-à-dire start (50, 60); parser.sendRefreshAndVersion(30000); // redemande dwg toutes les 30 secondes. ceci est ignoré si aucune version d'analyseur n'est définie // touchez les boutons ci-dessus pour forcer les mises à jour d'affichage dwgs.touchZone().cmd('u').size(50, 39).send(); dwgs.pushZero(35, 22, 1.5); // déplace zéro au centre de dwg à 35, 22 et redimensionne 1,5 fois rhGauge.draw(); // dessine le contrôle dwgs.popZero(); dwgs.pushZero(18, 33); // déplace zéro au centre de dwg à 18, 33 échelle est 1 (par défaut) thermomètre.draw(); // dessine le contrôle dwgs.popZero();

dwgs.pushZero(12,5, 43, 0,7); // déplacer zéro au centre du dwg à 12,5, 43 et mettre à l'échelle de 0,7

hrs8PlotButton.draw(); // dessine le contrôle dwgs.popZero(); dwgs.pushZero (37,5, 43, 0,7); // déplacer zéro au centre du dwg à 37,5, 43 et mettre à l'échelle de 0,7 jours1PlotButton.draw(); // dessine le contrôle dwgs.popZero();

dwgs.pushZero(12,5, 54, 0,7); // déplacer zéro au centre du dwg à 12,5, 54 et mettre à l'échelle de 0,7

jours3PlotButton.draw(); // dessine le contrôle dwgs.popZero(); dwgs.pushZero (37,5, 54, 0,7); // déplacer zéro au centre du dwg à 37,5, 54 et mettre à l'échelle de 0,7 jours10PlotButton.draw(); // dessine le contrôle dwgs.popZero(); dwgs.end(); }

Les commandes pushZero modifient l'origine et l'échelle pour dessiner le composant suivant. Cela vous permet de modifier facilement la taille et la position des boutons et des jauges.

Lors de la première connexion, l'affichage initial prend 5 ou 6 secondes pour télécharger les ~800 octets qui définissent l'affichage. pfodApp met en cache l'affichage afin que les futures mises à jour n'aient qu'à envoyer les modifications, les positions de jauge et les lectures. Ces mises à jour ne prennent que quelques secondes pour envoyer les 128 octets nécessaires pour mettre à jour l'affichage.

Il y a cinq (5) zones tactiles actives définies dans l'affichage. Chaque bouton en a un défini dans sa méthode draw(), vous pouvez donc cliquer dessus pour ouvrir le tracé respectif, et la moitié supérieure de l'écran est configurée comme la troisième zone tactile

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

Lorsque vous cliquez sur l'écran au-dessus des boutons, la commande dwg 'u' est envoyée à votre croquis pour forcer une nouvelle mesure et une mise à jour de l'écran. Normalement, une fois connecté, les mises à jour ne se produisent que toutes les 30 secondes. Chaque clic ou rafraîchissement du dessin force une nouvelle mesure. La réponse de l'esquisse Arduino à pfodApp est retardée jusqu'à ce que la nouvelle mesure soit terminée (~25mS) afin que la dernière valeur puisse être envoyée dans la mise à jour.

Esquisse Arduino

L'esquisse Arduino, lp_BLE_TempHumidity_R3.ino, est une version améliorée de l'exemple d'esquisse utilisé dans la partie 1. L'esquisse lp_BLE_TempHumidity_R3.ino remplace le menu par le dessin ci-dessus. Il ajoute également la prise en charge du capteur lp_Si7021 et des matrices de données pour stocker les mesures historiques de 10 minutes et toutes les heures.

La principale complication dans l'esquisse lp_BLE_TempHumidity_R3.ino est de gérer l'envoi des données de tracé. Au fur et à mesure que les mesures sont effectuées, readRHResults() gère la collecte des résultats et leur sauvegarde dans les tableaux historiques. Les tableaux sont longs de 120 mais lorsque les données sont envoyées, les 30 premiers points de données sont destinés à un intervalle de temps plus fin.

Il y a quelques points à prendre en compte lors de l'envoi des 200 points de tracé impairs à afficher:-

  1. Chaque point de données mesure environ 25 octets, au format texte CSV. Ainsi, 150 points correspondent à 3750 octets de données. La classe lp_BLESerial a un tampon de 1536 octets, dont 1024 sont suffisamment grands pour le plus grand message pfod. Les 512 autres octets sont réservés à l'envoi des données. Une fois que les données historiques ont rempli les 512 octets, l'envoi de données supplémentaires est retardé jusqu'à ce qu'il y ait de la place dans la mémoire tampon.
  2. Pour éviter que les données de tracé ne ralentissent les mises à jour de l'affichage principal, les données de tracé ne sont envoyées que lorsque l'écran de tracé est affiché. Une fois que l'utilisateur revient à l'écran principal, l'envoi des données de tracé est interrompu. L'envoi des données de tracé reprend lorsque l'utilisateur clique sur le bouton de tracé pour afficher à nouveau le tracé.
  3. Les tracés historiques commencent à 0 (maintenant) et remontent dans le temps. S'il n'y a pas eu de nouvelle mesure depuis l'affichage du dernier tracé, les données précédentes déjà téléchargées s'affichent à nouveau immédiatement. S'il y a une nouvelle mesure, elle est ajoutée aux données de tracé précédentes.
  4. Lorsque le moniteur est mis sous tension pour la première fois, il n'y a pas de lecture historique et 0 est stocké dans les baies en tant que lecture invalide. Lorsque le tracé est affiché, les lectures invalides sont simplement ignorées, ce qui entraîne un tracé plus court.

Celsius et Fahrenheit

L'esquisse lp_BLE_TempHumidity_R3.ino affiche et trace les données en degrés Celsius. Pour convertir les résultats en Fahrenheit, remplacez toutes les occurrences de

parser.print(sensor. Temp_RawToFloat(..

avec

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

Et remplacez le symbole degC unicode dans Octal \342\204\203 par le symbole degF \342\204\211

pfodApp affichera tout Unicode que votre mobile peut afficher.

Voir Utilisation de caractères non ASCII dans Arduino pour plus de détails. Modifiez également les paramètres MIN_C, MAX_C dans Thermometer.h. Enfin, ajustez les limites du tracé comme vous le souhaitez, par ex. changer |Temp C~32~8~deg C|

dire

|Temp F~90~14~deg F|

Étape 4: mesure du courant d'alimentation

Mesure du courant d'alimentation
Mesure du courant d'alimentation

En utilisant la bibliothèque lp_Si7021, même une mesure de température/humidité toutes les 10 secondes ne contribue qu'à ~1uA au courant d'alimentation moyen..

Connectez la carte de température/humidité au programmateur décrit dans la partie 1 comme indiqué ci-dessus.

Avec les cellules solaires et les batteries débranchées, Vin et Gnd sont connectés aux Vdd et Gnd du programmeur (les fils jaune et vert) et les SWCLK et SWDIO sont connectés aux Clk et SIO de la carte d'en-tête du programmeur (les fils bleu et rose)

Vous pouvez maintenant programmer NanoV2 et mesurer le courant d'alimentation comme décrit dans la partie 1.

Installez la bibliothèque Si7021 basse consommation à partir de ce fichier zip, lp_Si7021.zip et installez la bibliothèque pfodParser et décompressez lp_BLE_TempHumidity_R3.zip dans votre répertoire de croquis Arduino et programmez la carte Temp/Humditiy avec lp_BLE_TempHumidity_R3.ino

Comme mentionné ci-dessus, la contribution du capteur est <1uA, en moyenne, au taux de mesure le plus élevé utilisé dans ce projet, de sorte que les paramètres de publicité et de connexion BLE sont le facteur déterminant pour la durée de vie de la batterie.

Les paramètres de publicité et de connexion BLE qui affectent la consommation de courant sont:-Tx Power, Advertising Interval, Max and Min Connection Intervals, and Slave Latency.

Remarque: En utilisant les connexions ci-dessus, il y a deux (2) régulateurs dans l'alimentation, un sur la carte NanoV2 via Vin et le MAX8881 sur l'alimentation du programmeur. Cela signifie que les courants d'alimentation mesurés seront ~ 5uA plus élevés que la réalité, en raison du deuxième régulateur. Les valeurs citées ci-dessous sont les courants mesurés moins ces 5uA supplémentaires.

Puissance d'émission

Les effets de puissance Tx fournissent du courant à la fois lorsqu'ils sont connectés et lors de la publicité (non connectés). Ce projet utilise le réglage de puissance maximale (+4) et offre la meilleure portée et la plus grande immunité au bruit pour les connexions les plus fiables. Vous pouvez utiliser la méthode lp_BLESerial setTxPower() pour modifier le paramètre d'alimentation. Les valeurs valides sont, en puissance croissante, -40, -30, -20, -16, -12, -8, -4, 0 +4. Vous devez appeler la méthode lp_BLESerial begin() AVANT d'appeler setTxPower(). Voir le croquis lp_BLE_TempHumidity_R3.ino.

Vous pouvez essayer de réduire la puissance Tx, mais le compromis est une portée plus courte et plus de pertes de connexion dues aux interférences. Dans ce projet, la puissance Tx est laissée à sa valeur par défaut, +4. Comme vous le verrez ci-dessous, même avec ce réglage, des courants d'alimentation très faibles sont toujours possibles.

Intervalle de publicité

Pour une puissance Tx donnée, lorsqu'il n'y a pas de connexion, l'Intervalle Publicitaire fixe la consommation moyenne de courant. La plage recommandée est de 500 à 1000 mS. Ici, 2000mS a été utilisé. Le compromis est que des intervalles de publicité plus longs signifient qu'il est plus lent pour votre mobile de trouver l'appareil et d'établir une connexion. En interne, les intervalles publicitaires sont définis par multiples de 0,625 ms dans la plage de 20 ms à 10,24 secondes. La méthode lp_BLESerial setAdvertisingInterval() prend mS comme argument, pour plus de commodité. Pour +4 TxPower et un intervalle publicitaire de 2000 mS, la consommation de courant était d'environ 18 uA. Pour un intervalle publicitaire de 1000 mS, il était d'environ 29 uA. La Rev 2 utilisait un intervalle publicitaire de 2000 mS, mais cela a entraîné des connexions lentes. La révision 3 est passée à un intervalle publicitaire de 1000 mS pour accélérer les connexions.

Intervalles de connexion max et min

Une fois la connexion établie, l'intervalle de connexion détermine la fréquence à laquelle le mobile contacte l'appareil. Le lp_BLESerial setConnectionInterval() vous permet de définir les valeurs maximale et minimale suggérées, mais le mobile contrôle l'intervalle de connexion. Pour plus de commodité, les arguments de setConnectionInterval() sont en mS, mais en interne, les intervalles de connexion sont en multiples de 1,25 ms, compris entre 7,5 ms et 4 secondes.

Le paramètre par défaut est setConnectionInterval(100, 150), c'est-à-dire de 100 mS minimum à 150 mS maximum. L'augmentation de ces valeurs réduit le courant d'alimentation pendant la connexion, mais le compromis est une transmission plus lente des données. Chaque mise à jour de l'écran prend environ 7 messages BLE, tandis qu'une mesure complète de 36 heures de 10 minutes prend environ 170 messages BLE. Ainsi, l'augmentation des intervalles de connexion ralentit les mises à jour de l'écran et le tracé s'affiche.

La classe lp_BLESerial a un tampon d'envoi de 1536 octets et n'envoie qu'un bloc de 20 octets à partir de ce tampon, chaque intervalle de connexion maximum pour éviter d'inonder le lien BLE de données. De plus, lors de l'envoi de données de tracé, l'esquisse n'envoie des données que jusqu'à ce que 512 octets attendent d'être envoyés, puis retarde l'envoi de plus de données jusqu'à ce que certaines données aient été envoyées. Cela évite d'inonder le tampon d'envoi. Cette limitation des envois fiabilise la transmission des données vers le mobile, mais elle n'est pas optimisée pour un débit maximal.

Dans ce projet, les intervalles de connexion ont été laissés comme valeurs par défaut.

Latence de l'esclave

Lorsqu'il n'y a pas de données à envoyer au mobile, l'appareil peut éventuellement ignorer certains des messages de connexion du mobile. Cela permet d'économiser la puissance Tx et le courant d'alimentation. Le paramètre Slave Latency est le nombre de messages de connexion à ignorer. La valeur par défaut est 0. La méthode lp_BLESerial setSlaveLatency() peut être utilisée pour modifier ce paramètre.

La latence esclave par défaut de 0 a donné un courant d'alimentation d'environ 50 uA, ignorant les mises à jour de l'écran toutes les 30 secondes, mais incluant les messages keepAlive toutes les 5 secondes. Le réglage de la latence de l'esclave sur 2 a donné un courant d'alimentation connecté moyen d'environ 25 uA. Un paramètre de latence esclave de 4 a donné ~ 20uA. Des réglages plus élevés ne semblaient pas réduire le courant d'alimentation, c'est pourquoi un réglage de latence esclave de 4 a été utilisé.

Une fois connecté, toutes les 30 secondes, pfodApp demande une mise à jour de l'affichage. Cela force une mesure du capteur et renvoie des données pour mettre à jour l'affichage graphique. Cette mise à jour entraîne un ~66uA supplémentaire pendant 2 secondes toutes les 30 secondes. C'est une moyenne de 4,4 uA sur les 30 secondes. L'ajout de ceci au 20uA, donne un courant d'alimentation de connexion moyen de ~ 25uA

Étape 5: courant d'alimentation total et durée de vie de la batterie

En utilisant les paramètres ci-dessus, tels que définis dans lp_BLE_TempHumidity_R3.ino, le courant d'alimentation total lors de la connexion et la mise à jour de l'affichage toutes les 30 secondes, environ 25 uA. Lorsqu'il n'est pas connecté, il est d'environ 29 uA.

Pour calculer la durée de vie de la batterie, un appel de courant continu d'environ 29 uA est supposé.

Différentes batteries ont des capacités et des caractéristiques de tension différentes. Les piles considérées ici sont la pile bouton CR2032, la pile bouton CR2450 (N), 2 x AAA alcalines, 2 x AAA Lithium et LiPo.

Résumé de la batterie

Si vous utilisez Solar Assist, ajoutez 50% à ces chiffres d'autonomie de la batterie (en supposant 8 heures par jour)

Remarque: le condensateur 22uF LowESR (C1), en plus du condensateur NanoV2 22uF embarqué, stocke le courant de la cellule solaire et le fournit ensuite pour les impulsions de courant TX. Sinon, la batterie fournit une partie du courant TX. Ce faible ESR supplémentaire de 22 uF ajoute environ 10 % au courant de la batterie lorsque la cellule solaire n'est pas alimentée, mais prolonge également la durée de vie de la batterie en compensant l'augmentation de la résistance interne de la batterie lorsque la batterie atteint sa fin de vie. Les mesures ci-dessous ont été prises SANS le condensateur supplémentaire de 22uF.

CR2032 – 235mAHr – autonomie 10 moisCR2450 (N) – 650mAHr (540mAHr) – autonomie 2,3 ans (2 ans)2 x AAA alcalines – 1250mAHr – autonomie 3,8.yrs2 x AAA Lithium – 1200mAHr – autonomie 4,7 ansLiPo rechargeable – non recommandé en raison d'une autodécharge élevée.

CR2032

Cette pile bouton a une capacité typique de 235mAHr (batterie Energizer), une tension nominale de 3V et une tension de décharge spécifiée de 2V. Cela implique une autonomie de 8 100 heures ou ~ 0,9 an. Cependant, la résistance interne de la cellule augmente à mesure que la batterie atteint la fin de sa durée de vie et peut donc ne pas être en mesure de fournir les impulsions de courant de pointe Tx. Un condensateur d'alimentation plus grand peut être utilisé pour réduire cet effet, mais disons une durée de vie de 10 mois.

CR2450 (N)

Cette pile bouton a une capacité typique de 620mAHr (540mAHr pour CR2450N), une tension nominale de 3V et une tension de décharge spécifiée de 2V. Cela implique une autonomie de 22, 400 heures ou ~ 2 ans 6 minutes (18 600 heures ~ 2 ans 2 minutes pour la CR2450N). Cependant, la résistance interne de la cellule augmente à mesure que la batterie atteint la fin de sa durée de vie et peut donc ne pas être en mesure de fournir les impulsions de courant de pointe Tx. Un condensateur d'alimentation plus grand peut être utilisé pour réduire cet effet, mais disons une durée de vie de 2 ans 4 m (2 ans N).

Remarque: La version CR2450N a une lèvre plus épaisse qui permet d'éviter une installation incorrecte dans un support CR2450N. Vous pouvez insérer une cellule CR2450N et CR2450 dans un support CR2450 mais vous ne pouvez pas insérer une cellule CR2450 dans un support CR2450N

2 piles alcalines AAA

Ces batteries ont une capacité d'environ 1250mAHr (Energizer Battery) pour des courants très faibles, une tension nominale de 2x1,5V = 3V et une tension de décharge spécifiée de 2x0,8V = 1,6V. Mais cette tension de décharge spécifiée est inférieure à la tension de fonctionnement du capteur Si7021 (1,9 V), de sorte que la batterie ne peut être utilisée que jusqu'à ~ 1 V chacune. Cela réduit la capacité d'environ 10 % à 15 %, c'est-à-dire ~ 1000 mAHr.

Cela implique une autonomie de 34, 500 heures ou ~ 4 ans. Cependant, la résistance interne de la cellule augmente à mesure que la batterie atteint la fin de sa durée de vie et peut donc ne pas être en mesure de fournir les impulsions de courant de pointe Tx. Un condensateur d'alimentation plus grand peut être utilisé pour réduire cet effet, mais disons une durée de vie de 3 ans et 10 m. Remarque Les piles alcalines ont une autodécharge de 2 % à 3 % par an.

2 piles au lithium AAA

Ces batteries ont une capacité d'environ 1200mAHr (Energizer Battery), une tension nominale de 2x1.7V = 3.4V, à faibles courants, et une tension de décharge de 2x1.4V = 2.4V. Cela implique une autonomie de 41, 400h ou 4ans 8m.

Batterie rechargeable LiPo

Ces batteries sont disponibles dans différentes capacités de 100mAHr à 2000mAHr, dans des formats plats, et ont une tension chargée de 4,2V et une tension déchargée de >2,7V. Cependant, elles ont une autodécharge élevée de 2% à 3%/mois (c'est-à-dire 24% à 36% par an) et ne sont donc pas aussi adaptées à cette application que les autres batteries.

Étape 6: Alternatives d'approvisionnement - Assistance solaire, batterie uniquement, solaire uniquement

Alternatives d'approvisionnement - Assistance solaire, batterie uniquement, solaire uniquement
Alternatives d'approvisionnement - Assistance solaire, batterie uniquement, solaire uniquement
Alternatives d'approvisionnement - Assistance solaire, batterie uniquement, solaire uniquement
Alternatives d'approvisionnement - Assistance solaire, batterie uniquement, solaire uniquement
Alternatives d'approvisionnement - Assistance solaire, batterie uniquement, solaire uniquement
Alternatives d'approvisionnement - Assistance solaire, batterie uniquement, solaire uniquement
Alternatives d'approvisionnement - Assistance solaire, batterie uniquement, solaire uniquement
Alternatives d'approvisionnement - Assistance solaire, batterie uniquement, solaire uniquement

Batterie et assistance solaire

La construction ci-dessus utilise l'alimentation Battery plus Solar Assist. Lorsque les panneaux solaires génèrent plus de tension que la tension de la batterie, les cellules solaires alimentent le moniteur, prolongeant ainsi la durée de vie de la batterie. En règle générale, la durée de vie de la batterie peut être prolongée de 50 % supplémentaires.

Les panneaux solaires utilisés sont petits, 50 mm x 30 mm, bon marché, ~ 0,50 $ et de faible puissance. Ce sont des panneaux nominalement 5V, mais ils ont besoin d'une lumière directe du soleil pour générer 5V. Dans ce projet, deux panneaux sont connectés en série afin que placer le moniteur près d'une fenêtre, à l'abri du soleil direct, soit suffisant pour remplacer la batterie. Même une pièce bien éclairée, ou une lampe de bureau, suffit pour que les cellules solaires génèrent > 3,3 V à > 33 uA et prennent le relais de la batterie.

Un simple panneau de test a été construit pour déterminer où le moniteur de température / humidité pourrait être placé, à l'abri du soleil et toujours alimenté à l'énergie solaire. Comme vous pouvez le voir sur la photo ci-dessus, les deux panneaux connectés à une résistance de 100K produisent 5,64V sur 100K, soit 56uA de courant à 5,64V. C'est plus que suffisant pour alimenter le moniteur à partir de la batterie. Toute lecture de tension supérieure à la tension nominale de la batterie de 3 V signifie que les cellules solaires alimenteront le moniteur au lieu de la batterie.

Les deux diodes du circuit du moniteur de température et d'humidité isolent les cellules solaires et les batteries l'une de l'autre et évitent de les connecter en polarité inversée. La résistance 10V 1W Zener et 470R protège le régulateur embarqué du NanoV2 contre les surtensions de deux cellules solaires en plein soleil, en particulier si des cellules 12V sont utilisées au lieu de 5V. En fonctionnement normal à <5V, le zener 10V ne consomme que ~1uA.

Batterie uniquement

Pour une alimentation par batterie uniquement, omettez simplement R1, D1 et D3 et les cellules solaires. Vous pouvez également remplacer D1 par un morceau de fil si vous ne voulez pas de protection contre l'inversion de polarité.

Solaire seulement

L'alimentation du moniteur à partir de cellules solaires uniquement, sans batterie, nécessite un circuit d'alimentation différent. Le problème est que, bien que le moniteur fonctionne sur 29 uA, à la mise sous tension, le nRF52 consomme ~ 5 mA pendant 0,32 s. Le circuit illustré ci-dessus (version pdf) maintient le régulateur MAX8881 éteint jusqu'à ce que les condensateurs d'entrée, 2 x 1000 uF, se chargent jusqu'à 4,04 V. Ensuite le MAX6457 libère l'entrée SHDN du MAX8881 pour alimenter le nRF52 (NanoV2) Les 2 condensateurs 1000uF fournissent le courant de démarrage nécessaire.

Cela permet au moniteur de s'allumer dès qu'il y a suffisamment d'énergie solaire pour qu'il fonctionne à 29 uA.

Étape 7: Conclusion

Ce tutoriel a présenté un moniteur d'humidité de la température alimenté par batterie/solaire comme exemple de projet BLE à très faible consommation dans Arduino pour la puce nRF52832. Des courants d'alimentation d'environ 29 uA sont obtenus en réglant les paramètres de connexion. Il en a résulté une durée de vie de la pile bouton CR2032 supérieure à 10 mois. Plus long pour les piles boutons et les batteries de plus grande capacité. L'ajout de deux cellules solaires bon marché a facilement prolongé la durée de vie de la batterie de 50 % ou plus. Une lumière vive de la pièce ou une lampe de bureau suffit pour alimenter le moniteur à partir des cellules solaires.

Un circuit d'alimentation spécial a été présenté pour permettre au moniteur de fonctionner uniquement à partir de cellules solaires de faible capacité.

Le pfodDesigner gratuit vous permet de concevoir des menus/sous-menus, de tracer par rapport à la date/l'heure et de consigner les données, puis de générer le croquis Arduino à faible consommation pour vous. Ici, une interface personnalisée a été codée à l'aide des primitives de dessin pfodApp. La connexion avec pfodApp affiche l'interface utilisateur et met à jour les lectures pendant que le moniteur utilise ~29uA

Aucune programmation Android n'est requise. pfodApp gère tout cela.

Conseillé: