Projet de tri de couleurs Arduino

FunduinoDernière mise à jour le

Schokolinsen automatisch nach Farbe sortieren

Bei diesem Projekt baust du eine Sortiermaschine für farbige Schokolinsen. Ein Farbsensor TCS3200 erkennt die Farbe, ein Servomotor schwenkt die Linse in das passende Fach.

Die Anleitung geht in mehreren Etappen vor: Zuerst testest du den Farbsensor allein, dann die beiden Servomotoren, anschließend kalibrierst du die Farbwerte und zum Schluss setzt du alles zu einem Programm zusammen.

Beachte beim Kalibrieren: Die Farbwerte hängen stark vom Umgebungslicht ab. Du musst die Werte an deinem Aufbau neu ermitteln, die Zahlen aus der Anleitung sind nur Richtwerte.

Fertige Farbsortiermaschine mit sortierten Schokolinsen
Die fertige Sortiermaschine

So arbeitet die Sortiermaschine

Farbig unsortierte Schokolinsen werden in einen Behälter gegeben und dann der Reihe nach gescannt. Ein Farbsensormodul brauchst du dafür nicht: Die Analyse der Farbe erfolgt über die Stärke des reflektierten Lichts einer farbigen Leuchtdiode.

Der Ablauf im Einzelnen:

  • Das erste Bonbon fällt vom Bonbonbehälter in eine Vertiefung des Drehrads.
  • Das Drehrad dreht das Bonbon mit Hilfe eines Servomotors vor den Scanbereich.
  • Das Bonbon wird mit der RGB-LED nacheinander rot, grün und blau beleuchtet. Gleichzeitig wird die Stärke des reflektierten Lichts für alle drei Farben gemessen. Ein rotes Bonbon reflektiert rotes Licht sehr gut, grünes dagegen nur schwach.
  • Der Mikrocontroller vergleicht die Messwerte und bestimmt die Farbe.
  • Die Bonbonrutsche dreht sich zum Lagerfach der passenden Farbe.
  • Das Drehrad dreht sich nach unten, die Schokolinse fällt auf den Auffangtrichter und rutscht in ihr Fach.
  • Das Drehrad dreht sich zurück in die Ausgangsposition, und das nächste Bonbon rutscht nach.
Explosionsdarstellung der Farbsortiermaschine mit nummerierten Teilen
Die Bauteile im Überblick
Bonbon fällt aus dem Behälter in die Vertiefung des Drehrads
Schritt 1: Bonbon laden
Drehrad dreht das Bonbon vor den Scanbereich
Schritt 2: vor den Sensor drehen
1 / 3

Benötigtes Material

  • 1× Mikrocontroller, zum Beispiel Funduino UNO – Arduino-kompatibel
  • 1× Breadboard (klein)
  • 20× Breadboardkabel Stecker/Fassung
  • 20× Breadboardkabel Stecker/Stecker
  • 1× RGB-LED
  • 1× Fotowiderstand
  • 1× Widerstand 1 kOhm oder 10 kOhm
  • 2× Servomotor TowerPro SG90 oder besser
  • 3D-Druckteile: Bodenplatte mit einzelnen Fächern, Grundträger für Motoren und Sensorik, Abdeckplatte mit Bonbonbehälter, Bonbonrutsche, Drehrad

Die Liste nennt die 3D-Druckteile, verlinkt sie aber nicht. Eine Bezugsquelle für die Druckdateien steht nirgends im Artikel.

Aufbau: den Grundträger bestücken

Der Grundträger wird mit dem Servomotor für das Drehrad, einer RGB-LED und einem Fotowiderstand bestückt. Fotowiderstand und RGB-LED fixierst du mit einem Tröpfchen Kleber, den Servomotor mit den beiliegenden Schrauben.

Aufbau der Sortiermaschine in der Übersicht
Anleitung zum Aufbau
Grundträger mit Servomotor, RGB-LED und Fotowiderstand bestückt
Bestückter Grundträger
1 / 2

Aufbau: Rutsche und Servo montieren

