# 自製 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)