# 自製 Arduino 比色計(光度計)
> [color=#40f1ef][name=LHB阿好伯, 2020/12/11][:earth_africa:](https://www.facebook.com/LHB0222/)
###### tags: `創客` `Arduino`
[TOC]
🌟
# 構想
最近剛好有一些構想
在水質檢測中常見使用比色法或是分光光度計
又或者在一些快篩試劑是使用肉眼判斷顏色深淺的變化
這些現象可以用比爾─朗伯定律(Beer-Lambert Law)說明
此定律是一個光學基礎定律
當光穿透樣品溶液時,光的吸收度與吸收係數、光徑長、濃度三者均呈正比
實驗上若是控制好光徑長
吸收係數為代測的融解物質常數
不同物質對不同光譜的吸收能力不同
所以在此測試過程中吸光度與濃度為正比關係
而這次構思使用TCS34725作為光強度感測器
若是要降低成本也可以使用光敏電阻取代
但其分析解析度可能會應此降低
而在光源的部分無法做到像分光光度計一樣使用光柵
所以使用WS2812作為光源
或是簡單也可以使用單色的LED取代
再裝一個I2C接腳的OLED螢幕作為結果顯示
# 材料
- Arduino控制板
-
- TSC34725顏色感應器
- ![](https://i.imgur.com/CHPOfCA.png)
- WS2812可程控LED 或是 多色LED
- ![](https://i.imgur.com/XD1CJx3.jpg)
- SSD1306 0.96吋 OLED
- ![](https://i.imgur.com/omqpCEY.jpg)
- 10K 電阻
- 跳線若干條
- 焊接裝備
- 3D print或是紙箱厚紙板等製作外盒
- 分光槽或是方形玻璃杯作為溶液測量器皿
- ![](https://i.imgur.com/1qImQpb.png)
# 電路配置圖
![](https://i.imgur.com/GyNn0dj.jpg)
![](https://i.imgur.com/kDnsqPy.jpg)
然而TCS34725與OLED都是使用I2C連線
所以在SCK與SDA接腳上需要上需要上拉一個10K歐姆的電阻
# Arduino程式碼
```c=
// 5 V
// |
// |------------10K
// 10 K |
// | |
// A5 <---┴--> SCL |
// A4 <--------------------> SDA
#include <Wire.h>
#include "Adafruit_TCS34725.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
/* Example code for the Adafruit TCS34725 breakout library */
/* Connect SCL to analog 5
Connect SDA to analog 4
Connect VDD to 3.3V DC
Connect GROUND to common ground */
/* Initialise with default values (int time = 2.4ms, gain = 1x) */
// Adafruit_TCS34725 tcs = Adafruit_TCS34725();
/* Initialise with specific int time and gain values */
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_700MS, TCS34725_GAIN_1X);
void setup(void) {
Serial.begin(9600);
if (tcs.begin()) {
Serial.println("Found sensor");
} else {
Serial.println("No TCS34725 found ... check your connections");
while (1);
}
// Now we're ready to get readings!
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 10);
// Display static text
display.println("Hello, world!");
display.display();
}
void loop(void) {
uint16_t r, g, b, c, colorTemp, lux;
tcs.getRawData(&r, &g, &b, &c);
// colorTemp = tcs.calculateColorTemperature(r, g, b);
colorTemp = tcs.calculateColorTemperature_dn40(r, g, b, c);
lux = tcs.calculateLux(r, g, b);
Serial.print("Color Temp: "); Serial.print(colorTemp, DEC); Serial.print(" K - ");
Serial.print("Lux: "); Serial.print(lux, DEC); Serial.print(" - ");
Serial.print("R: "); Serial.print(r, DEC); Serial.print(" ");
Serial.print("G: "); Serial.print(g, DEC); Serial.print(" ");
Serial.print("B: "); Serial.print(b, DEC); Serial.print(" ");
Serial.print("C: "); Serial.print(c, DEC); Serial.print(" ");
Serial.println(" ");
display.clearDisplay();
display.setCursor(0,0);
display.println("R: " );
display.setCursor(20,0);
display.println(r, DEC);
display.setCursor(0,20);
display.println("G: " );
display.setCursor(20,20);
display.println(g, DEC);
display.setCursor(0,40);
display.println("B: " );
display.setCursor(20,40);
display.println(b, DEC);
display.display();
}
```
# 外殼製作
我這次使用3D印表機的方式建立設備的外殼
在測試了幾個方案過後
![](https://i.imgur.com/h4rLQ1Y.jpg)
有了最終可用的版本
可惜在轉軸的部分設計與印表機的精密度問題沒有得到預期的效果
但使用上已經沒有問題了
> [STL檔下載](https://1drv.ms/u/s!AuqcoLPA0_SIkI9u-WDzwRUg6ty4WQ?e=t3oJ1u)
![](https://i.imgur.com/XjHUCQT.png)
![](https://i.imgur.com/8TS0ye5.png)
![](https://i.imgur.com/T4HKR0v.png)
![](https://i.imgur.com/I41QLL1.png)
## 測試與後續規劃
設定WS2812發出綠光
但其TCS34725並不是只有G值
其餘B藍色也是有相對高的數值
可能原因為WS2812的光譜並不是單純綠色
後續簡單的使用兩種不同溶液進行測試
可以發現在不同顏色的強度都有下降的情況
有機會我在配置檢量線來測試是否具線性關係
![](https://i.imgur.com/aSz29PQ.jpg)
![](https://i.imgur.com/wHPIWXe.jpg)
![](https://i.imgur.com/zGOEbP0.jpg)
### 更新
後來在網友的提醒下
我找到了下面這張圖
TCS34725為採用吸收濾波器(absorption filters)的RGB感測器的波長特徵在於RGB範圍都有大面積的重疊
![](https://i.imgur.com/ny8YHav.png)
>[參考資料](https://www.taiwansensor.com.tw/wp-content/uploads/2018/08/TCS34725-DATASHEET.pdf)
發現有Adafruit AS7262光譜模組
可已有更好的分辨效果
具有6個集成的可見光感應通道,分別用於紅色,橙色,黃色,綠色,藍色和紫色
![](https://i.imgur.com/EpQ2tgL.png)
![](https://i.imgur.com/GtIU4YT.png)
全文分享至
https://www.facebook.com/LHB0222/
https://www.instagram.com/ahb0222/
有疑問想討論的都歡迎於下方留言
喜歡的幫我分享給所有的朋友 \o/
有所錯誤歡迎指教
# [:page_with_curl: 全部文章列表](https://hackmd.io/@LHB-0222/AllWritings)
![](https://i.imgur.com/47HlvGH.png)
[參考資料](https://cdn-learn.adafruit.com/assets/assets/000/052/623/original/AS7262_DS000486_2-00_%281%29.pdf?1522179774)