Module Cảm Biến Mầu TCS3200

Thảo luận trong 'Sản Phẩm Mới' bắt đầu bởi linh.mta, 22 Tháng chín 2014.

Users Viewing Thread (Users: 0, Guests: 0)

Lượt xem: 3,600

  1. linh.mta

    linh.mta New Member

    Chào các bạn !

    Hôm nay mình xin giới thiệu đến các bạn Module cảm biến mầu TCS3200 .

    [​IMG]

    [​IMG]
    [​IMG]
    Moudule Cảm biến mầu TCS3200 có 2 hàng jum để giao tiếp
    +S0,S1 : Đầu vào chọn tỉ lệ tần số đầu ra .
    +S2,S3 : Đầu vào chọn kiểu photodiode.
    +OE : Đầu vào cho phép xuất tần số ở chân OUT.
    +OUT : Đầu ra là tần số thay đổi phụ thuộc cường độ và màu sắc.
    Tính năng :
    +
    Chuyển đổi cường độ ánh sáng thành tần số có độ phân giải cao.
    +Lập trình lựa chọn bộ lọc màu sắc khác nhau và dạng tần số xuất ra.
    +Dễ dàng giao tiếp với vi điều khiển.
    +Điện áp đầu vào 2.7-5.5V.
    Nguyên lý hoạt động cảm biến mầu TCS3200 :

    -Cấu tạo cảm biến TCS3200 gồm 2 khối như hình vẽ phía dưới:

    [​IMG]

    +Khối đầu tiên là mảng ma trận 8x8 gồm các photodiode.Bao gồm 16 photodiode có thể lọc màu sắc xanh dương (Blue),16 photodiode có thể lọc màu đỏ (Red),16 photodiode có thể lọc màu xanh lá(Green) và 16 photodiode trắng không lọc (Clear).Tất cả photodiode cùng màu được kết nối song song với nhau ,và được đặt xen kẽ nhau nhằm mục đích chống nhiễu.
    Bản chất của 4 loại photodiode trên như là các bộ lọc ánh sáng có mầu sắc khác nhau .Có nghĩa nó chỉ tiếp nhận các ánh sáng có cùng màu với loại photodiode tương ứng và không tiếp nhận các ánh sáng có màu sắc khác.
    [​IMG]
    Việc lựa chọn 4 loại photodiode này thông qua 2 chân đầu vào S2,S3 :
    [​IMG]
    +Khối thứ 2 là bộ chuyển đổi dòng điện từ đầu ra khối thứ nhất thành tần số :

    [​IMG]
    Tần số đầu ra có độ rộng xung 50% và tỉ lệ với ánh sáng có cường độ và mầu sắc khác nhau .
    Tần số đầu ra nằm trong khoảng 2Hz-500Khz .
    Ta có thể lựa chọn tỉ lệ tần số đầu ra ở các mức khác nhau như bảng trên cho phù hợp với phần cứng đo tần số .
    Ví dụ : Tần số khi S0=H,S1=H -Fout=500Khz thì:
    S0=H,S1=L -Fout=100Khz
    S0=L,S1=H -Fout=10Khz
    S0=L,S1=L -Fout=0
    -Nguyên lý hoạt động :
    Ánh sáng trắng là hỗn hợp rất nhiều ánh sáng có bước sóng màu sắc khác nhau .
    Khi ta chiếu ánh sáng trắng vào một vật thể bất kì .Tại bề mặt vật thể sẽ xảy ra hiện tượng hấp thụ và phản xạ ánh sáng .
    Ví dụ : Một vật thể có màu sắc đỏ khi được chiếu ánh sáng trắng thì những ánh sáng không nằm trong dải bước sóng màu đỏ sẽ bị vật thể hấp thụ .Còn ánh sáng có bước sóng nằm trong dải màu đỏ sẽ bị phản xạ ngược trở lại .Và khiến mắt ta nhận biết vật thể đó là màu đỏ.

    Màu sắc bất kì được tổng hợp từ 3 mầu cơ bản Blue,Green,Red :
    [​IMG]

    Dựa trên nguyên lý sự phản xạ , hấp thụ ánh sáng trắng của vật thể và sự phối chộn màu sắc bởi 3 màu cơ bản Blue,Green,Red thì TCS3200 có cấu tạo là 4 bộ lọc photodiode Blue,Green,Red và clear để nhận biết màu sắc vật thể.
    Hình bên dưới là bảng test quá trình chuyển đổi từ ánh sáng mà 4 loại photodiode nhận được thành tần số:
    [​IMG]
    Với điều kiện test là ánh sáng có bước sóng λp = 470 nm(Dải màu Blue),λp = 524 nm(dải màu Green),λp = 640 nm(dải màu Red) thì 4 bộ lọc photodiode sẽ cho ra tần số khác nhau.Tần số ra lớn nhất khi ánh sáng chiếu vào cảm biến cùng loại photodiode được chọn vì khi đó photodiode sẽ hấp thụ nhiều nhất.

    Giao tiếp module cảm biến mầu TCS3200 với vi điều khiển :
    -Sơ đồ kết nối Module cảm biến với vi điều khiển ATmega8

    [​IMG]
    -Code ví dụ giao tiếp với module cảm biến để nhận biết 3 màu cơ bản Blue,Green,Red:
    Code gồm 2 phần chính :
    +Phần thứ nhất là đo tần số từ chân out của cảm biến
    Do tần số ra là tần số cao nên mình chọn phương pháp đếm số xung trong 1 khoảng thời gian để tính ra tần số .
    Ở đây mình đếm số xung trong khoảng thời gian là 50ms nên mình sử dụng bộ timer0 để tạo khoảng thời gian 50ms và sử dụng bộ timer1 để đếm số xung trong khoảng thời gian 50ms:
    Mã:
    //Tao 50ms va tinh toan tan so
    interrupt[TIM0_OVF]void Time_Sample(void)
    {
        //Reset lai bien dem
        TCNT0=255-250+5;
        Counter_Timer0++;
        if(Counter_Timer0==200)
        {         
            //Dung timer0,Timer1
            TCCR0=0b00000000;
            TCCR1B=0b00000000;
            //Sau 50ms tinh toan tan so
            F=(TCNT1+(unsigned long)Counter_Timer1*65536)*20/1000;
            Counter_Timer0=0;
            Counter_Timer1=0;
            //Reset lai bien dem Timer0,Timer1
            TCNT0=255-250+5;
            TCNT1=0;           
            //Bat timer0,Timer1
            TCCR0=0b00000010;
            TCCR1B=0b00000110;
        }
    }
    //Dem so xung trong khoang thoi gian 50ms
    interrupt[TIM1_OVF] void Counter_Pulse(void)
    {
        Counter_Timer1++;
    }
    +Phần thứ hai là so sánh tần số nhận được ứng với mỗi bộ lọc photodiode khác nhau để xác định 3 màu sắc cơ bản Blue,Green,Red.
    Mã:
    void Check_Color(void )
    {
        F_Red=TCS3200_Read(FILTER_RED);
        F_Green=TCS3200_Read(FILTER_GREEN);
        F_Blue=TCS3200_Read(FILTER_BLUE);
        if((F_Red>F_Green)&&(F_Red>F_Blue))
        {
            LED_RED=ON;
            LED_GREEN=OFF;
            LED_BLUE=OFF;
        }
        if((F_Green>F_Red)&&(F_Green>F_Blue))
        {
            LED_RED=OFF;
            LED_GREEN=ON;
            LED_BLUE=OFF;
        }
        if((F_Blue>F_Red)&&(F_Blue>F_Green))
        {
            LED_RED=OFF;
            LED_GREEN=OFF;
            LED_BLUE=ON;
        }
    }

    Code mẫu đính kèm file bên dưới .
    Video

    Các file đính kèm:

    • Code.rar
      Kích thước:
      34.9 KB
      Đọc:
      41
    Last edited: 5 Tháng mười 2014
    truong_sang2712 and NC.Hung like this.
  2. hung_88

    hung_88 New Member

    chào a Linh.mta a có code bang pic k up len cho ae sem vói e dang lam voi pic ak

    thanks a !!
  3. linh.mta

    linh.mta New Member

    Chào bạn .Mình chưa viết code trên pic.Bạn có thể post code bạn đang viết lên để mọi người góp ý .
  4. ntc

    ntc New Member

    bạn làm mạch thật chạy có chính xác khi nhận dạng màu ko, có dễ nhiễu khi bị thay đổi nguồn sáng ngoài ko, ý mình là cần có buồng tối để nhận dạng á, còn nếu kiểm tra các màu khác thì có ok ko?
    Thanks.
  5. linh.mta

    linh.mta New Member

    Mình mới chỉ làm mạch thật để nhận biết 3 mầu cơ bản.Về nhiễu thì bạn cần loại bỏ ánh sáng bên ngoài tác động vào vì nếu ánh sáng trắng chiếu vào mặt cảm biến dẫn đến việc nhận biết mầu bị sai ,do ánh sáng trắng gồm nhiều dải ánh sáng mầu khác nhau kết hợp lại .Các mầu ngoài 3 mầu khác chính là sự kết hợp của 3 mầu cơ bản Blue,Green và red bằng việc kết hợp 3 thông số từ 3 bộ lọc màu Blue,Green,Red để nhận biết.
  6. trungthebk

    trungthebk New Member

    anh Linh.mta cho em hỏi chút ạ
    em chưa hiểu chỗ tính
    F=(TCNT1+(unsigned long)Counter_Timer1*65536)*20/1000;
    nghĩa là như thế nào ạ?

    anh có thể giải thích giúp em được không ạ?
    em cảm ơn anh
  7. linh.mta

    linh.mta New Member

    F=1/T là số xung trên 1 s . Ở đây mình đếm số xung bằng timer1 trong thời gian 50ms được định thời bởi timer0.
    (TCNT1+(unsigned long)Counter_Timer1*65536) : Chính là số xung trong khoảng thời gian 50ms.Nên số xung trong 1s thì mình nhân thêm 20 thì thu được tần số .
    Phần chia 1000 mình để nhằm mục đích khác ,bạn có thể xóa đi .
    Last edited: 22 Tháng mười 2014
  8. trungthebk

    trungthebk New Member

    F=1/T là số xung trên 1 s . Ở đây mình đếm số xung bằng timer1 trong thời gian 50ms được định thời bởi timer0.
    (TCNT1+(unsigned long)Counter_Timer1*65536) : Chính là số xung trong khoảng thời gian 50ms.Nên số xung trong 1s thì mình nhân thêm 20 thì thu được tần số .
    Phần chia 1000 mình để nhằm mục đích khác ,bạn có thể xóa đi .
    anh cho em hỏi là biến TCNT1 ở đây có giá trị bằng 0 phải ko ạ? nếu bằng 0 thì ta có thể bỏ qua nó được không ạ?
  9. linh.mta

    linh.mta New Member

    TCB
    T CNT1 ở đây là biến đếm xung vào nên giá trị nó thay đổi .Số xung trong 50ms bằng số lần tràn của Timer1(Counter_Timer1)*65536 và cộng thêm giá trị hiện tại của bộ đếm Timer1 chính là TCNT1 .
  10. trungthebk

    trungthebk New Member

    T CNT1 ở đây là biến đếm xung vào nên giá trị nó thay đổi .Số xung trong 50ms bằng số lần tràn của Timer1(Counter_Timer1)*65536 và cộng thêm giá trị hiện tại của bộ đếm Timer1 chính là TCNT1 .
    vậy anh có thể cho em biết cách setup timer 1 trong codevision như thế nào được không ạ? em chưa rõ nó hoạt động ở chế độ nào?
    mà em có mua cảm biến tcs3200( chống nhiễu) ở Minh Hà nhưng em ko thấy có chân OE như cảm biến ở trên, vậy có phải chân OE ở đây đã được set là 0 sẵn rồi phải ko ạ?
  11. trungthebk

    trungthebk New Member

    anh có thể cho em xin số điện thoại để em tiện liên lạc được không ạ?
    em đang rất cần tìm hiểu về cái này ạ
    em mong anh giúp đỡ ạ
  12. linh.mta

    linh.mta New Member

    Last edited: 18 Tháng chín 2015
  13. phamvanthanh

    phamvanthanh New Member

    anh ơi em muốn nhận màu vàng thì lập trình màu vàng và màu cam nữa thì làm sao anh
  14. linh.mta

    linh.mta New Member

  15. binhbk

    binhbk New Member

    Có nhận biết được màu xanh đậm và xanh đen không. 2 màu này gần giống nhau đấy
  16. quang.dt7bk

    quang.dt7bk Admin

    Cái này chắc AD cũng chưa test rồi, màu khác nhau thì tần số trả về chắc chắn sẽ khác nhau bạn thử test xem sao, mình chỉ sợ màu gần giống nhau quá thì khi F trả về + % sai số nữa thì lại không phân biệt được :(
  17. longwwm

    longwwm New Member

    Anh ơi cho em hỏi là sao em mua con TCS3200 ở HCM nó có 10 chân, thêm 1 chân VCC với 1 chân GND và chân OE thì thành LED. Liệu nó có giống con ở trên anh xài không ạ.
  18. quang.dt7bk

    quang.dt7bk Admin

    Hoàn toàn giống bạn nhé, chân OE cho vào LED để khi xuất tần số bạn nhìn có tính trực quan hơn nhé :)
  19. longwwm

    longwwm New Member

    À anh ơi anh có thể cho em hỏi các chân sau nối thế này đúng chưa ạ.
    Green PB0
    BLUE PB1
    RED PB2
    MOSI PB3
    MISO PB4
    SCK PB5
    OUT PD5
    Em không biết nối thế này đúng chưa nữa anh, tại nhìn trong nhìn nó hơi rối ạ :(
  20. quang.dt7bk

    quang.dt7bk Admin

    Làm gì có chân Green, Blue, Red bạn...bạn chỉ có S0, S1, S2, S3 để lựa chọn màu đo và giới hạn tần số xuất ra thôi :)

Chia sẻ trang này

Lên trên