機緣巧合在網上認識一位12歲小同志,從零開始系統輔導其創客開發思維和技巧,

專案專欄:https://blog.csdn.net/m0_38106923/category_11097422.html
之前兩篇博文主要是數字量輸入、輸出型別傳感器的驅動,
和12歲小同志搞創客開發:手撕代碼,點亮LED燈
和12歲小同志搞創客開發:手撕代碼,做一款人體感應燈
本篇博文講講模擬量傳感器的驅動,
小時候有沒有對走廊的聲控燈很感興趣呢?會不會拼命的跺腳只為讓那盞燈點亮,本篇博文我們使用聲音傳感器做個這樣的聲控燈,只要你輕輕拍下手,燈就自動亮起來了,沒了聲音,燈就又自動關了,
MIC聲音傳感器是一款基于麥克風為聲音檢測的傳感器,可用來對周圍環境中的聲音強度進行檢測,具有300倍的放大器,輸出模擬信號能使用3.3V和5V為基準AD采集,可以用來實作根據聲音大小進行互動的效果、制作聲控機器人、聲控開關、聲控報警等,

傳感器連線效果如下所示:

實作代碼如下所示:
int soundPin = 0; //聲音傳感器接到模擬0
int ledPin = 13; //LED接到數字13
void setup() {
pinMode(ledPin, OUTPUT);
// Serial.begin(9600); //用于除錯
}
void loop(){
int soundState = analogRead(soundPin); //讀取傳感器的值
// Serial.println(soundState); //串口列印聲音傳感器的值
//如果聲音值大于10,亮燈,并持續10s,否則關燈
if (soundState > 10) {
digitalWrite(ledPin, HIGH);
delay(10000);
}else{
digitalWrite(ledPin, LOW);
}
}
在setup()中只設定了LED為輸出,由于聲音傳感器模擬口都是輸入設定,所以不需要設定了,
聲音傳感器是輸入設備,所以需要讀取對應模擬口IO的值,與讀取數字口函式digitalRead(pin)類似,模擬口讀取函式如下所示:
analogRead(pin)
這個函式用于從模擬引腳讀值,pin是指連接的模擬引腳,Arduino的模擬引腳連接到一個了10位AD轉換,輸入0~5V的電壓對應讀到0~1023的數值,每個讀到的數值對應的都是一個電壓值,比如:ADC數值512代表電壓2.5V,
為了方便調測,程式中添加了串口監視器功能,需要修改預設值的話,可以打開串口監視器,看看你需要的聲音強度的值在什么范圍,然后做相應調整就可以了,
begin()函式實作打開串口,設定通信波特率,原型如下所示:
void HardwareSerial::begin (long speed)
speed:波特率數值
常用串口波特率包括:4800、9600、19200、38400、115200等,
print()函式和println()函式實作往串口發資料,只是print()函式沒有換行功能而println()函式有換行,它們以ASCII碼形式向串口發送資料,整數的每一數位將以ASCII碼形式發送;浮點數同樣以ASCII碼形式發送,默認保留小數點后兩位;位元組型資料將以單個字符形式發送;字符和字串會以其相應的形式發送,例如以下示例:
Serial.print(78) 發送 "78"
Serial.print(1.23456) 發送 "1.23"
Serial.print('N') 發送 "N"
Serial.print("Hello world.") 發送 "Hello world."
print()函式和println()函式還有可選的第二個引數用于指定資料的格式,允許的值為:BIN (binary二進制), OCT(octal八進制),DEC(decimal十進制),HEX(hexadecimal十六進制),對于浮點數,該引數指定小數點的位數,例如以下示例:
Serial.print(78, BIN) gives "1001110"
Serial.print(78, OCT) gives "116"
Serial.print(78, DEC) gives "78"
Serial.print(78, HEX) gives "4E"
Serial.println(1.23456, 0) gives "1"
Serial.println(1.23456, 2) gives "1.23"
Serial.println(1.23456, 4) gives "1.2346"
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357170.html
標籤:其他
