日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

零知派——TCS3200顏色識(shí)別傳感器模塊

零知實(shí)驗(yàn)室 ? 來源:PCB56242069 ? 作者:PCB56242069 ? 2026-05-13 16:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

?零知派(零知開源)是一個(gè)專為電子初學(xué)者/電子興趣愛好者設(shè)計(jì)的開源軟硬件平臺(tái),在硬件上提供超高性價(jià)比STM32系列開發(fā)板、物聯(lián)網(wǎng)控制板。取消了Bootloader程序燒錄,讓開發(fā)重心從“配置環(huán)境”轉(zhuǎn)移到“創(chuàng)意實(shí)現(xiàn)”,極大降低了技術(shù)門檻。零知開源編程軟件,內(nèi)置上千個(gè)覆蓋多場(chǎng)景的示例代碼,支持項(xiàng)目源碼一鍵下載,項(xiàng)目文章在線瀏覽。零知派(零知開源)平臺(tái)通過軟硬件協(xié)同創(chuàng)新,讓你的創(chuàng)意快速轉(zhuǎn)化為實(shí)物,來動(dòng)手試試吧!

?訪問零知實(shí)驗(yàn)室,獲取更多實(shí)戰(zhàn)項(xiàng)目和教程資源吧!

www.lingzhilab.com

目錄

一、模塊外觀與硬件架構(gòu)

1.1 外觀特征

1.2 核心芯片TCS3200內(nèi)部結(jié)構(gòu)

二、引腳定義與外部接線

2.1 引腳定義速查表

2.2 完整接線方案(基于零知派ESP32

2.3 頻率縮放選項(xiàng)詳解

三、測(cè)試方法與完整代碼

3.1 測(cè)試方法

3.2 完整測(cè)試代碼

3.3 調(diào)整代碼

四、實(shí)現(xiàn)原理及深度解析

4.1 三原色的感應(yīng)原理

4.2 TCS230 識(shí)別顏色的原理

4.3 白平衡和顏色識(shí)別原理

4.4歸一化算法的數(shù)學(xué)原理

五、TCS3200的應(yīng)用場(chǎng)景

5.1 工業(yè)自動(dòng)化與分揀系統(tǒng)

5.2 智慧農(nóng)業(yè):葉綠素含量檢測(cè)

5.3 醫(yī)療與化學(xué)診斷:試紙條讀取

5.4 STEM教育與機(jī)器人競(jìng)賽

5.5 其他應(yīng)用方向

六、 工程注意事項(xiàng)

6.1 光學(xué)結(jié)構(gòu)問題(最常見的故障源)

6.2 頻率縮放配置陷阱(高增益不是越高越好)

6.3 電源與去耦問題(規(guī)格書強(qiáng)制要求)

6.4 測(cè)量時(shí)序與穩(wěn)定時(shí)間(切換通道后必須等待)

6.5 電池供電場(chǎng)景的功耗管理(待機(jī)模式電流僅0.1μA)

6.6 常見故障速查表

一、模塊外觀與硬件架構(gòu)

1.1 外觀特征

TCS3200模塊的主要可視特征包括:

組件 位置 描述
光學(xué)窗口 PCB中央 Φ10mm透明環(huán)氧樹脂封裝,內(nèi)部集成TCS3200芯片
白光LED陣列 窗口四周 4顆1206封裝高亮貼片LED,呈90°對(duì)稱分布,作主動(dòng)補(bǔ)光光源
信號(hào)排針 PCB邊緣 8針2.54mm標(biāo)準(zhǔn)間距直插排針(6個(gè)有效信號(hào) + VCC + GND)
電源指示燈 邊角 紅色SMD LED,VCC上電即亮
預(yù)留電阻 背面 可能預(yù)留LED限流電阻調(diào)整位(部分型號(hào)支持PWM調(diào)光)

1.2 核心芯片TCS3200內(nèi)部結(jié)構(gòu)

TCS3200采用8引腳SOIC表貼封裝,其內(nèi)部包含以下幾個(gè)功能模塊:

光電二極管陣列

這是傳感器的“視網(wǎng)膜”。64個(gè)二極管被平均分為四組,每組16個(gè),分別覆蓋:

紅色濾光片(16個(gè))

綠色濾光片(16個(gè))

藍(lán)色濾光片(16個(gè))

透明無(wú)濾光片(16個(gè),用于全光譜檢測(cè))

電流-頻率轉(zhuǎn)換器

當(dāng)光照射到光電二極管上時(shí),產(chǎn)生與光強(qiáng)成正比的光電流。該轉(zhuǎn)換器將此微弱電流直接轉(zhuǎn)換為方波脈沖信號(hào)——光電流越大,輸出頻率越高。

二、引腳定義與外部接線

2.1 引腳定義速查表

wKgZO2oEMd6Ad2cWAAA-LC8AZqo014.png

引腳 名稱 I/O類型 電平標(biāo)準(zhǔn) 功能描述
1 S0 輸入 CMOS/TTL 與S1組合設(shè)定滿量程頻率縮放因子
2 S1 輸入 CMOS/TTL 與S0組合設(shè)定滿量程頻率縮放因子
3 OE 輸入(低有效) CMOS/TTL 輸出使能:低電平=OUT有效,高電平=OUT高阻
4 OUT 輸出 開漏(需上拉) 方波頻率輸出,內(nèi)部無(wú)上拉電阻
5 VDD 電源 2.7V ~ 5.5V 芯片供電,推薦3.3V(與ESP32匹配)
6 GND 公共地
7 S2 輸入 CMOS/TTL 與S3組合選擇濾波器類型
8 S3 輸入 CMOS/TTL 與S2組合選擇濾波器類型
LED LED 電源 3~5V 與VDD獨(dú)立,推薦直接接5V以獲得足夠亮度

2.2 完整接線方案(基于零知派ESP32)

wKgZPGoEMeuAEnk7AALmFGKhR6U546.png

TCS3200模塊引腳 ESP32引腳 說明
VDD 3.3V 芯片電源,與ESP32邏輯電平匹配
GND GND 系統(tǒng)共地
OUT GPIO 23 頻率信號(hào)輸入,ESP32內(nèi)部弱上拉已足夠
S0 GPIO 18 頻率縮放MSB
S1 GPIO 19 頻率縮放LSB
S2 GPIO 21 濾波器選擇MSB
S3 GPIO 22 濾波器選擇LSB
OE GND 永久使能輸出(也可接GPIO做軟件控制)

2.3 頻率縮放選項(xiàng)詳解

S0 S1 縮放比例 輸出頻率范圍(典型值) 適用場(chǎng)景
LOW LOW 關(guān)斷(Power Down) 0 Hz 省電模式
LOW HIGH 2% 2k ~ 12kHz 極暗環(huán)境或低速應(yīng)用
HIGH LOW 20% 20k ~ 120kHz 通用推薦
HIGH HIGH 100% 100k ~ 600kHz 快速動(dòng)態(tài)檢測(cè)

三、測(cè)試方法與完整代碼

3.1 測(cè)試方法

準(zhǔn)備工具

零知派開發(fā)工具,數(shù)據(jù)線,TCS3200模塊,零知派esp32模塊,跳線。

使用步驟

新建工程:打開零知派開發(fā)工具,新建一個(gè)空白工程。

粘貼代碼:將上方完整代碼復(fù)制到工程中,根據(jù)實(shí)際傳感器和光照環(huán)境調(diào)整顏色檢測(cè)部分閾值。

選擇開發(fā)板:在軟件右側(cè)開發(fā)板列表中,選擇ESP32

編譯上傳:點(diǎn)擊「驗(yàn)證」「上傳」,將程序燒錄到 ESP32 開發(fā)板。

調(diào)試:打開軟件串口調(diào)試窗口,TCS3200傳感器對(duì)準(zhǔn)帶有顏色的物體。就可以看到輸出的顏色,如圖:

wKgZPGoEMf-APchiAAEhcFR-6KA648.png

3.2 完整測(cè)試代碼

/******************************************************************************
 * 深圳市在芯間科技有限公司
 * 淘寶旗艦店:零知派
 * 網(wǎng) 址:https://shop533070398.taobao.com
 * 版權(quán)說明:
 *  1.本代碼的版權(quán)歸【深圳市在芯間科技有限公司】所有,僅限個(gè)人非商業(yè)性學(xué)習(xí)使用。
 *  2.嚴(yán)禁將本代碼或其衍生版本用于任何商業(yè)用途(包括但不限于產(chǎn)品開發(fā)、付費(fèi)服務(wù)、企業(yè)內(nèi)部使用等)。
 *  3.任何商業(yè)用途均需事先獲得【深圳市在芯間科技有限公司】的書面授權(quán),未經(jīng)授權(quán)的商業(yè)使用行為將被視為侵權(quán)。
******************************************************************************/

/**************************************************************************************
 * 文件: TCS3200.ino
 * 作者:零知派(深圳市在芯間科技有限公司)
 * -^^- 零知派,讓電子制作變得更簡(jiǎn)單! -^^-
 * 時(shí)間: 2026-05-013
 * 說明: 5V 供電(LED較亮,適合環(huán)境光較亮或需要遠(yuǎn)距離檢測(cè)的場(chǎng)景)
 *      白平衡方式:歸一化到 0-255 范圍(自動(dòng)適應(yīng),無(wú)需手動(dòng)校準(zhǔn))
 *      支持顏色:紅、橙、黃、綠、青、藍(lán)、紫、黑、白
***************************************************************************************/
/*
 * TCS3200 顏色傳感器 - ESP32 測(cè)試程序
 * ==================================================
 * 
 * 【接線定義】
 *   TCS3200      ->   ESP32
 *   -------------------------
 *   S0           ->   GPIO 18  (輸出頻率縮放控制)
 *   S1           ->   GPIO 19  (輸出頻率縮放控制)
 *   S2           ->   GPIO 21  (濾波器選擇)
 *   S3           ->   GPIO 22  (濾波器選擇)
 *   OUT          ->   GPIO 23  (頻率信號(hào)輸出)
 *   OE           ->   GND      (使能端,低電平有效,直接接地)
 *   LED          ->   VIN (5V) (LED照明,使用5V供電更亮)
 *   VDD          ->   3.3V     (芯片供電)
 *   GND          ->   GND
 * 
 * 【工作原理簡(jiǎn)述】
 *   TCS3200 內(nèi)置 RGB 三種顏色的濾光器,通過 S2/S3 引腳選擇當(dāng)前要檢測(cè)的顏色通道。
 *   傳感器輸出方波信號(hào)的頻率與光強(qiáng)成正比(光越強(qiáng),頻率越高,脈寬越?。?。
 *   本程序通過測(cè)量高電平脈寬(單位:微秒)來間接獲取頻率信息。
 *   脈寬越小 = 頻率越高 = 光強(qiáng)越強(qiáng)。
 * 
 * 【頻率縮放設(shè)置】
 *   S0=S1=HIGH -> 輸出頻率為 100% (最快,最靈敏)
 *   S0=HIGH, S1=LOW -> 輸出頻率為 20% (本程序使用,適合大多數(shù)情況)
 *   S0=LOW, S1=HIGH -> 輸出頻率為 2%
 *   S0=S1=LOW -> 關(guān)閉輸出(省電模式)
 * 
 * 【顏色識(shí)別邏輯】
 *   1. 先讀取原始 RGB 脈寬值(多次采樣取平均,減少噪聲)
 *   2. 歸一化處理:將原始值轉(zhuǎn)換為 0-255 的 RGB 標(biāo)準(zhǔn)值
 *   3. 基于歸一化 RGB 值判斷顏色(采用閾值比較法)
 * 
 * 【注意事項(xiàng)】
 *   - 傳感器與被測(cè)物體距離建議保持 1-2cm
 *   - 環(huán)境光會(huì)影響讀數(shù),建議在遮光條件下使用
 *   - 不同顏色的物體反射率不同,可能需要微調(diào)顏色判斷閾值
 *   - 白色物體用于白平衡校準(zhǔn)(程序已自動(dòng)歸一化)
 * 
 */

// ==================== 引腳定義 ====================
#define S0 18         // 輸出頻率縮放控制引腳1
#define S1 19         // 輸出頻率縮放控制引腳2
#define S2 21         // 濾波器選擇引腳1(顏色通道)
#define S3 22         // 濾波器選擇引腳2(顏色通道)
#define OUT_PIN 23    // 頻率信號(hào)輸入引腳(來自傳感器)

// ==================== 全局變量 ====================
// 原始脈寬值(單位:微秒,數(shù)值越小表示該顏色光強(qiáng)越強(qiáng))
int rawR = 0;         // 紅色通道原始值
int rawG = 0;         // 綠色通道原始值
int rawB = 0;         // 藍(lán)色通道原始值

// 歸一化后的 RGB 值(范圍:0-255,標(biāo)準(zhǔn) RGB 格式)
int normR = 0;        // 紅色分量(255=最強(qiáng)紅)
int normG = 0;        // 綠色分量(255=最強(qiáng)綠)
int normB = 0;        // 藍(lán)色分量(255=最強(qiáng)藍(lán))

// 采樣次數(shù)(用于平滑讀數(shù),提高穩(wěn)定性)
const int SAMPLES = 5;    // 每個(gè)通道采5次取平均

// ==================== 初始化函數(shù) ====================
void setup() {
  // 初始化串口通信(波特率 115200,用于輸出調(diào)試信息)
  Serial.begin(115200);
  delay(500);                // 等待串口穩(wěn)定
  
  // 配置所有控制引腳為輸出模式
  pinMode(S0, OUTPUT);       // 頻率縮放控制
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);       // 顏色通道選擇
  pinMode(S3, OUTPUT);
  pinMode(OUT_PIN, INPUT);   // 信號(hào)輸入引腳
  
  // 設(shè)置輸出頻率縮放比例:S0=HIGH, S1=LOW -> 20% 頻率
  digitalWrite(S0, HIGH);
  digitalWrite(S1, LOW);
  
  // 打印程序啟動(dòng)信息
  Serial.println("=================================");
  Serial.println("TCS3200 顏色傳感器測(cè)試程序");
  Serial.println("頻率縮放: 20%");
  Serial.println("白平衡: 自動(dòng)歸一化");
  Serial.println("=================================");
  Serial.println();
}

// ==================== 核心函數(shù) ====================

/**
 * 讀取指定顏色通道的脈寬值
 * 
 * 【功能】選擇傳感器的顏色濾波器,并測(cè)量輸出方波的高電平脈寬。
 *         脈寬與光強(qiáng)成反比:脈寬越小 = 頻率越高 = 光越強(qiáng)。
 * 
 * 【參數(shù)】color - 要讀取的顏色通道
 *         'R' : 紅色通道
 *         'G' : 綠色通道
 *         'B' : 藍(lán)色通道
 * 
 * 【返回值】脈寬(單位:微秒)
 *          - 正常范圍:幾十到幾千微秒
 *          - 返回 999999 表示超時(shí)(信號(hào)丟失或光線過暗)
 * 
 * 【注意事項(xiàng)】pulseIn() 會(huì)阻塞等待信號(hào),最大等待時(shí)間1秒
 */
int readColor(char color) {
  // 根據(jù)顏色選擇對(duì)應(yīng)的濾波器(通過 S2、S3 設(shè)置)
  switch(color) {
    case 'R':  // 紅色濾波器:S2=LOW,  S3=LOW
      digitalWrite(S2, LOW);
      digitalWrite(S3, LOW);
      break;
    case 'G':  // 綠色濾波器:S2=HIGH, S3=HIGH
      digitalWrite(S2, HIGH);
      digitalWrite(S3, HIGH);
      break;
    case 'B':  // 藍(lán)色濾波器:S2=LOW,  S3=HIGH
      digitalWrite(S2, LOW);
      digitalWrite(S3, HIGH);
      break;
  }
  
  // 等待濾波器穩(wěn)定(100微秒足夠)
  delayMicroseconds(100);
  
  // 測(cè)量高電平脈寬,超時(shí)時(shí)間設(shè)為 1 秒(1000000 微秒)
  // pulseIn() 會(huì)持續(xù)測(cè)量直到信號(hào)到來或超時(shí)
  int pulseWidth = pulseIn(OUT_PIN, HIGH, 1000000);
  
  // 如果超時(shí)(脈沖寬度為0),返回一個(gè)很大的值表示無(wú)效數(shù)據(jù)
  if(pulseWidth == 0) return 999999;
  
  return pulseWidth;
}

/**
 * 讀取 RGB 三個(gè)通道的原始脈寬值(帶多次采樣平滑)
 * 
 * 【功能】依次讀取紅、綠、藍(lán)三個(gè)通道,對(duì)每個(gè)通道采樣多次取平均,
 *         減少環(huán)境光變化和測(cè)量誤差的影響。
 * 
 * 【輸出】更新全局變量 rawR、rawG、rawB
 * 
 * 【采樣順序】R -> G -> B 循環(huán)5次,每次間隔5毫秒
 *            這樣能更好地平均掉瞬時(shí)干擾
 */
void readRawRGB() {
  long sumR = 0, sumG = 0, sumB = 0;   // 累加器(使用 long 防止溢出)
  
  for(int i = 0; i < SAMPLES; i++) {
    sumR += readColor('R');    // 讀取紅色通道
    delay(5);                  // 短暫延遲,讓傳感器穩(wěn)定
    sumG += readColor('G');    // 讀取綠色通道
    delay(5);
    sumB += readColor('B');    // 讀取藍(lán)色通道
    delay(5);
  }
  
  // 計(jì)算平均值并存儲(chǔ)到全局變量
  rawR = sumR / SAMPLES;
  rawG = sumG / SAMPLES;
  rawB = sumB / SAMPLES;
}

