目的
本教材描述了如何使用Arduino Uno製作一個雷射絆線。如果您不熟悉Arduino平臺,請參閱“Arduino設定教材”。
概述
在本教材中,您將學習如何設定雷射絆線感測器,並在光束被阻斷時觸發執行器,在此例中為點亮LED。您將學習如何使用if/else迴圈、雷射二極體以及光敏電阻。
警告: 雷射可能對眼睛有害,切勿直視雷射光束。
裝置
目錄
程式
這個專案的電路設計相當簡單。電路分為三部分:雷射電源、光敏電阻接收器(感測器)和LED指示燈(執行器)。一般來講,單片機通過感測器接收來自外界的資訊,並通過執行器傳遞資訊或執行操作。我選擇使用LED指示燈作為我的執行器,但是執行器可以是警報、短信,甚至是門鎖。
我總是喜歡用Fritzing繪製原理圖(圖1:電路原理圖)。Fritzing是一款開源原理圖設計和PCB佈線軟體。這樣,將來可以作為參考。Fritzing的下載位址(可選)如下: http://fritzing.org/home/
電路的第一部分是雷射二極體的電源。您可以用5V引腳(紅色導線)為雷射二極體供電。我希望能夠打開/斷路雷射器,但是Arduino上的數位輸出引腳無法為雷射二極體提供足夠的功率。負極應接地(黑色導線)。確保您的雷射二極體不需要限流電阻。如果需要,請選擇適當的阻值。
接下來將創建我們的執行器(LED指示燈)。執行器的目的是告訴我們雷射二極體光束已經被阻斷。LED和電阻應串聯在引腳9(淺藍色導線)和GND(黑色導線)之間。電阻的作用是限制流過LED的電流,並應根據您的LED進行相應調整,以防止電流過大將LED燒壞。請記住,LED較長的引腳是正極,應連接到引腳9。
最後,電路的最後一部分是光敏電阻(圖2:光敏電阻),即我們的感測器。光敏電阻是一種電阻,其阻值會隨電阻面上的光線強度變化而變化。電阻的一個引腳應連至引腳7(淺藍色導線),另一個引腳應連至GND(黑色導線)。我使用的光敏電阻在光線照射時具有高電阻,而在沒有光線時具有低電阻。
2.1 引腳定義
代碼的第一部分是定義引腳。這一步是可選操作,但是為了便於記憶和追跡,我為引腳添加了描述性名稱。另外,如果我改變電路的連接方式,只需改變引腳定義即可,無需改變引用引腳編號的每一行代碼。
在我們的電路中,光敏電阻被定義為“引腳7”,LED被定義為“引腳9”。
2.2 設定
在代碼的設定部分,我將LED引腳配置為數位輸出。
我們還將光敏電阻配置為帶上拉電阻(INPUT_PULLUP)的數位輸入。我們正在創建的電路與下面的電路類似,這是一種常用電氣電路。在這種情況下,上拉電阻和電壓源位於單片機(Arduino)內部,“按鈕”則是我們的光敏電阻。當雷射二極體照射在光敏電阻上時,它呈現高電阻,並且上拉電阻將輸入的電壓拉到數位高電平。當光束被阻斷時,光敏電阻的電阻下降,輸入電壓變為數位低電平。
2.3 迴圈
對於重複迴圈,我編寫了一個連續查詢光敏電阻數位輸入的IF/ELSE語句。如果數位輸入為高電平,LED輸出斷路;否則LED輸出開啟。
將代碼上傳到Arduino。確保Arduino已經連接9V電源合適器,因為USB電源不足以為Arduino和雷射二極體同時供電。程式開始後,雷射二極體應該輸出一束雷射。如果光束照射在光敏電阻上,LED應熄滅(圖8:雷射絆線)。當光束被阻斷時,LED亮起,表明絆線已經斷開(圖9:絆線斷開)。
提示:如果您的LED沒有點亮,請使用萬用表分別檢查雷射照射到光敏電阻上時光敏電阻的阻值以及光束阻斷時光敏電阻的阻值。光照射到光敏電阻上時,光敏電阻的阻值應該在數千歐姆;沒有照射時,阻值應為幾百歐姆或更低。
附件:雷射絆線代碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
/* Project: Laser Tripwire Tutorial * Written by: Chris Marella * Date: January 24, 2018 * Version: 1.0 * */ //Pin Definitions const int photo = 7; const int LED = 9; void setup() { //Pin Configurations //Outputs pinMode(LED, OUTPUT); digitalWrite(LED, LOW); //Inputs pinMode(photo, INPUT_PULLUP); } void loop() { //if/else loop checks if photoresistor is high or low if(digitalRead(photo)==HIGH){ digitalWrite(LED, HIGH); }else{ digitalWrite(LED, LOW); } } |