欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 基于51單片機(jī)的顏色識別系統(tǒng)(完結(jié)) [打印本頁]

作者: 51hei天天    時間: 2016-2-5 16:16
標(biāo)題: 基于51單片機(jī)的顏色識別系統(tǒng)(完結(jié))
本文作者:薛 二 煒

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

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

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

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

 

 (TCS3200顏色識別模塊)
 

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


(模塊和轉(zhuǎn)接板連接完成)


(最小系統(tǒng))


(1602液晶屏)


(連接好1602液晶屏)


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


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


(最終效果)


(全家福)


(連接好TCS3200模塊)


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


(白平衡的結(jié)果,現(xiàn)在就可以進(jìn)行顏色識別了)


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


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


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


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


(上位機(jī)界面)



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

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

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

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; //分別定義紅色因子 綠色因子 藍(lán)色因子
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'};

/******************************************************************
 - 功能描述:延時子程序
 - 入口參數(shù):長整數(shù)型
 - 參 數(shù) 值: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--);
}
/******************************************************************
 - 功能描述:寫數(shù)據(jù)子程序
 - 入口參數(shù):數(shù)據(jù)
 - 參 數(shù) 值:字節(jié)型
 - 返回說明:無
 - 備    注:無
 ******************************************************************/
void wdat(unsigned char dat)
{
delay1ms(1);
RS=1;
RW=0;
EN=0;
_data=dat;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
/******************************************************************
 - 功能描述:寫命令子程序
 - 入口參數(shù):數(shù)據(jù)
 - 參 數(shù) 值:字節(jié)型
 - 返回說明:無
 - 備    注:無
 ******************************************************************/
void wcmd(unsigned char com)
{
delay1ms(1);
RS=0;
RW=0;
EN=0;
_data=com;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
/******************************************************************
 - 功能描述:初始化子程序
 - 入口參數(shù):無
 - 參 數(shù) 值:無
 - 返回說明:無
 - 備    注:無
 ******************************************************************/
void init_1602(void)
delay1ms(15);
wcmd(0x38);delay1ms(5); //功能設(shè)置 8位總線 2行顯示 5*7點(diǎn)陣
wcmd(0x06);delay1ms(5); //設(shè)置輸入模式 光標(biāo)右移 整體不移
wcmd(0x08);delay1ms(5); //設(shè)置顯示方式 顯示關(guān)
wcmd(0x01);delay1ms(5); //清除顯示
wcmd(0x0c);delay1ms(5); //設(shè)置顯示方式 顯示開 無光標(biāo) 光標(biāo)不閃爍
}
/******************************************************************
 - 功能描述:指定位置寫字符函數(shù)
 - 入口參數(shù):行,列,字符
 - 參 數(shù) 值:無
 - 返回說明:無
 - 備    注:無
 ******************************************************************/
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;} //當(dāng)要顯示第二行時地址碼+0x40;
Y |= 0x80; //得出列位置
wcmd(Y); //寫地址
wdat(in); //寫數(shù)據(jù)
}
/******************************************************************
 - 功能描述:發(fā)送數(shù)據(jù)到上位機(jī)
 - 入口參數(shù):數(shù)據(jù)1,數(shù)據(jù)2,數(shù)據(jù)3
 - 參 數(shù) 值:無
 - 返回說明:無
 - 備    注:無
 ******************************************************************/
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;
}
/******************************************************************
 - 功能描述:白平衡函數(shù)
 - 入口參數(shù):無
 - 參 數(shù) 值:無
 - 返回說明:無
 - 備    注:無
 ******************************************************************/
void baipingheng(void)
{
TMOD=0x51; //設(shè)定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; //開始計數(shù)
while(TF0==0); //等待定時器溢出
TF0=0; //清除定時器0溢出標(biāo)志
TR0=0; //關(guān)閉定時0
TR1=0;
Ryz=TH1*256+TL1; //其實(shí)這里的比例因子應(yīng)該為255/(TH1*256+TL1)

TH0=(65536-10000)/256; //取藍(lán)色因子
TL0=(65536-10000)%256;
TH1=0;
TL1=0;
tcs230_s2=0;
tcs230_s3=1; //選擇藍(lán)色濾光器
TR0=1; //10毫秒開始計時
TR1=1; //開始計數(shù)
while(TF0==0); //等待定時器溢出
TF0=0; //清除定時器0溢出標(biāo)志
TR0=0; //關(guān)閉定時0
TR1=0;
Byz=TH1*256+TL1; //其實(shí)這里的比例因子應(yīng)該為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; //開始計數(shù)
while(TF0==0); //等待定時器溢出
TF0=0; //清除定時器0溢出標(biāo)志
TR0=0; //關(guān)閉定時0
TR1=0;
Gyz=TH1*256+TL1; //其實(shí)這里的比例因子應(yīng)該為255/(TH1*256+TL1)
}
/******************************************************************
 - 功能描述:測量顏色值
 - 入口參數(shù):無
 - 參 數(shù) 值:無
 - 返回說明:無
 - 備    注:無
 ******************************************************************/
