Tulip’s frontline operations platform supports native machine connectivity, bringing your machine data in context with data from people, devices, and systems. Machine state changes can be monitored through networked connections or with sensors and our edge devices.

In this post, we will explore how our team retrofit a legacy machine, connected it to the cloud, and estimated its state using a simple ML model and Edge IO. At our Somerville headquarters, we have an espresso machine and a water dispenser that were perfect candidates for measuring utilization.

If this sounds familiar, we “launched” a new product on April Fools day from this experiment →

Keeping it as simple as possible, we connected a current and vibration sensor using an Edge IO and PhidgetHub sensor. For the espresso machine, we ran an ML model that detects whether the machine is running, idle, or stopped. This allows us to monitor the usage of the machine and potentially optimize its maintenance and performance.

Read on as we cover the required hardware and software components, as well as the steps to set up and run the machine learning model.

Mise en place du matériel

Pour surveiller la machine à café, nous avons connecté un capteur de courant disponible dans le commerce à un Edge IO. Nous avons également ajouté un capteur de vibration piézoélectrique pour surveiller les vibrations à grande vitesse. L'Edge IO prend en charge la surveillance à grande vitesse grâce à ses entrées ADC intégrées.

Nous avons choisi de connecter un PhidgetHub à l'Edge IO pour le capteur de courant afin de convertir les signaux analogiques du capteur dans l'Edge IO.

https://tulip.widen.net/content/fabniydivf
Edge IO est relié par USB à un PhidgetsHub qui est connecté à une pince de courant par l'intermédiaire d'une rallonge. Un capteur de VIbration est monté avec de la colle.
https://tulip.widen.net/content/z9tpdodsrd

Pour collecter les données provenant du PhidgetHub dans Tulip, nous utilisons les nœuds standard Phidgets Node-RED pour VoltageInput. Le PhidgetHub de la machine à espresso est directement branché sur l'Edge IO, tandis que le PhidgetHub du distributeur d'eau est connecté par WiFi au même appareil, ce qui nous permet de suivre l'utilisation des deux appareils à l'aide d'un seul appareil Edge.

https://tulip.widen.net/content/pfttfcio2v

Collecte et traitement des données

Pour obtenir la date de l'Edge IO dans le nuage, nous avons utilisé le nœud de table embarqué Tulip - nœud RED. Ce nœud permet d'ajouter les données de l'appareil périphérique à un tableau sur Tulip. Nous avons configuré chaque enregistrement pour qu'il stocke un horodatage, un nom et une valeur numérique provenant du capteur, et nous avons rassemblé les données de tous les capteurs dans un seul tableau.

https://tulip.widen.net/content/de4qsnquvv

Une fois les données dans un tableau, nous les avons exportées vers un fichier CSV pour les charger à l'aide de pandas et commencer à visualiser les données et à créer notre modèle Apprentissage machine .

https://tulip.widen.net/content/ednrgrzrv6

Nous avons d'abord trié les données provenant des capteurs de la machine à espresso et avons rapidement identifié les trois états de la machine :

  • Arrêt

  • Veille/veilleuse

  • Faire couler/préparer le café

Notre première observation a été assez intéressante, car nous avons remarqué la quantité de courant utilisée par la machine en mode veille. Toutes les 30 secondes, il y a un bref pic qui retombe à zéro - nous avons déterminé que cela était lié à l'élément chauffant qui maintient la machine à café à une température appropriée.

Pour la modélisation des États, nos principaux objectifs étaient les suivants :

  • Nous voulons éviter de devoir étiqueter de nombreuses données.

  • Une machine à café a un nombre fini de tâches à accomplir : moudre les grains, chauffer, tirer un trait, faire mousser le lait. Pour cette raison, les données de nos capteurs sont différentes pour chaque étape de travail, ce qui devrait permettre de trouver des caractéristiques génériques dans nos données qui nous permettent de regrouper ces parties du programme dans des états distincts.

  • Ces états peuvent ensuite être assignés à Stopped/Running/Idle par un opérateur à l'aide des déclencheurs de machine standard Tulip .

