sensor ini mempunya 4 buah mode filter warna yaitu mode clear, mode filter merah,mode filter hijau,mode filter biru. disini filter yang dimaksud adalah range panjang gelombang atau lambda cahaya yang bisa diterima oleh photodioda. grafik range lambda bisa dilihat pada datasheet. output akhir dari sensor ini adalah komposisi warna Red-Green-Blue atau bisa dikenal dengan RGB. unuk bisa mendapakan RGB dari suatu object, maka sensor harus dikalibrasi dulu dengan warna putih sebagai referensinya. jarak pengambilan data harus 2 cm dari sensor. kalibrasi warna putih menggunakan kertas HVS putih.
kalibrasi dilakukan dengan cara mengganti mode filter. yang pertama filter diset mode merah kemudian frekuensinya dicatat dan perlakuan ini berlaku juga untuk filter hijau dan filter biru. nilai frekuensi yang diperoleh diasumsikan sebagai nilai maksimum atau 255 untuk R ,G dan B. frekuensi maksimum tersebut kemudian dibagi dengan 255 untuk mendapatkan resolusi 8 bit tiap warna. pada project ini, mode filter berganti terus-menerus secara otomatis dengan urutan R-G-B. untuk mengetahui setting dari filter silakan merujuk ke datasheet.
input yang saya gunakan adalah PORTB.1. tetapi anda bisa menggantinya sesuai dengan keinginan anda sendiri. secara berurutan S0,S1,S2,S3 dimasukkan pada PORTA.3 – PORTA.6 dari mikrokontroller. PORTA.7 untuk tegangan LED di sensor. data RGB tersebut akan ditampilkan pada LCD 16×2. sourcecode ditulis dalam bahasa C dengan kompiler CodeVisionAVR.
Berikut adalah potongan sourcecode yang bisa digunakan :
001 | /***************************************************** |
002 | This program was produced by the |
003 | CodeWizardAVR V1.25.3 Professional |
004 | Automatic Program Generator |
005 | © Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l. |
007 |
008 | Project : |
009 | Version : |
010 | Date : 5/15/2009 |
011 | Author : GreenBlack |
012 | Company : LakoV |
013 | Comments: |
014 |
015 | Chip type : ATmega8535 |
016 | Program type : Application |
017 | Clock frequency : 11.059200 MHz |
018 | Memory model : Small |
019 | External SRAM size : 0 |
020 | Data Stack size : 128 |
021 |
022 | *****************************************************/ |
023 |
024 | #include <mega8535.h> |
025 | #include <stdio.h> |
026 | #include <delay.h> |
027 | #define redref (27795/255) |
028 | #define greenref (33066.7/255) |
029 | #define blueref (34720/255) |
030 |
031 | // Alphanumeric LCD Module functions |
032 | #asm |
033 | .equ __lcd_port=0x15 ;PORTC |
034 | #endasm |
035 | #include <lcd.h> |
036 |
037 | // Declare your global variables here |
038 |
039 | void main( void ) |
040 | { |
041 | // Declare your local variables here |
042 |
043 | // Input/Output Ports initialization |
044 | // Port A initialization |
045 | // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In |
046 | // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T |
047 | PORTA=0x00; |
048 | DDRA=0xFF; |
049 |
050 | // Port B initialization |
051 | // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In |
052 | // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T |
053 | PORTB=0x02; |
054 | DDRB=0x00; |
055 |
056 | // Port C initialization |
057 | // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In |
058 | // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T |
059 | PORTC=0x00; |
060 | DDRC=0x00; |
061 |
062 | // Port D initialization |
063 | // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In |
064 | // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T |
065 | PORTD=0x00; |
066 | DDRD=0x00; |
067 |
068 | // Timer/Counter 0 initialization |
069 | // Clock source: System Clock |
070 | // Clock value: Timer 0 Stopped |
071 | // Mode: Normal top=FFh |
072 | // OC0 output: Disconnected |
073 | TCCR0=0x00; |
074 | TCNT0=0x00; |
075 | OCR0=0x00; |
076 |
077 | // Timer/Counter 1 initialization |
078 | // Clock source: System Clock |
079 | // Clock value: Timer 1 Stopped |
080 | // Mode: Normal top=FFFFh |
081 | // OC1A output: Discon. |
082 | // OC1B output: Discon. |
083 | // Noise Canceler: Off |
084 | // Input Capture on Falling Edge |
085 | // Timer 1 Overflow Interrupt: Off |
086 | // Input Capture Interrupt: Off |
087 | // Compare A Match Interrupt: Off |
088 | // Compare B Match Interrupt: Off |
089 | TCCR1A=0x00; |
090 | TCCR1B=0x00; |
091 | TCNT1H=0x00; |
092 | TCNT1L=0x00; |
093 | ICR1H=0x00; |
094 | ICR1L=0x00; |
095 | OCR1AH=0x00; |
096 | OCR1AL=0x00; |
097 | OCR1BH=0x00; |
098 | OCR1BL=0x00; |
099 |
100 | // Timer/Counter 2 initialization |
101 | // Clock source: System Clock |
102 | // Clock value: Timer 2 Stopped |
103 | // Mode: Normal top=FFh |
104 | // OC2 output: Disconnected |
105 | ASSR=0x00; |
106 | TCCR2=0x00; |
107 | TCNT2=0x00; |
108 | OCR2=0x00; |
109 |
110 | // External Interrupt(s) initialization |
111 | // INT0: Off |
112 | // INT1: Off |
113 | // INT2: Off |
114 | MCUCR=0x00; |
115 | MCUCSR=0x00; |
116 |
117 | // USART initialization |
118 | // Communication Parameters: 8 Data, 1 Stop, No Parity |
119 | // USART Receiver: On |
120 | // USART Transmitter: On |
121 | // USART Mode: Asynchronous |
122 | // USART Baud rate: 9600 |
123 | UCSRA=0x00; |
124 | UCSRB=0x18; |
125 | UCSRC=0x86; |
126 | UBRRH=0x00; |
127 | UBRRL=0x23; |
128 |
129 | // Timer(s)/Counter(s) Interrupt(s) initialization |
130 | TIMSK=0x00; |
131 |
132 | // Analog Comparator initialization |
133 | // Analog Comparator: Off |
134 | // Analog Comparator Input Capture by Timer/Counter 1: Off |
135 | ACSR=0x80; |
136 | SFIOR=0x00; |
137 |
138 | // LCD module initialization |
139 | lcd_init(16); |
140 |
141 | count=0; |
142 | PORTA=0b10011000; |
143 |
144 | while (1) |
145 | { |
146 | // Place your code here |
147 | red_filter(); |
148 | delay_ms(50); |
149 | green_filter(); |
150 | delay_ms(50); |
151 | blue_filter(); |
152 | delay_ms(50); |
153 | lcd_gotoxy(0,0); |
154 | lcd_clear(); |
155 | sprintf (lcd_buffer, "R:%d G:%d B:%d" ,red,green,blue); |
156 | lcd_puts(lcd_buffer); |
157 | a=0; b=0; c=0; |
158 | }; |
159 | } |