




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第五章
Arduino基礎(chǔ)傳感器2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程15.1點(diǎn)亮一盞燈—LED發(fā)光模塊第一個(gè)要做的必須是最經(jīng)典的,最經(jīng)典的莫過(guò)于“blink”。其實(shí),前面在一開(kāi)始驅(qū)動(dòng)安裝的時(shí)候就用過(guò)這段代碼了,區(qū)別在于這里將不使用板上的
LED13(也就是“L”燈),而是在數(shù)字引腳13連接一個(gè)
LED。所需元件
1× 數(shù)字食人魚(yú)紅色LED發(fā)光模塊
硬件連接
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程25.1點(diǎn)亮一盞燈—LED發(fā)光模塊輸入代碼
打開(kāi)ArduinoIDE,在編輯框中輸入樣例代碼
1所示代碼。(輸入代碼也是一種學(xué)習(xí)編程的過(guò)程,雖然提供代碼,但還是建議初學(xué)者自己輸入代碼,親身體驗(yàn)一下。)
輸入完畢后,點(diǎn)擊IDE的“校驗(yàn)(Verify)”,查看輸入代碼是否通過(guò)編譯。如果顯示沒(méi)有錯(cuò)誤,單擊“下載(UpLoad)”,給Arduino下載代碼。以上每一步都完成了的話,應(yīng)該可以看到面包板上的紅色LED每隔一秒交替亮滅一次。
現(xiàn)在來(lái)回顧一下代碼,看看它們是如何工作的。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程3樣例代碼1://LED閃爍/*描述:LED每隔一秒交替亮滅一次*/intledPin=13;voidsetup(){
pinMode(ledPin,OUTPUT);
}voidloop(){digitalWrite(ledPin,HIGH);delay(1000);digitalWrite(ledPin,LOW);delay(1000);}5.1點(diǎn)亮一盞燈—LED發(fā)光模塊硬件分析(數(shù)字輸出)
整個(gè)裝置只有兩個(gè)部分,控制與輸出。Arduino就是控制設(shè)備,LED發(fā)光模塊就是輸出設(shè)備。對(duì)的,這個(gè)整個(gè)裝置是沒(méi)有輸入設(shè)備的。有了這么一分析,再看代碼就不那么難理解了。2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程45.1點(diǎn)亮一盞燈—LED發(fā)光模塊代碼分析voidsetup(){//寫(xiě)入setup代碼,只運(yùn)行一次:}
voidloop(){//寫(xiě)入main代碼,重復(fù)運(yùn)行:}
Arduino代碼必須包含setup()和loop()這兩個(gè)函數(shù)。setup英文中是“設(shè)置”的意思。所以setup()函數(shù)是用于一些初始化設(shè)置的,只在代碼一開(kāi)始時(shí),運(yùn)行一次。loop是“循環(huán)”的意思,只要Arduino不掉電,loop就會(huì)不停的重復(fù)運(yùn)行。
由于LED是輸出設(shè)備,所以不難看出,在setup()函數(shù)中先初始化LED為輸出模式。
函數(shù)格式如下:
pinMode(pin,mode)
這個(gè)函數(shù)是用來(lái)設(shè)置Arduino數(shù)字引腳的模式的,只用于數(shù)字引腳定義是輸入(INPUT),還是輸出(OUTPUT)。pin指數(shù)字引腳號(hào),mode指引腳模式(OUTPUT/INPUT)。2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程55.1點(diǎn)亮一盞燈—LED發(fā)光模塊代碼分析loop函數(shù)中就只用到了一個(gè)函數(shù)digitalWrite()。函數(shù)格式如下:
digitalWrite(pin,value)
這個(gè)函數(shù)的意義是:引腳pin在pinMode()的中被設(shè)置為OUTPUT模式時(shí),其電壓將被設(shè)置為相應(yīng)的值,HIGH為5V(3.3V控制板上為3.3V),LOW為0V。
digitalWrite(ledPin,HIGH); //LED被點(diǎn)亮digitalWrite(ledPin,LOW); //LED被熄滅
代碼中的,ledPin同樣指引腳。寫(xiě)入HIGH時(shí),引腳13就被至高,LED被點(diǎn)亮。寫(xiě)入LOW時(shí),引腳13就被拉低,LED被熄滅。
亮與滅之間還有句語(yǔ)句:delay(1000);delay是延時(shí)的意思。括號(hào)中寫(xiě)入的是毫秒(ms)。所以,delay(1000)就是延時(shí)1s的意思。最后實(shí)現(xiàn)的就是LED亮一秒,滅一秒,一直無(wú)限循環(huán)。2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程65.1點(diǎn)亮一盞燈—LED發(fā)光模塊代碼分析代碼開(kāi)始部分有段帶“//”和“/*…*/”的文字:
//項(xiàng)目一——LED閃爍
/*
描述:LED每隔一秒交替亮滅一次
*/
這是代碼中的說(shuō)明文字,可以叫做注釋。是以”//”開(kāi)始,這個(gè)符號(hào)所在行之后的文字將不被編譯器編譯。還有另外一種寫(xiě)注釋的方式,用“/*…*/”,這個(gè)符號(hào)的作用是可以注釋多行,這也是與上一種注釋方式的區(qū)別之處。在/*和*/中間的所有內(nèi)容都將被編譯器忽略,不進(jìn)行編譯。
IDE將自動(dòng)把注釋的文字顏色變?yōu)榛疑?025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程75.1點(diǎn)亮一盞燈—LED發(fā)光模塊拓展Mixly(米思齊)是北師大教育學(xué)部創(chuàng)客教育實(shí)驗(yàn)室提供的免費(fèi)工具,使用這個(gè)軟件可以圖像化演示上述源程序如何運(yùn)行點(diǎn)亮一個(gè)真實(shí)的燈。首先下載軟件(/),然后,雙擊右Mixly.vbs文件,即可打開(kāi)Mixly軟件,界面如下:2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程85.1點(diǎn)亮一盞燈—LED發(fā)光模塊拓展在“輸入輸出”菜單中找到“數(shù)字輸出”模塊,點(diǎn)擊并拖動(dòng)至空白處。在“控制”菜單中找到“延時(shí)模塊”,拖動(dòng)至空白處并與“數(shù)字輸出”模塊拼接。2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程95.1點(diǎn)亮一盞燈—LED發(fā)光模塊拓展編寫(xiě)好程序后,單擊下圖中的上傳按鈕,將程序上傳到Arduino主控板上。(注意,在上傳程序之前,要設(shè)置好主控板型號(hào)和COM接口號(hào),點(diǎn)擊上傳按鈕右側(cè)的下拉菜單即可設(shè)置)下圖中的米思齊程序運(yùn)行效果是LED燈越閃越快,感興趣的讀者嘗試編寫(xiě)對(duì)應(yīng)的arduino代碼。2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程105.2感應(yīng)燈--人體紅外熱釋電運(yùn)動(dòng)傳感器熱釋電紅外傳感器是一種能檢測(cè)人或動(dòng)物身體發(fā)射的紅外線而輸出電信號(hào)的傳感器。在這里我們把它作為機(jī)器人的一種傳感器來(lái)應(yīng)用,除了在我們熟知的摟道自動(dòng)開(kāi)關(guān)、防盜報(bào)警上得到應(yīng)用外,在更多的領(lǐng)域應(yīng)用前景看好。如果你有更妙的想法,比如:在房間無(wú)人時(shí)會(huì)自動(dòng)停機(jī)的空調(diào)機(jī)、飲水機(jī),電視機(jī)能判斷無(wú)人觀看或觀眾已經(jīng)睡覺(jué)后自動(dòng)關(guān)機(jī),開(kāi)啟監(jiān)視器或自動(dòng)門(mén)鈴上的應(yīng)用,結(jié)合攝影機(jī)或數(shù)碼照相機(jī)自動(dòng)記錄動(dòng)物或人的活動(dòng)等等,都可以使用它來(lái)實(shí)現(xiàn)。所需元件
1× 數(shù)字食人魚(yú)紅色LED發(fā)光模塊
1×人體紅外熱釋電運(yùn)動(dòng)傳感器
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程115.2感應(yīng)燈--人體紅外熱釋電運(yùn)動(dòng)傳感器硬件連接人體紅外熱釋電運(yùn)動(dòng)傳感器->數(shù)字引腳2數(shù)字食人魚(yú)紅色LED發(fā)光模塊->數(shù)字引腳13
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程125.2感應(yīng)燈--人體紅外熱釋電運(yùn)動(dòng)傳感器
輸入代碼
樣例代碼2://感應(yīng)燈intsensorPin=2; //傳感器連接到數(shù)字
2intledPin=13; //LED連接到數(shù)字
13
intsensorState=0; //變量sensorState用于存儲(chǔ)傳感器狀態(tài)
voidsetup(){pinMode(ledPin,OUTPUT); //LED為輸出設(shè)備pinMode(sensorPin,INPUT); //傳感器為輸入設(shè)備}
voidloop(){sensorState=digitalRead(sensorPin); //讀取傳感器的值if(sensorState==HIGH){ //如果為高,LED亮digitalWrite(ledPin,HIGH);
}else{ //否則,LED滅digitalWrite(ledPin,LOW);}}下載完成后,可以試著人走開(kāi),等待一段時(shí)間,看看LED是否會(huì)關(guān)掉。隨后再試著靠近,LED是不是會(huì)自動(dòng)亮起。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程135.2感應(yīng)燈--人體紅外熱釋電運(yùn)動(dòng)傳感器硬件分析(數(shù)字輸入—數(shù)字輸出)
整個(gè)裝置分為三個(gè)部分,輸入,控制與輸出。人體紅外熱釋電運(yùn)動(dòng)傳感器為輸入設(shè)備,Arduino就是控制設(shè)備,LED發(fā)光模塊就是輸出設(shè)備。
又由于人體紅外熱釋電運(yùn)動(dòng)傳感器為數(shù)字量的傳感器,所以接數(shù)字口。LED輸出信號(hào)也是數(shù)字量,同樣接數(shù)字口。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程145.2感應(yīng)燈--人體紅外熱釋電運(yùn)動(dòng)傳感器代碼回顧還是由輸入輸出著手,傳感器是輸入(INPUT),LED是輸出(OUTPUT)。所以在初始化中設(shè)置為:
pinMode(ledPin,OUTPUT); //LED為輸出設(shè)備pinMode(sensorPin,INPUT); //傳感器為輸入設(shè)備
有了輸入設(shè)備,我們需要讀取輸入設(shè)備的值,才能進(jìn)行之后的判斷,所以loop函數(shù)一開(kāi)始就是讀取傳感器的值。讀取數(shù)字傳感器狀態(tài)的函數(shù)是——digitalRead()。
sensorState=digitalRead(sensorPin);
函數(shù)格式如下:
digitalRead(pin)
這個(gè)函數(shù)是用來(lái)讀取數(shù)字引腳狀態(tài),HIGH還是LOW。人體紅外熱釋電傳感器有人或者動(dòng)物走動(dòng)時(shí),讀到HIGH,否則讀到LOW。代碼的后半段就是對(duì)判斷出來(lái)的值來(lái)執(zhí)行相應(yīng)動(dòng)作。(HIGH代表1,LOW代表0)
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程155.3Mini臺(tái)燈--數(shù)字大按鈕模塊按鈕我們都比較熟知了,是通過(guò)按壓來(lái)實(shí)現(xiàn)通斷的,可以用作觸發(fā)事件一類(lèi)的互動(dòng)器材。這個(gè)實(shí)驗(yàn)中,我們就通過(guò)按鈕的通斷來(lái)控制UNO板上LED燈得亮滅。Mini臺(tái)燈的功能就和臺(tái)燈類(lèi)似,按鈕就像是LED的開(kāi)關(guān),每按一下,就會(huì)切換LED的狀態(tài)。做完之后再給小燈來(lái)個(gè)殼兒,一定很Q。所需元件
1× 數(shù)字食人魚(yú)紅色LED發(fā)光模塊
1×數(shù)字大按鈕模塊
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程165.3Mini臺(tái)燈--數(shù)字大按鈕模塊硬件連接
數(shù)字大按鈕->數(shù)字2
數(shù)字食人魚(yú)紅色LED發(fā)光模塊->數(shù)字13
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程175.3Mini臺(tái)燈--數(shù)字大按鈕模塊輸入代碼樣例代碼3:
//小臺(tái)燈
intbuttonPin=2; //按鈕連接到數(shù)字2
intledPin=13; //LED連接到數(shù)字13
intledState=HIGH; //ledState記錄LED狀態(tài)
intbuttonState; //buttonState記錄按鍵狀態(tài)
intlastButtonState=LOW; //lastbuttonState記錄按鍵前一個(gè)狀態(tài)
longlastDebounceTime=0;
longdebounceDelay=50; //去除抖動(dòng)時(shí)間
voidsetup(){pinMode(buttonPin,INPUT);pinMode(ledPin,OUTPUT);
digitalWrite(ledPin,ledState);
}
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程18voidloop(){//reading用來(lái)存儲(chǔ)buttonPin的數(shù)據(jù)intreading=digitalRead(buttonPin);//一旦檢測(cè)到數(shù)據(jù)發(fā)生變化,記錄當(dāng)前時(shí)間
if(reading!=lastButtonState){lastDebounceTime=millis();
}等待50ms,再進(jìn)行一次判斷,是否和當(dāng)前button狀態(tài)相同如果和當(dāng)前狀態(tài)不相同,改變button狀態(tài)同時(shí),如果button狀態(tài)為高(也就是被按下),那么就改變led的狀態(tài)if((millis()-lastDebounceTime)>debounceDelay){if(reading!=buttonState){buttonState=reading;if(buttonState==HIGH){ledState=!ledState;}}}digitalWrite(ledPin,ledState);//改變button前一個(gè)狀態(tài)值lastButtonState=reading;}下載完代碼,按下按鈕,燈點(diǎn)亮。再按下按鈕,燈熄滅。是不是很像個(gè)小臺(tái)燈?5.3Mini臺(tái)燈--數(shù)字大按鈕模塊硬件分析(數(shù)字輸入—數(shù)字輸出)很明顯,大按鈕是輸入設(shè)備,LED是輸出設(shè)備。和前面感應(yīng)燈類(lèi)似,也是一個(gè)數(shù)字輸入控制一個(gè)數(shù)字輸出。只是形式與代碼有所不同。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程195.3Mini臺(tái)燈--數(shù)字大按鈕模塊代碼回顧由硬件分析可以看出,按鍵是輸入設(shè)備,LED是輸出設(shè)備。pinMode(buttonPin,INPUT);pinMode(ledPin,OUTPUT);
通過(guò)digitalWrite()讀取按鍵的狀態(tài):intreading=digitalRead(buttonPin);
通常的按鍵所用開(kāi)關(guān)為機(jī)械彈性開(kāi)關(guān),當(dāng)機(jī)械觸點(diǎn)斷開(kāi)、閉合時(shí),由于機(jī)械觸點(diǎn)的彈性作用,一個(gè)按鍵開(kāi)關(guān)在閉合時(shí)不會(huì)馬上穩(wěn)定地接通,在斷開(kāi)時(shí)也不會(huì)一下子斷開(kāi)。因而在閉合及斷開(kāi)的瞬間均伴隨有一連串的抖動(dòng),為了不產(chǎn)生這種現(xiàn)象而作的措施就是按鍵消抖,
抖動(dòng)時(shí)間的長(zhǎng)短由按鍵的機(jī)械特性決定,一般為5ms~10ms。這是一個(gè)很重要的時(shí)間參數(shù),在很多場(chǎng)合都要用到,如下圖所示:
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程205.3Mini臺(tái)燈--數(shù)字大按鈕模塊代碼回顧
消抖是為了避免在按鍵按下或是抬起時(shí)電平劇烈抖動(dòng)帶來(lái)的影響。按鍵的消抖,可用硬件或軟件兩種方法。一般來(lái)說(shuō),會(huì)使用軟件方法去抖,即檢測(cè)出鍵閉合后執(zhí)行一個(gè)延時(shí)程序,5ms~10ms的延時(shí),讓前沿抖動(dòng)消失后再一次檢測(cè)鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認(rèn)為真正有鍵按下。當(dāng)檢測(cè)到按鍵釋放后,也要給5ms~10ms的延時(shí),待后沿抖動(dòng)消失后才能轉(zhuǎn)入該鍵的處理程序。軟件消抖的方法是不斷檢測(cè)按鍵值,直到按鍵值穩(wěn)定。實(shí)現(xiàn)方法:假設(shè)未按鍵時(shí)輸入1,按鍵后輸入為0,抖動(dòng)時(shí)不定。可以做以下檢測(cè):檢測(cè)到按鍵輸入為0之后,延時(shí)5ms~10ms,再次檢測(cè),如果按鍵還為0,那么就認(rèn)為有按鍵輸入。延時(shí)的5ms~10ms恰好避開(kāi)了抖動(dòng)期。一旦檢測(cè)到讀取的數(shù)據(jù)發(fā)生變化,通過(guò)millis()函數(shù)記下時(shí)間:if(reading!=lastButtonState){lastDebounceTime=millis();}
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程215.3Mini臺(tái)燈--數(shù)字大按鈕模塊代碼回顧millis()是一個(gè)函數(shù),該函數(shù)是Arduino語(yǔ)言自有的函數(shù),它返回值是一個(gè)時(shí)間,Arduino開(kāi)始運(yùn)行到執(zhí)行到當(dāng)前的時(shí)間,也稱(chēng)之為機(jī)器時(shí)間,就像一個(gè)隱形時(shí)鐘,從控制器開(kāi)始運(yùn)行的那一刻起開(kāi)始計(jì)時(shí),以毫秒為單位。
再等待50ms,再進(jìn)行一次判斷,是否和當(dāng)前button狀態(tài)相同。如果和當(dāng)前狀態(tài)不相同,改變button狀態(tài)。同時(shí),如果button狀態(tài)為高(也就是被按下),那么就改變LED的狀態(tài)。
if((millis()-lastDebounceTime)>debounceDelay){if(reading!=buttonState){
buttonState=reading;
if(buttonState==HIGH){ledState=!ledState;}}}
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程225.4聲控?zé)?-模擬聲音傳感器聲音傳感器是用來(lái)對(duì)周?chē)h(huán)境中的聲音強(qiáng)度進(jìn)行檢測(cè),可以用來(lái)實(shí)現(xiàn)根據(jù)聲音大小進(jìn)行互動(dòng)的效果。MIC(麥克風(fēng))是將聲音信號(hào)轉(zhuǎn)換為電信號(hào)的能量轉(zhuǎn)換器件,換后的電信號(hào)還需要放大器放大才能使用,后而便是一個(gè)300dB的放大器,放大后的模擬信號(hào)大小和聲音強(qiáng)度成正比(AD量化數(shù)值0-500左右)。MIC聲音傳感器上有個(gè)電位器可以調(diào)整輸出信號(hào)的幅度。根據(jù)板子上的指示,Min端是調(diào)小,Max端是調(diào)大。所需元件
1×數(shù)字食人魚(yú)紅色LED發(fā)光模塊
1×
模擬聲音傳感器
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程235.4聲控?zé)?-模擬聲音傳感器硬件連接
模擬聲音傳感器->模擬0
數(shù)字食人魚(yú)紅色LED發(fā)光模塊->數(shù)字13
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程245.4聲控?zé)?-模擬聲音傳感器輸入代碼樣例代碼4://聲控?zé)鬷ntsoundPin=0; //聲音傳感器接到模擬
0intledPin=13; //LED接到數(shù)字13
voidsetup(){pinMode(ledPin,OUTPUT);//Serial.begin(9600); //用于調(diào)試}
voidloop(){intsoundState=analogRead(soundPin); //讀取傳感器的值
//Serial.println(soundState); //串口打印聲音傳感器的值//如果聲音值大于10,亮燈,并持續(xù)10s,否則關(guān)燈if(soundState>10){digitalWrite(ledPin,HIGH);delay(10000);}else{digitalWrite(ledPin,LOW);}}
對(duì)著話筒拍下手,或者說(shuō)句話,試試燈能不能點(diǎn)亮?
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程255.4聲控?zé)?-模擬聲音傳感器硬件分析(模擬輸入—數(shù)字輸出)
前面幾次接觸的都是數(shù)字傳感器,這次要嘗試使用模擬傳感器了,還記得在一開(kāi)始說(shuō)的數(shù)字與模擬的區(qū)別嗎?(串口中認(rèn)識(shí)“數(shù)字”與“模擬”一節(jié))。數(shù)字,只有兩個(gè)值(0/1)。模擬,是線性的,理論上的無(wú)限值(0~1023)。
所以這里是個(gè),模擬輸入,數(shù)字輸出的模式。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程265.4聲控?zé)?-模擬聲音傳感器硬件分析(模擬輸入—數(shù)字輸出)在setup()中只設(shè)置了LED為輸出,為什么沒(méi)有設(shè)置聲音傳感器輸入模式?這是因?yàn)槟M口都是輸入設(shè)置,所以不需要設(shè)置了。
聲音傳感器是輸入設(shè)備,所以需要讀取對(duì)應(yīng)模擬口0的值。與讀取數(shù)字口函數(shù)digitalRead(pin)類(lèi)似,模擬口讀取函數(shù)是:
analogRead(pin)
這個(gè)函數(shù)用于從模擬引腳讀值,pin是指連接的模擬引腳。Arduino的模擬引腳連接到一個(gè)了10位A/D轉(zhuǎn)換,輸入0~5V的電壓對(duì)應(yīng)讀到0~1023的數(shù)值,每個(gè)讀到的數(shù)值對(duì)應(yīng)的都是一個(gè)電壓值。比如512=2.5V。
最后是一個(gè)if判斷,判斷是否到達(dá)你預(yù)設(shè)的值。
if(soundState>10){
...}else{...}
需要修改預(yù)設(shè)值的話,可以打開(kāi)串口監(jiān)視器,看看需要的聲音強(qiáng)度的值在什么范圍,然后做相應(yīng)調(diào)整就可以了。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程275.5呼吸燈--PWM在前面幾章中,我們知道了如何控制LED亮滅。但Arduino還有個(gè)很強(qiáng)大的功能通過(guò)程序來(lái)控制LED的明亮度。ArduinoUNO數(shù)字引腳中有六個(gè)引腳標(biāo)有“~”,這個(gè)符號(hào)就說(shuō)明該口具有PWM功能。動(dòng)手做一下,在做的過(guò)程中體會(huì)PWM的神奇力量!下面就介紹一個(gè)呼吸燈,所謂呼吸燈,就是讓燈有一個(gè)由亮到暗,再到亮的逐漸變化的過(guò)程,感覺(jué)像是在均勻的呼吸。所需元件
1×數(shù)字食人魚(yú)紅色LED發(fā)光模塊
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程285.5呼吸燈--PWM硬件連接
數(shù)字食人魚(yú)紅色LED發(fā)光模塊->數(shù)字10
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程295.5呼吸燈--PWM輸入代碼
樣例代碼5://呼吸燈intledPin=10;
voidsetup(){pinMode(ledPin,OUTPUT);
}
voidloop(){for(intvalue=0;value<255;value=value-1){analogWrite(ledPin,value);
delay(5);
}
for(intvalue=255;value>0;value=value-1){analogWrite(ledPin,value);
delay(5);
}
}代碼下載完成后,我們可以看到LED會(huì)有個(gè)逐漸由亮到滅的一個(gè)緩慢過(guò)程,而不是直接的亮滅,如同呼吸一般,均勻變化。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程305.5呼吸燈--PWM硬件分析(模擬輸出)和項(xiàng)目一(點(diǎn)亮一盞燈)類(lèi)似的裝置,同樣沒(méi)有輸入設(shè)備,只有一個(gè)輸出設(shè)備,但又有所不同。項(xiàng)目一LED是作為數(shù)字輸出,而這里我們是作為模擬輸出。代碼部分會(huì)說(shuō)明。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程315.5呼吸燈--PWM代碼分析我們知道數(shù)字口只有0和1兩個(gè)狀態(tài),那如何發(fā)送一個(gè)模擬值到一個(gè)數(shù)字引腳呢?就要用到該函數(shù)。觀察一下Arduino板,查看數(shù)字引腳,會(huì)發(fā)現(xiàn)其中6個(gè)引腳旁標(biāo)有“~”,這些引腳不同于其他引腳,它們可以輸出PWM信號(hào)。函數(shù)格式如下:analogWrite(pin,value)analogWrite()函數(shù)用于給PWM口寫(xiě)入一個(gè)0~255的模擬值。所以,value是在
0~255之間的值。特別注意的是,analogWrite()函數(shù)只能寫(xiě)入具有PWM功能的數(shù)字引腳,也就是3,5,6,9,10,11引腳。PWM是一項(xiàng)通過(guò)數(shù)字方法來(lái)獲得模擬量的技術(shù)。數(shù)字控制來(lái)形成一個(gè)方波,方波信號(hào)只有開(kāi)關(guān)兩種狀態(tài)(也就是我們數(shù)字引腳的高低)。通過(guò)控制開(kāi)與關(guān)所持續(xù)時(shí)間的比值就能模擬到一個(gè)0到5V之間變化的電壓。開(kāi)(學(xué)術(shù)上稱(chēng)為高電平)所占用的時(shí)間就叫做脈沖寬度,所以PWM也叫做脈沖寬度調(diào)制。通過(guò)下面五個(gè)方波來(lái)更形象的了解一下PWM。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程325.5呼吸燈--PWM代碼分析
上圖綠色豎線代表方波的一個(gè)周期。每個(gè)analogWrite(value)中寫(xiě)入的value都能對(duì)應(yīng)一個(gè)百分比,這個(gè)百分比也稱(chēng)為占空比(DutyCycle),指的是一個(gè)周期內(nèi)高電平持續(xù)時(shí)間比上低電平持續(xù)時(shí)間得到的百分比。圖中,從上往下,第一個(gè)方波,占空比為0%,對(duì)應(yīng)的value為0。LED亮度最低,也就是滅的狀態(tài)。高電平持續(xù)時(shí)間越長(zhǎng),也就越亮。所以,最后一個(gè)占空比為100%的對(duì)應(yīng)value是255,LED最亮。50%就是最亮的一半了,25%則相對(duì)更暗。
PWM比較多的用于調(diào)節(jié)LED燈的亮度?;蛘呤请姍C(jī)的轉(zhuǎn)動(dòng)速度,電機(jī)帶動(dòng)的車(chē)輪速度也就能很容易控制了,在玩一些Arduino小車(chē)時(shí),更能體現(xiàn)PWM的好處。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程335.6燈光調(diào)節(jié)器--模擬角度傳感器所謂燈光調(diào)節(jié)器,就是可以自由控制燈的亮度,這里通過(guò)一個(gè)模擬角度傳感器來(lái)改變LED燈的亮度。隨著旋轉(zhuǎn)角度的變化,LED亮度也發(fā)生相應(yīng)改變。角度越大,LED燈也就越亮,相反,角度越小,LED燈也就越暗。這里只是用了小小的LED來(lái)做演示效果,如果想運(yùn)用到生活之中的話,也是同樣的原理。那就先做個(gè)小型的燈光調(diào)節(jié)器吧!基于電位器的旋轉(zhuǎn)角度傳感器,旋轉(zhuǎn)角度從0到300度,使用8位AD可以將電壓細(xì)分為255份,使用10位AD可以將電壓細(xì)分為1024份,與Arduino傳感器擴(kuò)展板結(jié)介使用,可以精確地實(shí)現(xiàn)角度微小變化,可以非常容易地實(shí)現(xiàn)與旋轉(zhuǎn)位置相關(guān)的互動(dòng)效果或制作MIDI樂(lè)器。
模擬角度傳感器還能用到很多地方,比如后面會(huì)接觸的舵機(jī),可以通過(guò)這個(gè)傳感器來(lái)控制轉(zhuǎn)動(dòng)角度,又或者以后有機(jī)會(huì)接觸直流電機(jī),可以嘗試下用角度傳感器來(lái)控制轉(zhuǎn)速等等。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程345.6燈光調(diào)節(jié)器--模擬角度傳感器所需元件1×數(shù)字食人魚(yú)紅色LED發(fā)光模塊1×模擬角度傳感器
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程355.6燈光調(diào)節(jié)器--模擬角度傳感器硬件連接
模擬角度傳感器->模擬0數(shù)字食人魚(yú)紅色LED發(fā)光模塊->數(shù)字1
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程365.6燈光調(diào)節(jié)器--模擬角度傳感器輸入代碼樣例代碼6://燈光調(diào)節(jié)器 intpotPin=0; //電位器連接到模擬0intledPin=10; //LED連接到數(shù)字10voidsetup(){ pinMode(ledPin,OUTPUT); } voidloop(){intsensorValue=analogRead(potPin); //讀取模擬口0的值//通過(guò)map()把0~1023的值轉(zhuǎn)換為0~255intoutputValue=map(sensorValue,0,1023,0,255);analogWrite(ledPin,outputValue);//給LED寫(xiě)入對(duì)應(yīng)值delay(2);}緩慢旋轉(zhuǎn)電位器,仔細(xì)觀察LED的亮度是否發(fā)生變化。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程375.6燈光調(diào)節(jié)器--模擬角度傳感器硬件分析(模擬輸入—模擬輸出)在呼吸燈一節(jié),我們已經(jīng)學(xué)會(huì)了如何用數(shù)字引腳的PWM口來(lái)做模擬輸出。這一節(jié)將加入互動(dòng)元素,通過(guò)模擬輸入來(lái)控制模擬輸出。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程385.6燈光調(diào)節(jié)器--模擬角度傳感器代碼回顧
這里主要講下map函數(shù)。函數(shù)格式如下:map(value,fromLow,fromHigh,toLow,toHigh)map函數(shù)的作用是將一個(gè)數(shù)從一個(gè)范圍映射到另外一個(gè)范圍。也就是說(shuō),會(huì)將fromLow到fromHigh之間的值映射到toLow在toHigh之間的值。map函數(shù)參數(shù)含義:value:需要映射的值fromLow:當(dāng)前范圍值的下限fromHigh:當(dāng)前范圍值的上限toLow:目標(biāo)范圍值的下限toHigh:目標(biāo)范圍值的上限
map的神奇之處還在于,兩個(gè)范圍中的“下限”可以比“上限”更大或者更小,因此map()函數(shù)可以用來(lái)翻轉(zhuǎn)數(shù)值的范圍,可以這么寫(xiě):y=map(x,1,50,50,1);這個(gè)函數(shù)同樣可以處理負(fù)數(shù),請(qǐng)看下面這個(gè)例子:y=map(x,1,50,50,-100);回到代碼中,intoutputValue=map(sensorValue,0,1023,0,255);將模擬口讀到的0~1023的值,轉(zhuǎn)換為PWM口的0~255。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程395.6燈光調(diào)節(jié)器--模擬角度傳感器舉一反三--互動(dòng)電子鼓用一個(gè)模擬壓電陶瓷震動(dòng)傳感器,簡(jiǎn)單的說(shuō),就是檢測(cè)震動(dòng)的傳感器,原理就是通過(guò)鼓的震動(dòng)來(lái)接收的到不同強(qiáng)弱程度的信號(hào),再把該信號(hào)反饋給控制器,控制器來(lái)實(shí)現(xiàn)燈光變化。
所需元件1×數(shù)字食人魚(yú)紅色LED發(fā)光模塊
1×模擬壓電陶瓷震動(dòng)傳感器
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程405.6燈光調(diào)節(jié)器--模擬角度傳感器運(yùn)行效果
用手輕輕按下陶瓷片,隨著按下力的不同,LED呈現(xiàn)出不同的亮度。也可以把壓電陶瓷片固定在電子鼓上,跟著節(jié)奏,燈光隨之舞動(dòng)。如果細(xì)心的話,可以發(fā)現(xiàn)互動(dòng)電子鼓的做法與燈光調(diào)節(jié)器一節(jié)是完全類(lèi)似的。只是這里變換了一種形式,這也就是傳感器的傳神之處,可以以不同的形式呈現(xiàn)在我們面前。
硬件連接
模擬壓電陶瓷震動(dòng)傳感器->模擬0數(shù)字食人魚(yú)紅色LED發(fā)光模塊->數(shù)字10
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程415.
7火焰報(bào)警器—火焰?zhèn)鞲衅骰鹧鎮(zhèn)鞲衅骺梢杂脕?lái)探測(cè)火源或其它波長(zhǎng)在760納米~1100納米范圍內(nèi)的光源。在滅火機(jī)器人比賽中,火焰探頭起著非常重要的作用,它可以用作機(jī)器人的眼睛來(lái)尋找火源或足球。利用它可以制作滅火機(jī)器人、足球機(jī)器人等。探測(cè)角度達(dá)60度,對(duì)火焰光譜特別靈敏。在廚房安裝一個(gè)火焰報(bào)警器應(yīng)該是非常管用的,如果不小心忘關(guān)煤氣的話,只要有一點(diǎn)點(diǎn)的火苗,就能觸發(fā)火焰報(bào)警器,探測(cè)距離可達(dá)20cm。別看一個(gè)小小的報(bào)警器,說(shuō)不定就能避免一場(chǎng)不必要的意外發(fā)生,何樂(lè)而不為呢?預(yù)備實(shí)驗(yàn)
樣例代碼7-1:
voidsetup0{Serial.begin(9600);//9600bps
}
voidloop(){intval;
val=analogRead(0);Serial.println(val,DEC);delay(100);}2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程42供電電壓為5V時(shí),火焰?zhèn)鞲衅鲗?shí)測(cè)數(shù)據(jù),以一根蠟燭為火源,室內(nèi)打開(kāi)節(jié)能燈實(shí)測(cè):無(wú)火源時(shí),對(duì)著節(jié)能燈:0.3V有火源時(shí),20cm:4.8V30cm:4.6V40cm:3.9VSOcm:2.9V60cm:2.5V70cm:2V80cm:1.5V90cm:1.2V100cm:1V
值得注意的是,火焰?zhèn)鞲衅鞯墓ぷ鳒囟葹橐?5攝氏度-85攝氏度,在使用過(guò)程中應(yīng)注意火焰探頭離火焰的距離小能太近,以免造成損壞。5.
7火焰報(bào)警器—火焰?zhèn)鞲衅魉璨牧?×數(shù)字蜂鳴器模塊
1×火焰?zhèn)鞲衅?/p>
硬件連接
數(shù)字蜂鳴器模塊->數(shù)字口8火焰?zhèn)鞲衅?>模擬口02025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程435.
7火焰報(bào)警器—火焰?zhèn)鞲衅鬏斎氪a//火焰報(bào)警器floatsinVal;
inttoneVal;
voidsetup(){
pinMode(8,OUTPUT); //蜂鳴器引腳設(shè)置
Serial.begin(9600); //設(shè)置波特率為9600bps
}2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程44voidloop(){intsensorValue=analogRead(0);//火焰?zhèn)鞲衅鬟B到模擬口,并從模擬口讀值Serial.println(sensorValue);delay(1);if(sensorValue<490){//如果數(shù)據(jù)小于490,說(shuō)明火源很近,蜂鳴器響for(intx=0;x<180;x++){//將sin函數(shù)角度轉(zhuǎn)化為弧度sinVal=(sin(x*(3.1412/180)));//用sin函數(shù)值產(chǎn)生聲音的頻率toneVal=2000+(int(sinVal*1000));//給引腳8一個(gè)tone(8,toneVal);delay(2);}}else{ //如果數(shù)據(jù)大于等于490,沒(méi)有火源,關(guān)閉蜂鳴器noTone(8); //關(guān)閉蜂鳴器}}
可以試下拿個(gè)打火機(jī)慢慢靠近火焰?zhèn)鞲衅?看看蜂鳴器會(huì)不會(huì)報(bào)警。5.
7火焰報(bào)警器—火焰?zhèn)鞲衅鞔a回顧介紹一下tone相關(guān)的三個(gè)函數(shù)
(1)tone(pin,frequency)Pin都是指連接到蜂鳴器的數(shù)字引腳,frequency是以Hz為單位的頻率值。
(2)tone(pin,frequency,duration)第二個(gè)函數(shù),有個(gè)duration參數(shù),它是以毫秒為單位,表示聲音長(zhǎng)度的參數(shù)。像第一個(gè)函數(shù),如果沒(méi)有指定duration,聲音將一直持續(xù)直到輸出一個(gè)不同頻率的聲音產(chǎn)生。
(3)noTone(pin)noTone(pin)函數(shù),結(jié)束該指定引腳上產(chǎn)生的聲音。2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程455.
8夜光盒--舵機(jī)夜光寶盒,聽(tīng)著名字是不是很好玩,實(shí)際也是這么好玩兒!本節(jié)要做的這個(gè)盒子,在白天是閉合的,一旦進(jìn)入了深夜,就開(kāi)始慢慢張開(kāi),燈光也會(huì)慢慢變亮,好似一顆“夜明珠”,一旦到了白天,又慢慢合上了。原理是通過(guò)一個(gè)模擬環(huán)境光傳感器,來(lái)檢測(cè)環(huán)境光線強(qiáng)弱,隨著亮度的不同,輸出值不同。到了晚上的設(shè)定值,就轉(zhuǎn)動(dòng)舵機(jī)角度,LED同時(shí)慢慢變亮。預(yù)備實(shí)驗(yàn)
舵機(jī)是一種電機(jī),它使用一個(gè)反饋系統(tǒng)來(lái)控制電機(jī)的位置。可以很好掌握電機(jī)角度。大多數(shù)舵機(jī)是可以最大旋轉(zhuǎn)180°的。也有一些能轉(zhuǎn)更大角度,甚至360°。舵機(jī)比較多的用于對(duì)角度有要求的場(chǎng)合,比如攝像頭,智能小車(chē)前置探測(cè)器,需要在某個(gè)范圍內(nèi)進(jìn)行監(jiān)測(cè)的移動(dòng)平臺(tái)。又或者把舵機(jī)放到玩具,讓玩具動(dòng)起來(lái)。還可以用多個(gè)舵機(jī),做個(gè)小型機(jī)器人,舵機(jī)就可以作為機(jī)器人的關(guān)節(jié)部分。所以,舵機(jī)的用處很多。Ardruino提供了<Servo.h>庫(kù)2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程465.
8夜光盒--舵機(jī)1、實(shí)現(xiàn)舵機(jī)0~180°來(lái)回轉(zhuǎn)動(dòng)#include<Servo.h>//聲明調(diào)用Servo.h庫(kù)Servomyservo;//創(chuàng)建一個(gè)舵機(jī)對(duì)象voidsetup(){myservo.attach(9);//將引腳9上的舵機(jī)與聲明的舵機(jī)對(duì)象連接起來(lái)}voidloop(){for(inti=0;i<180;i++){myservo.write(i);//給舵機(jī)寫(xiě)入角度delay(15);//延時(shí)15ms讓舵機(jī)轉(zhuǎn)到指定位置}for(inti=180;i>=0;i--){myservo.write(i);//給舵機(jī)寫(xiě)入角度delay(15);//延時(shí)15ms讓舵機(jī)轉(zhuǎn)到指定位置}}下載代碼成功后可以看到舵機(jī)0~180。來(lái)回轉(zhuǎn)動(dòng)。2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程475.
8夜光盒--舵機(jī)2、可控舵機(jī)#include<Servo.h>//聲明調(diào)用Servo.h庫(kù)Servomyservo;//創(chuàng)建一個(gè)舵機(jī)對(duì)象intpotpin=0;//連接到模擬口0intval;//變量val用來(lái)存儲(chǔ)從模擬口0讀到的值voidsetup(){myservo.attach(9);//將引腳9上的舵機(jī)與聲明的舵機(jī)對(duì)象連接起來(lái)}voidloop(){val=analogRead(potpin);//從模擬口0讀值,并通過(guò)val記錄val=map(val,0,1023,0,179);//通過(guò)map函數(shù)進(jìn)行數(shù)值轉(zhuǎn)換myservo.write(val);//給舵機(jī)寫(xiě)入角度delay(15);//延時(shí)15ms讓舵機(jī)轉(zhuǎn)到指定位置}下載代碼,成功后,旋轉(zhuǎn)電位器,看看舵機(jī)是不是隨著電位器轉(zhuǎn)動(dòng)。2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程485.
8夜光盒--舵機(jī)所需材料
1× 模擬環(huán)境光線傳感器
1× TowerProSG50舵機(jī)
1× 數(shù)字食人魚(yú)紅色LED發(fā)光模塊2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程495.
8夜光盒--舵機(jī)硬件連接TowerProSG50->數(shù)字口9模擬環(huán)境光線傳感器->模擬口0
數(shù)字食人魚(yú)紅色LED發(fā)光模塊->數(shù)字口
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程505.
8夜光盒--舵機(jī)輸入代碼樣例代碼8:
#include<Servo.h>
Servomyservo;
intLED=3; //設(shè)置LED燈為數(shù)字引腳
3
intval=0; //val存儲(chǔ)環(huán)境光傳感器的值
intpos=0;intlight=0;voidsetup(){
pinMode(LED,OUTPUT); //LED為輸出模式
Serial.begin(9600); //串口波特率設(shè)置為
9600
myservo.attach(9); //舵機(jī)接到數(shù)字口
9
myservo.write(0); //初始角度為
0
}
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程51voidloop(){val=analogRead(0); //讀取傳感器的值Serial.println(val); //串口查看電壓值的變化if(val<40){ //一旦小于設(shè)定的值,增加角度pos=pos+2;if(pos>=90){ //轉(zhuǎn)到了90°后,就保持90°pos=90;}myservo.write(pos); //寫(xiě)入舵機(jī)的角度delay(100);light=map(pos,0,90,0,255); //隨角度增大,LED亮度增大analogWrite(LED,light); //寫(xiě)入亮度值}else{pos=pos-2; //減2°if(pos<=0){pos=0; //減到0°為止}myservo.write(pos); //寫(xiě)入舵機(jī)的角度delay(100);light=map(pos,0,90,0,255);//隨角度減小,LED亮度減小analogWrite(LED,light);//寫(xiě)入亮度值}}5.
9遙控?zé)簟t外接收傳感器我們知道家里的那些遙控器,不管是電視還是空調(diào)都是通過(guò)紅外來(lái)控制的。本節(jié)通過(guò)紅外做個(gè)遙控?zé)簦O(shè)定遙控器的“紅色電源鍵”來(lái)控制LED的開(kāi)關(guān),當(dāng)然學(xué)完這一節(jié)后,也可以用其他的按鈕來(lái)代替。在開(kāi)始遙控?zé)糁埃葋?lái)個(gè)預(yù)備實(shí)驗(yàn),通過(guò)串口來(lái)了解下如何使用紅外接收管和遙控器。預(yù)備實(shí)驗(yàn):
所需材料
1×數(shù)字紅外接收模塊
1×Mini遙控器
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程525.
9遙控?zé)簟t外接收傳感器硬件連接數(shù)字紅外接收模塊->數(shù)字口
10輸入代碼這段代碼,可以不用自己手動(dòng)輸入,利用現(xiàn)成的IRremote庫(kù),把整個(gè)庫(kù)的壓縮包解壓到ArduinoIDE安裝位置Arduino1.0.5/libraries文件夾中。如下圖所示。直接運(yùn)行Example中的IRrecvDemo代碼即可。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程535.
9遙控?zé)簟t外接收傳感器樣例代碼9-1://這段代碼來(lái)自IRremote庫(kù)中examples中的IRrecvDemo//紅外接收管#include<IRremote.h> //調(diào)用IRremote.h庫(kù)intRECV_PIN=10; //定義RECV_PIN變量為10IRrecvirrecv(RECV_PIN);//設(shè)置RECV_PIN(也就是11引腳)為紅外接收端decode_resultsresults;//定義results變量為紅外結(jié)果存放位置voidsetup(){//串口波特率設(shè)為9600//啟動(dòng)紅外解碼Serial.begin(9600);irrecv.enableIRIn();}voidloop(){//是否接收到解碼數(shù)據(jù),把接收到的數(shù)據(jù)存儲(chǔ)在變量results中if(irrecv.decode(&results)){//接收到的數(shù)據(jù)以16進(jìn)制的方式在串口輸出Serial.println(results.value,HEX);irrecv.resume();//繼續(xù)等待接收下一組信號(hào)}}2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程545.
9遙控?zé)簟t外接收傳感器下載完成后,打開(kāi)ArduinoIDE的串口監(jiān)視器(SerialMonitor),設(shè)置波特率
baud為
9600,與代碼中Serial.begin(9600)相匹配。
設(shè)置完后,用Mini遙控器的按鈕對(duì)著紅外接收管的方向,任意按個(gè)按鈕,都能在串口監(jiān)視器上看到相對(duì)應(yīng)的代碼。如下圖所示,按數(shù)字“0”,接收到對(duì)應(yīng)16進(jìn)制的代碼是FD30CF。每個(gè)按鈕都有一個(gè)特定的16進(jìn)制的代碼。
如果按住常按一個(gè)鍵不放就是出現(xiàn)“FFFFFFFF”。在串口中,正確接收的話,應(yīng)該收到以FD-開(kāi)頭的六位數(shù)。如果遙控器沒(méi)有對(duì)準(zhǔn)紅外接收管的話,可能會(huì)接收到錯(cuò)誤的代碼。2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程555.
9遙控?zé)簟t外接收傳感器遙控?zé)羲璨牧?/p>
1× 數(shù)字食人魚(yú)紅色LED發(fā)光模塊
1× 數(shù)字紅外接收模塊
1× Mini遙控器
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程565.
9遙控?zé)簟t外接收傳感器硬件連接其實(shí)就是在原有的基礎(chǔ)上,加了個(gè)LED,LED使用的是數(shù)字引腳10。紅外接收管仍然接的是數(shù)字引腳3。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程575.
9遙控?zé)簟t外接收傳感器輸入代碼
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程58樣例代碼9-2:
#include<IRremote.h>intRECV_PIN=10;intledPin=3;booleanledState=LOW;IRrecvirrecv(RECV_PIN);decode_resultsresults;voidsetup(){
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(ledPin,OUTPUT); //設(shè)置LED為輸出狀態(tài)
}voidloop(){
if(irrecv.decode(&results)){Serial.println(results.value,HEX);
//一旦接收到電源鍵的代碼,LED翻轉(zhuǎn)狀態(tài),HIGH變LOW,或者LOW變HIGH
if(results.value==0xFD00FF){ledState=!ledState;digitalWrite(ledPin,ledState);}
irrecv.resume();}}5.
10數(shù)字骰子—Shiftout模塊+數(shù)碼管數(shù)碼管,常見(jiàn)的用來(lái)顯示數(shù)字的,比如像計(jì)算器。數(shù)碼管,其實(shí)也算是LED中的一種。數(shù)碼管的每一段,都是一個(gè)獨(dú)立的LED,通過(guò)和Shiftout模塊連用,控制相應(yīng)段的亮滅就能達(dá)到顯示數(shù)字的效果。本節(jié)內(nèi)容利用二者來(lái)實(shí)現(xiàn)數(shù)字骰子的效果。
所需元件
1× 數(shù)字大按鈕模塊
1×數(shù)碼管1×Shiftout模塊
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程595.
10數(shù)字骰子—Shiftout模塊+數(shù)碼管硬件連接把數(shù)碼管插到Shiftout模塊上,插的時(shí)候注意引腳一一對(duì)應(yīng)。數(shù)碼管中“D”所在排連接到Shiftout的綠色引腳上,“+”對(duì)應(yīng)紅色VCC,“-”對(duì)應(yīng)黑色GND。Input相應(yīng)接到UNO的數(shù)字口。數(shù)字大按鈕模塊接到數(shù)字口2。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程605.
10數(shù)字骰子—Shiftout模塊+數(shù)碼管輸入代碼
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程61樣例代碼10:
//數(shù)字骰子
intlatchPin=8;//數(shù)字口8連接到74HC595芯片的使能引腳intclockPin=3;//數(shù)字口3連接到74HC595芯片的時(shí)鐘引腳intdataPin=9;//數(shù)字口9連接到74HC595芯片的數(shù)據(jù)引腳intbuttonPin=2;//按鈕連接到數(shù)字口2
//代表數(shù)字0~9byteTab[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};intnumber;
longrandNumber;voidsetup(){pinMode(latchPin,OUTPUT);pinMode(dataPin,OUTPUT);pinMode(clockPin,OUTPUT);randomSeed(analogRead(0)); //設(shè)置一個(gè)隨機(jī)數(shù)產(chǎn)生源模擬口
0}voidloop(){
randNumber=random(10);//產(chǎn)生0~9之間的隨機(jī)數(shù)showNumber(randNumber);//顯示該隨機(jī)數(shù)
//一旦有按鍵按下,顯示該數(shù),并保持到松開(kāi)為止while(digitalRead(buttonPin)==HIGH){delay(100);}}//該函數(shù)用于數(shù)碼管顯示
voidshowNumber(intnumber){digitalWrite(latchPin,LOW);shiftOut(dataPin,clockPin,MSBFIRST,Tab[number]);digitalWrite(latchPin,HIGH);delay(80);}
數(shù)碼管會(huì)隨機(jī)產(chǎn)生0~9之間的數(shù),每次按下按鈕都會(huì)是不同的數(shù)。5.
10數(shù)字骰子—Shiftout模塊+數(shù)碼管硬件分析Shiftout模塊
Shiftout模塊就是一塊74HC595芯片。如果要看懂代碼,那就需要對(duì)74HC595芯片的工作原理有個(gè)簡(jiǎn)單認(rèn)識(shí)。74HC595實(shí)現(xiàn)了串行輸入轉(zhuǎn)并行輸出的功能。
先說(shuō)下什么是串行與并行。下圖可以簡(jiǎn)單看出串行與并行的區(qū)別。串行,是一個(gè)一個(gè)數(shù)往發(fā),而并行是8位數(shù)一道往外發(fā)的。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程625.
10數(shù)字骰子—Shiftout模塊+數(shù)碼管硬件分析數(shù)碼管數(shù)碼管其實(shí)就是8個(gè)LED,每一段都是一個(gè)獨(dú)立的LED,一共是8段。一個(gè)74HC595芯片輸出正好也是8位,所以可以用74HC595的輸出正好可以控制一個(gè)LED模塊。
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程635.
11實(shí)時(shí)溫濕度檢測(cè)器—溫濕度傳感器+I2CLCD1602液晶模塊本節(jié)來(lái)實(shí)現(xiàn)一個(gè)實(shí)時(shí)溫濕度檢測(cè)器,只需要一個(gè)DHT11溫濕度傳感器就能做到,再外加個(gè)1602的顯示屏,實(shí)時(shí)查看數(shù)據(jù)。如果外加網(wǎng)絡(luò)模板,數(shù)據(jù)不僅能實(shí)時(shí)顯示,還能放到網(wǎng)上,或者通過(guò)微博發(fā)布出去,是不是很心動(dòng)了呢?那就先做個(gè)最簡(jiǎn)單的,本地實(shí)時(shí)顯示數(shù)據(jù)。所需材料1×DHT11溫濕度傳感器
1×I2CLCD1602液晶模塊
2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程645.
11實(shí)時(shí)溫濕度檢測(cè)器—溫濕度傳感器+I2CLCD1602液晶模塊
硬件連接DHT11溫濕度傳感器->數(shù)字口4LCDGND->GNDLCDVCC->5VLCDSDA->SDALCDSCL->SCLA0,A1,A2全部插上跳冒2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程655.
11實(shí)時(shí)溫濕度檢測(cè)器—溫濕度傳感器+I2CLCD1602液晶模塊
輸入代碼下載代碼之前,把庫(kù)“dht11”和“LiquidCrystal_I2C”放入ArduinoIDE的libraries中。代碼回顧LiquidCrystal_I2Clcd(0x20,16,2);0x20:I2C地址:短路帽插上為0,拔掉為12025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程665.
11實(shí)時(shí)溫濕度檢測(cè)器—溫濕度傳感器+I2CLCD1602液晶模塊
代碼回顧16:每行16個(gè)字符
2:共2行2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程675.
12智能家居–中文語(yǔ)音識(shí)別模塊VoiceRecognitionV1.1
晚上回到家,家里黑漆漆一片,得找到開(kāi)燈的按鈕才算完事,有時(shí)候在想,如果燈泡會(huì)聽(tīng)話該多好啊,有了這個(gè)想法,智能家居就應(yīng)運(yùn)而生了,用Arduino打造這么一款智能家居,需要開(kāi)燈的時(shí)候,你只需用標(biāo)準(zhǔn)的普通話說(shuō)“開(kāi)~~燈~(yú)~”,燈會(huì)被點(diǎn)亮,說(shuō)“關(guān)~~燈~(yú)~”,燈就會(huì)熄滅。
所需材料1×中文語(yǔ)音識(shí)別模塊
1×數(shù)字食人魚(yú)紅色LED發(fā)光模塊
硬件連接2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程685.
12智能家居–中文語(yǔ)音識(shí)別模塊VoiceRecognitionV1.1輸入代碼2025/2/7Arduino零基礎(chǔ)C語(yǔ)言編程69樣例代碼12:#代碼所需庫(kù)文件voiceRecognition#include<avr/wdt.h>#include<VoiceRecognition.h>VoiceRecognitionVoice;#defineLed8//定義Led引腳為8
voidsetup(){Serial.begin(9600);pinMode(Led,OUTPUT);//初始化LED引腳為輸出模式digitalWrite(Led,LOW);//LED引腳低電平Voice.init();//初始化VoiceRecognition模塊
Voice.addCommand("kaideng",0);//添加指令,參數(shù)1:指令內(nèi)容,參數(shù)2:指令標(biāo)簽(可重復(fù))
//如“北京”和“首都”代表同樣含義,則可共用標(biāo)簽。無(wú)返回Voice.addCommand("guandeng",1);//添加指令,參數(shù)(指令內(nèi)容,指令標(biāo)簽(可重復(fù)))
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 印刷服務(wù)合同
- 手破碎機(jī)設(shè)備買(mǎi)賣(mài)合同
- 聘用出納合同增加多場(chǎng)景
- 生產(chǎn)車(chē)間承包合同協(xié)議
- 機(jī)械工程勞務(wù)分包合同
- 河北化工醫(yī)藥職業(yè)技術(shù)學(xué)院《中學(xué)生物課堂教學(xué)技能訓(xùn)練》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州華立科技職業(yè)學(xué)院《數(shù)據(jù)挖掘與決策管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 寧波衛(wèi)生職業(yè)技術(shù)學(xué)院《界面化學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 宜春學(xué)院《需求工程》2023-2024學(xué)年第二學(xué)期期末試卷
- 宿州職業(yè)技術(shù)學(xué)院《水質(zhì)工程學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 蘋(píng)果樹(shù)病蟲(chóng)害防治
- 中國(guó)空白地圖(打印)
- 成品半成品倉(cāng)庫(kù)管理制度
- 《產(chǎn)品設(shè)計(jì)》(北希望)教學(xué)資料 課程標(biāo)準(zhǔn) 產(chǎn)品設(shè)計(jì)課程標(biāo)準(zhǔn)
- 部編版語(yǔ)文四年級(jí)下冊(cè)第7單元核心素養(yǎng)教案
- 幼兒園垃圾分類(lèi)PPT
- 申請(qǐng)?zhí)崛∽》抗e金個(gè)人授權(quán)、承諾書(shū)(樣表)
- 施工作業(yè)申請(qǐng)表
- 浸出液的凈化與沉積
- 銀行間本幣市場(chǎng)交易員資格考試真題模擬匯編(共586題)
- 苯乙酸安全技術(shù)說(shuō)明書(shū)(msds)
評(píng)論
0/150
提交評(píng)論