void ceyanse(void)
{
     TMOD=0x51; //設(shè)定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; //開始計數(shù)
     while(TF0==0); //等待定時器溢出
     TF0=0; //清除定時器0溢出標(biāo)志
     TR0=0; //關(guān)閉定時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; //選擇藍(lán)色濾光器
     TR0=1; //10毫秒開始計時
     TR1=1; //開始計數(shù)
     while(TF0==0); //等待定時器溢出
     TF0=0; //清除定時器0溢出標(biāo)志
     TR0=0; //關(guān)閉定時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; //開始計數(shù)
     while(TF0==0); //等待定時器溢出
     TF0=0; //清除定時器0溢出標(biāo)志
     TR0=0; //關(guān)閉定時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');//以十進(jìn)制顯示RGB中紅色的分值
DisplayOneChar(0, 1, Rzhi/100+0x30); //顯示百位數(shù)據(jù)
DisplayOneChar(0, 2, Rzhi/10%10+0x30);//顯示十位數(shù)據(jù)
DisplayOneChar(0, 3, Rzhi%10+0x30);//顯示個位數(shù)據(jù)
DisplayOneChar(0, 5,'G');//以十進(jìn)制顯示RGB中綠色的分值
DisplayOneChar(0, 6, Gzhi/100+0x30); //顯示百位數(shù)據(jù)
DisplayOneChar(0, 7, Gzhi/10%10+0x30);
DisplayOneChar(0, 8, Gzhi%10+0x30);
DisplayOneChar(0, 10,'B');//以十進(jìn)制顯示RGB中藍(lán)色的分值
DisplayOneChar(0, 11, Bzhi/100+0x30);
DisplayOneChar(0, 12, Bzhi/10%10+0x30);
DisplayOneChar(0, 13, Bzhi%10+0x30);
//*****在LCD1602的第二行以16進(jìn)制顯示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); //發(fā)送數(shù)據(jù)到上位機(jī)
delay600ms(); //每隔0.6秒測試一次顏色
   }
 
===========================  《 完   ==========================
薛 二 煒    于江蘇·無錫
2015  年 05  月  19  日
smhacker@126.com  轉(zhuǎn)載請注明出處 

作者: 騰飛的龍    時間: 2016-2-17 11:57
謝謝樓主分享,贊!
作者: 檸檬水    時間: 2016-3-21 22:05
哇啊哦,有意思不錯
作者: 河馬    時間: 2016-3-22 06:36
謝謝樓主分享!
作者: 薛家駿    時間: 2016-4-2 14:06
看著就爽

作者: goldpds    時間: 2016-4-2 16:53
樓主厲害,幸苦了!
作者: qqiao    時間: 2016-6-29 19:41
大神,為什么我按你的程序燒不出來。1602只是亮  什么都沒有。引腳定義我改過了
作者: 2651526901    時間: 2016-8-2 22:00
沒用啊 lcd  沒有顯示

作者: 嘟嘟嘟a嘟嘟嘟    時間: 2016-11-23 10:25
學(xué)習(xí)下。
作者: 嘟嘟嘟a嘟嘟嘟    時間: 2016-11-23 10:25
謝謝樓主,我想學(xué)習(xí)下。
作者: 5314039    時間: 2016-12-30 22:01
樓主!能發(fā)一份上位機(jī)軟件嗎
作者: 5314039    時間: 2016-12-30 22:02

樓主!能發(fā)一份上位機(jī)軟件嗎  1433189411@qq.com

作者: 5314039    時間: 2016-12-30 22:09
樓主!那個上位機(jī)是用什么軟件編寫的
作者: chenggong999    時間: 2017-1-9 12:11
請問 是用什么軟件編寫的?
作者: hanlulu0414    時間: 2017-4-13 09:07
5314039 發(fā)表于 2016-12-30 22:02
樓主!能發(fā)一份上位機(jī)軟件嗎