Die Bonbonrutsche wird an der Unterseite mit einem Servohorn bestückt – auch Servobracket, Servohebel oder Servoarm genannt. Damit es passt, kürzt du es etwas ein. Die Rutsche steckst du auf den Servo auf, ohne sie zu verkleben oder zu verschrauben: Sie wird erst später mit einer kleinen Schraube befestigt, sobald die richtige Servoposition gefunden ist.

Den Servomotor schiebst du zusammen mit der montierten Rutsche seitlich in den Grundträger und befestigst ihn von der Unterseite mit Schrauben. Anschließend steckst du den vormontierten Grundträger in die Grundplatte.

Bonbonrutsche mit eingekürztem Servohorn an der Unterseite
Rutsche mit Servohorn
Servomotor mit Rutsche seitlich in den Grundträger geschoben
Servo mit Rutsche einsetzen
Vormontierter Grundträger in der Grundplatte
Grundträger einstecken
1 / 3

Aufbau: Drehrad und Abdeckplatte

Auch das Drehrad bekommt ein eingekürztes Servohorn und wird auf den Servo im Grundträger aufgesteckt – wieder ohne Kleber und Schrauben, bis die Position feststeht.

Die Abdeckplatte mit Bonbonbehälter setzt du von oben auf die Konstruktion. Sie wird weder jetzt noch später fixiert, da du sie während der Programmierung immer wieder abnehmen musst. Neben der Lagerung der Bonbons deckt sie auch den Sensorbereich ab, damit kein Fremdlicht hineinfällt.

Drehrad mit eingekürztem Servohorn auf dem Servo
Drehrad montieren
Abdeckplatte mit Bonbonbehälter auf der Konstruktion
Abdeckplatte aufsetzen
1 / 2

Verkabelung

Angeschlossen werden:

  • 2× Servomotor – zwei Leitungen für die Spannungsversorgung und eine Signalleitung
  • 1× RGB-LED – drei Kontakte für Rot, Grün und Blau sowie eine gemeinsame Leitung für GND
  • 1× Fotowiderstand und 1× Widerstand (1 kOhm oder 10 kOhm) – beide zusammen bilden einen Spannungsteiler. Zwischen ihnen wird die Spannung gemessen, die sich mit der Leuchtstärke verändert.

Die Schaltpläne gibt es für zwei verschiedene Breadboards.

Schaltplan der Farbsortiermaschine, Variante 1
Schaltplan für das erste Breadboard
Schaltplan der Farbsortiermaschine, Variante 2
Schaltplan für das zweite Breadboard
1 / 2

Das Drehrad positionieren

Zuerst trennst du das Drehrad vom Servomotor und drehst den Motor mit dem ersten Sketch in die Ausgangsposition. Danach kannst du das Drehrad montieren und verschrauben.

Es folgt die Feineinstellung der drei Positionen: „Load“ ist die Position oben, in der das Bonbon in die Vertiefung fällt. „Scan“ ist die Position vor dem Sensorbereich. „Ext“ ist die Position, in der sich das Drehrad nach unten dreht und das Bonbon in den Trichter fallen kann.

Der zweite Sketch fährt die drei Positionen der Reihe nach an. Passen sie nicht, änderst du die Drehwinkel.

Drehrad in die Ausgangsposition drehen
#include <Servo.h>
Servo Drehrad; // Der Servo wird Drehrad gennannt.
// Servo Positionen
int Load=0; // Die Position mit der Bezeichnung „Load“ hat den Drehwinkel 0.
void setup()
{
Drehrad.attach(4); // Servo an Pin4 anschließen.
}
void loop()
{
Drehrad.write(Load); // Position laden.
delay(1000); // Warten, bis die Position erreicht ist.
}
Die drei Positionen des Drehrades anfahren
#include <Servo.h>
Servo Drehrad; // Das Servo wird Drehrad genannt.
// Servo Positionen
int Load=0; // Drehwinkel zum Laden des Bonbons
int Scan=55; // Drehwinkel zum Scannen des Bonbons
int Ext=120; // Drehwinkel zum Entfernen des Bonbons
void setup()
{
Drehrad.attach(4); // Servo an Pin4 anschließen
}
void loop()
{
Drehrad.write(Load); // Position laden.
delay(1000); // Warten, bis die Position erreicht ist.
Drehrad.write(Scan); // Position zum Scannen des Bonbons.
delay(2000); // Warten, bis die Position erreicht ist.
Drehrad.write(Ext); // Position zum Auswerfen des Bonbons.
delay(3000); // Warten, bis die Position erreicht ist.
}
Diese drei Drehwinkel anpassen
int Load=0; // Drehwinkel zum Laden des Bonbons
int Scan=55; // Drehwinkel zum Scannen des Bonbons
int Ext=120; // Drehwinkel zum Entfernen des Bonbons

