Physique et Technologie
Nous savons que beaucoup d'entre vous aiment bricoler. Donc, pour l'étudiant intéressé et motivé, voici plus d'informations et des éléments logiciels à faire soi-même.
Informations sur la Publicité BLE
Remarque : Si vous avez des suggestions pour améliorer l'explication, alors envoyez-nous les détails.
Pour ceux qui ont le courage de créer leur propre équipement de collecte de données, nous fournissons des informations sur le protocole de publicité BLE utilisé par BroodMinder. En effet, notre propre BroodMinder-CELL, WiFi, et -SubHub utilise la publicité pour écouter les appareils et ensuite transmettre les données directement à MyBroodMinder.com.
Il existe plusieurs bons programmes d'exploration BLE disponibles. Nos préférés sont :
- Android & iOS – nrfConnect par Nordic Semiconductor. La version Android est la meilleure, mais nous utilisons les deux tout le temps. Il dispose d'une belle fonctionnalité de graphique de niveau de signal.
- PC – Bluetooth LE Explorer par Microsoft. Malheureusement, ce programme ne montre pas les données de publicité.
- Mac – BlueSee – Cette application semble bien fonctionner et elle affiche les données des fabricants dans le paquet de publicité.
Vous remarquerez probablement que les 3 premiers octets de l'ID de l'appareil sont toujours 06:09:16, suivis de l'ID particulier de l'appareil qui est toujours Modèle:ID:ID. Certains appareils (iOS & Mac) cachent le véritable ID, donc nous l'incluons également dans le champ de nom dans le paquet de publicité étendu.
Composition du Paquet de Publicité pour BroodMinder
Lorsque vous lisez des paquets de publicité à partir de BLE, vous pouvez identifier les produits BroodMinder en regardant ce qui suit.
Les données ressembleront à quelque chose comme ceci. – cet exemple provient de l'appareil 43:30:07
Événement de Réponse de Scan GAP ------------------------------------------------------------------------------------
ble_evt_gap_scan_response: rssi=-77, packet_type=0, sender=[ 07 30 43 80 07 00 ], address_type=0, bond=255, data=[ 02 01 06 02 0a 03 18 ff 8d 02 2b 15 02 00 02 21 00 d0 62 00 ff 7f 05 80 37 07 30 43 00 00 00 ]
Remarque : Les valeurs sont en décimal sauf si précédées de 0x
1) Vérifiez le drapeau "Données Spécifiques au Fabricant" Octets 6,7 = 0x18, 0xff
2) Vérifiez pour IF, LLC en tant que fabricant Octets 8,9 = 0x8d, 0x02
Les octets 10-29 contiennent les données du BroodMinder comme décrit ci-dessous. DeviceModelIFllc_1 = 0x2b (43d = balance) DeviceVersionMinor_1 = 0x15 (21d) DeviceVersionMajor_1 = 0x02 (FW 2.21) Elapsed_2V2 = 0x21 (33d) Temperature_2V2 = 0x62d0 WeightL_2V2 = 0x7FFF WeightR_2V2 = 0x8005
La correspondance pour tous les modèles est à la page suivante
| PRINCIPAL | ||||
|---|---|---|---|---|
| Octet | Type | Valeur | Paramètre | |
| 0 | Longueur du champ de pub | 02 | ||
| 1 | Type de champ | 01 | Connectable | |
| 2 | Valeur | 06 | Découverte Générale LE, Connectable, Appareil en Mode Unique | |
| 3 | Longueur du champ de pub | 02 | ||
| 4 | Type de champ | 0A | Puissance d'émission | |
| 5 | Valeur | 03 | Puissance en DB | |
| 6 | Longueur du champ de pub | 24 | ||
| 7 | Type de champ | FF | Données du fabricant | |
| 8 | Valeur | 8d | IF, LLC = 0x028d, 653 | |
| 9 | Valeur | 02 | IF, LLC = 0x028d, 653 | |
| 10 | Valeur | Modèle | ||
| 11 | Valeur | Version Mineure | ||
| 12 | Valeur | Version Majeure | ||
| 13 | Valeur | Température en temps réel | 47/49/56/57/58 (SM&XLR) | |
| 14 | Valeur | Batterie | ||
| 15 | Valeur | Écoulé | ||
| 16 | Valeur | Écoulé | ||
| 17 | Valeur | Température | 47 et plus est centigrade + 5000 | |
| 18 | Valeur | Température | ||
| 19 | Valeur | Température en temps réel 2 | 47/49/56/57/58 (SM&XLR) | |
| 20 | Valeur | PoidsL | ||
| 21 | Valeur | PoidsL | ||
| 22 | Valeur | PoidsR | ||
| 23 | Valeur | PoidsR | ||
| 24 | Valeur | Humidité | sera 0 pour 41/47/49/52 | |
| 25 | Valeur | PoidsL2/SM_Temps0 | 49/57/58 (XLR) | |
| 26 | Valeur | PoidsL2/SM_Temps1 | 49/57/58 (XLR) | |
| 27 | Valeur | PoidsR2/SM_Temps2 | 49/57/58 (XLR) | |
| 28 | Valeur | PoidsR2/SM_Temps3 | 49/57/58 (XLR) | |
| 29 | Valeur | Poids total en temps réel / État de l'essaim | 47/49/56/57/58 (SM&XLR) | |
| 30 | Valeur | Poids total en temps réel | 47/49/56/57/58 (SM&XLR) | |
| SECONDARY | Paquet publicitaire étendu | |||
| Octet | Type | Valeur | Paramètre | |
| 0 | Longueur du champ publicitaire | 09 | ||
| 1 | Type | 09 | Nom local complet | |
| 2 | 4' | nom ascii | ||
| 3 | 2' | |||
| 4 | :' | |||
| 5 | 0' | |||
| 6 | 0' | |||
| 7 | :' | |||
| 8 | 0' | |||
| 9 | 0' |
Note : Le BroodMinder-SubHub BRM52 est différent comme expliqué ci-dessous.
Voici les équations
if (ModelNumber == 41 | ModelNumber == 42 | ModelNumber == 43)
{
temperatureDegreesF = e.data[byteNumAdvTemperature_2V2] + (e.data[byteNumAdvTemperature_2V2 + 1] << 8);
temperatureDegreesF = (temperatureDegreesF / Math.Pow(2, 16) * 165 - 40) * 9 / 5 + 32;
}
else
{
double temperatureDegreesC = e.data[byteNumAdvTemperature_2V2] + (e.data[byteNumAdvTemperature_2V2 + 1] << 8);
temperatureDegreesC = (temperatureDegreesC - 5000) / 100;
temperatureDegreesF = temperatureDegreesC * 9 / 5 + 32;
}
humidityPercent = e.data[byteNumAdvHumidity_1V2];
if (ModelNumber == 43)
{
weightL = e.data[byteNumAdvWeightL_2V2 + 1] * 256 + e.data[byteNumAdvWeightL_2V2 + 0] - 32767;
weightScaledL = weightL / 100;
weightR = e.data[byteNumAdvWeightR_2V2 + 1] * 256 + e.data[byteNumAdvWeightR_2V2 + 0] - 32767;
weightScaledR = weightR / 100;
}
else if (ModelNumber == 49 | ModelNumber == 57 | ModelNumber == 58)
{
weightR = e.data[byteNumAdvWeightL_2V2 + 1] * 256 + e.data[byteNumAdvWeightL_2V2 + 0] - 32767;
weightScaledR = weightR / 100;
weightL = e.data[byteNumAdvWeightR_2V2 + 1] * 256 + e.data[byteNumAdvWeightR_2V2 + 0] - 32767;
weightScaledL = weightL / 100;
weightR2 = e.data[byteNumAdvWeightL2_2V2 + 1] * 256 + e.data[byteNumAdvWeightL2_2V2 + 0] - 32767;
weightScaledR2 = weightR2 / 100;
weightL2 = e.data[byteNumAdvWeightR2_2V2 + 1] * 256 + e.data[byteNumAdvWeightR2_2V2 + 0] - 32767;
```markdown weightScaledL2 = weightL2 / 100; } realTimeTemperature = ((float)(e.data[byteNumAdvRealTimeTemperature2] * 256 + e.data[byteNumAdvRealTimeTemperature1] - 5000) / 100) * 9 / 5 + 32; realTimeWeight = (float)(e.data[byteNumAdvRealTimeWeight2] * 256 + e.data[byteNumAdvRealTimeWeight1] - 32767 ) / 100 ; SM_Time est le temps unix du dernier événement de température. Time0 = LSB, Time3 = MSB, il s'agira du temps depuis le démarrage si le temps n'a pas été réglé dans le capteur par une synchronisation du capteur. BRM-52 BroodMinder-Transmetteur Le -Transmetteur effectue une publicité astucieuse. La publicité change toutes les 5 secondes pour envoyer un appareil différent. Il fera défiler tous les capteurs (y compris lui-même) puis recommencera. Nous appelons cela des Publicités Simulées. Selon le système d'exploitation utilisé, vous pourrez ou non (par exemple, iOS) voir le véritable ID du capteur (par exemple, 06:09:16:52:01:23). C'est pourquoi nous plaçons l'ID du capteur dans l'octet de publicité étendue. Notez également qu'il est difficile de lire la publicité étendue pour certains capteurs, cependant pour ceux-ci, vous pouvez généralement lire le véritable ID du capteur. L'ID Simulé réside dans les octets 13, 19 et 30. Cela rend le processus comme suit : 1. Établir si c'est un -Transmetteur par l'ID (soit le véritable ID soit l'ID dans la publicité étendue). Il sera toujours 52:xx:xx. 2. Si c'est un capteur “52”, alors analyser les octets 13/19/30. Par exemple, 43/01/23 sera 43:01:23 3. Analyser le reste du paquet de publicité selon le type de capteur basé sur l'octet modèle (octet 10) Facile 😉
Physique du BroodMinder-W
Il existe de nombreuses façons d'utiliser la Balance de la ruche BroodMinder et comme elle ne mesure qu'une fraction du poids total de la ruche, la conception et le placement du support auxiliaire et la position de la Balance BroodMinder deviennent une partie intégrante du système de mesure du poids total de la ruche. En général, plus d'efforts sont consacrés à cela, meilleurs seront les résultats. Les systèmes de support de ruche montrés ci-dessous vont du plus simple au plus sophistiqué avec la plus grande incertitude à la plus faible. Il appartient à chaque utilisateur de décider ce qu'il souhaite mettre en œuvre.
NOTE : la source d'erreur la plus typique est un support inadéquat sous la Balance. Cela peut entraîner un comportement étrange à mesure que la ruche se plie en raison de l'expansion et de la contraction dues au soleil, à la pluie, à la température, etc. Fournir un support plat améliorera les résultats. Une solution simple consiste à placer une planche de contreplaqué de ¾” (ou équivalent) sous les balances.
NOTE SUPPLÉMENTAIRE : Si tout ce que vous voulez voir est le flux de miel, un bon support n'est pas nécessaire. Vous devrez simplement ignorer les fluctuations quotidiennes. Vous pourrez toujours observer le changement global de poids.
a) Arrangement par défaut
Voici l'arrangement par défaut avec la Balance à l'avant de la ruche et une 2×4 comme support auxiliaire (point d'appui) à l'arrière :
Voici quelques calculs concernant la configuration :
Hypothèses
Le poids de la ruche W est réparti uniformément et le centre de gravité est au milieu de la ruche. Pour simplifier, le surplomb avant de la planche inférieure n'est pas pris en compte. Le poids de la ruche est supposé être de 100 %.
Calculs
Lors de l'utilisation de bois standard 2×4 comme support arrière et en l'alignant avec l'arrière de la ruche, le poids total de la ruche W peut être calculé à partir du poids sur la Balance S comme suit :
Par conséquent, utilisez 2.09 comme facteur de balance par défaut dans l'application si vous utilisez cette configuration. Cela peut bien sûr être ajusté une fois que certaines mesures de poids sont disponibles.
Le tableau ci-dessous montre le facteur de correction de la balance pour différents arrangements de balance et de point d'appui. L'axe X représente la position du point d'appui en pouces depuis l'arrière de la ruche. Les différentes lignes représentent la position de la ligne centrale de la balance en pouces depuis l'arrière de la ruche. Les flèches montrent l'exemple ci-dessus.
b) Arrangement alternatif 1
Sur la base de ce qui précède, le support auxiliaire doit être placé à 1” de l'arrière de la ruche. Il est recommandé de fixer une pièce de finition sur le dessus de la 2×4. Cela aidera à un positionnement précis du support auxiliaire.
```
Maintenant, nous avons des bras de levier égaux E et F et le facteur de correction de la balance de la ruche devient 2,0, ce qui est la valeur par défaut dans l'application mobile. Cependant, il y a d'autres facteurs d'influence qui ne doivent pas être négligés. Le véritable point de fulcrum du support auxiliaire se situe n'importe où entre l'arrière de la ruche et l'avant du support auxiliaire en raison des variations de niveau du système de support et de la déformation potentielle du 2×4 lui-même.

c) Arrangement alternatif 2
Un système de support différent peut être utilisé, qui a un point de fulcrum défini et n'est pas affecté par l'alignement de la structure de support :
Prenez un morceau de pin ou de chêne, d'environ ¾” d'épaisseur et 2” de large. La longueur doit être égale à la largeur de la ruche. Coupez une petite fente dedans. La fente doit être aussi profonde que la largeur de la lame de scie. Fixez ce morceau sous la planche inférieure de la ruche. Alignez-le à ras avec l'arrière. Ensuite, placez un morceau d'angle en aluminium 1” par 1/8” 6061 ou 6063, de la même longueur que la bande de bois, en dessous pour soutenir la ruche. Le coin de l'angle en aluminium repose dans la fente. La hauteur totale de l'angle en aluminium et du bois doit être égale ou légèrement supérieure à la hauteur de la balance pour garantir que la ruche est de niveau ou légèrement inclinée vers l'avant pour assurer l'évacuation de l'eau loin de l'entrée de la ruche.