Pour commencer ce processus, nous avons calculé une moyenne mobile afin d'atténuer les cycles de chauffage que nous avons identifiés. En raison de la longueur des cycles, nous avons choisi une moyenne mobile d'une minute. Les cycles de chauffage de cette machine ont tendance à durer environ 30 secondes, et le cycle complet du café dure environ 2 à 3 minutes, en fonction de la température de la machine au début de sa mise en marche.

En outre, nous avons inclus des caractéristiques décalées : moyenne mobile d'il y a une et deux minutes. Il s'agit d'une méthode standard dans l'analyse des séries temporelles, qui permet au modèle d'observer des schémas ascendants ou descendants dans les données.

Construire le modèle Apprentissage machine

Pour le modèle de regroupement, nous voulions un modèle avec le moins de paramètres possible et une méthode intégrée pour estimer le "bon" nombre de regroupements. Nous avons choisi un modèle bayésien de mélange gaussien.

Cela nous a permis d'estimer que la dimensionnalité des données du capteur de notre machine à café est proportionnelle aux 6 différentes étapes de travail (arrêt, mouture des grains, chauffage, tirage, production de mousse de lait, manipulation manuelle), et nous avons donc choisi 6 pour le nombre de composants distincts dans le modèle de grappe.

Comme il s'agit d'un modèle non supervisé, nous avons collecté des données pendant une journée, qui ont ensuite été utilisées pour entraîner le modèle. La validation s'est faite visuellement : nous avons vérifié si les grappes détectées par le modèle correspondaient à l'état qui ressortait des données du capteur.

https://tulip.widen.net/content/exx8gnf2wj

