Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Prototype de capteur de couleur :Détecter le nom de la couleur à partir d'objets

Composants et fournitures

Arduino UNO
× 1
Anode commune diffuse RVB
Cathode commune, ou anode... utilisez ce que vous avez
× 1
Résistance photo
× 1
Adafruit Standard LCD - 16x2 Blanc sur Bleu
Tout ce qui peut être utilisé avec la bibliothèque LiquidCrystal Arduino
× 1
Résistance 10k ohm
Pour interrupteur tactile et cellule CdS
× 2
Résistance 100 ohm
150 ohm pour la broche rouge et 2x 100 ohm pour les broches verte et bleue de la LED RVB
× 3
Interrupteur à bouton-poussoir SparkFun 12mm
× 1
Câbles de raccordement (générique)
× 1
Planche à pain (générique)
× 1

Applications et services en ligne

Atelier de topologie MLP
Outil utilisé pour recycler les réseaux de neurones à utiliser avec la bibliothèque Neurona dans Arduino.

À propos de ce projet

Ceci est une version simplifiée de l'article complet, dans un souci de simplicité, afin que la reproduction de ce projet puisse se faire facilement. Consultez également ce projet sur mon blog pour plus de détails sur la mise en œuvre.

Cet article est divisé en sections répertoriées dans le menu de droite. Si vous souhaitez accéder aux détails techniques, consultez la table des matières à droite ou téléchargez le code sur le référentiel GitHub. Avant de continuer votre lecture, regardez la vidéo du projet pour voir en quoi consiste vraiment ce projet :)

Présentation du projet

Similaire à la vision des couleurs de l'œil humain, ainsi que basé sur la lumière, le modèle RGB comprend plus de 16 millions de couleurs , qui sont disposés dans un espace 3D , où les valeurs entières des composantes R (Rouge), G (Vert) et B (Bleu), allant de 0 à 255, constituent les coordonnées de cet espace. À partir de ce modèle, la détection et la reconnaissance des couleurs ont été effectuées avec des composants électroniques liés à la lumière et des mécanismes d'apprentissage automatique; il s'agit essentiellement de la combinaison d'une LED RVB et d'une cellule CdS (capteur de lumière, ou LDR), toutes deux isolées de la lumière ambiante . Ces composants, respectivement, émettent et détectent l'intensité de chaque lumière (rouge, verte et bleue) qui a été réfléchie par un objet d'une couleur particulière.

Perceptron multicouche

Le Perceptron multicouche (MLP) est une architecture prédictive de réseaux de neurones artificiels, comportant une couche d'entrée (non neuronale), des couches cachées et une couche de sortie. Ce réseau est entraîné par un algorithme de rétropropagation, effectuant un apprentissage supervisé (apprentissage par exemples).

Pour ce capteur de couleur, le réseau de neurones illustré ci-dessus reçoit 3 entrées (valeurs RVB) , ayant une couche cachée avec 6 neurones et une couche de sortie avec 10 neurones - juste pour rappel :la couche de sortie doit avoir le même nombre de classes (couleurs, dans ce cas), pour une sortie binarisée. Pour ce tutoriel, le réseau est déjà formé et capable de reconnaître les couleurs :). Plus de détails sur les étapes d'entraînement et l'exemple d'ensemble de données utilisé pour cela, consultez l'article complet sur mon blog.

Reconnaissance des couleurs

Cette tâche peut être effectuée à l'aide de notre réseau MLP formé. Il permet la classification et la reconnaissance de motifs séparables dans l'espace - très utile dans ce cas. Lors de son étape d'apprentissage, le réseau a cartographié les régions dans l'espace colorimétrique RVB illustré ci-dessous, de sorte que chaque région isolée par des hyperplans représente une couleur . Par conséquent, chaque nouveau motif de couleur RVB (représenté comme un point 3D) tombe dans une région particulière, étant classé comme sa couleur respective.