Die Rutsche positionieren

Auch die Rutsche trennst du zuerst vom Servomotor und drehst den Motor in eine mittlere Ausgangsposition von 90 Grad. Dann steckst du die Rutsche mittig über den Lagerfächern auf – hier lohnt es sich, sie mit einer kleinen Schraube zu fixieren.

Mit dem nächsten Sketch prüfst du, welche Drehwinkel nötig sind, damit sich die Rutsche zu den sechs Fächern ausrichtet. Die Rutsche muss bei allen sechs Positionen so gedreht sein, dass das Bonbon exakt in das jeweilige Fach fallen kann.

Rutsche in die Mittelposition drehen
#include <Servo.h>
Servo servoSchwenker; // Das Servo wird servoSchwenker genannt.
void setup()
{
servoSchwenker.attach(3); // Servo an Pin3 anschließen
}
void loop()
{
servoSchwenker.write(90); // Mittlere Position einstellen
delay(1000); // Warten, bis die Position erreicht ist.
}
Die sechs Fachpositionen anfahren
#include <Servo.h>
Servo servoSchwenker; // Das Servo wird servoSchwenker genannt.
// Servo Positionen
int Fach1=0;
int Fach2=45;
int Fach3=75;
int Fach4=105;
int Fach5=135;
int Fach6=180;
void setup()
{
servoSchwenker.attach(3); // Servo an Pin3 anschließen
}
void loop()
{
servoSchwenker.write(Fach1); // Servo dreht sich zu Position 1 (Fach1)
delay(1000); // Warten, bis die Position erreicht ist.
servoSchwenker.write(Fach2); // Servo dreht sich zu Position 2 (Fach2)
delay(1000); // Warten, bis die Position erreicht ist.
servoSchwenker.write(Fach3); // Servo dreht sich zu Position 3 (Fach3)
delay(1000); // Warten, bis die Position erreicht ist.
servoSchwenker.write(Fach4); // Servo dreht sich zu Position 4 (Fach4)
delay(1000); // Warten, bis die Position erreicht ist.
servoSchwenker.write(Fach5); // Servo dreht sich zu Position 5 (Fach5)
delay(1000); // Warten, bis die Position erreicht ist.
servoSchwenker.write(Fach6); // Servo dreht sich zu Position 6 (Fach6)
delay(1000); // Warten, bis die Position erreicht ist.
}
Diese sechs Drehwinkel anpassen
int Fach1=0;
int Fach2=45;
int Fach3=75;
int Fach4=105;
int Fach5=135;
int Fach6=180;

Der Scanprozess: Farbwerte messen

Mit dem folgenden Sketch ermittelst du die Farbe eines einzelnen Bonbons. Das Drehrad dreht von der „Load“-Position zum Sensorbereich, die Messung erfolgt, und die Messwerte für alle drei Farben erscheinen im Seriellen Monitor.

Damit einzelne Ausreißer die Messung nicht verfälschen, wird jede Farbe 200-mal gemessen und daraus ein Durchschnitt gebildet.

