Bouw een Arduino Kleurensorter: Eenvoudige Handleiding met TCS3200 & Servo's
In dit artikel laat ik je zien hoe je een Arduino-kleurensorter kunt bouwen. Je kunt de volgende video bekijken of de geschreven handleiding hieronder lezen.
Ontwerp
Voor dit Arduino-project heb je slechts één kleurensensor (TCS3200) en twee hobby-servomotoren nodig, wat dit project vrij simpel maar toch heel leuk om te bouwen maakt. Allereerst heb ik met de 3D-modelleersoftware SolidWorks het ontwerp van de kleurensorter gemaakt. Hier is het werkingsprincipe:

- Initiëel vallen de gekleurde Skittles, die in de opslaagzolder zitten, op het platform dat op de bovenste servomotor is bevestigd.
- Daarna roteert de servomotor en brengt de Skittle naar de kleurensensor, die de kleur detecteert.
- Vervolgens roteert de onderste servomotor naar de bijbehorende positie, waarna de bovenste servomotor weer roteert tot de Skittle in de geleidingsspoor valt.
Hier kun je het 3D-model downloaden, evenals de tekeningen met alle benodigde afmetingen voor het bouwen van dit Arduino-project.
Je kunt dit 3D-model vinden en downloaden, en het in je browser bekijken op Thangs.

Download het assemblage-3D-model op Thangs.
De volgende tekeningen kunnen worden gebruikt voor het lasercutten van alle onderdelen voor de behuizing:
De Arduino-kleurensorter bouwen
Als materiaal voor dit project heb ik 3 mm dik vezelplaat gebruikt. Ik tekende de onderdelen op de vezelplaat volgens de tekeningen en zaagde alle onderdelen op maat met een kleine handzaag.

Zodra alle onderdelen klaar waren, begon ik met het monteren. Eerst monteerde ik de buitenste onderdelen met een lijmpistool.

Vervolgens plakte ik de twee servomotoren op hun platforms met universele lijm en bevestigde ze aan de assemblage.
Daarna bevestigde ik met lijm de geleidingsspoor aan de onderste servomotor, evenals de steun en het platform voor de bovenste servomotor.

Vervolgens plaatste ik een schakelaar en een voedingsconnector voor het voeden van de Arduino met een 5V-adapter, en op het derde platform plaatste ik de kleurensensor.

Ik verbond de componenten volgens het volgende schakelschema.