Dans le but d'obtenir une généralisation avec un MLP pour une bonne reconnaissance des motifs RVB, un ensemble d'apprentissage (exemples de couleurs avec la sortie souhaitée de l'espace 3D illustré ci-dessus) doit être présenté au réseau pour l'étape d'apprentissage. L'ensemble de formation utilisé dans ce projet est disponible sur le GitHub du projet dépôt. Si vous aimez les réseaux de neurones, continuez à lire cette section et consultez ce terrain de jeu que j'ai développé, afin que vous puissiez utiliser l'ensemble de données pour entraîner le réseau vous-même et l'utiliser dans le code :). Sinon, passez aux détails de la mise en œuvre .

La généralisation se produira dans le domaine que comprend l'ensemble d'apprentissage, donc il vaut la peine de prêter attention aux valeurs min et max de chaque composant de l'espace ! N'alimentez pas le réseau avec des modèles en dehors de ce domaine, sinon la sortie ne devrait pas fonctionner correctement.

L'ensemble de données (tous les exemples) contient 75 instances de motifs de couleur allant de 0 à 1. Initialement allant de 0 à 255, ces instances ont été redimensionnées en divisant simplement chaque valeur par 255, de sorte que 0 <=x1, x2, x3 <=1 Comme on peut le voir dans l'ensemble de données, il est important de souligner qu'un seul neurone de la couche de sortie doit sortir 1, tandis que les autres doivent sortir zéro. Du fait qu'un réseau entraîné génère des valeurs flottantes, le post-traitement s'effectue comme suit :

où yi est la sortie du i-ème neurone et max(y) est la plus grande valeur de sortie. En termes pratiques, le neurone avec la plus grande sortie donne 1 comme sortie et les autres donnent 0. C'est aussi simple.

Circuit électronique

Découlant d'objets, toute la procédure de détection se déroule dans le circuit électronique, englobant l'activité de calcul s'exécutant dans un Atmega328, qui est connecté aux cartes Arduino. Vérifiez le câblage à partir des schémas ci-dessous.

Le code suit le schéma ci-dessus qui utilise une anode commune LED RVB. Cela dit, vérifiez si votre LED RVB est également une anode commune, sinon inversez simplement la logique dans le code .

Un autre détail important est que je n'utilise qu'une seule résistance avec la LED RVB. Puisqu'une couleur à la fois sera allumée, j'ai mis la résistance dans l'anode commune, avec une résistance moyenne des résistances qui aurait dû être avec les cathodes - c'est paresseux, je sais et je suis désolé ! Quand je suis allé acheter des pièces de projet, ils n'avaient pas tout ce dont j'avais besoin - mais il est cependant très important d'utiliser les bonnes résistances avec les cathodes afin d'avoir la fidélité des valeurs RVB collectées par rapport aux valeurs RVB de l'ordinateur. La façon dont j'ai fait n'est pas si mal, puisque les motifs ne sont pas déformés; ce ne sont tout simplement pas les mêmes couleurs que celles que nous voyons sur un écran d'ordinateur (et comme les captures d'un œil humain).

On peut observer sur les schémas la contiguïté entre la LED RVB et la cellule CdS. C'est parce qu'ils doivent être isolés de la lumière ambiante (un vieux tube de film noir est la pièce parfaite), donc l'étalonnage (expliqué dans Programmation) et la reconnaissance peuvent être effectués. Consultez la vidéo du projet pour voir ces composants isolés de la lumière ambiante.

Théorie des couleurs

La perception des couleurs effectuée par le circuit électronique est basée sur les concepts de la théorie des couleurs. Puisqu'il n'y a pas (encore) de lentilles impliquées, seuls les objets avec un matériau opaque (et mat) doivent être considérés , évitant de traiter la réflexion spéculaire de la LED. D'autre part, la réflexion diffuse est la clé pour effectuer une détection de couleur avec des lumières. À partir d'une lumière incidente, elle se reflète sur des surfaces irrégulières, ne créant pas cet effet brillant qui ruine le fonctionnement de la cellule CdS.

Pour en revenir à la théorie des couleurs, lorsque la lumière (d'une certaine couleur) atteint un objet, elle est réfléchie en fonction des propriétés de la couleur de cet objet. Par exemple, une lumière rouge atteignant un objet jaune sera réfléchie en fonction de la quantité de rouge dans la composition de cette couleur jaune - rappelez-vous, nous parlons de lumières ! - on s'attend donc à ce que beaucoup de lumière rouge soit réfléchie, ce qui a du sens quand on pense à la composition RVB du jaune (essentiellement rouge et vert). Cependant, lorsqu'une lumière bleue atteint l'objet jaune, aucune réflexion forte n'est attendue en raison de la faible présence de bleu dans la composition des couleurs.

Considérant un système de couleurs additives, dans lequel le blanc et le noir sont respectivement la présence et l'absence de toutes les couleurs (plus de détails ici ), on peut mesurer (avec la Cellule CdS) les réflexions maximales et minimales de chaque lumière de la LED RVB qui atteindra les objets colorés. Cela dit, il est possible d'effectuer l'étalonnage dans les composants électroniques impliqués dans le circuit. C'est une autre clé pour obtenir la fidélité dans la détection, ainsi que pour assurer une détection stable des modèles (en évitant les valeurs aberrantes) - voici un conseil en or :après calibrage, essayez (fort !) de ne pas déplacer ou toucher ni les composants électroniques (surtout lorsqu'ils sont placés dans une maquette), ni la pièce que vous utilisez (vous devez utiliser) pour isoler les composants de la lumière ambiante.

US_plugins_acrobat_en_motion_education_colorTheory.pdf

Programmation

Pour l'étalonnage et la reconnaissance, le capteur de couleur exécute trois itérations, une fois qu'un objet coloré est exposé à la LED RVB et à la cellule CdS. Dans la première itération, la lumière rouge frappe l'objet et le programme attend que la cellule CdS stabilise sa détection ; l'entrée analogique est alors lue et le reflet de la lumière rouge est mémorisé. Le programme itère deux fois de plus pour les couleurs vertes et bleues. La figure montrée dans la théorie des couleurs donne une bonne explication visuelle de ce processus itératif.

Concernant l'étalonnage, le processus itératif mentionné ci-dessus est effectué deux fois :une fois pour la couleur noire et une fois pour la couleur blanche. Comme expliqué dans la théorie des couleurs, ceci est pour la détection du maximum et du minimum - initialement à partir de près de zéro à près de 1024 , en fonction de la résolution de lecture - réflexions des lumières rouges, vertes et bleues, obtenant une plage réelle pour redimensionner correctement les intervalles [0, 255] (à titre informatif) et [0, 1] (l'entrée réelle pour alimenter le réseau de neurones ).

Le temps d'attente pour établir la lecture du capteur de lumière peut varier selon chaque composant électronique, il est donc bon de donner un bon délai pour assurer une détection stable. Dans mon cas, j'ai donné un délai de 500 millisecondes, mais cela vaut la peine d'utiliser d'abord une valeur plus grande, puis de la diminuer jusqu'au bord d'un comportement instable.

En détection, les valeurs RVB collectées - allant de 0 à 1 - alimentent un MLP, réalisant la véritable reconnaissance des couleurs. Pour le MLP fonctionnant sous Arduino, j'utilise Neurona - une bibliothèque que j'ai écrite pour utiliser facilement les ANN dans arduino, qui peut être installée à partir de l'IDE Arduino avec le gestionnaire de bibliothèque. Consultez également ce message pour plus de détails.

Comme mentionné précédemment, le réseau est déjà formé et prêt à être détecté dans le code du projet. Il a été formé à l'aide du Playground que j'ai développé, en intégrant les poids ajustés au code, de sorte que la bibliothèque Neurona rend le réseau prêt à fonctionner.

Essais

À titre informatif, certaines couleurs ont été extraites du jeu de données pour effectuer des tests de reconnaissance :

Les nombres à l'extérieur de la figure sont utilisés pour l'identification et les nombres à l'intérieur de la figure indiquent des erreurs de classification, faisant référence aux couleurs qui ont été classées à la place. Ces couleurs ont été imprimées sur du papier sulfite avec une imprimante à jet d'encre - vérifiez les petits carrés de papier dans la vidéo au début de cet article - donc les objets se composent d'un matériau opaque, approprié pour la détection des couleurs.

Code

Prototype de capteur de couleur
Le code à envoyer à arduino se trouve dans le dossier colorSensor. Assurez-vous que votre circuit électronique est construit selon les schémas présentés et que la bibliothèque Neurona est correctement installée (vous pouvez l'installer à partir d'Arduino Library Manager).https://github.com/moretticb/ColorSensor/

Schémas

Utilisez le bouton-poussoir conformément aux instructions sur l'écran LCD

Processus de fabrication

  1. Codes de couleur des résistances
  2. Alarme de soif d'usine
  3. Horloge de mots italienne
  4. Capteur d'obstacles simple avec Arduino
  5. Compteur kWh Sigfox
  6. Moniteur de température Bluetooth
  7. Serrure à commande gestuelle
  8. Une entrée analogique isolée pour Arduino
  9. Mesurez votre temps de réaction