[PROJEKT] Czujnik koloru KPS-5130
Przejdźmy teraz do programu. Chcemy, aby czujnik odczytywał wartości z poszczególnych kanałów (R, G, B) i zapisywał je do zmiennych. Następnie program ma sprawdzić, wartość którego koloru jest największa i zasygnalizować zmierzony kolor odpowiednią diodą RGB.
Kod programu zaprezentowany jest poniżej (pliki projektowe znajdują się również w sekcji do pobrania):
// [PROJEKT] KAmduino UNO oraz czujnik koloru KPS-5130
// Program 1
// Autor: Patryk Mądry
// Mikrokontroler 2017 r.
#define LED_Czerwona 2
#define LED_Zielona 3
#define LED_Niebieska 4
int czerwony = 0;
int zielony = 0;
int niebieski = 0;
void setup()
{
Serial.begin(9600);
pinMode(LED_Zielona,OUTPUT);
pinMode(LED_Niebieska,OUTPUT);
pinMode(LED_Czerwona,OUTPUT);
}
void loop()
{
czerwony = analogRead(A0);
zielony = analogRead(A1);
niebieski = analogRead(A2);
Serial.println("");
Serial.print("Czerwony: ");
Serial.println(czerwony);
Serial.print("Zielony: ");
Serial.println(zielony);
Serial.print("Niebieski: ");
Serial.println(niebieski);
if ((czerwony > niebieski) && (czerwony > zielony))
{
Serial.println("Czerwony!");
digitalWrite(LED_Czerwona,HIGH);
digitalWrite(LED_Zielona,LOW);
digitalWrite(LED_Niebieska,LOW);
}
else if ((niebieski >zielony) && (niebieski > czerwony))
{
Serial.println("Niebieski!");
digitalWrite(LED_Czerwona,LOW);
digitalWrite(LED_Zielona,LOW);
digitalWrite(LED_Niebieska,HIGH);
}
else if ((zielony >niebieski) && (zielony > czerwony))
{
Serial.println("Zielony!");
digitalWrite(LED_Czerwona,LOW);
digitalWrite(LED_Zielona,HIGH);;
digitalWrite(LED_Niebieska,LOW);
}
//delay(1000);
}
Na początku programu deklarujemy numery pinów, do których są dołączone poszczególne kanały diody RGB:
#define LED_Czerwona 2 #define LED_Zielona 3 #define LED_Niebieska 4
Następnie tworzymy zmienne, w których są przechowywane dane z czujnika koloru dla poszczególnych barw: czerwonej, zielonej oraz niebieskiej.
int czerwony = 0; int zielony = 0; int niebieski = 0;
Ustawiamy prędkość portu szeregowego oraz piny, do których podłączona jest dioda RGB jako wyjścia.
void setup()
{
Serial.begin(9600);
pinMode(LED_Zielona,OUTPUT);
pinMode(LED_Niebieska,OUTPUT);
pinMode(LED_Czerwona,OUTPUT);
}
W pętli głównej programu, do zmiennych są przypisywane wartości pinów analogowych, do których jest podłączony czujnik koloru. Następnie te wartości są przesyłane do portu szeregowego.
void loop()
{
czerwony = analogRead(A0);
zielony = analogRead(A1);
niebieski = analogRead(A2);
Serial.println("");
Serial.print("Czerwony: ");
Serial.println(czerwony);
Serial.print("Zielony: ");
Serial.println(zielony);
Serial.print("Niebieski: ");
Serial.println(niebieski);
(...)
W dalszej części programu porównywalne są wartości zmiennych dla poszczególnych kolorów odczytanych z czujnika koloru. W zależności od tego która wartość zmiennej jest największa, zostaje zapalony odpowiedni kanał diody RGB. Dodatkowo przez port szeregowy jest przesyłana informacja, jaki kolor został wykryty.
(...)
if ((czerwony > niebieski) && (czerwony > zielony))
{
Serial.println("Czerwony!");
digitalWrite(LED_Czerwona,HIGH);
digitalWrite(LED_Zielona,LOW);
digitalWrite(LED_Niebieska,LOW);
}
else if ((niebieski >zielony) && (niebieski > czerwony))
{
Serial.println("Niebieski!");
digitalWrite(LED_Czerwona,LOW);
digitalWrite(LED_Zielona,LOW);
digitalWrite(LED_Niebieska,HIGH);
}
else if ((zielony >niebieski) && (zielony > czerwony))
{
Serial.println("Zielony!");
digitalWrite(LED_Czerwona,LOW);
digitalWrite(LED_Zielona,HIGH);;
digitalWrite(LED_Niebieska,LOW);
}
}
Podczas testowania opisywanego projektu wykorzystano sześcian o ścianach zabarwionych na kolor czerwony, zielony oraz niebieski. Najlepsze wyniki uzyskuje się, gdy czujnik jest w odległości około 5 mm od badanej powierzchni. Widok monitory portu szeregowego podczas pracy został przedstawiony na rysunku 4.

Rysunek 4. Monitor portu szeregowego podczas działania programu
Działanie programu zostało pokazane na poniższym filmie:

Dominik Bednarski porównuje STM32MP1 i OpenSTLinux oraz Raspberry Pi 5
Technologie End of Life i bezpieczeństwo sieci – wyzwania Europy związane z tzw. długiem technologicznym
Najczęstsze błędy firm przy wyborze dostawcy energii i jak ich uniknąć 



