Brieuc Mandin

Projet personnel · 2026

Unista Smart-Dosage Unit

Développement d'un simulateur de supervision industrielle (SCADA/IHM) en Python. Architecture MVC, simulation physique en temps réel et interface opérateur moderne.

Python 3CustomTkinterArchitecture MVCThreadingPOO

Ce projet est un démonstrateur technique réalisé dans le cadre d'une candidature pour Unista. Il simule le pilotage complet d'une unité de dosage pharmaceutique, prouvant ma capacité à concevoir des logiciels structurés, robustes et orientés vers l'expérience utilisateur industrielle.

Architecture

Modèle-Vue

Bibliothèque UI

CustomTkinter

Simulation

Physique tps réel

Motivations

Pourquoi ce projet mérite une page dédiée ? Parce qu’il traduit un besoin réel auquel j’ai dû répondre rapidement.

  • Démontrer ma maîtrise de la Programmation Orientée Objet (POO) et des architectures découplées.
  • Prouver qu'il est possible de réaliser des interfaces industrielles modernes et réactives en Python pur.
  • Simuler des contraintes physiques réelles (bruit capteur, inertie) pour complexifier la logique de code.

Fonctionnalités simulées

Le logiciel reproduit fidèlement le comportement d'une machine : inertie thermique du chauffage, gestion hydraulique (pression/niveau cuve) et aléas de production (pièces défectueuses).

L'opérateur dispose d'un synoptique animé, de commandes manuelles/auto, d'une gestion d'arrêts d'urgence et d'un journal d'événements (logs) pour la traçabilité.

Approche UX/UI Industrielle

L'interface a été pensée pour l'efficacité : lecture rapide des KPIs (TRS, Rebuts), codes couleurs normalisés (Vert/Orange/Rouge) pour les états machines, et mode sombre pour le confort visuel.

L'utilisation de la librairie CustomTkinter permet de moderniser le rendu tout en conservant la structure classique des écrans de supervision.

Architecture MVC (Modèle-Vue-Contrôleur)

Pour garantir la maintenabilité, le code suit strictement le patron MVC. Le 'Modèle' gère la physique et les états sans savoir qu'une interface existe. La 'Vue' se contente d'afficher les données et de transmettre les commandes.

  • Backend (machine.py) : Calculs physiques, boucle de simulation et gestion des états d'urgence.
  • Frontend (main_view.py) : Interface réactive mise à jour par polling (10 FPS) sans bloquer le thread principal.
  • Composants : Widgets réutilisables (Jauges, Badges d'état) pour éviter la duplication de code.

Compétences développées

Compétences consolidées pendant le projet :

  • Conception d'architecture logicielle (Separation of Concerns)
  • Développement d'interfaces graphiques (GUI) événementielles
  • Logique d'automatisme (Grafcet, Gestion d'états)
  • Simulation physique mathématique simple

Résultats & impact

Un logiciel autonome exécutable sans configuration complexe.

Une base de code propre permettant de remplacer le simulateur par une connexion Modbus/OPC UA réelle.

Une démonstration concrète de rigueur technique pour un contexte industriel.

Points difficiles & solutions

Garder l'interface fluide malgré les calculs en arrière-plan.

Mise en place d'une boucle de mise à jour non-bloquante (`update_ui_loop`) utilisant `after()` de Tkinter pour synchroniser l'affichage avec le modèle physique sans figer la fenêtre.

Rendre la simulation réaliste (ne pas avoir des valeurs statiques).

Intégration de 'bruit' aléatoire sur les capteurs et programmation d'une inertie thermique (la température monte/descend progressivement) pour imiter le comportement réel des fluides.

Code source (GitHub)