21.光閘計時器

先把光二極體與10K電阻串聯,焊接在排針上

設計一個光閘圓環,使光電二極體與鐳射二極體的孔保持一直線

其中光電二極體的直徑是5mm,鐳射二極體的直徑是6mm

3D列印成型後,用快乾固定光二極體與鐳射二極體,並通電調整,保持"瞄準"的狀態

插上杜邦接頭,咖啡色是負極Gnd分壓腳在橘色(中間)是S紅色是正極Vcc

最後將線路與快乾固定,排針等分壓電路使用熱熔膠封裝避免脫落與彎折

程式碼內容

#include <Wire.h> //載入I2C介面函式庫

#include <LiquidCrystal_I2C.h> //載入I2C液晶控制函式庫

LiquidCrystal_I2C lcd(0x3f,16,2); // 若LCD 無法啟用,請將0X3F 改為0X27

int a,b,a0,b0,i=1; //宣告變數a b c d 為整數類型 (值域 -32767 ~ 32767)

unsigned long t1,t2;

float t ;

void setup() {

Serial.begin(9600); //啟用序列埠介面,可以從序列埠視窗抓到數據

lcd.init(); //LCD初始化

lcd.backlight(); //LCD 開啟背光

lcd.clear(); // LCD清除畫面

delay(200);

a0 = analogRead(A0)-50; //偵測第一光柵的背景值後減50

b0 = analogRead(A0)-50; //偵測第二光柵的背景值後減50

}

void loop() {

lcd.setCursor(0,1); //設定LCD游標至第0行,第1列的位置

lcd.print("Prepare...");

lcd.setCursor(13,1);

lcd.print(i);

t=0;

t1=0;

t2=0;

do{

a = analogRead(A0);

}while(a>a0); //若值>第一光閘的背景值時反覆讀取

t1=millis();

lcd.setCursor(0,1);

lcd.print("Start... ");

lcd.setCursor(13,1);

lcd.print(i);

do{

b = analogRead(A1);

}while(b>b0); //若值>第二光閘的背景值時反覆讀取


t2=millis();

t=(t2-t1)/1000.000;

lcd.setCursor(0,0);

lcd.print("Record=");

lcd.print(t,3);

lcd.print(" sec");

lcd.setCursor(0,1);

lcd.print("End.... ");

lcd.setCursor(13,1);

lcd.print(i);

i++;

delay(2000);

}