/**
 * 歸一化處理(將原始脈寬轉(zhuǎn)換為 0-255 的標(biāo)準(zhǔn) RGB 值)
 * 
 * 【核心原理】
 *   原始脈寬值(rawR/G/B)越小,表示該顏色光越強(qiáng)。
 *   歸一化公式(以紅色為例):normR = 255 * minRaw / rawR
 *   - minRaw 是三個(gè)通道中最小的原始值(對(duì)應(yīng)光最強(qiáng)的通道)
 *   - 最小原始值對(duì)應(yīng)的顏色會(huì)被歸一化為 255(最飽和)
 *   - 其他顏色按比例計(jì)算,范圍自動(dòng)限制在 0-255 之間
 * 
 * 【優(yōu)點(diǎn)】自動(dòng)適應(yīng)不同光照條件和物體距離,無(wú)需手動(dòng)白平衡
 * 
 * 【注意事項(xiàng)】如果遇到原始值為 0 的異常情況,所有歸一化值置 0
 */
void normalizeRGB() {
  // 找出三通道原始值中的最小值(最小的脈寬 = 最強(qiáng)的光)
  int minRaw = min(rawR, min(rawG, rawB));
  
  if(minRaw > 0) {   // 避免除零錯(cuò)誤
    // 歸一化計(jì)算:最小值通道變成 255,其他按比例縮放
    normR = 255 * minRaw / rawR;
    normG = 255 * minRaw / rawG;
    normB = 255 * minRaw / rawB;
    
    // 將結(jié)果限制在 0-255 范圍內(nèi)(防止浮點(diǎn)誤差導(dǎo)致的越界)
    normR = constrain(normR, 0, 255);
    normG = constrain(normG, 0, 255);
    normB = constrain(normB, 0, 255);
  } else {
    // 異常情況:原始值為0(傳感器故障或光線極暗)
    normR = normG = normB = 0;
  }
}

/**
 * 顏色檢測(cè)(基于歸一化 RGB 值判斷顏色)
 * 
 * 【功能】根據(jù)歸一化 RGB 的數(shù)值特征識(shí)別顏色種類
 *         采用閾值比較法,判斷紅色、綠色、藍(lán)色等基本色及其混合色
 * 
 * 【參數(shù)】
 *   r - 歸一化紅色分量(0-255)
 *   g - 歸一化綠色分量(0-255)
 *   b - 歸一化藍(lán)色分量(0-255)
 * 
 * 【返回值】顏色名稱(中文)
 *          支持:黑、白、紅、橙、黃、綠、青、藍(lán)、紫、未知顏色
 * 
 * 【識(shí)別邏輯說明】
 *   1. 黑色:三通道都很低(200)且數(shù)值接近
 *   3. 紅色:R 顯著高于 G/B,且 G、B 較低
 *   4. 橙色:R 高,G 中等(100-200),B 低
 *   5. 黃色:R 和 G 高,B 低
 *   6. 綠色:G 顯著高于 R/B
 *   7. 青色:G 和 B 高,R 低
 *   8. 藍(lán)色:B 顯著高于 R/G
 *   9. 紫色:R 和 B 高,G 低
 * 
 * 【使用建議】可根據(jù)實(shí)際傳感器和光照環(huán)境調(diào)整閾值
 */
String detectColorAdvanced(int r, int g, int b) {
  // ----- 黑色檢測(cè) -----
  // 三通道都非常低(物體幾乎不反射光)
  if(r < 40 && g < 40 && b < 40) {
    return "黑色";
  }
  
  // ----- 白色檢測(cè) -----
  // 三通道都很高且數(shù)值接近(等量反射紅綠藍(lán))
  if(r > 200 && g > 200 && b > 200 && abs(r-g) < 30 && abs(r-b) < 30) {
    return "白色";
  }
  
  // ----- 紅色檢測(cè) -----
  // 紅色明顯高于綠/藍(lán),且紅本身較飽和,綠藍(lán)受壓制
  if(r > g + 50 && r > b + 50 && r > 150 && g < 120 && b < 120) {
    return "紅色";
  }
  
  // ----- 橙色檢測(cè) -----
  // 紅較高,綠中等(紅加少量綠),藍(lán)很低
  if(r > 180 && g > 100 && g < 200 && b < 100 && r > g + 20 && g > b + 20) {
    return "橙色";
  }
  
  // ----- 黃色檢測(cè) -----
  // 紅和綠都很高,藍(lán)很低(紅加綠=黃)
  if(r > 180 && g > 180 && b < 120 && abs(r-g) < 50) {
    return "黃色";
  }
  
  // ----- 綠色檢測(cè) -----
  // 綠色明顯高于紅和藍(lán),且綠較飽和
  if(g > r + 40 && g > b + 40 && g > 150 && r < 120 && b < 120) {
    return "綠色";
  }
  
  // ----- 青色檢測(cè) -----
  // 綠和藍(lán)都很高,紅很低(綠加藍(lán)=青)
  if(g > 150 && b > 150 && r < 120 && abs(g-b) < 60) {
    return "青色";
  }
  
  // ----- 藍(lán)色檢測(cè) -----
  // 藍(lán)色明顯高于紅和綠,且藍(lán)較飽和
  if(b > r + 40 && b > g + 40 && b > 150 && r < 120 && g < 120) {
    return "藍(lán)色";
  }
  
  // ----- 紫色檢測(cè) -----
  // 紅和藍(lán)都很高,綠較低(紅加藍(lán)=紫)
  if(r > 120 && b > 120 && g < 100 && abs(r-b) < 60) {
    return "紫色";
  }
  
  // ----- 無(wú)法識(shí)別 -----
  // 不符合以上任何顏色特征
  return "未知顏色";
}

// ==================== 主循環(huán) ====================
void loop() {
  // 1. 讀取原始 RGB 脈寬值(帶采樣平滑)
  readRawRGB();

  // 2. 歸一化處理(轉(zhuǎn)換為 0-255 RGB 標(biāo)準(zhǔn)值)
  normalizeRGB();

  // 3. 顏色識(shí)別(基于歸一化 RGB 值)
  String colorAdvanced = detectColorAdvanced(normR, normG, normB);

  // 4. 輸出結(jié)果到串口監(jiān)視器
  Serial.println("---------------------------------");
  
  // 輸出原始脈寬(單位:微秒,越小表示該色光越強(qiáng))
  Serial.print("原始脈寬(us):   R=");
  Serial.print(rawR);
  Serial.print("  G=");
  Serial.print(rawG);
  Serial.print("  B=");
  Serial.println(rawB);
  
  // 輸出歸一化 RGB(標(biāo)準(zhǔn) 0-255 格式)
  Serial.print("歸一化RGB:      R=");
  Serial.print(normR);
  Serial.print("  G=");
  Serial.print(normG);
  Serial.print("  B=");
  Serial.println(normB);
  
  // 輸出識(shí)別結(jié)果
  Serial.print("顏色:       ");
  Serial.println(colorAdvanced);

  // 延遲 500 毫秒再進(jìn)行下一次讀取(避免輸出過快)
  delay(500);
}
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

