Menampilkan nilai RGB suatu object dengan sensor warna TCS230 berbasis AVR ATMega8535

Posted: June 14, 2009 in AVR Project

Kali ini saya akan sharing tentang interfacing module sensor warna tcs230 produksi parallax yang juga telah saya posting pada situs avrfreaks. Dalam pembacaan data, sebenarnya sensor ini cukup rumit karena data outputnya berupa frekuensi pulsa kotak dengan duty cycle 50 %. Maka dari itu diperlukan suatu frekuensi reader. disini saya memfungsikan uC ATMega8535 sebagai pembaca frekuensi. saya tidak menggunakan timer/counter uC untuk menghitung frekuensi yang masuk, melainkan menghitung lama waktu high dan low satu gelombang penuh sebagai periode nya, maka tinggal 1/periode akan menghasilkan nilai frekuensi. pada sourcecode dapat dilihat count++ akan mencacah pada high dan low 1 gelombang penuh. jumlah cacahan tersebut dikalikan dengan lama waktu 1 kali pengulangan count++ sehingga diperoleh periodenya.

modul sensor warna tcs230

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 :

untuk full source code + hardware schematic sengaja dikomersilkan,,email aja ke >>> songolikur@gmail.com

NB : smua email pasti saya baca, tpi yg saya respon hanya yang bernilai rupiah saja..sorry blm bisa kasih free

/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.3 Professional
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project :
Version :
Date    : 5/15/2009
Author  : GreenBlack
Company : LakoV
Comments:

Chip type           : ATmega8535
Program type        : Application
Clock frequency     : 11.059200 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 128

*****************************************************/

#include <mega8535.h>
#include <stdio.h>
#include <delay.h>
#define redref (27795/255)
#define greenref (33066.7/255)
#define blueref (34720/255)

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0xFF;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x02;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x23;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// LCD module initialization
lcd_init(16);

count=0;
PORTA=0b10011000;

while (1)
{
// Place your code here
red_filter();
delay_ms(50);
green_filter();
delay_ms(50);
blue_filter();
delay_ms(50);
lcd_gotoxy(0,0);
lcd_clear();
sprintf(lcd_buffer,"R:%d G:%d B:%d",red,green,blue);
lcd_puts(lcd_buffer);
a=0; b=0; c=0;
};
}