請問你有上位機(jī)的軟件了嗎?有的話幫忙給我發(fā)一份吧,謝謝1542113651@qq.com
作者: 寂寞之雨3    時間: 2017-5-9 16:16
樓主可以把你上面用的軟件發(fā)給我嗎?謝謝,郵箱758759506@qq.com
作者: 寂寞之雨3    時間: 2017-5-9 16:18
樓主,可以把你所用的軟件發(fā)給我嗎?郵箱758759506@qq.com
作者: zed45945963    時間: 2017-7-8 07:12
樓主,求上位機(jī)軟件,謝謝2317375052@qq.com
作者: 東北那誰    時間: 2017-7-12 13:03
看著就爽
作者: 啦啦啦~~    時間: 2017-8-1 14:06
樓主,能發(fā)一份上位機(jī)嗎?想試完它,謝謝~117432208@qq.com
作者: 單片機(jī)51stm32    時間: 2017-8-12 10:05
樓主  求加qq通過一下    942678663
作者: bleach    時間: 2017-9-19 11:58
非常不錯的材料,謝謝樓主分享
作者: 煩惱者    時間: 2017-10-5 11:23
5314039 發(fā)表于 2016-12-30 22:02
樓主!能發(fā)一份上位機(jī)軟件嗎

請問你有上位機(jī)軟件了嗎

作者: 煩惱者    時間: 2017-10-5 11:24
哪位大神有樓主的上位機(jī)軟件可不可以發(fā)給我一份,拜托了
作者: 小白O(∩_∩)O    時間: 2017-10-18 18:43
各位大神,上位機(jī)軟件可否分享一下給我?郵箱:1822830507@qq.com       麻煩了O(∩_∩)O謝謝
作者: Lemonあ    時間: 2017-10-18 19:49
樓主 這個檢測不出來 沒有數(shù)值是怎么回事呢??
作者: 慕容妤嫣    時間: 2017-11-25 10:53
樓主能發(fā)一份上位機(jī)的軟件嗎?906276645@qq.com
作者: chinafilm    時間: 2017-12-6 13:20
謝謝樓主分享,贊!贊!贊!贊!
作者: my210    時間: 2017-12-27 20:54
很不錯
作者: yiquan    時間: 2018-2-25 14:17
樓主好! 你的設(shè)計很好。 我希望能跟你進(jìn)一步溝通, 把產(chǎn)品優(yōu)化以后運(yùn)用到塑料行業(yè)的顏色采集和色差控制中。 同時 我公司也愿意付費(fèi)來請你進(jìn)一步的研發(fā)。 我的電話: 13322444740 ,也是我的微信號。 希望能早日收到樓主的回音
作者: bigeyes    時間: 2018-3-30 19:59
很厲害
作者: 1574065994    時間: 2018-9-12 10:52
為什么我的一直卡在白平衡的三個255那里
作者: 切了    時間: 2018-11-30 19:09
為什么我LCD1602顯示不出來啊
作者: 澎湃1999    時間: 2018-12-25 21:33
請問白平衡程序中,為什么要用到定時器T1的計數(shù)功能呀?
作者: Arvin0011    時間: 2018-12-26 11:38
不錯,感覺應(yīng)用方面也不會差太多,希望繼續(xù)加油

作者: langren023    時間: 2018-12-26 12:24
很不錯,學(xué)習(xí)一下
作者: 快樂眼淚    時間: 2019-3-26 09:06
這個真好啊!
作者: 雁字回時    時間: 2019-4-15 22:14
您好,我是一個52單片機(jī)初學(xué)者,今天瀏覽到了你的帖子,感覺很傾佩,復(fù)制了您的程序,也想自己試驗(yàn)一下,可以分享一下您的上位機(jī)軟件及源程序嗎,我想進(jìn)一步學(xué)習(xí)下,Thank you very much!我的郵箱1770608467@qq.com
作者: zhaojiaoxian    時間: 2019-4-24 21:31
謝謝樓主分享,贊!
作者: 是肖戰(zhàn)啊    時間: 2019-12-20 12:37
很好哈哈,學(xué)到了
作者: wenqian    時間: 2020-2-19 14:53
厲害 這個模塊我也有 只是不會玩
作者: colin_liu    時間: 2020-2-20 17:26
來學(xué)習(xí)了,牛人太多
作者: 2523472815    時間: 2021-5-2 20:51
博主有上位機(jī)程序源碼?發(fā)我一份
作者: 安逸啊    時間: 2021-8-3 16:04
1574065994 發(fā)表于 2018-9-12 10:52
為什么我的一直卡在白平衡的三個255那里

你好,我也卡在那里了,請問您解決了嗎

作者: @what1    時間: 2023-4-30 19:33
不錯,能實(shí)現(xiàn)
作者: moruotong    時間: 2023-5-11 20:30
切了佛 發(fā)表于 2018-11-30 19:09
為什么我LCD1602顯示不出來啊

你好,你的這個問題解決了嗎





歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1