Wykrywanie koloru z Arduino
Przykład pokazuje, w jaki sposób możemy wykrywać kolor wykorzystując moduł czujnika koloru w połączeniu z mikrokontrolerem Arduino.
W przykładzie wykorzystano następujące elementy:
- Arduino Uno
-
Moduł czujnik koloru, przetwornik światło - częstotliwość TCS3200D
- Przewody połączeniowe
Podłączenie czujnika z Arduino:
Połączenie z Arduino odbywa się w następujący sposób:
Moduł TCS3200D | Pin Arduino |
---|---|
VCC | 5 V |
GND | GND |
OUT | 2 |
S0 | 3 |
S1 | 4 |
S2 | 5 |
S3 | 6 |
Schemat podłączenia modułu z Arduino Uno.
Program do Arduino
W przykładzie został wykorzystany następujący kod:
- int s0 = 3, s1 = 4, s2 = 5, s3 = 6; //piny modułu połączone z Arduino
- int out = 2; //pin 2 Arduino i OUT od czujnika
- int flag = 0;
- byte counter = 0;
- byte countR = 0, countG = 0, countB = 0;
- void setup()
- {
- Serial.begin(9600); //inicjalizacja monitora szeregowego
- pinMode(s0, OUTPUT); //ustawienie pinów jako wyjścia
- pinMode(s1, OUTPUT);
- pinMode(s2, OUTPUT);
- pinMode(s3, OUTPUT);
- }
- void TCS()
- {
- flag = 0;
- digitalWrite(s1, HIGH);
- digitalWrite(s0, HIGH);
- digitalWrite(s2, LOW);
- digitalWrite(s3, LOW);
- attachInterrupt(0, ISR_INTO, LOW);
- timer0_init();
- }
- void ISR_INTO()
- {
- counter++;
- }
- void timer0_init(void)
- {
- TCCR2A = 0x00;
- TCCR2B = 0x07; //częstotliwość zegara - 1024
- TCNT2 = 100; //przepełnienie 10 ms
- TIMSK2 = 0x01; //pozwolenie na przerwanie
- }
- int i = 0;
- ISR(TIMER2_OVF_vect) //timer 2, 10ms przepełnienie 10ms. funkcja przerwanie wewnętrzengo przepełnienia
- {
- TCNT2 = 100;
- flag++;
- if (flag == 1) //pobranie i wyświetlenie na ekranie składowych RGB
- {
- countR = counter;
- Serial.print("red=");
- Serial.print(countR, DEC);
- Serial.print("tt");
- digitalWrite(s2, HIGH);
- digitalWrite(s3, HIGH);
- }
- else if (flag == 2)
- {
- countG = counter;
- Serial.print("green=");
- Serial.print(countG, DEC);
- Serial.print("t");
- digitalWrite(s2, LOW);
- digitalWrite(s3, HIGH);
- }
- else if (flag == 3)
- {
- countB = counter;
- Serial.print("blue=");
- Serial.print(countB, DEC);
- Serial.print("t");
- Serial.println("n");
- digitalWrite(s2, LOW);
- digitalWrite(s3, LOW);
- }
- else if (flag == 4)
- {
- flag = 0;
- }
- counter = 0;
- }
- void loop() //główna pętla programu
- {
- TCS();
- delay(500);
- while (1);
- }
Program pokazuje wartość składowych RGB dla rozpoznanego koloru. Wynik pracy programu możemy zaobserwować poniżej:
Zrzut ekranu szeregowego monitora.