Farbmesswerte für Blau, Grün und Rot im Seriellen Monitor
Die Messwerte im Seriellen Monitor
Scanprozess: Farbwerte messen und ausgeben
// Servo hinzufügen
#include <Servo.h>
Servo servoDrehrad;
// Servo Positionen
int Load=0;
int Scan=55;
int m=1;
// RGB LED
int LEDrot = 5; // Farbe Rot an Pin 5
int LEDblau=6; // Farbe Blau an Pin 6
int LEDgruen = 9; // Farbe Grün an Pin 9
int p=300; // p ist die Variable für eine Pause
int LeuchtkraftBlau = 200; // Leuchtstärke der einzelnen LED-Farben. Die Werte sind so gewählt, dass bei schwarzem Hintergrund bei allen Farben die gleiche Leuchtkraft gemessen wird.
int LeuchtkraftRot = 200; // Leuchtstärke der einzelnen LED-Farben. Die Werte sind so gewählt, dass bei schwarzem Hintergrund bei allen Farben die gleiche Leuchtkraft gemessen wird.
int LeuchtkraftGruen = 200; // Leuchtstärke der einzelnen LED-Farben. Die Werte sind so gewählt, dass bei schwarzem Hintergrund bei allen Farben die gleiche Leuchtkraft gemessen wird.
int dunkel = 0; // Zahlenwert 0 bedeutet Spannung 0V – also LED aus.
long FarbwertRot=0; // Variable für Messwerte mit dem Startwert 0
long FarbwertGruen=0; // Variable für Messwerte mit dem Startwert 0
long FarbwertBlau=0; // Variable für Messwerte mit dem Startwert 0
int DurchschnittFarbwertRot=0; // Variable für Messwerte mit dem Startwert 0
int DurchschnittFarbwertGruen=0; // Variable für Messwerte mit dem Startwert 0
int DurchschnittFarbwertBlau=0; // Variable für Messwerte mit dem Startwert 0
// Fotowiderstand
int eingang= A0; //Das Wort „eingang“ steht jetzt für den Wert „A0“ (Bezeichnung vom Analogport 0)
int sensorWert = 0; //Variable für den Sensorwert mit 0 als Startwert
void setup()
{
//Servo hinzufügen und mittig ausrichten
servoDrehrad.attach(4); //Das Setup enthält die Information, dass das Servo an der Steuerleitung (gelb) mit Pin 4 verbunden wird. Hier ist natürlich auch ein anderer Pin möglich.
Serial.begin(9600); //Die Kommunikation mit dem seriellen Port wird gestartet. Das benötigt man, um sich den tatsächlich ausgelesenen Wert später im serial monitor anzeigen zu lassen.
pinMode(LEDblau, OUTPUT); // LED-Farbe als Output definieren
pinMode(LEDgruen, OUTPUT); // LED-Farbe als Output definieren
pinMode(LEDrot, OUTPUT); // LED-Farbe als Output definieren
}
void loop()
{
// Alle Variablen aus vorherigen Messungen löschen
FarbwertRot=0;
FarbwertGruen=0;
FarbwertBlau=0;
//Jetzt müssen die Bonbons eingelegt werden, die gemessen werden sollen. Dabei müssen die Daten im Seriellen Monitor beachtet werden.
servoDrehrad.write (Load); // Neues Bonbon laden. Wenn die Bonbons schlecht geladen werden, kann hier mit dem Servo eine kurzzeitige Hin- und Herbewegung programmiert werden.
delay(1000);
servoDrehrad.write (Scan); // Für die Messung wird die Bonbon-Mulde zum Sensor gedreht
delay(1000);
// Scanprozess Blau beginnt.
analogWrite(LEDblau, LeuchtkraftBlau); // Blau einschalten
delay(p); // pause
// Wiederhole 200 Mal, damit für die Messung ein guter Mittelwert gebildet werden kann, um falsche Messwerte zu minimieren.
for (int i=1; i <= 200; i++)
{
sensorWert =analogRead(eingang);
FarbwertBlau=FarbwertBlau+sensorWert;
delay(m); //Warte eine Millisekunde
}
DurchschnittFarbwertBlau=FarbwertBlau/200; //Hier werden die 200 addierten Messwerte durch 200 geteilt. Dadurch wird ein Durchschnittswert ermittelt.
//Ausgabe Farbe Blau
Serial.print("Durchschnitt FarbwertBlau= " ); //Ausgabe am Serial-Monitor: Der Text "Durchschnitt FarbwertBlau= "
Serial.print(DurchschnittFarbwertBlau); //Ausgabe am Serial-Monitor. Mit dem Befehl Serial.print wird der ermittelte Farbwert an den serial monitor gesendet.
analogWrite(LEDblau, dunkel); // Blaue LED ausschalten
// Scanprozess Grün beginnt.
analogWrite(LEDgruen, LeuchtkraftGruen); // Grün einschalten
delay(p); // pause
// Wiederhole 200 Mal, damit für die Messung ein guter Mittelwert gebildet werden kann, um falsche Messwerte zu minimieren.
for (int i=1; i <= 200; i++)
{
sensorWert =analogRead(eingang);
FarbwertGruen=FarbwertGruen+sensorWert;
delay(m); //Warte eine Millisekunde
}
DurchschnittFarbwertGruen=FarbwertGruen/200; //Hier werden die 200 addierten Messwerte durch 100 geteilt. Dadurch wird ein Durchschnittswert ermittelt.
//Ausgabe Farbe Grün
Serial.print("Durchschnitt FarbwertGruen= " ); //Ausgabe am Serial-Monitor: Der Text „Durchschnitt FarbwertGruen= „
Serial.print(DurchschnittFarbwertGruen); //Ausgabe am Serial-Monitor. Mit dem Befehl Serial.print wird der ermittelte Farbwert an den serial monitor gesendet.
analogWrite(LEDgruen, dunkel); // Grüne LED ausschalten
// Scanprozess Rot beginnt.
analogWrite(LEDrot, LeuchtkraftRot); // Rot einschalten
delay(p); // pause
// Wiederhole 200 Mal, damit für die Messung ein guter Mittelwert gebildet werden kann, um falsche Messwerte zu minimieren.
for (int i=1; i <= 200; i++)
{
sensorWert =analogRead(eingang);
FarbwertRot=FarbwertRot+sensorWert;
delay(m); //Warte eine Millisekunde
}
DurchschnittFarbwertRot=FarbwertRot/200; //Hier werden die 200 addierten Messwerte durch 100 geteilt. Dadurch wird ein Durchschnittswert ermittelt.
//Ausgabe Farbe Rot
Serial.print("Durchschnitt FarbwertRot= " ); //Ausgabe am Serial-Monitor: Der Text „Durchschnitt FarbwertRot= „
Serial.println(DurchschnittFarbwertRot); //Ausgabe am Serial-Monitor. Mit dem Befehl Serial.print wird der ermittelte Farbwert an den serial monitor gesendet.
analogWrite(LEDrot, dunkel); // Rote LED ausschalten
// Die gemessenen Werte für die einzelnen Farben wurden im Seriellen Monitor angezeigt. Nun kommt der wichtige Part der Auswertung. Hier muss entschieden werden, welcher Bonbonfarbe welche Messwerte gegenüberstehen.
}

