和12岁小同志搞创客开发:手撕代码,做一款声控灯
機緣巧合在網上認識一位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接到數字13void 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"
總結
以上是生活随笔為你收集整理的和12岁小同志搞创客开发:手撕代码,做一款声控灯的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 和12岁小同志搞创客开发:手撕代码,做一
- 下一篇: Python Qt GUI设计:QScr