Skip to main content

Conception du système

Nous documentons ici les étapes de conception de notre système. Ces étapes sont séparées en deux grandes parties : la partie "IA" et la partie "Matériel".

Partie "IA"

Le modèle IA permettra d'analyser et de trier les déchets déposés. Il prend en entrée l'image du déchet et renvoie en sortie le résultat ("recyclable" ou "non recyclable").

Nous avons détaillé les étapes de création de ce modèle dans le GitHub suivant :

PlasticSense - Modèle IA


Partie "Matériel"

Cette partie englobe l'ensemble des méthodes utilisées afin de passer à un vrai système embarqué fonctionnant dans le monde réel.

L'architecture matérielle de notre système électronique peut être représentée de la façon suivante :

Comme vous pouvez le voir, la Raspberry Pi est le cœur de notre système. Elle lit l'état du bouton poussoir, actionne la prise d'image pour la caméra et commande le servomoteur et les LEDs.

Installation du système d'exploitation

La première chose à faire est d'installer le système d'exploitation de la Raspberry Pi sur la carte SD dédiée. Pour cela, on procède par étapes : 

  • Insérer la carte SD dans un adaptateur et la connecter à un ordinateur
  • Lancer le logiciel Raspberry Pi Imager
  • Installer le système d’exploitation sur la carte SD
  • Éjecter proprement la carte SD une fois l’installation terminée
  • Insérer la carte SD dans la Raspberry Pi
  • Démarrer la Raspberry Pi

Au démarrage, la Raspberry Pi se connectera automatiquement au réseau Wi-Fi défini lors de l'installation (j'ai choisi de la connecter au Wi-Fi de mon ordinateur dans un premier temps).

Configuration de la caméra

On a choisi la caméra JT V2-77 (basée sur le capteur Sony IMX219 - 8 mégapixels) pour la capture d’images de déchets à analyser par le modèle d’IA. Pour suivre les étapes de configuration, on peut se référer au datasheet ici.

La caméra est reliée à la Raspberry Pi via le port CSI (Camera Serial Interface). Avant toute manipulation, la carte est mise hors tension afin d’éviter tout risque électrique. La nappe de connexion est ensuite insérée dans le connecteur CSI en veillant à respecter le sens des contacts. Une vérification est effectuée pour garantir une fixation correcte et stable du module.

Une fois la caméra connectée, il est nécessaire de l’activer au niveau du système d’exploitation de la Raspberry Pi. Pour cela, le fichier de configuration système est modifié afin d’activer explicitement le capteur IMX219.

Pour ouvrir le fichier de configuration système, on utilise la commande suivante : 

sudo nano /boot/config.txt

On y ajoute ensuite les lignes suivantes :

dtoverlay=imx219
camera_auto_detect=0

Cette configuration permet de forcer la détection du module caméra et d’assurer sa compatibilité avec le système.

Après modification de la configuration, la Raspberry Pi est redémarrée afin d’appliquer les changements et d’initialiser correctement le pilote de la caméra : 

sudo reboot

Le bon fonctionnement du module est ensuite vérifié à l’aide des outils intégrés du système.

Pour vérifier le branchement de la caméra : 

libcamera-hello

Pour tester la prise d'image, on peut capturer une image de test : 

libcamera-jpeg -o test.jpg

Ces tests permettent de confirmer que la caméra est correctement détectée et que les images sont exploitables pour le traitement.

Intégration et configuration du servomoteur

Afin de réaliser le tri physique des déchets après leur classification, un servomoteur Feetech SCS0009 a été intégré au système. Son rôle est d'actionner le mécanisme de tri et d'orienter le déchet vers le compartiment correspondant à la décision prise par le modèle d'intelligence artificielle.

Le servomoteur a été fixé sur la structure mécanique du système de tri. Celui-ci contient trois fils :

  • Fil d'alimentation (rouge)
  • Fil de masse (noir)
  • Fil de données (blanc)

Ce modèle fonctionne via une communication série UART half-duplex sur un seul fil de données.
Le servomoteur reçoit des instructions sous forme de trames série numériques. Ces trames contiennent notamment :

  • l’identifiant du servomoteur
  • la position angulaire demandée
  • la vitesse de déplacement
  • des paramètres de contrôle internes

La communication est réalisée sur une seule ligne de données bidirectionnelle, ce qui signifie que l’émission et la réception se font sur le même fil.

La liaison entre la Raspberry Pi 4 et le servomoteur est réalisée via l’interface UART, adaptée au mode half-duplex du servo. Pour ce faire, il faut relier ensemble les broches TX et RX (broches 8 et 10) de la Raspberry Pi via un montage résistif, afin de permettre l’adaptation du signal vers le bus du servomoteur tout en protégeant les ports GPIO.