Die Messwerte auswerten

In der IF-Bedingung werden die Messwerte für alle drei Farben ausgewertet. Damit leichte Farbabweichungen der Bonbons nicht dazu führen, dass die Farbe nicht erkannt wird, gibst du für jeden Farbbereich eine Spanne an.

Ein Beispiel: Bei einem roten Bonbon wurden Blau 200, Grün 250 und Rot 750 gemessen. Als Erkennungsbereiche wählst du dann Blau 180–220, Grün 230–270 und Rot 730–770. Daraus wird EINE IF-Bedingung, die alle drei Bereiche enthält.

Anschließend erweiterst du den Code um das Auswerfen des Bonbons in das passende Fach.

Schema: eine IF-Bedingung für das rote Bonbon
// Für den Fall, dass ein Rotes Bonbon vorhanden ist.
if (DurchschnittFarbwertBlau > 180 && DurchschnittFarbwertBlau < 220 && DurchschnittFarbwertGruen > 230 && DurchschnittFarbwertGruen < 270 && DurchschnittFarbwertRot > 730 && DurchschnittFarbwertRot < 770)
{
//In dieser geschweiften Klammer wird später ergänzt, was passiert, wenn die oben genannte Bedingung erfüllt ist.
}
Erweiterung: Bonbon in das passende Fach auswerfen
// Für den Fall, dass ein rotes Bonbon vorhanden ist.
if (DurchschnittFarbwertBlau > 180 && DurchschnittFarbwertBlau < 220 && DurchschnittFarbwertGruen > 230 && DurchschnittFarbwertGruen < 270 && DurchschnittFarbwertRot > 730 && DurchschnittFarbwertRot < 770)
{
servoSchwenker.write (0); // Position des Schwenkers geht zu Fach1
delay(1000); // Pause, bis die Drehung der Rutsche zum richtigen Fach abgeschlossen ist.
servoDrehrad.write (ext); //Das Drehrad dreht sich und das Bonbon fällt unten in den Trichter der Rutsche.
delay(1000); // Pause, bis die Drehung erfolgt ist und das Bonbon in den Trichter gefallen ist.
}

