久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 41048|回復: 45
打印 上一主題 下一主題
收起左側

基于51單片機的顏色識別系統(完結)

  [復制鏈接]
跳轉到指定樓層
樓主
ID:105099 發表于 2016-2-5 16:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本文作者:薛 二 煒

背景:
       隨著現代工業生產向高速化、自動化方向的發展,生產過程中長期以來由人眼起主導作用的顏色識別工作將越來越多地被相應的顏色傳感器所替代。例如:圖書館使用顏色區分對文獻進行分類,能夠極大地提高排架管理和統計等工作;在包裝行業,產生包裝利用不同的顏色和裝潢來表示其不同的性質或用途。目前的顏色傳感器通常是在獨立的光電二極管上覆蓋經過修正的紅、綠、藍濾波片,然后對輸出信號進行相應的處理,才能將顏色信號識別出來;有的將兩者集合起來,但是輸出模擬信號,需要一個A/D電路進行采集,對該信號進一步處理,才能進行識別,增加了電路的復雜性,并且存在較大的識別誤差,影響了識別的效果。TAOS(TexasAdvancedOptoelectronicSolutions)公司最新推出的顏色傳感器TCS3200,不僅能夠實現顏色的識別與檢測,與以前的顏色傳感器相比,還具有許多優良的新特性。

最近在網上淘了一片TCS3200模塊,從官方的介紹中看的出這片TCS3200功能好強大,閑來沒事就做了一實驗,想看看這個TCS3200的性能、檢測能力到底怎樣;

需要的器件和材料:
        1.51最小系統(12T 時鐘:11.0592MHz)
        2.TCS3200顏色識別模塊
        3.各種顏色的物料
        4.1602液晶屏

TCS3200接口定義:
        S0、S1接VCC
        EO接GND(或用IO口控制)
        S2接P1.0
        S3接P1.1
        OUT接P3.5(必須) 
(測試程序貼在后面,實物測試通過!) 

 

 (TCS3200顏色識別模塊)
 

(自己做的TCS3200模塊轉接板,方便連線,方便檢測顏色)


(模塊和轉接板連接完成)


(最小系統)


(1602液晶屏)


(連接好1602液晶屏)


(為了方便檢測小物料和白平衡檢測,需要自己做一個小平臺,倆飲料瓶蓋子,一顆自攻螺絲即可搞定!)


(做好的平臺,為了方便白平衡,需要在上面蓋子上劃倆口子,只要能卡住一張白紙即可!)


(最終效果)


(全家福)


(連接好TCS3200模塊)


(白平衡測試,注意:上電前必須白平衡檢測,不然后面檢測的顏色都不會準確的;檢測方法:白紙放在TCS3200模塊前面1公分處,然后單片機上電,只要第一次讀出的值為255,255,255即可,否則請重新進行白平衡!)


(白平衡的結果,現在就可以進行顏色識別了)


(識別到綠色娃娃的顏色,上位機上面的顏色為識別到的顏色,同時液晶上會顯示RGB值)


(識別到黃色娃娃的顏色值)


(識別到粉紅色娃娃的顏色值)


(上位機顯示粉紅色娃娃的顏色)


(上位機界面)



(這倆高爾夫球的識別,但是結果不準確,估計是這倆高爾夫球的反光能力太強烈了,只要表面不是很光滑的物體檢測出來誤差都是很小的,另外,有網友說要放在黑盒子里檢測,我感覺沒必要,只要白平衡做好了基本就沒什么問題了,至于表面特別光滑的物體,只能去尋找其他方法去進行檢測了!)

=========================  測   試   程   序  ========================  
#include "reg52.h"    
#define _data P2    //LCD1602數據接口

/******************************************************************      
 - 說明:端口定義
 - 備注:無
 ******************************************************************/
sbit EN =P0^5; //讀寫使能,高電平有效,下降沿鎖定數據。
sbit RW =P0^6; //讀/寫選擇:高電平為讀數據,低電平為寫數據。
sbit RS =P0^7; //數據/指令選擇:高電平為數據,低電平為指令。

sbit    tcs230_s2=P1^0; //TCS3200 S2 P1.0
sbit    tcs230_s3=P1^1; //TCS3200 S3 P1.1
//TCS3200 OUT 接P3.5
/******************************************************************      
 - 說明:變量定義
 - 備注:無
 ******************************************************************/