d) Équilibrage latéral
Tous les systèmes de support ci-dessus sont affectés par un déplacement de poids latéral indéfini puisque la ruche repose sur plus de trois points. Il y a deux points à l'avant à l'intérieur de la balance de la ruche et un support linéaire à l'arrière de la ruche. Cela pourrait entraîner une surcharge sur l'un des capteurs de charge de la balance et, par conséquent, un équilibrage latéral est généralement nécessaire si le système de support sous la ruche n'est pas une plateforme continue, c'est-à-dire des blocs de béton séparés pour l'avant et l'arrière de la ruche.
Lisez le poids de chaque capteur de charge individuellement en passant à l'affichage en temps réel avec l'application. Dans ce mode, le poids sur la balance est affiché en %Gauche, %Droit. Le côté droit de la balance est le côté avec l'autocollant d'identification du capteur. Aucune autre action n'est requise si la différence G/D est inférieure à 10 %.
Sinon, calez la balance du côté avec la lecture de poids la plus basse jusqu'à ce que les lectures de poids correspondent. Alternativement, le calage peut également être effectué sous le support arrière du côté opposé à la lecture de poids faible.
e) Support de ruche à 3 points

Il existe un moyen d'alléger le besoin d'équilibrage latéral en introduisant un véritable système de support à 3 points. Les pièces sont similaires à celles utilisées dans l'arrangement 2, mais au lieu d'utiliser un angle de 1”, pour cet arrangement, vous aurez besoin d'un angle de ¾”. Un trou de 7/32” est percé au milieu de la planche au lieu de couper une fente. Une vis à machine fendue de ¼” x 0,5” est utilisée comme support central. La vis coupera ses propres filetages dans la planche. La fente dans la tête de la vis est alignée de manière à pouvoir reposer sur le bord de l'angle en aluminium en un seul point sans glisser.