Das vollständige Beispielprogramm

Der folgende Sketch sortiert drei verschiedenfarbige Bonbons und wurde auf Funktion geprüft. Jede nicht erkannte Farbe landet über den else-Zweig in einem eigenen Fach.

Vollständiges Beispielprogramm für drei Bonbonfarben
// Servo hinzufügen
 #include <Servo.h>
 Servo servoSchwenker;
 Servo servoDrehrad;
// Servo Positionen
int Load=0;
int Scan=55;
int ext=120;
int m=1;
// RGB LED
int LEDrot = 5; // Farbe Rot an Pin 5
int LEDblau=6; // Farbe Blau an Pin 6
int LEDgruen = 9; // Farbe Grün an Pin 9
int p=50; // p ist die Variable für eine Pause
int LeuchtkraftBlau = 200; // Leuchtstärke der einzelnen LED-Farben. Die Werte sind so gewählt, dass bei schwarzem Hintergrund bei allen Farben die gleiche Leuchtkraft gemessen wird.
int LeuchtkraftRot = 200; // Leuchtstärke der einzelnen LED-Farben.
int LeuchtkraftGruen = 200; // Leuchtstärke der einzelnen LED-Farben.
int dunkel = 0; // Zahlenwert 0 bedeutet Spannung 0V – also LED aus.
long FarbwertRot=0; // Variable für Messwerte mit dem Startwert 0
long FarbwertGruen=0;
long FarbwertBlau=0;
int DurchschnittFarbwertRot=0;
int DurchschnittFarbwertGruen=0;
int DurchschnittFarbwertBlau=0;
int messungen =200;
// Fotowiderstand
int eingang= A0; //Das Wort „eingang“ steht jetzt für den Wert „A0“
int sensorWert = 0; //Variable für den Sensorwert mit 0 als Startwert
void setup()
{
//Servo hinzufügen und mittig ausrichten
servoSchwenker.attach(3); //Servo an der Steuerleitung (gelb) mit Pin 3 verbunden.
servoDrehrad.attach(4); //Servo an der Steuerleitung (gelb) mit Pin 4 verbunden.
servoSchwenker.write (90); // Der Schwenker wird in eine mittlere Position bewegt.
delay(2000); //Warten bis die Servos stehen. Ansonsten könnten die Messwerte durch die schwankende Spannung beeinflusst werden.
Serial.begin(9600);
pinMode(LEDblau, OUTPUT); // LED-Farbe als Output definieren
pinMode(LEDgruen, OUTPUT); // LED-Farbe als Output definieren
pinMode(LEDrot, OUTPUT); // LED-Farbe als Output definieren
}
void loop()
{
// Alle Variablen aus vorherigen Messungen löschen
FarbwertRot=0;
FarbwertGruen=0;
FarbwertBlau=0;
servoDrehrad.write (Load); // Neues Bonbon laden.
delay(1000);
servoDrehrad.write (Scan); // Für die Messung wird die Bonbon-Mulde zum Sensor gedreht
delay(1000);
// Scanprozess Blau beginnt.
analogWrite(LEDblau, LeuchtkraftBlau); // blau einschalten
delay(p); // pause
  for (int i=1; i <= messungen; i++)
  {
    sensorWert =analogRead(eingang);
    FarbwertBlau=FarbwertBlau+sensorWert;
    delay(m); //Warte eine Millisekunde
  }
DurchschnittFarbwertBlau=FarbwertBlau/messungen;
//Ausgabe Farbe Blau
Serial.print("Durchschnitt FarbwertBlau= " );
Serial.print(DurchschnittFarbwertBlau);
analogWrite(LEDblau, dunkel); // Blaue LED ausschalten
// Scanprozess Grün beginnt.
analogWrite(LEDgruen, LeuchtkraftGruen); // grün einschalten
delay(p); // pause
  for (int i=1; i <= messungen; i++)
  {
    sensorWert =analogRead(eingang);
    FarbwertGruen=FarbwertGruen+sensorWert;
    delay(m); //Warte eine Millisekunde
  }
DurchschnittFarbwertGruen=FarbwertGruen/messungen;
//Ausgabe Farbe Grün
Serial.print("Durchschnitt FarbwertGruen= " );
Serial.print(DurchschnittFarbwertGruen);
analogWrite(LEDgruen, dunkel); // Grüne LED ausschalten
// Scanprozess Rot beginnt.
analogWrite(LEDrot, LeuchtkraftRot); // Rot einschalten
delay(p); // pause
  for (int i=1; i <= messungen; i++)
  {
    sensorWert =analogRead(eingang);
    FarbwertRot=FarbwertRot+sensorWert;
    delay(m); //Warte eine Millisekunde
  }
DurchschnittFarbwertRot=FarbwertRot/messungen;
//Ausgabe Farbe Rot
Serial.print("Durchschnitt FarbwertRot= " );
Serial.println(DurchschnittFarbwertRot);
analogWrite(LEDrot, dunkel); // Rote LED ausschalten
// Auswertung und Verarbeitung
// Wenn rot:
if (DurchschnittFarbwertBlau > 140 && DurchschnittFarbwertBlau < 230 && DurchschnittFarbwertGruen > 140 && DurchschnittFarbwertGruen < 220 && DurchschnittFarbwertRot > 550 && DurchschnittFarbwertRot < 750) //1. Fall: Rotes Bonbon
{
servoSchwenker.write (0); // Position des Schwenkers geht zu Position1
delay(500);
servoDrehrad.write (ext); //Das Drehrad dreht sich und das Bonbon fällt unten in den Trichter
delay(700);
}
// Wenn grün:
else if (DurchschnittFarbwertBlau > 260 && DurchschnittFarbwertBlau < 340 && DurchschnittFarbwertGruen > 290 && DurchschnittFarbwertGruen < 430 && DurchschnittFarbwertRot > 260 && DurchschnittFarbwertRot < 320) //2. Fall: Grünes Bonbon
{
servoSchwenker.write (30); // Position des Schwenkers geht zu Position1
delay(500);
servoDrehrad.write (ext);
delay(700);
}
// Wenn blau:
else if (DurchschnittFarbwertBlau > 450 && DurchschnittFarbwertBlau < 490 && DurchschnittFarbwertGruen > 300 && DurchschnittFarbwertGruen < 360 && DurchschnittFarbwertRot > 140 && DurchschnittFarbwertRot < 245) //3. Fall: Blaues Bonbon
{
servoSchwenker.write (60); // Position des Schwenkers geht zu Position1
delay(500);
servoDrehrad.write (ext);
delay(700);
}
else
{
servoSchwenker.write (180); // Position des Schwenkers geht zu Position1
delay(500);
servoDrehrad.write (ext);
delay(700);
}
}
Évaluer le guide

Commentaires

Poser une question ou partager une expérience

Écris-nous si quelque chose ne fonctionne pas. Indique-nous ton modèle de carte et le message d’erreur.

Nous vérifions chaque commentaire avant sa publication. Ton adresse e-mail reste chez nous.