Ruches Connectées / Modbus

Ça y est ! Enfin !

Quelques nouvelles du projet « Ruches connectées »…

Après une petite mise à plat de mes idées, j’en ai déduit qu’il valait mieux se concentrer sur le minimum… En faire moins, mais le faire mieux. Au revoir donc la sonde de température au sein de la ruche, qui posait certains problèmes de disponibilités quand aux sollicitations du « Maitre Modbus »… Le recadrage a été bénéfique puisqu’au final, ce qui nous intéresse réellement, c’est le poids de la ruche… Quand je dis « nous » je parles des apiculteurs, bien entendu ! 🙂

Chaque ruche est donc pesée par un ensemble de 3 jauges de contraintes dont le signal (différentiel) est amplifié par un amplificateur d’instrumentation (INA 126). C’est ni plus ni moins qu’un montage à amplificateurs opérationnels (2 en fait) particulier, dans la mesure où en entrée on a un signal différentiel, et en sortie un signal pouvant être acquis par un ADC tel que l’on peut trouver dans nos microcontrôleurs préférés. Le signal est donc acquis par notre Arduino ; analogRead(), c’est trivial. Le résultat de l’acquisition est stocké, non pas dans une variable, mais dans un tableau.

Ce tableau est à disposition de la « tâche » « Esclave Modbus ». Pour être clair, et avant que les plus fervents lecteurs ne s’enflamment : non, ce n’est pas une tâche au sens d’une tâche telle que l’on se la représente dans un OS multi-tâche temps-réel / préemptif. Ce sera l’objet d’une future publication, mais « Chuuuutttt »… La finalité de la « tache » « Esclave Modbus » est donc, comme son nom l’indique de servir les requêtes Modbus envoyés par le « Maitre Modbus ».

Modbus est un protocole de communication industriel. Il est assez ancien (1979) mais sa simplicité et ses années d’expériences en font un protocole robuste et fiable. C’est avant tout un protocole série, une mouture TCP/IP a ensuite vu le jour (vers les années 1990). Dans sa version série, il est possible de le faire fonctionner selon un mode binaire (RTU) ou ASCII. Dans notre cas, nous utiliseront le mode RTU sur une liaison série RS485. Le RS485 est une liaison série basée sur un signal différentiel et une paire torsadée (immunité au bruit) permettant ainsi une transmission de donnée de 100kbits/s sur ligne de 1200m à 35Mbits/s sur ligne de 10m ; le transmetteur jouant un rôle non négligeable dans l’affaire. Pour notre application on pourra aisément se contenter d’une vitesse de transmission de 9600 ou 19200, voir 38400 bps.

Le « Maître Modbus » quant à lui ne s’occupe que de récupérer les informations de ses esclaves et les affiche à l’écran. Son tour viendra où il fera l’objet d’un travail intensif, notamment pour intégrer le shield GPRS, et ainsi mettre enfin le pied dans le M2M.

Ci dessous, une photo du « setup » :

20141006_038[1]

Ça fait un peu « fouilli », j’en convient…

Pour y arriver, je suis d’abord tombé sur  cette librairie : https://code.google.com/p/simple-modbus/. J’ai téléchargé les « zip » (un pour le master, un pour le slave) et les ait intégrés à la librairie Arduino_Extras_lib (https://github.com/spelle/Arduino_Extras_lib). Chemin faisant, j’ai voulu conserver l’interface série matérielle pour le deboggage et la programmation ; pour se faire je suis tombé sur la librairie «SoftwareSerial» inclue par défaut dans Arduino. Il a fallu apporté quelques modifications aux librairies Simple-Modbus Master / Slave afin qu’elles utilisent un port série logiciel plutôt que matériel. Deux librairies ont donc vu le jour : SimpleSWModbusMaster (https://github.com/spelle/Arduino_SimpleSWModbusMaster_lib) et SimpleSWModbusSlave (https://github.com/spelle/Arduino_SimpleSWModbusSlave_lib).

Pour finir le projet faisant l’acquisition de la mesure de la balance + Esclave Modbus est disponible ici : https://github.com/spelle/Arduino_Beehive_Scale

Le projet du collecteur de données (Maître Modbus) est disponible ici : https://github.com/spelle/Arduino_Beehive_Collector

La prochaine étape est l’étalonnage des jauges de contrainte et affinage du gain de la fonction amplification. Pour ce faire, j’ai récupéré quelques poids que j’ai pesé et étiqueté au poids qu’ils faisaient.

20141006_040[1]

En parallèle, il convient de commencer l’approvisionnement de composants tels que les transmetteurs RS485 (MAX485), amplificateurs d’instrumentation/différentiel (INA126), quelques résistances de précision, un, voir deux shields GPRS…

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *