****軟體使用 Teensyduino 1.36 + Arduino 1.82 ********
光電二極體與常規的半導體二極體基本相似,只是光電二極體可以直接暴露在光源附近或通過透明小窗、光導纖維封裝,來允許光到達這種器件的光敏感區域來檢測光訊號。許多用來設計光電二極體的二極體使用了一個PIN結,而不是一般的PN接面,來增加器件對訊號的響應速度。光電二極體常常被設計為工作在逆向偏壓狀態。
一個光電二極體的基礎結構通常是一個PN接面或者PIN結。當一個具有充足能量的光子衝擊到二極體上,它將激發一個電子,從而產生自由電子(同時有一個帶正電的電洞)。這樣的機制也被稱作是內光電效應。如果光子的吸收發生在結的空乏層,則該區域的內電場將會消除其間的屏障,使得電洞能夠向著陽極的方向運動,電子向著陰極的方向運動,於是光電流就產生了。實際的光電流是暗電流和光照產生電流的綜合,因此暗電流必須被最小化來提高器件對光的靈敏度。
這是BPW21R 的照片現在半導體這樣亮晶晶的包裝不多了
Teensy 3.6 內部有16Bit 的ADC預設滿檔位3.3v的狀況下提供了65536的分辨率,比Arduino的10Bit 的1024高出許多。
電路圖
/****以下是程式碼****/
#include <Adafruit_GFX.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_ILI9341.h>
#include <ADC.h>
int readPin = A0; // ADC0
ADC *adc = new ADC();; // adc object
#define TFT_RST 24 //LCM 接腳
#define TFT_DC 25
#define TFT_CS 26
#define TFT_MOSI 27
#define TFT_MISO 28
#define TFT_CLK 29
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
void setup() {
pinMode(readPin, INPUT);
tft.begin(); //LCM 啟始
tft.fillScreen(ILI9341_BLACK); //LCM 畫面更新為黑色
tft.setRotation(1); // LCM 旋轉90度
adc->setAveraging(64); // set number of averages
adc->setResolution(16); // set bits of resolution
adc->setConversionSpeed(ADC_CONVERSION_SPEED::VERY_LOW_SPEED); // change the conversion speed
adc->setSamplingSpeed(ADC_SAMPLING_SPEED::VERY_LOW_SPEED); // change the sampling speed
delay(500);
}
int value = 0;
int pin=0;
void loop() {
value = adc->adc0->analogRead(readPin); // read a new value, will return ADC_ERROR_VALUE if the comparison is false.
tft.setCursor(0,0);
tft.setTextSize(2);
tft.fillRect(0,0,320,40,0);
tft.print("Value: ");
tft.print(value*3.3/adc->getMaxValue(ADC_0), DEC);
delay(1000);
}
上傳到Teensy 3.6後 就會開始顯示光電二極體偵測到的亮度值,因為這設計是要低照度下還能做線性檢出在一般亮度下一定爆表,如果應用在一般亮度須更改放大器的放大倍率!!
這是關燈後的照片感測電路還可輸出1.4V左右
這是開燈後的照片,改測器輸出已經是滿檔的3.2V。
Teensy3.6雖然有16Bit的ADC但是在麵包版上雜訊等問題能達到12Bit的穩定度就很好了。
沒有留言:
張貼留言