Obwód detektora koloru z kodem Arduino

Obwód detektora koloru z kodem Arduino

W tym poście skonstruujemy obwód, który wykrywa kolor i wyzwala odpowiednie przypisane przekaźniki. Ten projekt jest realizowany przy użyciu czujnika koloru TCS3200 i płytki Arduino.

Wykrywanie kolorów przez TCS3200

Jeśli nie czytałeś poprzedniego artykułu, przeczytaj go, w którym omówiliśmy podstawy wykrywania koloru przy użyciu TCS3200

Proponowany projekt może być przydatny, jeśli chcesz, aby obwód działał na podstawie kolorów. Istnieją oceany zastosowań opartych na wykrywaniu kolorów w różnych dziedzinach przemysłu.



Ten projekt da wgląd w to, jak możemy zaprogramować czujnik koloru do wykrywania różnych kolorów i wyzwalania przekaźników.

W tym projekcie rozważymy kolory podstawowe: CZERWONY, ZIELONY i NIEBIESKI. Ten projekt może rozróżniać te trzy kolory i wyzwalać przekaźniki, każdy przekaźnik dla każdego koloru.

TCS3200 może wykryć dowolną liczbę kolorów, ale aby projekt był zrozumiały i aby kod programu był prosty, koncentrujemy się tylko na kolorach podstawowych.

Schemat obwodu:

łączący Arduino i czujnik koloru TCS3200

Powyższy schemat dotyczy interfejsu Arduino i czujnika koloru TCS3200.

Połączenia przekaźników:

połączenia przekaźnikowe z czujnikiem koloru Arduino i TCS3200

Zasil Arduino za pomocą adaptera 9 V z co najmniej 500 mA. Tranzystor działa jako wzmacniacz przekaźnika, ponieważ piny GPIO Arduino nie mogą zapewnić wystarczającego prądu do przekaźnika.

Dioda 1N4007 będzie absorbować skoki wysokiego napięcia z cewki przekaźnika, chroniąc resztę elementów półprzewodnikowych.

Na tym kończy się sprzęt.

Zobaczmy teraz, jak przesłać kod i skalibrować czujnik zgodnie z własnymi wymaganiami.
Czułość kolorów może się różnić w zależności od modułu, a światło otoczenia może drastycznie zmienić czułość kolorów.

Wszystkie czujniki TCS3200 mają pewne różnice podczas produkcji, musisz zmierzyć parametry koloru czujnika, który aktualnie posiadasz, aby te parametry mogły być użyte w kodzie do dokładniejszego wykrywania koloru.

Aby skalibrować i zoptymalizować odczyty czujnika, wykonaj następujące czynności:

Krok 1: Prześlij następujący kod z zakończoną konfiguracją sprzętu.

//-----Program Developed by R.GIRISH-----// const int Red_relay = 9 const int Green_relay = 10 const int Blue_relay = 11 const int s0 = 4 const int s1 = 5 const int s2 = 6 const int s3 = 7 const int out = 8 int var = 25 int red = 0 int green = 0 int blue = 0 int state = LOW int state1 = LOW int state2 = HIGH //-----------Enter Values--------// //For RED Colour: int Rx1 = 92 int Gx1 = 240 int Bx1 = 53 //For GREEN Colour: int Rx2 = 228 int Gx2 = 163 int Bx2 = 64 //For BLUE Colour: int Rx3 = 300 int Gx3 = 144 int Bx3 = 45 //----------------------------// void setup() { Serial.begin(9600) pinMode(Red_relay, OUTPUT) pinMode(Green_relay, OUTPUT) pinMode(Blue_relay, OUTPUT) digitalWrite(Red_relay, LOW) digitalWrite(Green_relay, LOW) digitalWrite(Blue_relay, LOW) pinMode(s0, OUTPUT) pinMode(s1, OUTPUT) pinMode(s2, OUTPUT) pinMode(s3, OUTPUT) pinMode(out, INPUT) //----Scaling Frequency 20%-----// digitalWrite(s0, state2) digitalWrite(s1, state1) //-----------------------------// } void loop() { int redH1 = Rx1 + var int redL1 = Rx1 - var int redH2 = Rx2 + var int redL2 = Rx2 - var int redH3 = Rx3 + var int redL3 = Rx3 - var int blueH1 = Bx1 + var int blueL1 = Bx1 - var int blueH2 = Bx2 + var int blueL2 = Bx2 - var int blueH3 = Bx3 + var int blueL3 = Bx3 - var int greenH1 = Gx1 + var int greenL1 = Gx1 - var int greenH2 = Gx2 + var int greenL2 = Gx2 - var int greenH3 = Gx3 + var int greenL3 = Gx3 - var //-----Sensing RED colour-----// digitalWrite(s2, state1) digitalWrite(s3, state1) red = pulseIn(out, state) delay(100) //------Sensing Green colour----// digitalWrite(s2, state2) digitalWrite(s3, state2) green = pulseIn(out, state) delay(100) //------Sensing Blue colour----// digitalWrite(s2, state1) digitalWrite(s3, state2) blue = pulseIn(out, state) delay(400) if(red = redL1) { if(green = greenL1) { if(blue = blueL1) { Serial.println('Detected Colour: RED') Serial.println('') digitalWrite(Red_relay, HIGH) delay(1000) } } } if(red = redL2) { if(green = greenL2) { if(blue = blueL2) { Serial.println('Detected Colour: Green') Serial.println('') digitalWrite(Green_relay, HIGH) delay(1000) } } } if(red = redL3) { if(green = greenL3) { if(blue = blueL3) { Serial.println('Detected Colour: Blue') Serial.println('') digitalWrite(Blue_relay, HIGH) delay(1000) } } } } //------Program Developed by R.GIRISH--------//

