發布日期:2022-10-09 點擊率:79
用到了 TCS 顏色傳感器,網上百度一圈都沒有發現驅動程序,自己照著 Arduino 的程序和數據手冊寫了下,記錄一下 (~ ̄▽ ̄)~
第一步,先來看看數據手冊,了解到 TCS 是 I2C 器件,那就好辦了,根據以前寫的 I2C 驅動改一改就好啦 b( ̄▽ ̄)d(具體代碼貼在后邊)。
然后干嘛嘞?當然是找器件地址和寄存器地址啦,繼續翻手冊…(⊙_⊙;)…
找到 TCS 地址為 0x29 ,各個寄存器的地址如下:
到這里,發現這貨不僅器件地址是奇數,而且還有個沒有地址的 COMMAND 寄存器,嗯,隱隱感覺肯定有個坑在這里 ヾ(。 ̄□ ̄)?゜゜゜
接下來就可以著手寫程序啦 (o゜▽゜)o☆
首先定義一下用到的引腳:
然后把之前寫的 I2C 驅動程序粘過來改一下(^-^)V
OK,以上就是最基本 I2C 的驅動程序,下邊就到了第一個重點啦(~ ̄▽ ̄)~,也就是為毛這貨的器件地址是個奇數,我們知道 I2C 的從機地址是 8 bit ,前 7 bit 是器件地址,最后 1 bit 代表是讀操作(1)還是寫操作(0),所以一般來說器件地址應該是偶數。但是,有的廠家給的地址是低 7 bit (例如這貨),所以就會出現奇數的情況,這樣就需要給它左移 1 bit 。
好了,地址的問題解決了,就可以寫讀操作和寫操作的程序了
基本驅動通訊搞定,接下來就給跟它嘮嘮嗑兒了,先定義一下暗號 (?≧?≦?) ,暗號摘自 Arduino 下的驅動程序文件。
發現其中有個 TCS_COMMAND_BIT ,而且發現 Arduino 代碼中只要發送寄存器地址的地方都有它 (?°?°?)?,此處必有蹊蹺!翻開我們的葵花寶典,啊不,是數據手冊,居然發現了這個!
寶典告訴我們,若要尋址,此 bit 必須置 1 ,也就是說我們在發送需要操作的寄存器地址時,必需要將 MSB 置為 1 。怪不得你丫兒沒地址,原來哪都有你 (°ー°〃)
知道了這個就好辦了,我們先封裝一下基本的讀寫操作
接下來就可以根據寶典里對各個寄存器的說明來編程了,我就寫了我用到的幾個功能 (?-?) ,各位看官有需要可以自己補充。廢話不多說,上代碼:
TCS 的 ID 是 0x44 可以根據這個來判斷是否成功連接。
兩個個主要設置,設置積分時間(ATIME 寄存器)和增益(ConTROL 寄存器)。這個直接和最后獲取到的數據相關,積分時間越長,增益越大,最后獲得值越大,需要根據實際應用情況進行設置。
積分時間的計算如下文所示:
器件上電后默認是在睡覺(Sleep 模式),得踹一腳(Enable)才醒(Idle 模式),然后告訴它是等一會干活還是馬上滾去干活 (╯﹏╰)b
我這里讓它直接干活去了,注意從 Idle 模式退出后,需要 2.4 ms 的時間來進行 RGBC 初始化,所以給個 3 ms 的延時就可以了。干完一次活后,如果不讓它回去睡覺(Disable),就會自動繼續干活,開始一個新的循環。(經@weixin_提醒,原來這里寫錯了,應該是在設置AEN之后等待2.4 ms 的RGBC Init)
然后我們就可以拿到轉換數據了,這里我根據自己的需要對 Arduino 的代碼做了些修改
好了,到這里 TCS 的驅動程序就完成啦ヽ(=?ω?=)丿顏色傳感器程序:STM32F429 使用 TCS34725 顏色傳感器的驅動程序 第1張" title="顏色傳感器程序:STM32F429 使用 TCS34725 顏色傳感器的驅動程序 第1張-傳感器知識網"/>
TCS3200顏色傳感器51例程
//==============LCD1602接口連接方法=====================
//================================================*/
#define LCM_Data P0 //LCD1602數據接口
#define Busy 0x80 //用于檢測LCM狀態字中的Busy標識
sbit LCM_RW =P2^3; //讀寫控制輸入端,LCD1602的第五腳
sbit LCM_RS =P2^4; //寄存器選擇輸入端,LCD1602的第四腳
sbit LCM_E =P2^2; //使能信號輸入端,LCD1602的第6腳
//=================顏色傳感模塊連接=====================
sbit tcs230_s2=P2^0;//TCS230 S2接單片機P2.0
sbit tcs230_s3=P2^1;//TCS230 S3接單片機P2.1
sbit tcs230_en=P3^0; //TCS230 EN(E0)接GND
/
void LCMInit(void)
{
LCM_Data=0;
WriteCommandLCM(0x38,0); //三次顯示模式設置,不檢測忙信號
DelayMs(5);
WriteCommandLCM(0x38,0);
DelayMs(5);
WriteCommandLCM(0x38,0);
DelayMs(5);
WriteCommandLCM(0x38,1); //顯示模式設置,開始要求每次檢測忙信號
WriteCommandLCM(0x08,1); //關閉顯示
WriteCommandLCM(0x01,1); //顯示清屏
WriteCommandLCM(0x06,1); // 顯示光標移動設置
WriteCommandLCM(0x0C,1); // 顯示開及光標設置
DelayMs(100);
}
//==============================LCD1602顯示子程序================================================
// 寫數據函數: E=高脈沖 RS=1 RW=0
//======================================================================*/
void WriteDataLCM(uchar WDLCM)
{
ReadStatusLCM(); //檢測忙
LCM_Data=WDLCM;
LCM_RS=1;
LCM_RW=0;
LCM_E=0; //若晶振速度太高可以在這后加小的延時
LCM_E=0; //延時
LCM_E=1;
}
void WriteCommandLCM(uchar WCLCM,BuysC) //BuysC為0時忽略忙檢測
{
if (BuysC) ReadStatusLCM(); //根據需要檢測忙
LCM_Data=WCLCM;
LCM_RS=0;
LCM_RW=0;
LCM_E=0;
LCM_E=0;
LCM_E=1;
}
uchar ReadStatusLCM(void)
{
LCM_Data=0xFF;
LCM_RS=0;
LCM_RW=1;
LCM_E=0;
LCM_E=0;
LCM_E=1;
while (LCM_Data & Busy); //檢測忙信號
return(LCM_Data);
}
void DisplayOneChar( uchar X, uchar Y, uchar ASCII)
{
X &=0x1;
Y &=0xF; //限制Y不能大于15,X不能大于1
if (X) Y |=0x40; //當要顯示第二行時地址碼+0x40;
Y |=0x80; // 算出指令碼
WriteCommandLCM(Y, 0); //這里不檢測忙信號,發送地址碼
WriteDataLCM(ASCII);
}
void DelayMs(uint Ms)
{
uint i,TempCyc;
for(i=0;i<ms;i++) {="" tempcyc="250;" while(tempcyc--);="" }=""
寶貝尺寸:28.7MM*21.3MM(長寬)
接口定義:VCC GND 供電
SO-S3 E0 OUT 通訊接口
采用原裝進口芯片TCS(咨詢特價)
TCS3200是TCS230升級版本,效果更好
供電電源 3-5v
抗光干擾
白色貼片LED,可檢測不發光物體顏色
非常佳檢測距離1cm
提供51單片機測試程序,模塊原理圖!
(1)顏色的感應原理
通常所看到的物體顏色,實際上是物體表面吸收了照射到它上面的白光(日光)中的一部分有色成分,而反射出的另一部分有色光在人眼中的反應。白色是由各種頻率的可見光混合在一起構成的,也就是說白光中包含著各種顏色的色光(如紅R、黃Y、綠G、青V、藍B、紫P)。根據德國物理學家赫姆霍茲(Helinholtz)的三原色理論可知,各種顏色是由不同比例的三原色(紅、綠、藍)混合而成的。
(2) TCS230識別顏色的原理
由三原色感應原理可知,如果知道構成各種顏色的三原色的值,就能夠知道所測試物體的顏色。對于TCS230來說,當選定一個顏色濾波器時,它只允許某種特定的原色通過,阻咒他原色的通過。例如:當選擇紅色濾波器時,入射光中只有紅色可以通過,藍色和綠色都被阻止,這樣就可以得到紅色光的光強;同理,選擇其他的濾波器,就可以得到藍色光和綠色光的光強。通過這三個值,就可以分析投射到TCS230傳感器上的光的顏色。
(3) 白平衡和顏色識別原理
白平衡就是告訴系統什么是白色。從理論上講,白色是由等量的紅色、綠色和藍色混合而成的;但實際上,白色中的
三原色并不完全相等,并且對于TCS230的光傳感器來說,它對這三種基本色的?舾行允遣幌嗤的,導致TCS230的RGB輸出并不相等,因此在測試前必須進行白平衡調整,使得TCS230對所檢測的“白色”中的三原色是相等的。進行白平衡調整是為后續的顏色識別作準備。在本裝置中,白平衡調整的具體步驟和方法如下:將空的試管放置在傳感器的上番試管的上方放置一個白色的光源,使入射光能夠穿過試管照射到TCS230上;根據前面所介紹的方法,依次選通紅色、綠色和藍色濾波器,分別測得紅色、綠色和藍色的值,然后就可計算出需要的3個調整參數。
當用TCS230識別顏色時,就用這3個參數對所測顏色的R、G和B進行調整。這里有兩種方法來計算調整參數:① 依次選通三種顏色的濾波器,然后對TCS230的輸出脈沖依次進行計數。當計數到255時停止計數,分別計算每個通道所用的時間。這些時間對應于實際測試時TCS230每種濾波器所采用的時間基準,在這段時間內所測得的脈沖數就是所對應的R、G和B的值。② 設置定時器為一固定時間(例如10 ms),然后選通三種顏色的濾波器,計算這段時間內TCS230的輸出脈沖數,計算出一個比例因子,通過這個比例因子可以把這些脈沖數變為255。在實際測試時,使用同樣的時間進行計數,把測得的脈沖數再乘以求得的比例因子,然后就可以得到所對應的R、G和B的值。
在程序流程中:系統初始化負責設置89C51的定時器/計數器的工作方尸選擇TCS230的輸出比例因子,使能輸出引腳以及通信參數的設置。初始化完成后,檢測是否需要進行白平衡調整。如有,調整白平衡子程序;否則,轉到下一鉑檢測是否需要進行顏色識別。如不需要顏色識別,返回;如需要顏色識別,調用顏色識別子程序,直到顏色識別完畢。
發貨清單:顏色傳感器模塊一塊
提供的資料均通過郵箱發送,親收到貨后客服。
使用色彩傳感器采集和處理RGB數據
本篇文章主要介紹如何采集并處理由BH1745NUC色彩傳感器生成的RGB數據。
傳感器
在第1部分中,我們討論了如何使用DAC和一些負反饋來精確控制紅色、綠色和藍色LED的強度。我們現在可以使用RGB LED模塊作為單像素顯示器 - 即,通過操縱紅色、綠色和藍色光的混合,我們可以產生多種顏色。
我們希望使用這個LED模塊復制照亮RGB傳感器的光線顏色。如第一篇文章中所述,我們使用由Rohm制造的BH1745NUC顏色傳感器(以下簡稱為BH1745)。這實際上是一個令人印象深刻的設備封裝非常?。ù蠹s2 mm×2 mm),這也是我們為這個項目使用定制設計PCB的一個原因。盡管體積小,但該部件具有廣泛的功能,僅需少量外部組件。以下是數據表中的“典型應用電路”:
電路中需要光學濾波器、四個光電二極管、四個獨立的16位ADC以及一些信號調制電路、一個I2C接口和一些中斷邏輯,可用于在紅色、綠色、藍色或透明測量值超過時提醒微控制器或者低于可定制的閾值 。
更多內容請參考以下鏈接:
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:
原作者刪帖
不實內容刪帖
廣告或垃圾文章投訴
智能推薦
《Arduino計算機視覺編程》一3.2 傳感器數據采集
本節書摘來自華章出版社《Arduino計算機視覺編程》一書中的第3章,第3.2節,作者[土耳其] 歐森·奧茲卡亞(zen zkaya),吉拉伊·伊利茨(Giray Yilliki),更多章節內容可以訪問云棲社區“華章計算機”公眾號查看。 3.2 傳感器數據采集 對大多數實時應用程序來說,視覺信息和傳感器信息的結合對于更好地理解環境是至關重要的。系...
Predix之玩轉樹莓派(2) 從傳感器采集數據
作者:唐翊國,開發者生態資深經理,GE數字集團 23年工作經驗,長期在杜邦、歐文斯科寧、莊信萬豐等從事制造業信息化工作,規劃、實施了大量MES、SAP ERP、LIMS、BPM等項目,積累了豐富的制造業數字化轉型經驗。 如果您還沒有Predix試用帳號,請訪問
傳感器模擬信號數據采集與PLC系統匹配方案
在工業現場中,壓力、位移、溫度、流量、轉速等各類模擬量傳感器因設計使用的技術方法不同。傳感器工作配電的方式主要分為兩線制和四線制,其輸出的模擬信號也各有差異,而常見的有0-20mA/4-20mA電流信號和0-75mV/0-5V /1-5V電壓信號。要把各類傳感器模擬信號成功采集到PLC/DCS/FCS/MCU/FA/PC系統,就要根據傳感器與數據采集系統的功能和技術特點進行匹配選型,同時也要考慮到...
常見的無線傳感器數據采集傳輸系統的三種組網
無線傳感器數據采集傳輸系統,可以實現對溫度,壓力,氣體,溫濕度,液位,流量,光照,降雨量,振動,轉速等數據參數的實時采集,無線傳輸,無線監控與預警。在實際應用中,無線傳感器數據采集傳輸系統常見的有信立XL農業物聯網智能大棚環境監控系統,智慧養殖環境監控系統,智慧管網管溝監控系統,倉儲館藏環境監控系統,機房實驗室環境監控系統,危險品倉庫環境監控系統,大氣環境監控系統,智能制造運行過程監控系統,能源管...
溫度傳感器數據采集與曲線圖表顯示
1 概述 傳感器(英文名稱:transducer/sensor)是一種檢測裝置,能感受到被測量的信息,并能將感受到的信息,按一定規律變換成為電信號或其他所需形式的信息輸出,以滿足信息的傳輸、處理、存儲、顯示、記錄和控制等要求。 傳感器按用途可以分為力敏傳感器、位置傳感器、液位傳感器、能耗傳感器、速度傳感器、加速度傳感器、射線輻射傳感器、熱敏傳感器等。 隨著集成度的不斷提高,多種傳感器集...
猜你喜歡
bno055傳感器數據不更新_大數據時代必修課:讓傳感器采集的數據成為資產
歷經數年的市場沉淀,結合實體經濟的深度融合,數據已成為企業內更有價值的資產之一,數據資產運營的重要意義也已經成為各個行業的一種共識。 尤其是對于一些工業企業來說,從物聯網傳感器收集的數據用于預測分析、工業生產,這不僅是大數據時代下的必修課,也是推動企業經濟實現快速發展、包容性增長、可持續增長的強大驅動力量。而法米特的企業愿景便是讓傳感器采集的數據成為資產。 法米特作為一家專門從事于物聯技術的品牌,...
解析基于keras深度學習框架下yolov3的算法
一.前言 由于前一段時間以及實現了基于keras深度學習框架下yolov3的算法,本來想趁著余熱將自己的心得體會進行總結,但由于前幾天有點事就沒有完成計劃,現在趁午休時間整理一下。 二.Keras框架的介紹 1.Keras是一個用Python編寫的高級API,它提供了一個簡單和模塊化的API來創建和訓練...
使用面向服務分解技術來滿足架構目標,定義與業務模型一致的服務
引言 通常,企業已經擁有一組支持大多數必需業務功能的應用程序。因此,談到服務定義,您可能以為這不過就是將現有的應用程序功能作為一組服務來公開,類似于傳統的企業應用程序集成(enterprise application integration,EAI)實踐。其實不然。在實現基于面向服務的體系結構(Service-Oriented Architecture,SOA)的解決方案時,正確定義服務是最困難的...
單片機自學多久可以成功?學單片機需要什么基礎知識?
單片機自學完全是可以學會的,現在入門的教程可以用泛濫來形容了。 泛濫不代表講的不好,有些確實講的非常不錯啊。 我也是自學過來的,下面通過我的經歷來解答這些問題。 一、單片機自學多久可以成功 我曾經從零基礎學習單片機到找到相應研發工作大概花了3個多月。 很多人可能覺得不可思議,我們學校學一年我都學不會,當然也有大神10天就學會的。 當初有2個因素鞭策著我前進: 1.必須趕緊找個工作 2.強烈的興趣 ...
趣拿洞察:2020年社交電商發展分析
趣拿對電子商務消費者進行單項深入研究,從消費者角度反思市場狀態,并將傳統電商與社交電商進行對比分析,從中找到更好服務消費者的方法,并為電商企業的發展提供戰略支持。 2020年中國電子商務領域的社交電商創新已經進入第十個年頭,經過十年不斷地探索、嘗試、發展、糾錯,社交電商已經全面發力,成為中國電子商務領域不可分割的一部分。 中國社交電商發展具有四大特點: 人數多規模大。2020手機用戶規模約9億;2...
下一篇: PLC、DCS、FCS三大控
上一篇: 電氣控制線路圖控制原