Le câblage est donc le suivant :

  • TX et RX de la Raspberry Pi reliés au bus de communication
  • Résistances utilisées pour limiter les conflits électriques entre émission et réception
  • Masse commune entre la Raspberry Pi et le servomoteur
  • Alimentation externe (5V) dédiée pour le servomoteur

Attention : Il ne faut pas alimenter le servomoteur par la Raspberry Pi, car il nécessite un courant plus élevé. C'est pour cela qu'il est important d'avoir l'alimentation externe.

La Raspberry Pi utilise son interface série UART pour envoyer les commandes :

  • activation de l’UART via raspi-config
  • utilisation du port /dev/serial0
  • désactivation de la console série système

Commande de vérification :

ls /dev/serial*

Le contrôle du servomoteur se fait par l’envoi de trames série structurées correspondant au protocole Feetech.

Le programme :

  • ouvre le port série /dev/serial0
  • envoie une trame contenant l’ordre de position
  • attend l’exécution de la commande par le servo

Le servomoteur interprète directement la trame et ajuste sa position en conséquence.

Des tests ont été réalisés afin de :

  • vérifier la bonne communication série entre la Raspberry Pi et le servomoteur
  • identifier les positions correspondant aux différents compartiments de tri
  • ajuster les angles de rotation
  • valider la stabilité des déplacements

Ces tests ont permis de déterminer les positions optimales pour l’orientation des déchets vers les différents bacs.

Assemblage mécanique du système de tri

Afin de permettre l'orientation des déchets vers les compartiments de tri, une structure mécanique simple a été conçue et réalisée.

La structure principale est constituée de deux plaques de bois parallèles servant de supports latéraux. Pour découper le bois, j'ai utilisé la découpeuse laser Trotec Speedy 360.
 
Ces deux plaques sont reliées par une tige en bois traversante, formant l'axe de rotation du mécanisme.
Cette configuration permet d'obtenir une structure rigide tout en conservant une rotation fluide de l'axe central.

Un plateau de diamètre 10 cm a été conçu et fabriqué par impression 3D puis fixé sur la tige en bois. Pour l'impression 3D, j'ai utilisé la machine Prusa MK4S.

Ce plateau constitue la zone de réception du système : l'utilisateur y dépose le déchet avant son analyse par la caméra.

Le recours à l'impression 3D a permis de réaliser une pièce légère, adaptée aux dimensions du mécanisme et aux caractéristiques du servomoteur (notamment le couple, qui est d'environ 2,3 kg.cm selon le datasheet).

Le servomoteur est intégré dans l'une des deux plaques de bois. Son axe est directement relié à la tige centrale afin de transmettre le mouvement de rotation au plateau.

Lorsque la Raspberry Pi envoie une commande au servomoteur, celui-ci fait pivoter la tige ainsi que le plateau supportant le déchet. Le mouvement obtenu permet alors d'orienter l'objet vers la direction correspondant au résultat de la classification.

Afin d'assurer une rotation stable de l'axe, un petit clou a été installé au centre de la seconde plaque de bois, en face du servomoteur. Ce clou agit comme un point d'appui et de guidage pour l'extrémité libre de la tige.

Cette solution permet de maintenir l'alignement de l'axe de rotation.

Interface utilisateur

Afin de faciliter l'utilisation du système et de fournir des informations sur son état de fonctionnement, une interface utilisateur simple a été mise en place. Celle-ci est composée d'un bouton poussoir permettant de lancer le processus de tri ainsi que de trois LEDs de signalisation.

Un bouton poussoir a été connecté à la Raspberry Pi afin de permettre à l'utilisateur d'interagir avec le système. Le bouton est relié entre la broche physique 16 (GPIO23) et la masse (GND, broche physique 14).

Lorsqu'il est actionné, le bouton envoie un signal à la Raspberry Pi qui déclenche le cycle de traitement. Cette approche permet à l'utilisateur de contrôler le démarrage de l'analyse après avoir déposé un déchet sur le plateau.

Trois LEDs ont été intégrées afin d'informer l'utilisateur de l'état du système en temps réel. Elles sont connectées aux broches GPIO de la Raspberry Pi via des résistances de protection.

Les connexions réalisées sont les suivantes :

Couleur de la LEDBroche physiqueGPIOFonction
Verte11GPIO17Système prêt
Rouge13GPIO27Erreur ou problème détecté
Jaune15GPIO22Traitement en cours