De benodigde componenten voor dit Arduino-project vind je via de onderstaande links:
- TCS230 TCS3200 Kleurensensor
- Arduino Nano
- Breadboard en Jumper Draden
- Servomotor
- Schakelaar
- Voedingsconnector
Arduino Kleurensorter Broncode
Op dit moment moeten we eerst de Arduino programmeren en daarna de assemblage afmaken. Hier is de Arduino-code:
/* Arduino Project - Kleurensorteringsmachine
*
* door Dejan Nedelkovski, www.HowToMechatronics.com
* */
#include <Servo.h>
#define S0 2
#define S1 3
#define S2 4
#define S3 5
#define sensorOut 6
Servo topServo;
Servo bottomServo;
int frequency = 0;
int color = 0;
void setup() {
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(sensorOut, INPUT);
// Frequentieschaling instellen op 20%
digitalWrite(S0, HIGH);
digitalWrite(S1, LOW);
topServo.attach(7);
bottomServo.attach(8);
Serial.begin(9600);
}
void loop() {
topServo.write(115);
delay(500);
for(int i = 115; i > 65; i--) {
topServo.write(i);
delay(2);
}
delay(500);
color = readColor();
delay(10);
switch (color) {
case 1: bottomServo.write(50); break;
case 2: bottomServo.write(75); break;
case 3: bottomServo.write(100); break;
case 4: bottomServo.write(125); break;
case 5: bottomServo.write(150); break;
case 6: bottomServo.write(175); break;
case 0: break;
}
delay(300);
for(int i = 65; i > 29; i--) {
topServo.write(i);
delay(2);
}
delay(200);
for(int i = 29; i < 115; i++) {
topServo.write(i);
delay(2);
}
color = 0;
}
// Aangepaste functie - readColor()
int readColor() {
// Rode gefilterde fotodioden instellen om te lezen
digitalWrite(S2, LOW);
digitalWrite(S3, LOW);
// De uitgangsfrequentie lezen
frequency = pulseIn(sensorOut, LOW);
int R = frequency;
// Waarde op de seriële monitor printen
Serial.print("R= "); // naam printen
Serial.print(frequency); // rode kleurfrequentie printen
Serial.print(" ");
delay(50);
// Groene gefilterde fotodioden instellen om te lezen
digitalWrite(S2, HIGH);
digitalWrite(S3, HIGH);
// De uitgangsfrequentie lezen
frequency = pulseIn(sensorOut, LOW);
int G = frequency;
// Waarde op de seriële monitor printen
Serial.print("G= "); // naam printen
Serial.print(frequency); // rode kleurfrequentie printen
Serial.print(" ");
delay(50);
// Blauwe gefilterde fotodioden instellen om te lezen
digitalWrite(S2, LOW);
digitalWrite(S3, HIGH);
// De uitgangsfrequentie lezen
frequency = pulseIn(sensorOut, LOW);
int B = frequency;
// Waarde op de seriële monitor printen
Serial.print("B= "); // naam printen
Serial.print(frequency); // rode kleurfrequentie printen
Serial.println(" ");
delay(50);
if(R < 45 & R > 32 & G < 65 & G > 55) {
color = 1; // Rood
}
if(G < 55 & G > 43 & B < 47 & B > 35) {
color = 2; // Oranje
}
if(R < 53 & R > 40 & G < 53 & G > 40) {
color = 3; // Groen
}
if(R < 38 & R > 24 & G < 44 & G > 30) {
color = 4; // Geel
}
if(R < 56 & R > 46 & G < 65 & G > 55) {
color = 5; // Bruin
}
if(G < 58 & G > 45 & B < 40 & B > 26) {
color = 6; // Blauw
}
return color;
}
Beschrijving van de code:
We moeten de "Servo.h"-bibliotheek includeren, de pinnen definiëren waar de kleurensensor aan wordt aangesloten, de servo-objecten aanmaken en enkele variabelen declareren die voor het programma nodig zijn. In de setup-sectie definiëren we de pinnen als uitgangen en ingangen, stellen de frequentieschaling voor de kleurensensor in, definiëren de servo-pinnen en starten de seriële communicatie om de resultaten van de kleurmeting op de seriële monitor te printen.
In de loop-sectie begint ons programma met het verplaatsen van de bovenste servomotor naar de positie van de Skittle-zolder. Let op: deze waarde van 115 past bij mijn onderdelen en mijn servomotor, dus je moet deze waarde evenals de volgende waarden voor de servomotoren aanpassen aan jouw bouw.
Vervolgens gebruiken we een "for"-lus om de Skittle te roteren en naar de positie van de kleurensensor te brengen. We gebruiken een "for"-lus zodat we de rotatiesnelheid kunnen regelen door de vertragingstijd in de lus te veranderen.
Na een halve seconde vertraging lezen we met de zelfgemaakte functie readColor() de kleur van de Skittle. Hier is de code van de aangepaste functie. Met de vier besturingspinnen en de frequentie-uitgangspin van de kleurensensor lezen we de kleur van de Skittle. De sensor leest 3 verschillende waarden voor elke Skittle: Rood, Groen en Blauw, en op basis van deze waarden bepalen we wat de daadwerkelijke kleur is. Voor meer details over de werking van de TCS3200-kleurensensor kun je mijn eerdere gedetailleerde tutorial erover bekijken.

Hier zijn de RGB-waarden die ik van de sensor kreeg voor elke Skittle. Let op dat deze waarden kunnen variëren omdat de sensor niet altijd nauwkeurig is. Daarom laten we met deze "if"-instructies de sensor een foutmarge van ongeveer ±5 van de geteste waarde voor de specifieke kleur toe. Als we bijvoorbeeld een rode Skittle hebben, zal de eerste "if"-instructie waar zijn en krijgt de variabele "color" de waarde 1. Dat is wat de readColor()-functie doet, en daarna roteren we met een "switch-case"-instructie de onderste servomotor naar de bijbehorende positie. Aan het einde roteren we de bovenste servomotor verder tot de Skittle in het geleidingsspoor valt en sturen we hem weer terug naar de initiële positie zodat het proces herhaald kan worden.
Het ontwerp afronden
Na het uploaden van de code bevestigde ik de Arduino-printplaat met een lijmpistool.

Vervolgens maakte ik met een transparante plastic fles de opslaagzolder en plakte deze samen met het bovenste deel aan de assemblage, waarmee het project voltooid was.

Stel gerust je vragen in de reacties hieronder.
Productieproces
- Bouw een indrukwekkend monitor Ambilight-systeem met Arduino
- Bouw een Klassiek Pong-spel op Arduino UNO met OLED-display – Stap-voor-stap Tutorial
- Arduino Audio Frequentie Detector – Meet de luidste geluidspieken met hoge gevoeligheid
- Bouw Je Eigen Arduino Tamagotchi: Een Digitale Huisdier DIY Project
- Slimme Draadloze Lichtschakelaar Controller: Arduino-gebaseerde Remote Switch Manipulator
- Arduino Boter-Kaas-Eieren met MAX7219 LED Matrix en Kartonnen Behuizing
- Slimme beweegactiverde waterpistool gebouwd met Arduino Nano
- Bouw een Betrouwbare Arduino Afteltimer met SparkFun 7‑Segment Display
- Arduino RGB LED Kleurmixer – Beginner-vriendelijk DIY-project
- Arduino Zonnebloem: Bouw een elektronische zon-volgende zonnebloem
- Bouw je eigen RC Porsche-auto met Arduino: Stap-voor-stap handleiding