About these ads
Comments
  1. baguz88 says:

    keren mas,, saya sekalian mau tanya mas,, kalo sensor ini(TCS230) di aplikasiin buat rangkaian led dot matrix (dot matrix sebagai penampilnya) bisa ga mas?

    thanx before..

  2. Neeraj says:

    Dear

    i am interested in this project.

    please guide me its schmatic diagram and its sensor

    regards
    Neeraj Jain

  3. ADIHOLIX says:

    @baguz88 : ada 3 output dari sensor ini..outputnya berupa frekuensi yang besarnya proporsional terhadap warna objek..jadi kalo anda bisa merubah besaran frekuensi menjadi tegangan, saya kira bisa..maksudnya mas mungkin bukan tampilan dot matrix yang led biasa itukan..tapi display dot matrix yang menggunakan OLED(“Organic LED” led yg bisa berubah-ubah warnanya tergantung masukan tegangan)

  4. ADIHOLIX says:

    @Neeraj : ok,but not now..maybe few day again..

  5. rodimus says:

    saya mw pake sensor ini, cuman bingung dengan coding nya.Dalam code sensor ini ada yg saya ga ngerti.

    redreg/blueref/greenref & red = (frekuensi/redref) itu untuk apa y ?

    nilai2 redreg/blueref/greenref didapatkan darimana y ?

    “0.0000014400921658986175115207373271889” angka ini dapet darimana y?

    thx atas bantuan nya ^^

    • ADIHOLIX says:

      praktek mudahnya gini lho..taruh sensor itu diatas kertas putih,trus pilih filter merah catet frekuensinya berapa? itu dilakukan juga untuk filter warna biru sama hijau…untuk apa? ini digunakan untuk mencari nilai 255 dari setiap filter…kalau nilai R,G,B 255 semua itu kan hasilnya warna putih atau dengan kata lain bila kita mencampurkan warna merah,biru dan hijau dengan konsentrasi yang sama, maka akan dihasilkan warna putih…redref/blueref/greenref itu adalah nilai frekuensi ketika dikenakan warna putih…fungsinya memang untuk referensi….mudah-mudahan bisa memahami kata2 saya yang mbulet…hehehe…trims sudah berkunjung….^^

  6. rodimus says:

    @ADIHOLIX
    thx, saya sekarang ud ngerti ..
    tp sy msi bingung dgn “0.0000014400921658986175115207373271889”
    angka ini ap y ? & cara mendapatkan angka ini bagaimana ?

    thx again

    • ADIHOLIX says:

      @rodimus
      angka 0.0000014400921658986175115207373271889 adalah waktu yang dibutuhkan mikrokontroler untuk eksekusi satu kali perintah “count”,,darimana itu? itu saya peroleh dengan trial error karena seharusnya lama waktu 1 kali eksekusi perintah mikro itu 1/frekuensi_kristal..tetapi itu tidak cocok,makanya saya trial error sendiri..itu satuannya detik mas…ok,semoga lebih paham…gud luck!!!

      • ab_setyawan says:

        mas tanya tentang nilai 0.0000014400921658986175115207373271889 itu cara dapetinnya gimana? kok bisa mpe ketemu nilai segitu. ma ijin copas yo.. thx

  7. thanks mas, sebagai bahan referensi tugas akhir memakai sensor warna.

    salam kenal

  8. Arfan says:

    mas,, beli sensor TCS230 nya dimana ya?? thx^^

  9. Arfan says:

    berapa harga nya ? ^^

  10. lendra says:

    mas mau tanya “# #define redref (27795/255)
    # #define greenref (33066.7/255)
    # #define blueref (34720/255)” angka 27795 ini perhitungannya dari mana?
    thanks

    • ADIHOLIX says:

      27795 = ini itu 27,795 KHz
      33066.7 = ini itu 33,0667 KHz
      34720 = ini itu 34,720 KHz

      nilai2 diatas diperoleh dari pengukuran frekuensi output sensor ketika difilter merah lalu filter hijau lalu filter biru,,,dengan object sebagai kalibrasi output maksimum( bernilai 255 atau saya asumsikan 8 bit) yaitu saya pake kertas HVS putih. jadi kalo misalkan kita pake filter merah, lalu diarahkan ke object selain warna putih,,output frekuensinya pasti dibawah 27,795 KHz…demikian mas,,semoga bisa memahami penjelasan saya,,..gud luck!!!

  11. Sigit says:

    saya udah pesen harganya cuman 100 ribuan.. apa masih ada tambahan lagi sampe harus 850 rbu..
    mohon jawabannya
    kalo emnag ada tambahannya apa yg harus di tambahkan kirim email saya sajah ya mas..

    camp_646@yahoo.co.id
    saya lagi butuh referency buat TA nih mas.. maksih sebelumnya..

  12. putra says:

    untuk mas sigit yang 100rb sulit difokuskan ni pengalaman saya, yang 850 bisa fokus cos ada tambahan lensa

  13. viozz says:

    mw tanya…itu yg pin s0 dan s1 pada program kan d tulis 5 volt..apakah bisa cm sekedar di hub k catuan 5 volt aja?jd ga perlu hubungin k mikronya cz sy liat d programmnya jg cm melibatkan port A5(s3) n port A6(s6)
    trus sy mw tny lg, untuk program baris ke 236 yaitu PORTA=0b10011000; itu maksudnya apa ya?
    satu lagi, untuk wiring LCDnya kan ke port C (c0-c7), itu apakah dihubungkan dgn smua jalur data pd LCD atw 3port ke pin control LCD (RD,RS,..) dan 4 port ke jalur data?
    makasih sebelumnya dan maaf klo pertanyaaannya byk..harap maklum,sy masih baru belajar

    • ADIHOLIX says:

      S0 = PORTA.3
      S1 = PORTA.4
      S2 = PORTA.5
      S3 = PORTA.6
      LED putih di sensor PORTA.7

      nah, mksud baris 236 PORTA=0b10011000 itu adalah inisialisasi awal sensor yaitu S0 = 1, S1 = 1 dan PORTA.7 = 1 untuk LED sensor. karena pada project ini saya mengeset scale 100% yaitu S0 & S1 bernilai 1. kalo S0 & S1 langsung dihubungkan ke catuan 5 Volt ya bisa aja, tapi biar gak ribet saya pake pin mikronya buat S0 & S1 nya..

      untuk wiring LCD nya itu sama persis dengan yang ada di code wizardnya CodeVision AVR..

      wiring LCD :
      PORTC.0 = RS(lcd pin 4)
      PORTC.1 = RD(lcd pin 5)
      PORTC.2 = EN(lcd pin 6)
      PORTC.3 = Not Connect(pin free)
      PORTC.4 = DB4 (lcd pin 11)
      PORTC.5 = DB5(lcd pin 12)
      PORTC.6 = DB6(lcd pin 13)
      PORTC.7 = DB7(lcd pin 14)

      iya sama2,,saya juga baru belajar kok,,maaf kalo cuma sedikit yang bisa saya sharingkan..terima kasih sudah berkunjung..

  14. viozz says:

    trims atas penjelasannya..sudah jelas :)

  15. yayang says:

    0.0000014400921658986175115207373271889 angka ini dapet dari 1/fcrystarl gt?
    emang bro pake crystal yang frekwensinya brapa?

  16. bayu says:

    minta saran donk.. selain pake TCS230 ada lagi ga sensor warna RGB yang murah di buat nya.. contohnya pake LDR itu ada yg punya skematik nya minta link nya donk yang mudah di unduh..

    terimaksih sebelumnya..

    • ADIHOLIX says:

      waduh,,susah mas..setauku bisa kalo pake photodioda..tapi kalo pake LDR aku gak pernah tau…cuma kalo pake photodioda ya tetep susah menurutku…maaf belum bisa ngasih saran,,ilmux masih dangkal mas…

  17. viozz says:

    sori,mw tny lagi…gimana yah caranya mengetahui apakah mikro qta rusak atw ga dan sismin qta benar atw salah..trims

  18. viozz says:

    sensor wrn tcs q udah bs bekerja..tp kq panas bgt ya?kira2 knp ya?trims

  19. bayu says:

    mas tu buat nampilkan warna nya pake software apa..??? seperti yang di vidio itu

  20. epe says:

    mas sy kan udh nyoba sperti yg punya mas tuh…

    tp kok kadang warna merah nya sk ga brubah….

    klo ada boleh minta contoh hasil pengukurannya ga???
    soalnya sy takut sensor yg sy gunakan rusak…

    kirim email y mas klo blh…
    sleeping_cantique@yahoo.com

  21. cembem says:

    mas,mau tanya,,,mas kog ganteng sich,,,, :)))))))))

  22. akfcode says:

    iki opo tho yo… hohohoho
    Di, blogku ganti, sing anyar, nang FB enek, nggonanmu kok jarang update

  23. Okta says:

    bro…boleh mnta tolong ga??niyh ttg Proyek akhirku yg pake sensor warna niyh…

  24. Okta says:

    bro…bisa mnta bantuannya gak??niyh tugas akhir ku berhubungan dgn sensor warna…bisa mnta tolong FB mu apa??biar aq bisa konsultasi

  25. restu says:

    Mas mo nanya donk…ku gi buat skripsi titrasi asam basa yg memanfaatkan perubahan warna cairan asam tersebut..aku bingung kalibarasi untuk nilai standar red, green, am blue nya nih, tolong donk mas kirmin saya nilai warna RGB nya buat kaliobarasi saya mas…

    tolong email ke outshoot78@yahoo.co.id

    thanks be 4…sukses selalu mas..!!!

    • ADIHOLIX says:

      nilai RGB itu didapat menggunakan kertas putih sebagai kalibrasinya…

      saya kok bingung,,maksudnya kirimin nilai warna RGB itu gimana ya? mungkin bisa dibaca lagi penjelasan saya dan juga dilihat lagi source codenya…trima kasih

  26. Kolun says:

    oh ya konektor kabel tcs230-db itu sama gak dengan konektor kabel tcs230?

  27. Budi says:

    bisa jelasin mas bagaimana sebuah mikrokontroler mengukur R,G,B dari sutu obyek?

  28. Budi says:

    bisa jelasin mas bagaimana sebuah mikrokontroler mengukur R,G,B dari suatu obyek?apakah mendapatkan satu-satu atau langsung RGB itu bisa didapat?

  29. okta says:

    bro…gw mau outputin tuh sensor ke Suara..untuk kalibrasinya gmn yah??kan bnyak tuh warna??gmn bisa yg keluar tuh bener2 Warna merah…biru dan seterusnya…pokoknya bisa terucap di outputnya….thx

  30. Ridho says:

    “pada sourcecode dapat dilihat count++ akan mencacah pada high dan low 1 gelombang penuh. jumlah cacahan tersebut dikalikan dengan lama waktu 1 kali pengulangan count++ sehingga diperoleh periodenya”
    maksud kalimat di atas apa ya mas?kita melihat 1 gelombang penuh itu bagaimana?makasih banyak sebelumnya.

  31. Ridho says:

    “pada sourcecode dapat dilihat count++ akan mencacah pada high dan low 1 gelombang penuh. jumlah cacahan tersebut dikalikan dengan lama waktu 1 kali pengulangan count++ sehingga diperoleh periodenya”
    maksud kalimat di atas apa ya mas?kita melihat 1 gelombang penuh itu bagaimana?makasih banyak sebelumnya.

  32. woyo says:

    bos mau nanya nih , kan pin yang di tcs 3200 nya dibelakang nya ada 6 pin , padahal ditulisannya cuman ada lima jadi sebenernya itu diapake semua atau gimana?oh iya kalo di program ke lcd buat nentuin nilai rgb nya bisa ga bos? kalo bisa minta tolong programnya lah

  33. bayu says:

    fungsi PortB.1 untuk apa mas??dihubungkan kemana???

  34. bayu says:

    fungsi dari portB.0 untuk apa mas??n dihubungkan kemana??

  35. adam says:

    mas tanya,, itu sensor setelah dikasih lens sensitiv bgt ga?kalau dipake buat line follower yang bedain warna kira2 masih stabil ga ya??trims

    • ADIHOLIX says:

      lumayan sensitif, dengan catatan jaraknya bener sesuai rekomendasi..ya stabil, soalnya kan cuma bedain 2 warna aja,,tapi mubadzir klo dibuat LF..hehe..cukup optocoupler aja pun bisa lebih murah kok,,,

  36. um3dsk07 says:

    Bro ane dah nyoba ntu program and sensor berjalan normal tapi ane da masalah dalam pembuatan flowchart

    Bro ada flowcart dari program di atas ga? kalo ada ane minta ya, kirim ke umed.atek@gmail.com,

    trus itu nilai for(a=0; a<=5; a++) ini untuk apa funsinya?
    mana yang menunjukan nilai frekwensinya?

  37. affan_m says:

    gan…tanya…ane kan pake sensor ini untuk membandingkan warna (merah)..
    menurut agan saya perlu filter warna apa ni d TCS 230 biar lancar???
    yang saya bandingkan hanya warna merah gan ???

  38. IL Ham says:

    Mas tolong d e-mail untuk source interface.x donk… thks…

    e-mail : dpilham99@gmail.com

  39. Bahrul Ulum says:

    mas, tlg bantuannya, bagaimana membuat program DT-sense color sensor tapi hasil pembacaannya ditampilkan lewat LCD melalui komuniksi i2c pada mikrokontroler

    terima kasih

  40. ADIHOLIX says:

    duh,maap aku gak pake bascom..otomatis juga gak bisa…hehe..

    coba search aja di google…gud luck!!

  41. Budi says:

    bagaimana sensor ini mendapatkan RGB suatu obyek?

  42. Astooo says:

    mas mau tanya,,, perbedaan tcs 3200 dan tcs 230 apa yaa???

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s