L'interface utilisateur suit la logique suivante :

  • LED verte allumée : le système est opérationnel et prêt à recevoir un déchet.
  • LED jaune allumée : une opération est en cours d'exécution (capture d'image, traitement par l'intelligence artificielle ou commande du mécanisme de tri).
  • LED rouge allumée : une erreur est détectée, telle qu'un problème de communication avec un composant ou une anomalie durant l'exécution du programme.

Après la mise sous tension du système et l'initialisation des différents modules, la LED verte s'allume pour signaler que le dispositif est prêt à être utilisé. Lorsque l'utilisateur appuie sur le bouton poussoir pour lancer une opération de tri, la LED jaune s'allume pendant toute la durée du traitement. En cas d'erreur, la LED rouge est activée afin d'avertir immédiatement l'utilisateur.

Intégration du système complet

Après la réalisation des différentes parties matérielles et logicielles, l'ensemble des composants a été intégré afin de constituer un système de tri intelligent entièrement fonctionnel.

L'architecture finale comprend :

  • une Raspberry Pi 4 Model B servant d'unité centrale de traitement ;
  • une caméra JT V2-77 permettant la capture des images ;
  • un modèle d'intelligence artificielle embarqué pour la classification des déchets ;
  • un servomoteur Feetech SCS0009 servo motor chargé d'orienter le mécanisme de tri ;
  • un bouton et plusieurs LEDs utilisés comme interface utilisateur ;
  • la structure mécanique composée des plaques en bois, de la tige rotative et du plateau imprimé en 3D.

Dans un premier temps, les différents composants électroniques ont été installés et raccordés à la Raspberry Pi. La caméra a été positionnée de manière à obtenir une vue claire du plateau de dépôt des déchets. Le servomoteur a été intégré à la structure mécanique afin de contrôler la rotation du plateau. Les LEDs ont été placées de façon visible pour fournir un retour d'information à l'utilisateur.

Une fois les connexions réalisées, l'ensemble des éléments a été fixé sur la structure afin d'obtenir un système compact et stable.

Après les tests unitaires réalisés sur chaque composant, un programme principal a été développé en Python afin de coordonner l'ensemble des fonctionnalités du système.

Ce programme assure notamment :

  • la surveillance du bouton poussoir ;
  • la gestion des LEDs d'état ;
  • la capture des images via la caméra ;
  • l'exécution du modèle d'intelligence artificielle embarqué ;
  • l'interprétation du résultat de classification ;
  • l'envoi des commandes au servomoteur ;
  • la gestion des erreurs éventuelles.

L'objectif est de permettre une exécution entièrement automatique du processus de tri à partir d'une simple action de l'utilisateur.

Le fonctionnement du système se déroule selon les étapes suivantes :

  1. Le système démarre et initialise les différents composants.
  2. La LED verte s'allume pour indiquer que le système est prêt à être utilisé.
  3. L'utilisateur dépose un déchet sur le plateau puis appuie sur le bouton poussoir.
  4. La LED jaune s'allume afin de signaler le lancement du traitement.
  5. La caméra capture une image du déchet.
  6. L'image est transmise au modèle d'intelligence artificielle exécuté sur la Raspberry Pi.
  7. Le modèle détermine si le déchet appartient à la catégorie « recyclable » ou « non recyclable ».
  8. En fonction du résultat obtenu, une commande est envoyée au servomoteur qui fait pivoter le plateau vers la position correspondante.
  9. Une fois le tri effectué, le plateau revient à sa position initiale.
  10. La LED verte se rallume pour indiquer que le système est prêt pour un nouveau cycle.
  11. En cas d'anomalie, la LED rouge est activée afin d'informer l'utilisateur qu'une intervention est nécessaire.

Une série d'essais complets a été réalisée afin de vérifier le bon fonctionnement de l'ensemble du système.

Ces essais ont permis de valider :

  • la communication entre les différents composants ;
  • le déclenchement du traitement via le bouton poussoir ;
  • la capture correcte des images ;
  • l'exécution du modèle d'intelligence artificielle sur la Raspberry Pi ;
  • l'affichage des états du système via les LEDs ;
  • le pilotage du servomoteur ;
  • le bon déroulement du processus de tri.

Les résultats obtenus ont confirmé la bonne intégration des différentes parties du projet et ont démontré la faisabilité d'un système de tri intelligent reposant sur une architecture embarquée à base de Raspberry Pi.

Voici une image du système final obtenu : 

IMG_2360.jpeg

Le bac de gauche nommé "NR" (pour "non recyclables") accueillera les déchets non recyclables. Celui de droite nommé "R" (pour "recyclables") accueillera les déchets recyclables.