Krok 2: Otwórz monitor szeregowy, znajdziesz takie parametry kolorów:

Przynieś obiekt kolorowy (preferowany jest kolorowy papier) czerwony, niebieski i zielony.

Krok 3:

• Umieść czerwony papier blisko czujnika TCS3200.
• Zanotuj odczyty R, G, B (wszystkie trzy kolory) podczas umieszczania papieru w kolorze czerwonym.
• Podobnie zanotuj odczyt R, G, B dla papieru w kolorze zielonym i niebieskim.

• UWAGA: umieszczając dowolny z 3 kolorów przed TCS3200, zanotuj wszystkie odczyty koloru czerwonego, niebieskiego i zielonego dla każdego kolorowego papieru, które należy wprowadzić w głównym programie wykrywania kolorów.

Krok 4: Przeczytaj krok 5 i prześlij główny poniższy kod (program do wykrywania kolorów)

//-- -- -- -- Enter Values-- -- --// //For RED Colour: int Rx1 = 92 int Gx1 = 240 int Bx1 = 53 //For GREEN Colour: int Rx2 = 228 int Gx2 = 163 int Bx2 = 64 //For BLUE Colour: int Rx3 = 300 int Gx3 = 144 int Bx3 = 45 //-- -- -- -- -- -- -- -- -- -- -- //

Krok 5: W powyższym kodzie zamień wartości na wartości, które ostatnio zanotowałeś:

//--------Program Developed by R.GIRISH-------// const int s0 = 4 const int s1 = 5 const int s2 = 6 const int s3 = 7 const int out = 8 int frequency1 = 0 int frequency2 = 0 int frequency3 = 0 int state = LOW int state1 = LOW int state2 = HIGH void setup() { Serial.begin(9600) pinMode(s0, OUTPUT) pinMode(s1, OUTPUT) pinMode(s2, OUTPUT) pinMode(s3, OUTPUT) pinMode(out, INPUT) //----Scaling Frequency 20%-----// digitalWrite(s0, state2) digitalWrite(s1, state1) //-----------------------------// } void loop() ') delay(100) //------Sensing Blue colour----// digitalWrite(s2, state1) digitalWrite(s3, state2) frequency3 = pulseIn(out, state) Serial.print(' Blue = ') Serial.println(frequency3) delay(100) Serial.println('-----------------------------') delay(400) //---------Program Developed by R.GIRISH---------//

Po umieszczeniu czerwonego papieru na czujniku uzyskano by trzy odczyty, na przykład R = 56 | G = 78 | B = 38.

Umieść wartości 56, 78, 38 w ten sposób:

// Dla koloru CZERWONEGO:
int Rx1 = 56
int Gx1 = 78
int Bx1 = 38

Podobnie dla pozostałych dwóch kolorów i prześlij kod.

Krok 6:

• Otwórz monitor szeregowy i umieść jeden z trzech kolorów przed czujnikiem.
• Zobaczysz wykrycie kolorów na monitorze szeregowym, a jednocześnie aktywowany zostanie odpowiedni przekaźnik koloru.

• Aby wyłączyć przekaźnik, należy nacisnąć przycisk resetowania na płycie Arduino.

UWAGA 1: Obwód może nie wykryć kolorów, jeśli po kalibracji umieścisz nieco inny odcień / odcień przedmiotu / papieru w kolorze CZERWONYM, ZIELONYM, NIEBIESKIM. Innymi słowy, musisz użyć dokładnie tego samego kolorowego przedmiotu / papieru do wykrywania kolorów i wyzwalania przekaźnika.

UWAGA 2: Oświetlenie otoczenia może wpływać na wykrywanie kolorów, dlatego należy utrzymywać stałe światło w pobliżu czujnika podczas kalibracji, a także podczas wykrywania kolorów.

Prototyp autora:

Prototyp czujnika koloru Arduino

Jeśli masz jakiekolwiek pytania dotyczące tego projektu, wyrażaj je w sekcji komentarzy, możesz otrzymać szybką odpowiedź.




Poprzedni: Używanie czujników TSOP17XX z niestandardowymi częstotliwościami Dalej: Obwód wielu ładowarek akumulatorów za pomocą kondensatora zrzutowego