Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Les capteurs de couleur fournissent des solutions plus fiables aux défis
d'automatisation complexes. Ils sont utilisés dans diverses industries, y
compris les industries de l'alimentation et des boissons, de l'automobile et de
la fabrication à des fins telles que la détection de matériaux, la détection de
marques de couleur sur les pièces, la vérification des étapes du processus de
fabrication, etc.
Alors que des capteurs de couleur coûteux sont utilisés dans les applications
industrielles, des capteurs peu coûteux tels que le capteur de couleur TCS230
peuvent être utilisés pour des applications moins strictes.
Le capteur de couleur TCS230 (également sous la marque TCS3200) est très
populaire, peu coûteux et facile à utiliser. Avant d'utiliser ce capteur de couleur
dans notre projet Arduino, il serait bon de voir comment un capteur de couleur
fonctionne réellement.
Lorsque la lumière blanche tombe sur une surface, certaines longueurs d'onde
de la lumière sont absorbées et d'autres sont réfléchies, en fonction des
propriétés du matériau de surface. La couleur que nous voyons est le résultat
de laquelle les longueurs d'onde sont réfléchies dans nos yeux.
Le capteur lui-même est visible au centre du module, entouré par les quatre
LED blanches. Les LED s'allument lorsque le module est sous tension et sont
utilisées pour éclairer l'objet détecté. Grâce à ces LED, le capteur peut
également fonctionner dans l'obscurité totale pour déterminer la couleur ou la
luminosité de l'objet.
Fonctionnement du TCS230
Le TCS230 détecte la couleur à l'aide d'un réseau 8 x 8 de photodiodes, dont
seize photodiodes ont des filtres rouges, 16 photodiodes ont des filtres verts,
16 photodiodes ont des filtres bleus et 16 photodiodes restantes sont claires
sans filtre.
Si vous regardez de près le capteur, vous pouvez réellement voir ces filtres.
Chacune des 16 photodiodes est connectée en parallèle, donc en utilisant
deux broches de contrôle S2 et S3, vous pouvez choisir laquelle d'entre elles
lire. Ainsi, par exemple, si vous souhaitez détecter uniquement la couleur
rouge, vous pouvez sélectionner 16 photodiodes filtrées en rouge en
définissant les deux broches sur LOW selon le tableau.
S2 S3 Type de photodiode
FAIBLE HAUTE 2%
Aucune des broches utilisées sur l'Arduino n'est critique car le module ne
nécessite aucune fonctionnalité spécifique aux broches, donc si vous
souhaitez utiliser différentes broches, vous pouvez le faire en toute
sécurité. Assurez-vous simplement de changer les numéros de broches dans
le code pour refléter toute modification du câblage.
Une fois que votre capteur est connecté à l'Arduino, il est temps d'écrire du
code!
Calibrage du capteur
Nous utiliserons en fait deux croquis pour travailler avec le capteur de couleur
TCS230.
Chargez l'esquisse sur votre Arduino et montez le capteur de sorte qu'il soit
face aux objets. Commencez par trouver un objet de référence pour la couleur
blanche et noire. Ces objets de référence produiront des lectures aux valeurs
maximales et minimales pour les trois couleurs.
void setup() {
// Set S0 - S3 as outputs
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
void loop() {
// Read Red Pulse Width
redPW = getRedPW();
// Delay to stabilize sensor
delay(200);
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8
int redPW = 0;
int greenPW = 0;
int bluePW = 0;
void setup() {
// Set S0 - S3 as outputs
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
int getRedPW() {
// Set sensor to read Red only
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
// Define integer to represent Pulse Width
int PW;
// Read the output Pulse Width
PW = pulseIn(sensorOut, LOW);
// Return the value
return PW;
}
De retour dans la boucle, nous appelons trois fonctions pour lire les largeurs
d'impulsion de couleur, en ajoutant un délai de 200 ms entre elles pour
permettre au capteur de se stabiliser. Nous imprimons ensuite les valeurs sur
le moniteur série et répétons la boucle.
void loop() {
// Read Red Pulse Width
redPW = getRedPW();
// Delay to stabilize sensor
delay(200);
// Calibration Values
// *Get these from Calibration Sketch
int redMin = 0; // Red minimum value
int redMax = 0; // Red maximum value
int greenMin = 0; // Green minimum value
int greenMax = 0; // Green maximum value
int blueMin = 0; // Blue minimum value
int blueMax = 0; // Blue maximum value
void setup() {
// Set S0 - S3 as outputs
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
void loop() {
// Read Red value
redPW = getRedPW();
// Map to value from 0-255
redValue = map(redPW, redMin,redMax,255,0);
// Delay to stabilize sensor
delay(200);
Explication du code
Vous remarquerez que la majorité de cette esquisse est exactement la même
que l'esquisse précédente, sauf:
Les six valeurs de calibrage que vous avez obtenues à partir de l'esquisse de
calibrage sont entrées dans la partie supérieure de l'esquisse.
// Calibration Values
int redMin = 0; // Red minimum value
int redMax = 0; // Red maximum value
int greenMin = 0; // Green minimum value
int greenMax = 0; // Green maximum value
int blueMin = 0; // Blue minimum value
int blueMax = 0; // Blue maximum value
Trois nouvelles variables sont définies pour les valeurs RVB que nous voulons
générer.
int redValue;
int greenValue;
int blueValue;
Dans la section boucle, nous lisons chacune des valeurs en utilisant la même
fonction que celle utilisée dans l'esquisse précédente. Ensuite, nous utilisons
la map()fonction Arduino pour convertir ces valeurs en valeurs RVB, en utilisant
nos valeurs d'étalonnage comme référence.
Notez que nous avons inversé la plage (la valeur Min est mappée à 255 amd
La valeur Max est mappée à 0) car nos fonctions renvoient la largeur
d'impulsion, pas la fréquence.
Enfin, nous sortons les valeurs sur le moniteur série. Ces lectures finales
correspondront aux valeurs RVB de l'élément en cours de numérisation.