Ces tracés montrent que l'état 1 correspond à l'arrêt, les états 4 et 5 au repos et les états 0, 2 et 3 semblent correspondre à différents stades de la préparation du café (mouture, tirage d'une dose et production de mousse de lait/refroidissement).

Déployer le modèle et construire un Tulip App

Après avoir construit et testé notre modèle de clustering Apprentissage machine , il était temps de déployer le modèle pour l'utiliser. Nous avons stocké le modèle dans S3 en utilisant MLflow comme suit : mlflow.sklearn.save_model(s3://bucket_name/registry_prefix/model_name/version).

Pour exécuter le modèle, nous avons choisi d'utiliser une passerelle AWS et une fonction AWS Lambda pour récupérer le modèle sur S3 au format MLflow. Le point de terminaison était gateway-address.com/inference/{nom_du_modèle}, où les données consistent en la moyenne mobile des caractéristiques décalées dans le temps.

Pour exécuter le modèle sur de nouvelles données entrantes, nous avions deux options : mettre en place un connecteur HTTP et l'exécuter dans Tulip App , ce qui nécessiterait un appareil pour exécuter l'application à tout moment, ou exécuter un post HTTP à partir de Node-RED et poster l'identifiant de cluster comme attribut de machine d'état avec des nœuds Node-RED standard Tulip . Nous avons choisi cette dernière option et avons déployé le modèle avec succès.

Le flux Node-RED permettant de calculer les données de caractéristiques et d'exécuter le modèle se présente comme suit :

https://tulip.widen.net/content/3myllvffs1
Le flux ci-dessus est le même pour les capteurs de vibration et de courant. Les données des capteurs sont toutes introduites dans un nœud de jonction.
https://tulip.widen.net/content/qlsgtjkcs3
Le nœud de jonction :
https://tulip.widen.net/content/hps2qttbmq
Le nœud Join attribue l'objet joint à msg.value. L'horodatage, le nom et la valeur doivent être supprimés pour correspondre au format de données attendu pour l'inférence du modèle.
https://tulip.widen.net/content/ifginqbiux
Création de la machine et des attributs nécessaires. Pour des raisons de simplicité, nous n'avons ajouté comme attributs que les caractéristiques sans décalage temporel, car les autres caractéristiques n'existent que dans Node-RED.
https://tulip.widen.net/content/oakpcpzd6y
Nous vérifions ensuite quel est l'attribut "State" de la machine et nous changeons l'état de la machine dans un déclencheur de machine Tulip . Les déclencheurs de machine pour mettre l'état à Idle/Off sont configurés de la même manière, mais avec des valeurs d'état différentes.
https://tulip.widen.net/content/tnbl8cjcus

La machine est maintenant entièrement configurée et Tulip recueille les données avec notre modèle afin que nous puissions calculer le nombre de cafés produits par jour et le temps que la machine passe en état de marche, d'inactivité ou d'arrêt.

https://tulip.widen.net/content/jn3tdttmnc

Comme vous pouvez le voir ci-dessus, le modèle avait encore besoin d'être amélioré. Nous avons donc installé Tulip Player sur un iPad à côté de la machine à espresso, avec une application Tulip que les utilisateurs peuvent utiliser pour donner leur avis sur la précision du modèle. En outre, l'application rappelle aux utilisateurs d'éteindre la machine après avoir terminé, afin d'économiser de l'énergie.

https://tulip.widen.net/content/ezmykdeyki

Avec les données du modèle, nous pourrions ensuite créer des tableaux de bord pour afficher nos résultats et notre utilisation :

https://tulip.widen.net/content/bzimlph3kh

En outre, nous avons analysé certaines des données brutes pour calculer la consommation de courant par état pour une journée de travail normale. Nous avons constaté que la machine à expresso utilise 80 % du courant (ce qui correspond approximativement à la consommation d'énergie) lorsqu'elle est inactive, et que seulement 20 % du courant est utilisé pour la préparation du café. Comme il s'agit d'une petite machine dans un environnement non industriel, le gaspillage n'est pas très important.

Cependant, dans les opérations de fabrication, il peut y avoir de nombreuses situations où une grande quantité d'énergie est gaspillée à cause des machines qui tournent au ralenti. La surveillance de l' utilisation des machines peut s'avérer essentielle pour être alerté des changements d'état et réagir plus rapidement à une machine qui tourne au ralenti, ce qui permet à votre équipe de gagner du temps et de réduire le gaspillage d'énergie.

Conclusion

Pour résumer ce billet, nous avons exploré la manière de moderniser des machines anciennes et de les connecter au cloud pour estimer leur disponibilité à l'aide d'un modèle ML simple.

Nous avons utilisé une machine à expresso située dans notre bureau de Somerville, dans le Massachusetts. Nous avons abordé les composants matériels et logiciels requis, ainsi que les étapes de configuration et d'exécution du modèle de ML. Le modèle a utilisé un modèle de mélange gaussien bayésien pour le regroupement (avec des moyennes mobiles et des caractéristiques décalées), et a été calculé et exécuté sur un Edge IO.

Un site App pour les cafetières de notre bureau fournit une interface pour donner un retour d'information si le modèle n'a pas détecté la préparation d'un café ou a été trop lent à réagir.

En outre, un site Tableau de bord surveille en permanence les cafés préparés au siège de Tulip . Nous avons estimé le courant total utilisé par chaque état de la machine à café, et nous avons constaté que seuls 20 % sont utilisés pour la préparation du café, le reste étant passé au ralenti !

Cette expérience s'inscrit dans une série d'expériences que nous avons menées autour de la détection d'état pour Suivi machine, y compris une expérience lors de la création de Edge IO à Autodesk Technology Centers, Boston. Nous avons continué à explorer les modèles de détection d'état sur les machines CNC utilisées par les fabricants, ainsi que sur d'autres appareils ménagers et équipements tels qu'une machine à laver. Chaque équipement nécessite quelques ajustements mineurs des composants du modèle et des moyennes mobiles, mais nous continuons à détecter des états à travers différents cycles.

Ce travail est en train de porter ses fruits, et nous sommes ravis de pouvoir vous faire part des nouvelles offres de Tulip qui seront disponibles dans le courant de l'année.