Il y a un petit espace entre l'angle en aluminium et la planche de bois. Il faut s'assurer que cet espace est de largeur uniforme sur toute la ruche. La vis au milieu doit être le seul point de contact. Cela garantira que le poids correct est mesuré et en même temps, c'est le "filet de sécurité" contre la chute de la ruche en cas de chargement excessivement inégal, c'est-à-dire lors des inspections de la ruche.
f) Positionnement de la balance BroodMinder
La plupart des éléments ci-dessus ont traité du support auxiliaire. Concentrons-nous maintenant sur le positionnement de la balance.
Comme indiqué dans les sections précédentes, il est souhaitable que la face avant de la balance soit alignée avec la face avant du corps de la ruche. La déplacer plus à l'intérieur améliorerait la précision au détriment de la stabilité de la ruche, et la déplacer plus à l'extérieur réduirait la précision avec peu d'amélioration de la stabilité de la ruche.

Ce graphique montre l'influence du placement de la balance sur le facteur de correction de la balance et l'erreur de balance introduite en raison d'un positionnement inexact de la balance. L'influence est de 5,6 % par pouce.

Il est conseillé de marquer la position de la balance sur la planche inférieure de la ruche ou d'attacher un butée mécanique. Cela aidera à remettre la balance au même endroit après qu'elle ait été retirée pour un changement de batterie ou pour une autre raison.