Open form

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:

 

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:

 

  1. int s0 = 3, s1 = 4, s2 = 5, s3 = 6; //piny modułu połączone z Arduino
  2. int out = 2; //pin 2 Arduino i OUT od czujnika
  3. int flag = 0;
  4. byte counter = 0;
  5. byte countR = 0, countG = 0, countB = 0;
  6. void setup()
  7. {
  8. Serial.begin(9600); //inicjalizacja monitora szeregowego
  9. pinMode(s0, OUTPUT); //ustawienie pinów jako wyjścia
  10. pinMode(s1, OUTPUT);
  11. pinMode(s2, OUTPUT);
  12. pinMode(s3, OUTPUT);
  13.  
  14. }
  15. void TCS()
  16. {
  17. flag = 0;
  18. digitalWrite(s1, HIGH);
  19. digitalWrite(s0, HIGH);
  20. digitalWrite(s2, LOW);
  21. digitalWrite(s3, LOW);
  22. attachInterrupt(0, ISR_INTO, LOW);
  23. timer0_init();
  24.  
  25. }
  26. void ISR_INTO()
  27. {
  28. counter++;
  29. }
  30. void timer0_init(void)
  31. {
  32. TCCR2A = 0x00;
  33. TCCR2B = 0x07; //częstotliwość zegara - 1024
  34. TCNT2 = 100; //przepełnienie 10 ms
  35. TIMSK2 = 0x01; //pozwolenie na przerwanie
  36. }
  37. int i = 0;
  38. ISR(TIMER2_OVF_vect) //timer 2, 10ms przepełnienie 10ms. funkcja przerwanie wewnętrzengo przepełnienia
  39. {
  40. TCNT2 = 100;
  41. flag++;
  42. if (flag == 1) //pobranie i wyświetlenie na ekranie składowych RGB
  43. {
  44. countR = counter;
  45. Serial.print("red=");
  46. Serial.print(countR, DEC);
  47. Serial.print("tt");
  48. digitalWrite(s2, HIGH);
  49. digitalWrite(s3, HIGH);
  50. }
  51. else if (flag == 2)
  52. {
  53. countG = counter;
  54. Serial.print("green=");
  55. Serial.print(countG, DEC);
  56. Serial.print("t");
  57. digitalWrite(s2, LOW);
  58. digitalWrite(s3, HIGH);
  59. }
  60. else if (flag == 3)
  61. {
  62. countB = counter;
  63. Serial.print("blue=");
  64. Serial.print(countB, DEC);
  65. Serial.print("t");
  66. Serial.println("n");
  67. digitalWrite(s2, LOW);
  68. digitalWrite(s3, LOW);
  69.  
  70. }
  71. else if (flag == 4)
  72. {
  73. flag = 0;
  74. }
  75. counter = 0;
  76. }
  77. void loop() //główna pętla programu
  78. {
  79. TCS();
  80. delay(500);
  81. while (1);
  82.  
  83. }

 

Program pokazuje wartość składowych RGB dla rozpoznanego koloru. Wynik pracy programu możemy zaobserwować poniżej:

 

Zrzut ekranu szeregowego monitora.

zapraszamy do współpracy!