這篇文章來源于DevicePlus.com英語網站的翻譯稿。
ARDUINO激光絆線
目的
本教程描述了如何使用Arduino Uno制作一個激光絆線。如果您不熟悉Arduino平臺,請參閱“Arduino設置教程”。
概述
在本教程中,您將學習如何設置激光絆線傳感器,并在光束被阻斷時觸發執行器,在此例中為點亮LED。您將學習如何使用if/else循環、激光二極管以及光敏電阻。
警告: 激光可能對眼睛有害,切勿直視激光束。
設備
Arduino Uno R3
“DOT”激光模
20件光敏電阻套
9V、1A電源適配器
跳線
USB電纜(A-to-B)
面包板
目錄
編寫代碼
引腳定義
設置
循環
上傳并運行程序
程序
1.1 電路設計
這個項目的電路設計相當簡單。電路分為三部分:激光電源、光敏電阻接收器(傳感器)和LED指示燈(執行器)。一般來講,單片機通過傳感器接收來自外界的信息,并通過執行器傳遞信息或執行操作。我選擇使用LED指示燈作為我的執行器,但是執行器可以是警報、短信,甚至是門鎖。
我總是喜歡用Fritzing繪制原理圖(圖1:電路原理圖)。Fritzing是一款開源原理圖設計和PCB布線軟件。這樣,將來可以作為參考。
圖1:電路原理圖
電路的第一部分是激光二極管的電源。您可以用5V引腳(紅色導線)為激光二極管供電。我希望能夠打開/關閉激光器,但是Arduino上的數字輸出引腳無法為激光二極管提供足夠的功率。負極應接地(黑色導線)。確保您的激光二極管不需要限流電阻。如果需要,請選擇適當的阻值。
接下來將創建我們的執行器(LED指示燈)。執行器的目的是告訴我們激光二極管光束已經被阻斷。LED和電阻應串聯在引腳9(淺藍色導線)和GND(黑色導線)之間。電阻的作用是限制流過LED的電流,并應根據您的LED進行相應調整,以防止電流過大將LED燒壞。請記住,LED較長的引線是正極,應連接到引腳9。
最后,電路的最后一部分是光敏電阻(圖2:光敏電阻),即我們的傳感器。光敏電阻是一種電阻,其阻值會隨電阻面上的光線強度變化而變化。電阻的一個引線應連至引腳7(淺藍色導線),另一個引線應連至GND(黑色導線)。我使用的光敏電阻在光線照射時具有高電阻,而在沒有光線時具有低電阻。
圖2:光敏電阻
2.0 編寫代碼
2.1 引腳定義
代碼的第一部分是定義引腳。這一步是可選操作,但是為了便于記憶和跟蹤,我為引腳添加了描述性名稱。另外,如果我改變電路的連接方式,只需改變引腳定義即可,無需改變引用引腳編號的每一行代碼。
在我們的電路中,光敏電阻被定義為“引腳7”,LED被定義為“引腳9”。
圖3:引腳定義
2.2 設置
在代碼的設置部分,我將LED引腳配置為數字輸出。
圖4:設置代碼
我們還將光敏電阻配置為帶上拉電阻(INPUT_PULLUP)的數字輸入。我們正在創建的電路與下面的電路類似,這是一種常用電氣電路。在這種情況下,上拉電阻和電壓源位于單片機(Arduino)內部,“按鈕”則是我們的光敏電阻。當激光二極管照射在光敏電阻上時,它呈現高電阻,并且上拉電阻將輸入的電壓拉到數字高電平。當光束被阻斷時,光敏電阻的電阻下降,輸入電壓變為數字低電平。
圖5:上拉電阻輸入電路
2.3 循環
對于重復循環,我編寫了一個連續查詢光敏電阻數字輸入的IF/ELSE語句。如果數字輸入為高電平,LED輸出關閉;否則LED輸出開啟。
圖6:循環代碼
3.0 上傳并運行程序
圖7:激光絆線的Arduino電路
將代碼上傳到Arduino。確保Arduino已經連接9V電源適配器,因為USB電源不足以為Arduino和激光二極管同時供電。程序開始后,激光二極管應該輸出一束激光。如果光束照射在光敏電阻上,LED應熄滅(圖8:激光絆線)。當光束被阻斷時,LED亮起,表明絆線已經斷開(圖9:絆線斷開)。
圖8:激光絆線
圖9:絆線斷開
提示:如果您的LED沒有點亮,請使用萬用表分別檢查激光照射到光敏電阻上時光敏電阻的阻值以及光束阻斷時光敏電阻的阻值。光照射到光敏電阻上時,光敏電阻的阻值應該在數千歐姆;沒有照射時,阻值應為幾百歐姆或更低。
附件:激光絆線代碼
/* 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); } }
DevicePlus 編輯團隊
設備升級版適用于所有熱愛電子和機電一體化的人。
審核編輯黃宇
-
傳感器
+關注
關注
2552文章
51294瀏覽量
755203 -
激光
+關注
關注
19文章
3234瀏覽量
64651 -
Arduino
+關注
關注
188文章
6474瀏覽量
187435
發布評論請先 登錄
相關推薦
評論