3.3 調(diào)整代碼

顏色檢測(cè)部分需要根據(jù)實(shí)際傳感器和光照環(huán)境調(diào)整閾值

/**
 * 顏色檢測(cè)(基于歸一化 RGB 值判斷顏色)
 * 
 * 【功能】根據(jù)歸一化 RGB 的數(shù)值特征識(shí)別顏色種類
 *         采用閾值比較法,判斷紅色、綠色、藍(lán)色等基本色及其混合色
 * 
 * 【參數(shù)】
 *   r - 歸一化紅色分量(0-255)
 *   g - 歸一化綠色分量(0-255)
 *   b - 歸一化藍(lán)色分量(0-255)
 * 
 * 【返回值】顏色名稱(中文)
 *          支持:黑、白、紅、橙、黃、綠、青、藍(lán)、紫、未知顏色
 * 
 * 【識(shí)別邏輯說明】
 *   1. 黑色:三通道都很低(200)且數(shù)值接近
 *   3. 紅色:R 顯著高于 G/B,且 G、B 較低
 *   4. 橙色:R 高,G 中等(100-200),B 低
 *   5. 黃色:R 和 G 高,B 低
 *   6. 綠色:G 顯著高于 R/B
 *   7. 青色:G 和 B 高,R 低
 *   8. 藍(lán)色:B 顯著高于 R/G
 *   9. 紫色:R 和 B 高,G 低
 * 
 * 【使用建議】需要根據(jù)實(shí)際傳感器和光照環(huán)境調(diào)整閾值
 */
String detectColorAdvanced(int r, int g, int b) {
  // ----- 黑色檢測(cè) -----
  // 三通道都非常低(物體幾乎不反射光)
  if(r < 40 && g < 40 && b < 40) {
    return "黑色";
  }
  
  // ----- 白色檢測(cè) -----
  // 三通道都很高且數(shù)值接近(等量反射紅綠藍(lán))
  if(r > 200 && g > 200 && b > 200 && abs(r-g) < 30 && abs(r-b) < 30) {
    return "白色";
  }
  
  // ----- 紅色檢測(cè) -----
  // 紅色明顯高于綠/藍(lán),且紅本身較飽和,綠藍(lán)受壓制
  if(r > g + 50 && r > b + 50 && r > 150 && g < 120 && b < 120) {
    return "紅色";
  }
  
  // ----- 橙色檢測(cè) -----
  // 紅較高,綠中等(紅加少量綠),藍(lán)很低
  if(r > 180 && g > 100 && g < 200 && b < 100 && r > g + 20 && g > b + 20) {
    return "橙色";
  }
  
  // ----- 黃色檢測(cè) -----
  // 紅和綠都很高,藍(lán)很低(紅加綠=黃)
  if(r > 180 && g > 180 && b < 120 && abs(r-g) < 50) {
    return "黃色";
  }
  
  // ----- 綠色檢測(cè) -----
  // 綠色明顯高于紅和藍(lán),且綠較飽和
  if(g > r + 40 && g > b + 40 && g > 150 && r < 120 && b < 120) {
    return "綠色";
  }
  
  // ----- 青色檢測(cè) -----
  // 綠和藍(lán)都很高,紅很低(綠加藍(lán)=青)
  if(g > 150 && b > 150 && r < 120 && abs(g-b) < 60) {
    return "青色";
  }
  
  // ----- 藍(lán)色檢測(cè) -----
  // 藍(lán)色明顯高于紅和綠,且藍(lán)較飽和
  if(b > r + 40 && b > g + 40 && b > 150 && r < 120 && g < 120) {
    return "藍(lán)色";
  }
  
  // ----- 紫色檢測(cè) -----
  // 紅和藍(lán)都很高,綠較低(紅加藍(lán)=紫)
  if(r > 120 && b > 120 && g < 100 && abs(r-b) < 60) {
    return "紫色";
  }
  
  // ----- 無(wú)法識(shí)別 -----
  // 不符合以上任何顏色特征
  return "未知顏色";
}
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

四、實(shí)現(xiàn)原理及深度解析

4.1 三原色的感應(yīng)原理

通常所看到的物體的顏色,實(shí)際上是物體表面吸收了照射到它上面的白光(日光)中的一
部分有色成分,而反射出的另一部分有色光在人眼中的反應(yīng)。白色是由各種頻率的可見光混
合在一起構(gòu)成的,也就是說白光中包含著各種顏色的色光(如紅 R、黃 Y、綠 G、青 V、藍(lán) B、
紫 P)。根據(jù)德國(guó)物理學(xué)家赫姆霍茲(Helinholtz)的三原色理論可知,各種顏色是由不同比
例的三原色(紅、綠、藍(lán))混合而成的。


4.2 TCS230 識(shí)別顏色的原理

由上面的三原色感應(yīng)原理可知,如果知道構(gòu)成各種顏色的三原色的值,就能夠知道所測(cè)
試物體的顏色。對(duì)于 TCS230 來說,當(dāng)選定一個(gè)顏色濾波器時(shí),它只允許某種特定的原色通
過,阻止其它原色的通過。例如:當(dāng)選擇紅色濾波器時(shí),入射光中只有紅色可以通過,藍(lán)色
和綠色都被陽(yáng)止,這樣就可以得到紅色光的光強(qiáng):同理,選擇其它的濾波器,就可以得到藍(lán)
色光和綠色光的光強(qiáng)。通過這三個(gè)值,就可以分析投射到TCS230 傳感器上的光的顏色。


4.3 白平衡和顏色識(shí)別原理