unsigned int Ryz,Gyz,Byz; //分別定義紅色因子 綠色因子 藍色因子
unsigned int Rzhi,Gzhi,Bzhi; //RGB值
unsigned char code num[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

/******************************************************************
 - 功能描述:延時子程序
 - 入口參數:長整數型
 - 參 數 值:0-65535
 - 返回說明:無
 - 備    注:無
 ******************************************************************/
void delay1ms(unsigned int ms)//延時1毫秒(不夠精確的)
{
unsigned int i,j;
for(i=0;i<ms;i++)
for(j=0;j<100;j++);
}
void delay600ms(void)
{
    unsigned char a,b,c;
    for(c=89;c>0;c--)
        for(b=230;b>0;b--)
            for(a=12;a>0;a--);
}
/******************************************************************
 - 功能描述:寫數據子程序
 - 入口參數:數據
 - 參 數 值:字節型
 - 返回說明:無
 - 備    注:無
 ******************************************************************/
void wdat(unsigned char dat)
{
delay1ms(1);
RS=1;
RW=0;
EN=0;
_data=dat;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
/******************************************************************
 - 功能描述:寫命令子程序
 - 入口參數:數據
 - 參 數 值:字節型
 - 返回說明:無
 - 備    注:無
 ******************************************************************/
void wcmd(unsigned char com)
{
delay1ms(1);
RS=0;
RW=0;
EN=0;
_data=com;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
/******************************************************************
 - 功能描述:初始化子程序
 - 入口參數:無
 - 參 數 值:無
 - 返回說明:無
 - 備    注:無
 ******************************************************************/
void init_1602(void)
delay1ms(15);
wcmd(0x38);delay1ms(5); //功能設置 8位總線 2行顯示 5*7點陣
wcmd(0x06);delay1ms(5); //設置輸入模式 光標右移 整體不移
wcmd(0x08);delay1ms(5); //設置顯示方式 顯示關
wcmd(0x01);delay1ms(5); //清除顯示
wcmd(0x0c);delay1ms(5); //設置顯示方式 顯示開 無光標 光標不閃爍
}
/******************************************************************
 - 功能描述:指定位置寫字符函數
 - 入口參數:行,列,字符
 - 參 數 值:無
 - 返回說明:無
 - 備    注:無
 ******************************************************************/
void DisplayOneChar( unsigned char X, unsigned char Y, unsigned char in)
{
X &= 0x1; //限制X值為 0 和 1
Y &= 0xF; //限制Y值為 0 - 15
if (X)
{Y|=0x40;} //當要顯示第二行時地址碼+0x40;
Y |= 0x80; //得出列位置
wcmd(Y); //寫地址
wdat(in); //寫數據
}
/******************************************************************
 - 功能描述:發送數據到上位機
 - 入口參數:數據1,數據2,數據3
 - 參 數 值:無
 - 返回說明:無
 - 備    注:無
 ******************************************************************/
void SendOneByte(unsigned char ina,unsigned char inb,unsigned char inc)
{
    TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xFD;
    TL1 = TH1;
    PCON = 0x00;
    EA = 1;
    ES = 1;
    TR1 = 1;
    SBUF = ina;
    while(!TI);
    TI = 0;
    SBUF = inb;
    while(!TI);
    TI = 0;
    SBUF = inc;
    while(!TI);
    TI = 0;
}
/******************************************************************
 - 功能描述:白平衡函數
 - 入口參數:無
 - 參 數 值:無
 - 返回說明:無
 - 備    注:無
 ******************************************************************/
void baipingheng(void)
{
TMOD=0x51; //設定T0以工作方式1定時10毫秒
TH0=(65536-10000)/256; //取紅色因子
TL0=(65536-10000)%256;
TH1=0;
TL1=0;
tcs230_s2=0;
tcs230_s3=0; //選擇紅色濾光器
TR0=1; //10毫秒開始計時
TR1=1; //開始計數
while(TF0==0); //等待定時器溢出
TF0=0; //清除定時器0溢出標志
TR0=0; //關閉定時0
TR1=0;
Ryz=TH1*256+TL1; //其實這里的比例因子應該為255/(TH1*256+TL1)

TH0=(65536-10000)/256; //取藍色因子
TL0=(65536-10000)%256;
TH1=0;
TL1=0;
tcs230_s2=0;
tcs230_s3=1; //選擇藍色濾光器
TR0=1; //10毫秒開始計時
TR1=1; //開始計數
while(TF0==0); //等待定時器溢出
TF0=0; //清除定時器0溢出標志
TR0=0; //關閉定時0
TR1=0;
Byz=TH1*256+TL1; //其實這里的比例因子應該為255/(TH1*256+TL1)

TH0=(65536-10000)/256; //求綠色因子
TL0=(65536-10000)%256;
TH1=0;
TL1=0;
tcs230_s2=1;
tcs230_s3=1; //選擇綠色濾光器
TR0=1; //10毫秒開始計時
TR1=1; //開始計數
while(TF0==0); //等待定時器溢出
TF0=0; //清除定時器0溢出標志
TR0=0; //關閉定時0
TR1=0;
Gyz=TH1*256+TL1; //其實這里的比例因子應該為255/(TH1*256+TL1)
}
/******************************************************************
 - 功能描述:測量顏色值
 - 入口參數:無
 - 參 數 值:無
 - 返回說明:無
 - 備    注:無
 ******************************************************************/
void ceyanse(void)
{
     TMOD=0x51; //設定T0以工作方式1定時10毫秒
TH0=(65536-10000)/256; //求R值
  TL0=(65536-10000)%256;
     TH1=0;
     TL1=0;
     tcs230_s2=0; //選擇紅色濾光器
     tcs230_s3=0;
     TR0=1; //10毫秒開始計時
     TR1=1; //開始計數
     while(TF0==0); //等待定時器溢出
     TF0=0; //清除定時器0溢出標志
     TR0=0; //關閉定時0
     TR1=0;
     Rzhi=(unsigned long)(TH1*256+TL1)*255/Ryz;
     if(Rzhi>255)Rzhi=255; //判斷RGB值是否合法

     TH0=(65536-10000)/256; //求B值
  TL0=(65536-10000)%256;
     TH1=0;
     TL1=0;
     tcs230_s2=0;
     tcs230_s3=1; //選擇藍色濾光器
     TR0=1; //10毫秒開始計時
     TR1=1; //開始計數
     while(TF0==0); //等待定時器溢出
     TF0=0; //清除定時器0溢出標志
     TR0=0; //關閉定時0
     TR1=0;
     Bzhi=(unsigned long)(TH1*256+TL1)*255/Byz;
     if(Bzhi>255)Bzhi=255; //判斷RGB值是否合法     

     TH0=(65536-10000)/256; //求G值
  TL0=(65536-10000)%256;
     TH1=0;
     TL1=0;
     tcs230_s2=1;
     tcs230_s3=1; //選擇綠色濾光器
     TR0=1; //10毫秒開始計時
     TR1=1; //開始計數
     while(TF0==0); //等待定時器溢出
     TF0=0; //清除定時器0溢出標志
     TR0=0; //關閉定時0
     TR1=0;
     Gzhi=(unsigned long)(TH1*256+TL1)*255/Gyz;
     if(Gzhi>255)Gzhi=255; //判斷RGB值是否合法  
}

void main(void)   
{   
   init_1602();//LCD初始
   baipingheng();//上電時先白平衡一次
   while(1)
   {
ceyanse(); //顏色測試
DisplayOneChar(0, 0,'R');//以十進制顯示RGB中紅色的分值
DisplayOneChar(0, 1, Rzhi/100+0x30); //顯示百位數據
DisplayOneChar(0, 2, Rzhi/10%10+0x30);//顯示十位數據
DisplayOneChar(0, 3, Rzhi%10+0x30);//顯示個位數據
DisplayOneChar(0, 5,'G');//以十進制顯示RGB中綠色的分值
DisplayOneChar(0, 6, Gzhi/100+0x30); //顯示百位數據
DisplayOneChar(0, 7, Gzhi/10%10+0x30);
DisplayOneChar(0, 8, Gzhi%10+0x30);
DisplayOneChar(0, 10,'B');//以十進制顯示RGB中藍色的分值
DisplayOneChar(0, 11, Bzhi/100+0x30);
DisplayOneChar(0, 12, Bzhi/10%10+0x30);
DisplayOneChar(0, 13, Bzhi%10+0x30);
//*****在LCD1602的第二行以16進制顯示RGB*******************
DisplayOneChar(1, 1, num[Rzhi/16]); 
DisplayOneChar(1, 2, num[Rzhi%16]);
DisplayOneChar(1, 3, 'H');
DisplayOneChar(1, 6, num[Gzhi/16]); 
DisplayOneChar(1, 7, num[Gzhi%16]);
DisplayOneChar(1, 8, 'H');
DisplayOneChar(1, 11,num[Bzhi/16]);
DisplayOneChar(1, 12,num[Bzhi%16]);
DisplayOneChar(1, 13,'H');
SendOneByte(Rzhi,Gzhi,Bzhi); //發送數據到上位機
delay600ms(); //每隔0.6秒測試一次顏色
   }
 
===========================  《 完   ==========================
薛 二 煒    于江蘇·無錫
2015  年 05  月  19  日
smhacker@126.com  轉載請注明出處 

評分

參與人數 5黑幣 +39 收起 理由
心瘋揚 + 10 很給力!
切了 + 7 共享資料的黑幣獎勵!
咖啡加冰 + 5 很給力!
練氏 + 12
ssfc + 5

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏31 分享淘帖 頂2 踩
回復

使用道具 舉報

沙發
ID:79544 發表于 2016-2-17 11:57 | 只看該作者
謝謝樓主分享,贊!
回復

使用道具 舉報

板凳
ID:104637 發表于 2016-3-21 22:05 | 只看該作者
哇啊哦,有意思不錯
回復

使用道具 舉報

地板
ID:105890 發表于 2016-3-22 06:36 | 只看該作者
謝謝樓主分享!
回復

使用道具 舉報

5#
ID:89596 發表于 2016-4-2 14:06 | 只看該作者
看著就爽
回復

使用道具 舉報

6#
ID:73852 發表于 2016-4-2 16:53 | 只看該作者
樓主厲害,幸苦了!
回復

使用道具 舉報

7#
ID:128598 發表于 2016-6-29 19:41 | 只看該作者
大神,為什么我按你的程序燒不出來。1602只是亮  什么都沒有。引腳定義我改過了
回復

使用道具 舉報

8#
ID:129840 發表于 2016-8-2 22:00 | 只看該作者
沒用啊 lcd  沒有顯示
回復

使用道具 舉報

9#
ID:141936 發表于 2016-11-23 10:25 | 只看該作者
學習下。
回復

使用道具 舉報

10#
ID:141936 發表于 2016-11-23 10:25 | 只看該作者
謝謝樓主,我想學習下。
回復

使用道具 舉報

11#
ID:99612 發表于 2016-12-30 22:01 | 只看該作者
樓主!能發一份上位機軟件嗎
回復

使用道具 舉報

12#
ID:99612 發表于 2016-12-30 22:02 | 只看該作者

樓主!能發一份上位機軟件嗎  1433189411@qq.com
回復

使用道具 舉報

13#
ID:99612 發表于 2016-12-30 22:09 | 只看該作者
樓主!那個上位機是用什么軟件編寫的
回復

使用道具 舉報

14#
ID:158734 發表于 2017-1-9 12:11 | 只看該作者
請問 是用什么軟件編寫的?
回復

使用道具 舉報

15#
ID:145256 發表于 2017-4-13 09:07 | 只看該作者
5314039 發表于 2016-12-30 22:02
樓主!能發一份上位機軟件嗎

請問你有上位機的軟件了嗎?有的話幫忙給我發一份吧,謝謝1542113651@qq.com
回復

使用道具 舉報

16#
ID:198687 發表于 2017-5-9 16:16 | 只看該作者
樓主可以把你上面用的軟件發給我嗎?謝謝,郵箱758759506@qq.com
回復

使用道具 舉報

17#
ID:198687 發表于 2017-5-9 16:18 | 只看該作者
樓主,可以把你所用的軟件發給我嗎?郵箱758759506@qq.com
回復

使用道具 舉報

18#
ID:218021 發表于 2017-7-8 07:12 來自手機 | 只看該作者
樓主,求上位機軟件,謝謝2317375052@qq.com
回復

使用道具 舉報

19#
ID:136460 發表于 2017-7-12 13:03 | 只看該作者
看著就爽
回復

使用道具 舉報

20#
ID:218386 發表于 2017-8-1 14:06 | 只看該作者
樓主,能發一份上位機嗎?想試完它,謝謝~117432208@qq.com
回復

使用道具 舉報

21#
ID:227184 發表于 2017-8-12 10:05 | 只看該作者
樓主  求加qq通過一下    942678663
回復

使用道具 舉報

22#
ID:146874 發表于 2017-9-19 11:58 | 只看該作者
非常不錯的材料,謝謝樓主分享
回復

使用道具 舉報

23#
ID:237327 發表于 2017-10-5 11:23 | 只看該作者
5314039 發表于 2016-12-30 22:02
樓主!能發一份上位機軟件嗎

請問你有上位機軟件了嗎
回復

使用道具 舉報

24#
ID:237327 發表于 2017-10-5 11:24 | 只看該作者
哪位大神有樓主的上位機軟件可不可以發給我一份,拜托了
回復

使用道具 舉報

25#
ID:240690 發表于 2017-10-18 18:43 | 只看該作者
各位大神,上位機軟件可否分享一下給我?郵箱:1822830507@qq.com       麻煩了O(∩_∩)O謝謝
回復

使用道具 舉報

26#
ID:240604 發表于 2017-10-18 19:49 | 只看該作者
樓主 這個檢測不出來 沒有數值是怎么回事呢??
回復

使用道具 舉報

27#
ID:253345 發表于 2017-11-25 10:53 | 只看該作者
樓主能發一份上位機的軟件嗎?906276645@qq.com
回復

使用道具 舉報

28#
ID:229732 發表于 2017-12-6 13:20 | 只看該作者
謝謝樓主分享,贊!贊!贊!贊!
回復

使用道具 舉報

29#
ID:268001 發表于 2017-12-27 20:54 | 只看該作者
很不錯
回復

使用道具 舉報

30#
ID:285387 發表于 2018-2-25 14:17 | 只看該作者
樓主好! 你的設計很好。 我希望能跟你進一步溝通, 把產品優化以后運用到塑料行業的顏色采集和色差控制中。 同時 我公司也愿意付費來請你進一步的研發。 我的電話: 13322444740 ,也是我的微信號。 希望能早日收到樓主的回音
回復

使用道具 舉報

31#
ID:188183 發表于 2018-3-30 19:59 | 只看該作者
很厲害
回復

使用道具 舉報

32#
ID:232734 發表于 2018-9-12 10:52 | 只看該作者
為什么我的一直卡在白平衡的三個255那里
回復

使用道具 舉報

33#
ID:282520 發表于 2018-11-30 19:09 | 只看該作者
為什么我LCD1602顯示不出來啊
回復

使用道具 舉報

34#
ID:454903 發表于 2018-12-25 21:33 | 只看該作者
請問白平衡程序中,為什么要用到定時器T1的計數功能呀?
回復

使用道具 舉報

35#
ID:446674 發表于 2018-12-26 11:38 | 只看該作者
不錯,感覺應用方面也不會差太多,希望繼續加油
回復

使用道具 舉報

36#
ID:455289 發表于 2018-12-26 12:24 | 只看該作者
很不錯,學習一下
回復

使用道具 舉報

37#
ID:399179 發表于 2019-3-26 09:06 來自手機 | 只看該作者
這個真好啊!
回復

使用道具 舉報

38#
ID:513153 發表于 2019-4-15 22:14 | 只看該作者
您好,我是一個52單片機初學者,今天瀏覽到了你的帖子,感覺很傾佩,復制了您的程序,也想自己試驗一下,可以分享一下您的上位機軟件及源程序嗎,我想進一步學習下,Thank you very much!我的郵箱1770608467@qq.com
回復

使用道具 舉報

39#
ID:31287 發表于 2019-4-24 21:31 | 只看該作者
謝謝樓主分享,贊!
回復

使用道具 舉報

40#
ID:668168 發表于 2019-12-20 12:37 | 只看該作者
很好哈哈,學到了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线欧美 | 国产精品久久久久久久久久了 | 好好的日在线视频 | 日本字幕在线观看 | 国产精品综合色区在线观看 | 亚洲网视频 | 欧美一区在线看 | 日本三级日产三级国产三级 | 亚洲综合在线一区二区 | 国产午夜精品久久久久免费视高清 | 伊人网综合在线 | 91网站在线观看视频 | 91玖玖 | 久久激情五月丁香伊人 | 国产精品国产精品国产专区不片 | 日日操夜夜操天天操 | 怡红院免费的全部视频 | 国产精品久久久久久久久久免费 | 亚洲欧美中文日韩在线v日本 | 国外成人在线视频 | 亚洲高清在线 | 一区二区中文字幕 | 久久久久国产一区二区三区四区 | 在线观看成人免费视频 | 国产激情片在线观看 | 中文字幕在线观看第一页 | 精品久久久久久亚洲精品 | 欧美日韩免费一区二区三区 | 免费观看羞羞视频网站 | 在线免费观看黄a | 成人欧美一区二区 | 国产九九九 | 日韩欧美在线一区 | 日本中出视频 | 亚洲精品免费视频 | 亚洲综合色视频在线观看 | 亚洲美女视频 | 久草视频观看 | 日韩免费av网站 | 国产精品入口麻豆www | www.五月天婷婷 |