Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 9650|回復: 8
打印 上一主題 下一主題

arduino MEGA2560&&聲音檢測器模組 問題 求解

[複製鏈接]
跳轉到指定樓層
1#
發表於 2014-11-27 20:39:04 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
下面是我所使用的聲音檢測器模組的電路圖與介紹
但是我一直對麥克風講話都
無法從麥克風這部放取得值的變化
但是如果對麥克風吹風才能取得值的變化


我有識過判斷比較完的DO值
也有試過判斷從麥克風輸出得值
但對麥克風講話都不會有什麼反應
(距離很短也是)


int DO = 2;
int AO = AO;
int val;
int count=0;

void setup(){
  Serial.begin(9600);
pinMode(DO, INPUT);
}
void loop(){
  Serial.print("val:");
  val= analogRead(AO);
  Serial.println(val);



  if(val==LOW){
   count++;
  Serial.print("val:");
  Serial.println(val);
  Serial.print("count:");
  Serial.println(count);
delay(300);

}
else{
Serial.print("Sound too small     ");
Serial.println(val);
delay(300);
}

}

聲音傳感器模組聲音檢測模組 (1).pdf

89.61 KB, 下載次數: 2561

高感度?音??模?.pdf

473.89 KB, 下載次數: 3100

2#
發表於 2014-11-27 22:38:07 | 只看該作者
可以請拍一下照片你怎麼接的嗎?
3#
發表於 2014-11-27 23:28:34 | 只看該作者
本帖最後由 ates1687 於 2014-11-27 23:33 編輯



int DO = 2;      
int AO = AO;   
int val;
int val1;       //建立數位的存取數值
int count=0; //<-不懂為什麼要宣告count @@?

void setup(){
  Serial.begin(9600);
  pinMode(DO, INPUT);
  pinMode(AO, INPUT);     //<-沒有宣告AO為類比輸入(關鍵是這一個)
}
void loop(){
  Serial.print("val:");
  val= analogRead(AO);
  
val1= digitalRead(DO)    //<-建議建立數位讀取,因為你都宣告int DO = 2;
  Serial.println(val);

if(val==LOW){              //應該改成" if(val==HIGH){ "  or  " if(val>0){ "
    count++;
  Serial.print("val:/n");     // "/n"方便看而已,代表自動換行
  Serial.println(val);         //顯示類比電壓
  Serial.print("count:/n");
  Serial.println(count);
  delay(300);
  }else{                              //就是val=LOW(沒有聲音的時候)<-只是註解,個人習慣這樣><"
  Serial.print("Sound too small     "); //顯示"聲音太小了"
  Serial.println(val);
  delay(300);
  }
}
-------------------------------------------------(文章分割線)
以上程式是參考用,錯了希望能糾正,給予回復者進步的空間!


以下是個人意見:(還是僅供參考,錯了在糾正↑)
analogRead代表類比輸入,讀取的數值假設是1~1025

digitalRead代表數位輸入,讀取的數值應該是0 1 高 低
你那個麥克風模組有兩個腳位分別是DO跟AO

AO就要接類比輸入,DO就要接數位輸入

DO判斷式:
if(val1==HIGH){  
//HIGH=有聲音,LOW=沒有聲音

AO判斷式:
if(val>50){          //當聲音到達"程度的音量",要看讀取的analogRead數值,自由發揮想要做什麼事
4#
發表於 2014-11-29 23:34:22 | 只看該作者
ㄟ.....那個
1.  pinMode(AO, INPUT);  <<< 這行完全不必要,analog 是不需要設定的,除非你想把他變digital腳位
2.  Serial.println(val);   就能自動換行,並不需要換行控制碼,且C語言的換行是\n
3. analogRead回來的數值介於0~1023 (10bit 解析度)

另外這種麥克風受環境音的影響滿大,所以通常要很接近,或是叫很大聲/拍手很大聲
5#
 樓主| 發表於 2014-11-30 16:03:54 | 只看該作者
謝謝大家 ~  可以測了  但是測量距離只有5CM  是否有什麼方法可以增長距離!!??
6#
發表於 2014-11-30 17:32:27 | 只看該作者
以我的看法,因為你是買模組,所以你的硬體是被"綁死"的,
所以AO那個腳位,在接放大倍率的IC,如ua741(OPA)這一顆看看,
可是需要接示波器,你要增長的不是距離,而是把接收"更微小"的訊號放大
但是越大會越受到"環境音"的影響更大,所以要斟酌一下放大倍率!
7#
 樓主| 發表於 2014-12-1 09:48:11 | 只看該作者
這模組有人會使用嗎@@?  
比上一個難 我看不太懂
http://tw.taobao.com/item/14631027643.htm?fromSite=main

file:///F:/Sound%20Sensor(6)/%E9%9B%BB%E8%B7%AF%E5%9C%96.png

電路圖.png (123.24 KB, 下載次數: 476)

電路圖.png
8#
發表於 2014-12-1 18:38:27 | 只看該作者
既然是模組的話,我是不太建議說去做任何更動!
9#
 樓主| 發表於 2014-12-2 17:50:47 | 只看該作者
這是我在測試版子的程式碼:
int OUT = 2;      
int FIN = A0;
int FOUT = A1;
int ROUT = A2; // 放大
int val;
int count;
void setup(){
  Serial.begin(9600);
  pinMode(OUT, INPUT);
  pinMode(FIN, OUTPUT);
  pinMode(FOUT, INPUT);
  pinMode(ROUT, OUTPUT);
}
void loop(){
  val= digitalRead(OUT);
  //anval=analogRead(A0);  
if(val==LOW){   //當val為低電位時
  count++;
  Serial.print("SEND MAIL\n");
Serial.println(count);
}
Serial.println(FIN);
Serial.println(FOUT);
Serial.println(ROUT);
Serial.print("-------------\n");
delay(1000);
}



結果:
54
55
56
-------------
54
55
56
-------------
54
55
56
-------------
54
55
56
-------------
54
55
56
-------------
54
55
56
-------------


問題:
(1) FIN FOUT ROUT 值都沒變化是正常的嗎??
(2) 麥克風 W503調到在一點點就可以讓OUT產生低電位 但是當低電話產生後他無法重置 會永遠保持低電位
     W503 調多一點的話就無法到低電位  不懂哪邊有設定錯誤或是沒有增測到需要的值
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-11-22 00:35 , Processed in 0.187476 second(s), 9 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表