白平衡就是告訴系統(tǒng)什么是白色。從理論上講,白色是由等量的紅色、綠色和藍(lán)色混合
而成的:但實(shí)際上,白色中的三原色并不完全相等,并且對(duì)于 TCS230 的光傳感器來說,它
對(duì)這三種基本色的敏感性是不相同的,導(dǎo)致 TCS230 的 RGB 輸出并不相等,因此在測(cè)試前必
須進(jìn)行白平衡調(diào)整,使得 TCS230 對(duì)所檢測(cè)的“白色”中的三原色是相等的。進(jìn)行白平衡調(diào)整是為后續(xù)的顏色識(shí)別做準(zhǔn)備。

4.4 歸一化算法的數(shù)學(xué)原理

關(guān)鍵技術(shù)亮點(diǎn):無(wú)需手動(dòng)白平衡校準(zhǔn)自動(dòng)適應(yīng)不同光照條件。代碼中最核心的算法是normalizeRGB()函數(shù),其數(shù)學(xué)原理如下:

問題背景:

傳感器原始讀數(shù)受光照強(qiáng)度、物體距離的影響很大

同一個(gè)顏色在不同距離下,原始脈寬會(huì)成比例變化

需要一種與光照強(qiáng)度無(wú)關(guān)的顏色表示方法

解決方案:歸一化到最大值(Max Normalization)

設(shè)原始讀數(shù)向量為 R = (r_raw, g_raw, b_raw)

定義 m = min(r_raw, g_raw, b_raw)

歸一化輸出向量:

r_norm = 255 × (m / r_raw)
g_norm = 255 × (m / g_raw)
b_norm = 255 × (m / b_raw)
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

歸一化結(jié)果與光照強(qiáng)度k無(wú)關(guān)!這就是你的程序能夠“無(wú)需手動(dòng)白平衡校準(zhǔn)”自動(dòng)適應(yīng)不同光照條件的數(shù)學(xué)本質(zhì)。

五、TCS3200的應(yīng)用場(chǎng)景

5.1 工業(yè)自動(dòng)化與分揀系統(tǒng)

TCS3200在工業(yè)場(chǎng)景中最成熟的應(yīng)用是顏色分揀。由于它輸出的是頻率信號(hào)而非I2C數(shù)據(jù),在含有電機(jī)變頻器、電磁閥等強(qiáng)干擾源的工業(yè)環(huán)境中具有天然優(yōu)勢(shì)——頻率信號(hào)的抗干擾能力遠(yuǎn)優(yōu)于模擬電壓或I2C總線。

典型應(yīng)用案例:

咖啡豆烘焙度分揀:研究表明,TCS3200可在7.5~16.5cm距離范圍內(nèi)有效區(qū)分不同成熟度的咖啡豆,準(zhǔn)確率滿足自動(dòng)化分揀要求-4

快遞包裹分揀:配合傳送帶系統(tǒng),按顏色標(biāo)簽分類路由,MCU負(fù)擔(dān)極輕(驅(qū)動(dòng)占用Flash < 1.2KB)

5.2 智慧農(nóng)業(yè):葉綠素含量檢測(cè)

這是近年來非常活躍的應(yīng)用方向。印尼烏達(dá)亞納大學(xué)的研究團(tuán)隊(duì)開發(fā)了基于TCS3200的葉綠素計(jì)[ citation:1]。其原理是:葉片中葉綠素含量越高,對(duì)紅光和藍(lán)光的吸收越強(qiáng),對(duì)綠光的反射越強(qiáng)。通過檢測(cè)葉片反射的RGB分量,可推算葉綠素含量。與農(nóng)業(yè)物聯(lián)網(wǎng)的結(jié)合:配合ESP32的Deep Sleep功能,可在田間實(shí)現(xiàn)電池供電的長(zhǎng)期監(jiān)測(cè)。

5.3 醫(yī)療與化學(xué)診斷:試紙條讀取

TCS3200可用于讀取尿液分析試紙條、血糖試紙等側(cè)向?qū)游鲈嚰垪l。不同濃度的待測(cè)物會(huì)導(dǎo)致試紙反應(yīng)區(qū)呈現(xiàn)不同的顏色深度,TCS3200通過檢測(cè)RGB值的變化可實(shí)現(xiàn)定量或半定量分析。可以用來替代專用讀卡器。

5.4 STEM教育與機(jī)器人競(jìng)賽

TCS3200在高校機(jī)器人競(jìng)賽(如“光電搬運(yùn)機(jī)器人”)中非常流行。。相比集成度更高的I2C傳感器(如TCS34725),TCS3200的示波器可見方波輸出讓“信號(hào)鏈路”變得肉眼可見——學(xué)生可以真正理解“光→電流→頻率”的轉(zhuǎn)換過程,而不是調(diào)用一個(gè)“讀顏色”的黑盒函數(shù)。

經(jīng)典任務(wù):

按顏色分揀物塊(如紅/綠/藍(lán)/黑/白)

顏色巡線(沿特定顏色軌跡行駛)

識(shí)別色卡完成指定動(dòng)作

5.5 其他應(yīng)用方向

應(yīng)用領(lǐng)域 具體場(chǎng)景 關(guān)鍵考量
智能照明 環(huán)境光色溫檢測(cè)、屏幕背光自適應(yīng)調(diào)節(jié) 關(guān)注無(wú)色濾光片(Clear)通道作為基準(zhǔn)
消費(fèi)電子 智能玩具、家居設(shè)備顏色識(shí)別 低功耗設(shè)計(jì)是重點(diǎn)
產(chǎn)品質(zhì)檢 生產(chǎn)線產(chǎn)品顏色一致性檢測(cè) 需固定照明和距離

六、 工程注意事項(xiàng)

6.1 光學(xué)結(jié)構(gòu)問題(最常見的故障源)

這是TCS3200應(yīng)用中最容易被忽視的問題。實(shí)驗(yàn)數(shù)據(jù)表明:一塊沒加遮光罩的TCS3200,Clear讀數(shù)會(huì)因角度變化浮動(dòng)±25%;加15mm遮光筒后,波動(dòng)可壓到±1.8%。

工程建議

