Une balance USB sans drivers

Une balance USB sans drivers

Chez Yoctopuce, on a récemment décidé d'enregistrer systématiquement le poids de chaque envoi, histoire de pouvoir comparer le poids pré-calculé avec le poids réel. Et comme on n'aime pas trop les tâches répétitives, on a décidé de le faire automatiquement. On s'est donc procuré quelques balances avec une sortie RS232, et cette semaine on profite de l'occasion de vous montrer en détail comment transformer une balance Kern en Yocto-Balance en deux temps trois mouvements.



L'idée de base est triviale: il s'agit de connecter un Yocto-RS232 à la sortie RS232 de la balance et de le configurer pour qu'il analyse automatiquement les données qui sortent de la balance et présente le résultat à la manière d'un capteur Yoctopuce. Brancher le Yocto-RS232 est l'affaire d'une seconde, la subtilité se trouve dans la configuration...

On aimerait transformer cette balance en balance USB
On aimerait transformer cette balance en balance USB


Fonctionnement de la balance

Le protocole série de la balance est des plus simple: si on envoie le caractère w la balance répond sur une même ligne:

  • Un caractère espace ou le caractère M
  • Le signe
  • Le poids en grammes sur 10 caractères alignés à droite avec des espaces
  • L'unité, en l'occurrence g pour grammes
  • Un retour chariot

Par exemple:

w 797 g w 797 g w 797 g


Configuration du Yocto-RS232

Il est bien entendu possible de configurer le Yocto-RS232 par programmation, mais on va plutôt utiliser le VirtualHub. La première chose à faire est de configurer le protocole et la vitesse à Line ASCII Protocol, 9600 et 8N1 qui se trouvent être les valeurs par défaut.

Configuration du protocole et de la vitesse
Configuration du protocole et de la vitesse


Il s'agit ensuite de créer un job contenant une seule tâche qui va se charger de:

  1. Envoyer toutes les 500ms la commande w
  2. Lire la réponse et l'interpréter comme un entier et le mapper sur le genericSensor1.

Pour lire la réponse, on utilise une expression régulière: un point pour ignorer le premier caractère, puis "($1:INT)" pour lire un entier et le mapper sur le genericSensor1, et enfin on ignore tous les caractères jusqu'à la fin de ligne avec ".*" Ce qui, en fin de compte, se résume à deux commandes:

writeLine w expect .($1:INT).*



Création de la tâche de lecture des valeurs
Création de la tâche de lecture des valeurs


Finalement, il faut lancer le job que l'on vient de créer, configurer le Yocto-RS232 pour que ce job démarre automatiquement à l'allumage du module et tout sauver.

Faire en sorte que le job de lecture démarre automatiquement
Faire en sorte que le job de lecture démarre automatiquement


Optionnellement on peut assigner un nom logique au genericSensor1, par exemple "scale", et configurer son unité: "g" pour grammes. On peut finalement facilement vérifier que tout fonctionne correctement en affichant la liste des fonctions dans l'interface principale du VirtualHub.

Ça marche!
Ça marche!


La programmation

A partir de là, la fonction genericSensor1 du Yocto-RS232 se comporte exactement comme un senseur Yoctopuce, voici un programme en Python qui affiche en boucle la valeur de la balance:

import os,sys
from yocto_api import *
from yocto_genericsensor import *

errmsg=YRefParam()
if YAPI.RegisterHub("usb", errmsg)!= YAPI.SUCCESS:
    sys.exit("init error"+errmsg.value)

scale=YGenericSensor.FindGenericSensor('scale')
while (True):
    if scale.isOnline():
        print("%.0f%s" % (scale.get_currentValue(), scale.get_unit()))
    YAPI.Sleep(1000)



Conclusion

En moins de cinq minutes, on a transformé une balance avec une sortie RS232 en un capteur USB Yoctopuce qui fonctionne sans driver. On pourrait même s'offrir le luxe d'ajouter un YoctoHub-Ethernet ou un YoctoHub-Wireless pour obtenir une balance avec une connexion réseau. C'est à se demander s'il n'y a pas un peu de magie dans les produits Yoctopuce :-)

Aujourd'hui, on a fabriqué une balance USB qui fonctionne sans drivers
Aujourd'hui, on a fabriqué une balance USB qui fonctionne sans drivers

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.