和12岁小同志搞创客开发:手撕代码,做一款人体感应灯
目錄
1、傳感器原理
2、代碼實踐
機緣巧合在網上認識一位12歲小同志,從零開始系統輔導其創客開發思維和技巧。
項目專欄:https://blog.csdn.net/m0_38106923/category_11097422.html?
本篇博文我們要手寫代碼做一款人體感應燈。要求:當有人經過的時候,LED燈就會自動亮起,人一旦走開,LED自動關閉了。這里用到的傳感器是人體紅外熱釋電運動傳感器,它是一種能檢測人或動物身體發射的紅外線而輸出電信號的傳感器。
1、傳感器原理
早在1938年,有人提出過利用熱釋電效應探測紅外輻射,但并未受到重視,直到六十年代,隨著激光、紅外技術的迅速發展,才又推動了對熱釋電效應的研究和對熱釋電晶體的應用。熱釋電晶體已廣泛用于紅外光譜儀、紅外遙感以及熱輻射探測器,它可以作為紅外激光的一種較理想的探測器。它目標正在被廣泛的應用到各種自動化控制裝置中。
熱釋電效應同壓電效應類似,是指由于溫度的變化而引起晶體表面荷電的現象。熱釋電傳感器是對溫度敏感的傳感器。它由陶瓷氧化物或壓電晶體元件組成,在元件兩個表面做成電極,在傳感器監測范圍內溫度有ΔT的變化時,熱釋電效應會在兩個電極上會產生電荷ΔQ,即在兩電極之間產生一微弱的電壓ΔV。由于它的輸出阻抗極高,在傳感器中有一個場效應管進行阻抗變換。熱釋電效應所產生的電荷ΔQ會被空氣中的離子所結合而消失,即當環境溫度穩定不變時,ΔT=0,則傳感器無輸出。當人體進入檢測區,因人體溫度與環境溫度有差別,產生ΔT,則有ΔT輸出;若人體進入檢測區后不動,則溫度沒有變化,傳感器也沒有輸出了。所以這種傳感器檢測人體或者動物的活動傳感。
由實驗證明,傳感器不加光學透鏡(也稱菲涅爾透鏡),其檢測距離小于2米,而加上光學透鏡后,其檢測距離可大于7米。
2、代碼實踐
整個裝置分為三個部分,輸入,控制與輸出。人體紅外熱釋電運動傳感器為輸入設備,Arduino就是控制設備,LED發光模塊就是輸出設備。
由于人體紅外熱釋電運動傳感器為數字量的傳感器,所以接數字口。LED輸出信號也是數字量,同樣接數字口。
傳感器連線效果如下所示:
實現代碼如下所示:
int sensorPin = 2; //傳感器連接到數字2
int ledPin = 13; //LED連接到數字13
int sensorState = 0; //變量sensorState用于存儲傳感器狀態void setup() {pinMode(ledPin, OUTPUT); //LED為輸出設備pinMode(sensorPin, INPUT); //傳感器為輸入設備
}void loop(){sensorState = digitalRead(sensorPin); //讀取傳感器的值if (sensorState == HIGH) { //如果為高,LED亮digitalWrite(ledPin, HIGH); } else { //否則,LED滅digitalWrite(ledPin, LOW); }
}
程序開始在setup()中通過pinMode()函數將LED設置為輸出模式,人體紅外熱釋電運動傳感器設置為輸入模式。
有了輸入設備,我要讀取輸入設備的值,才能進行之后的判斷,所以loop函數一開始就是讀取人體紅外熱釋電運動傳感器的值。
讀取數字傳感器狀態的函數是:digitalRead(),函數格式如下所示:
digitalRead(pin)
這個函數是用來讀取數字引腳狀態,高電平還是低電平。人體紅外熱釋電傳感器有人或者動物走動時,讀到高電平,否則讀到低電平。代碼的后半段就是對判斷出來的值來執行相應動作。(HIGH:高電平,代表1,LOW:低電平,代表0) 。
數字傳感器只會讀到兩個值(HIGH和LOW)。
這里要用到新的一個語句:if語句,使用格式如下所示:
(1)
if(表達式){
語句;
}
(2)
if(表達式){
語句;
}else{語句;}
(3)
if(表達式){
語句;
}else if(表達式){語句;}
...
else{語句;}
表達式是指我們的判斷條件,通常為一些關系式或邏輯式,也可是直接表示某—數值。如果if表達式條件為真,則執行if中的語句。表達式條件為假,則跳出if語句。
程序中“==”是比較運算符,用于判斷兩個數值是否相等,記得是“雙等號”而“=”是賦值運算符,把等號右邊的值賦給左邊。常用運算符如下所示:
- ==(等于)
- !=(不等于)
- <(小于)
- >(大于)
- <=(小于等于)
- >=(大于等于)
特別說明下,小于等于和大于等于,<和=之間不能留有空格,否則編譯不通過。
當然,除了比較運算符外,程序也可以用的+、一、*、/(加、減、乘、除)這些常用的算術運算符。
拓展學習:和12歲小同志搞創客開發:如何驅動各類型傳感器?
總結
以上是生活随笔為你收集整理的和12岁小同志搞创客开发:手撕代码,做一款人体感应灯的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 和12岁小同志搞创客开发:手撕代码,点亮
- 下一篇: 和12岁小同志搞创客开发:手撕代码,做一