用黑色3D打印件或熱縮管制作遮光筒

筒內(nèi)壁做啞光處理(黑色噴漆或植絨)防止反射干擾

筒長(zhǎng)度通常15-20mm,太長(zhǎng)影響近距測(cè)量

6.2 頻率縮放配置陷阱(高增益不是越高越好)

測(cè)試代碼選擇20%縮放(S0=HIGH, S1=LOW)是最佳實(shí)踐。很多教程建議使用100%增益(S0=HIGH, S1=HIGH),但在室內(nèi)燈光下,無(wú)色濾光片(Clear)通道輸出頻率可能飆到600kHz以上。此時(shí)pulseIn()函數(shù)超時(shí)返回0,新手會(huì)誤以為接線錯(cuò)誤。

縮放比例選擇指南

場(chǎng)景 推薦縮放 理由
室內(nèi)正常照明 20% 約20-120kHz,pulseIn穩(wěn)定
極暗環(huán)境 100% 需要最大靈敏度
強(qiáng)光/白色物體 2% 防止飽和
電池供電/低速采樣 2% 降低MCU中斷負(fù)載

6.3 電源與去耦問題(規(guī)格書強(qiáng)制要求)

TCS3200數(shù)據(jù)手冊(cè)明確要求:電源引腳必須用0.01μF至0.1μF的電容靠近芯片引腳處去耦。模塊現(xiàn)狀:市售模塊是否包含此電容取決于設(shè)計(jì)質(zhì)量。如果你遇到讀數(shù)跳變劇烈且無(wú)規(guī)律,首先檢查的就是電源質(zhì)量,可考慮額外加一個(gè)0.1μF電容在模塊VCC/GND引腳間。OE引腳:數(shù)據(jù)手冊(cè)要求OE必須接明確的低電平或高電平,不能懸空。

6.4 測(cè)量時(shí)序與穩(wěn)定時(shí)間(切換通道后必須等待)

切換S2/S3選擇不同濾光片后,傳感器需要時(shí)間穩(wěn)定。數(shù)據(jù)手冊(cè)給出的響應(yīng)時(shí)間為:一個(gè)新頻率周期的時(shí)長(zhǎng) + 1μs。通道切換順序:建議按固定順序循環(huán)(如R→G→B→C),每次切換后穩(wěn)定100μs,采樣后進(jìn)行下一次。

