En marge de la conférence MiXiT 2018, un hackathon était proposé par l’association Code4Change. Cette association propose d’aider d'autres associations en termes de compétences IT. Le but est de faire rencontrer ces associations avec des professionnels de l’IT afin de les aider dans leurs projets. Le hackathon apporte une solution pertinente à cette problématique : il permet de développer rapidement des fonctionnalités dont l’association a besoin.
Je me suis porté volontaire pour participer à ce hackathon en tant que développeur full stack. L’association avec laquelle j’ai eu la chance de travailler sur ces 2 jours est Plastic Odyssey. Elle a comme projet de développer un navire propulsé uniquement avec un carburant issu de plastique non-recyclable. Le bateau est pensé pour faire un tour du monde ponctué d'escales de 3 mois dans les pays les plus concernés par la problématique du recyclage du plastique. À chaque escale, l'équipe Plastic Odyssey souhaite mettre en place de l'outillage de tri et recyclage de plastiques, accompagné par la formation d'équipes locales à l'utilisation et à la maintenance des outils. Une fois le matériel en place, ils lanceront les premières campagnes de recyclage locales et récupéreront pour le bateau les plastiques non-recyclables.
Vous pouvez retrouver toutes les informations relatives à ce projet ici, n’hésitez pas à les contacter pour en apprendre plus sur le sujet. Ce hackathon avait été présenté avant sa réalisation dans cet article.
Contexte
Le but de ce hackathon était de développer un système de régulation de température à intégrer dans les machines qui transforment les déchets plastiques en carburant.
Système de régulation de température
Le fonctionnement du système de régulation est le suivant. Toutes les secondes :
- on mesure la température en un point du système ;
- on calcule le voltage à appliquer à notre système de chauffage pour atteindre la température souhaitée ;
- on fournit le voltage nécessaire à la résistance chauffante.
Pour cela, on utilise un algorithme bien connu du monde de l'industrie : le régulateur PID.
Arduino
Afin de réduire les coûts du projet, l'association Plastic Odyssey souhaite baser son système de régulation de température sur une carte Arduino. L'enjeu inhérent est d'avoir un équipement peu cher et facilement maintenable avec des ressources limitées, notamment pour les pays émergents, en privilégiant par exemple des solutions open source.
Dans l’environnement Arduino, le développement se fait en C++. Un ensemble de bibliothèques fourni dans un SDK facilite son utilisation et laisse des possibilités telles que :
- récupération de données d'entrées de la carte ;
- contrôle et alimentation des sorties ;
- connexion et accès simplifiés à différents composants périphériques.
Sur ce projet, le but est de connecter sur une pin d’entrée un capteur de température (thermocouple) et sur une pin de sortie une résistance chauffante (techniquement, on laisse passer de la puissance électrique sur un relais permettant le fonctionnement de la résistance).
De plus, ici, une carte Arduino sera le “cerveau” de plusieurs contrôleurs : on souhaitera par exemple avoir une température de 100℃ en un point, 200℃ dans un autre et 300℃ dans un dernier. Ainsi, le programme développé pourra contrôler plusieurs systèmes de régulation de température en même temps.
Imitation des conditions réelles
Durant ce hackathon, il nous était impossible d'être en conditions réelles, faute de matériel et différentes machines qui seront présentes sur le bateau.
Les deux parties manquantes étaient :
- le système d'évolution de température en fonction de la puissance de chauffe fournie ;
- le système de chauffe par une résistance chauffante.
Pour pallier cela, l'évolution de la température était simulée (évolution constante de la température au fil du temps) et la résistance chauffante était remplacée par une diode électroluminescente, la puissance de chauffe étant symbolisée par l'intensité de la lumière.
Équipe
Plusieurs mini-projets étaient développés pendant ce hackathon. Sur celui de régulation de température, nous étions 2 développeurs (j’ai eu le plaisir de rencontrer Julia pour cette aventure) et nous avions peu d'expérience des systèmes embarqués.
Nous avons donc dû apprendre ces technologies (concepts Arduino, C++, électronique) pendant ces 2 jours de hackathon, en plus de délivrer une application fonctionnelle.
Les autres personnes volontaires pour réaliser ce hackathon étaient Julien, Rodolphe, Anne et Jonathan.
Les deux personnes de l’association Plastic Odyssey présentes dans le cadre de ce hackathon étaient Alexandre et Julie.
Déroulement du hackathon
Jour 1 : Jour de doute
Le premier jour était le jour de découverte de l'environnement. Les premières étapes ont été d'installer l'environnement de développement, de brancher une première DEL sur la carte Arduino et de créer un programme pour la faire clignoter.
Une fois cette première étape fonctionnelle, nous avons pu tenter la suivante : récupérer la température depuis un thermocouple branché à notre Arduino. Cette tâche s'est avérée beaucoup plus ardue que prévue. En effet, après de nombreux essais et beaucoup de temps écoulé, nous n'avons jamais réussi à récupérer de données de température cohérentes.
Ainsi, à la fin de la journée, on se retrouvait dans une position assez inconfortable : on n'avait rien produit sur le besoin réel de l'association. En effet, on avait perdu beaucoup de temps avec des choses pour lesquelles nous n'avions pas une forte valeur ajoutée : l'électronique et l'informatique embarquée.
Suite à une discussion avec les coaches agile et des personnes de l'association présents lors de ce hackathon, nous avons décidé de nous recentrer sur notre corps de métier qui est le développement en réfléchissant à un algorithme précis à implémenter le lendemain.
Jour 2 : Jour de pragmatisme
Le deuxième jour avait pour but d'apporter le plus d'aide possible à Plastic Odyssey afin que ce hackathon débouche sur une première étape fonctionnelle. Nous avons dû faire preuve de pragmatisme : nous n'allions pas pouvoir leur fournir une application prête à être mise en production. Nous nous sommes alors concentrés sur le corps de l'algorithme afin d’avoir un résultat concret à montrer d’ici la fin du hackathon.
Nous avons ainsi travaillé toute la journée dans cette optique. À la fin de ce deuxième jour, nous avions une première version intéressante de l'application, avec un code découpé en responsabilités et facilement évolutif. Nous avons d’ailleurs pu présenter nos résultats lors de la clôture de la conférence MiXiT : 3 DEL allumées à pleine puissance au début, puis une diminution de l’intensité jusqu’à obtenir la température voulue (vidéo ici).
À la recherche de méthodes efficaces
Afin de réaliser ce challenge sur un timing serré, il a fallu trouver des méthodes de travail nous simplifiant le développement et nous rendant plus efficaces.
Pair programming
Nous avons évolué en pair programming tout au long de ce hackathon. Cela nous a beaucoup aidé. En effet, comme nous ne maîtrisons pas vraiment notre sujet, cela évitait facilement les erreurs de débutants, comme les erreurs de syntaxe ou les fautes de frappes, et nous donnait des idées pour contourner les problèmes.
Ce mode de fonctionnement était également pratique pour nous dans la mesure où il n’y avait pas assez de matériel de test lors de ce hackathon pour que tout le monde puisse avancer en parallèle.
Pseudo-TDD
Étant convaincu des bienfaits de la technique du Test Driven Development
, je l'applique au quotidien lorsque je travaille avec mes outils et langages de prédilection. Or, dans le cadre du hackathon, je n'ai pas pu prendre le temps de découvrir les outils nécessaires à la création de tests automatisés dans l'écosystème de l'Arduino/C++.
On a cependant essayé de reprendre le grand principe de la méthode : Red-Green-Refactor avec ce qu’on avait sous la main pour simuler les tests : la DEL.
On s'est ainsi servi du postulat suivant pour nos développements : la DEL allumée signifie que le code répond à nos attentes (et donc équivalent à un test correct). Le but était, au fur et à mesure du développement, d’allumer la DEL avec le minimum de code possible, allant de petites fonctionnalités en petites fonctionnalités, en intégrant des phases de refactoring entre chaque développement.
La méthode utilisée se rapproche également du Outside-In TDD : on a d’abord conçu le système dans son ensemble, câblé différents composants vides, puis implémenté composant par composant pour répondre aux différentes fonctionnalités demandées au fur et à mesure du hackathon.
Ceci n'était pas optimal mais avait au moins 2 gros avantages en commun avec les méthodes TDD classiques : avancer petit à petit dans le développement de la solution et avoir une boucle de feedback rapide de détection d'erreur.
Pour conclure
Le développement de ce module a été une réussite. Le fonctionnement correspond à l'attente de l'association Plastic Odyssey. Ils pourront partir de cette base pour effectuer leurs premiers essais de régulation de température. L’ensemble des connaissances a été transmis aux responsables de l’association Plastic Odyssey pour qu’ils puissent reprendre/continuer le travail commencé pendant ces 2 jours.
Ce hackathon m'a apporté beaucoup de connaissances du monde de l'Arduino, des systèmes embarqués, mais aussi sur les contraintes du développement en temps limité. Travailler en pair programming avec une personne que je n’avais jamais rencontrée a aussi été une expérience très enrichissante.
Si vous êtes intéressés pour participer au projet, n'hésitez pas à contacter l'équipe de Plastic Odyssey et pourquoi pas contribuer au développement de cette solution.
Vous trouverez également quelques autres photos de ce hackathon ici.