6.5 電池供電場(chǎng)景的功耗管理(待機(jī)模式電流僅0.1μA

TCS3200是低功耗設(shè)計(jì)的典范:工作模式:約2mA;待機(jī)模式(S0=LOW, S1=LOW):僅0.1μA。省電策略:若你的ESP32項(xiàng)目需要電池供電(如田間監(jiān)測(cè)節(jié)點(diǎn)),可在兩次測(cè)量之間將模塊置于待機(jī)模式。

digitalWrite(S0, LOW);
digitalWrite(S1, LOW);
delay(測(cè)量間隔);
digitalWrite(S0, HIGH); // 恢復(fù)20%模式
digitalWrite(S1, LOW);
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

6.6 常見故障速查表

現(xiàn)象 可能原因 解決方案
OUT恒為0 OE懸空或接地不良 OE接GND
四通道讀數(shù)幾乎相等 遮光罩漏光/環(huán)境光太強(qiáng) 增加遮光罩
頻率>600kHz導(dǎo)致pulseIn超時(shí) 使用了100%增益 切回20%增益
RAW值全為999999(你的代碼) 超時(shí) 檢查OUT上拉電阻或降低縮放
讀數(shù)跳變劇烈無(wú)規(guī)律 電源去耦不良 VCC/GND加0.1μF電容
歸一化結(jié)果全接近255 minRaw異常小 檢查是否有通道讀數(shù)錯(cuò)誤

?審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2578

    文章

    55709

    瀏覽量

    794791
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【ESP32教程】Web網(wǎng)頁(yè)控制彩色LED

    ?? ?開源)是一個(gè)專為電子初學(xué)者/電子興趣愛好者設(shè)計(jì)的開源軟硬件平臺(tái),在硬件上提供超高性價(jià)比STM32系列開發(fā)板、物聯(lián)網(wǎng)控制板
    的頭像 發(fā)表于 05-11 20:53 ?168次閱讀
    <b class='flag-5'>零</b><b class='flag-5'>知</b><b class='flag-5'>派</b>【ESP32教程】Web網(wǎng)頁(yè)控制彩色LED

    ——STM32驅(qū)動(dòng)INA219電流功率監(jiān)測(cè)計(jì)實(shí)現(xiàn)高精度電源管理

    VCC3.3V傳感器電源 GNDGND接地 Vin+被測(cè)電源正極/3.3V [td]Vin-負(fù)載正極通過 0.1Ω 電阻連接到 Vin+ ST7789直插直插標(biāo)準(zhǔn)板TFT擴(kuò)展引
    發(fā)表于 04-18 16:14

    ——ESP32?S3 基于 ESP32-CAM 驅(qū)動(dòng) OV3660 攝像頭模塊開發(fā)

    數(shù)量 備注 主控板 ESP32-S3 1 核心控制,自帶WiFi和藍(lán)牙 OV3660模塊
    發(fā)表于 04-02 11:01

    探索MAX32664:超低功耗生物識(shí)別傳感器集線器的卓越性能

    探索MAX32664:超低功耗生物識(shí)別傳感器集線器的卓越性能 在可穿戴設(shè)備和醫(yī)療監(jiān)測(cè)領(lǐng)域,傳感器技術(shù)的發(fā)展日新月異。其中,Analog Devices的MAX32664超低功耗生物識(shí)別傳感器集線器
    的頭像 發(fā)表于 03-27 09:50 ?222次閱讀

    MAX32663A:超低功耗心電圖生物識(shí)別傳感器集線器的卓越之選

    MAX32663A:超低功耗心電圖生物識(shí)別傳感器集線器的卓越之選 在可穿戴和醫(yī)療設(shè)備領(lǐng)域,對(duì)低功耗、高性能傳感器的需求日益增長(zhǎng)。Maxim Integrated推出的MAX32663A超低功耗心電圖
    的頭像 發(fā)表于 03-27 09:50 ?258次閱讀

    TCS34725顏色感應(yīng)識(shí)別模塊

    ,內(nèi)部白平衡程序。 一、模塊介紹 TCS34725是一款低成本顏色識(shí)別傳感器模塊。有功耗小,體積小,安裝方便的優(yōu)勢(shì)。 其工作原理是,通過照明
    的頭像 發(fā)表于 01-13 09:35 ?3934次閱讀
    <b class='flag-5'>TCS</b>34725<b class='flag-5'>顏色</b>感應(yīng)<b class='flag-5'>識(shí)別</b><b class='flag-5'>模塊</b>

    IDE——基于標(biāo)準(zhǔn)板驅(qū)動(dòng)PAJ7620U2手勢(shì)控制L9110風(fēng)扇模塊和SG90舵機(jī)系統(tǒng)

    控制,結(jié)合PAJ7620U2手勢(shì)傳感器實(shí)現(xiàn)對(duì)L9110風(fēng)扇模塊和SG90舵機(jī)的智能控制。系統(tǒng)通過識(shí)別9種不同的手勢(shì)動(dòng)作(上下、左右、順時(shí)針/逆時(shí)針、揮手、前推、后拉)分別控制風(fēng)扇的啟
    發(fā)表于 01-06 11:56

    IDE——基于ESP32與DRV8833的穩(wěn)定電機(jī)測(cè)速系統(tǒng)實(shí)現(xiàn)教程

    ESP32-WROOM-321核心控制 電機(jī)驅(qū)動(dòng)DRV8833雙H橋驅(qū)動(dòng)模塊1電機(jī)速度控制 傳感器紅外對(duì)射計(jì)數(shù)傳感器1脈沖檢測(cè) OLED顯示屏0.96寸I2C SSD13061數(shù)據(jù)顯
    發(fā)表于 12-15 16:41

    新品 | Unit Fingerprint2,高性能指紋識(shí)別傳感器單元

    UnitFingerprint2是一款高性能指紋識(shí)別傳感器單元,內(nèi)部集成STM32核心主控與A-K323CP一體化指紋識(shí)別模組,采用半導(dǎo)體電容式傳感器,具備指紋采集、特征提取、注冊(cè)、比對(duì)、存儲(chǔ)、檢索
    的頭像 發(fā)表于 10-17 17:41 ?1586次閱讀
    新品 | Unit Fingerprint2,高性能指紋<b class='flag-5'>識(shí)別傳感器</b>單元

    顏色傳感器的檢測(cè)原理和應(yīng)用實(shí)例

    顏色傳感器是一種能夠感知光線的傳感器(光電傳感器、光傳感器的一種)。
    的頭像 發(fā)表于 09-04 17:13 ?3798次閱讀
    <b class='flag-5'>顏色</b><b class='flag-5'>傳感器</b>的檢測(cè)原理和應(yīng)用實(shí)例

    華怡豐推出ISC-B/C系列圖像識(shí)別傳感器

    在工業(yè)自動(dòng)化領(lǐng)域,精準(zhǔn)、高效的視覺檢測(cè)是提升生產(chǎn)效率的關(guān)鍵。華怡豐全新推出的ISC-B/C系列圖像識(shí)別傳感器集高精度定位、測(cè)量算法與先進(jìn)圖像處理技術(shù)于一體,為各類工業(yè)場(chǎng)景提供穩(wěn)定、可靠的解決方案!
    的頭像 發(fā)表于 08-15 11:36 ?2061次閱讀
    華怡豐推出ISC-B/C系列圖像<b class='flag-5'>識(shí)別傳感器</b>

    顏色識(shí)別傳感器區(qū)分紐扣正反面# #傳感器 #工作原理大揭秘

    傳感器
    阿童木(廣州)智能科技有限公司
    發(fā)布于 :2025年07月15日 14:00:55

    開源——STM32F407VET6驅(qū)動(dòng)SHT41溫濕度傳感器完整教程

    目基于STM32F407VET6增強(qiáng)板,實(shí)現(xiàn)SHT41高精度溫濕度傳感器的驅(qū)動(dòng)和數(shù)據(jù)采集。SHT41是Sensirion推出的新一代數(shù)字溫濕度傳感器,具有±0.2°C的溫度精度和±
    發(fā)表于 07-10 12:01

    開源——STM32F407VET6驅(qū)動(dòng)SHT41溫濕度傳感器完整教程

    摘要:本項(xiàng)目基于STM32F407VET6增強(qiáng)板驅(qū)動(dòng)SHT41高精度溫濕度傳感器,實(shí)現(xiàn)±0.2℃溫度精度和±1.8%RH濕度精度的數(shù)據(jù)采集。硬件連接采用I2C接口(SCL:PB6,SDA:PB7
    的頭像 發(fā)表于 07-09 18:53 ?2040次閱讀
    <b class='flag-5'>零</b><b class='flag-5'>知</b>開源——STM32F407VET6驅(qū)動(dòng)SHT41溫濕度<b class='flag-5'>傳感器</b>完整教程

    開源——STM32F1驅(qū)動(dòng)MAX31865讀取三線PT100溫度傳感器

    (STM32F103RBT6) MAX31865模塊(支持三線制PT100) 三線制PT100傳感器 0.96寸I2C OLED顯示屏(SSD1306驅(qū)動(dòng)) 杜邦線若干 2.MAX31865跳線修改三線制PT100必須修改模塊
    發(fā)表于 05-23 18:27
    伊金霍洛旗| 彰武县| 连城县| 汕头市| 桓仁| 瓦房店市| 子长县| 德令哈市| 芜湖市| 沧州市| 宜兴市| 潮州市| 古交市| 新竹县| 万年县| 甘德县| 阿巴嘎旗| 团风县| 沽源县| 绥滨县| 宁波市| 秭归县| 马关县| 秦安县| 绥中县| 翼城县| 西乌| 琼结县| 施秉县| 雅安市| 临沭县| 恩平市| 金堂县| 胶南市| 法库县| 丽江市| 定南县| 聂拉木县| 江津市| 乌苏市| 郯城县|