Robofun 機器人論壇

標題: arduino MEGA2560&&聲音檢測器模組 問題 求解 [打印本頁]

作者: 小迪    時間: 2014-11-27 20:39
標題: arduino MEGA2560&&聲音檢測器模組 問題 求解
下面是我所使用的聲音檢測器模組的電路圖與介紹
但是我一直對麥克風講話都
無法從麥克風這部放取得值的變化
但是如果對麥克風吹風才能取得值的變化


我有識過判斷比較完的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, 下載次數: 2564

高感度?音??模?.pdf

473.89 KB, 下載次數: 3103


作者: ates1687    時間: 2014-11-27 22:38
可以請拍一下照片你怎麼接的嗎?
作者: ates1687    時間: 2014-11-27 23:28
本帖最後由 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數值,自由發揮想要做什麼事

作者: mzw2008    時間: 2014-11-29 23:34
ㄟ.....那個
1.  pinMode(AO, INPUT);  <<< 這行完全不必要,analog 是不需要設定的,除非你想把他變digital腳位
2.  Serial.println(val);   就能自動換行,並不需要換行控制碼,且C語言的換行是\n
3. analogRead回來的數值介於0~1023 (10bit 解析度)

另外這種麥克風受環境音的影響滿大,所以通常要很接近,或是叫很大聲/拍手很大聲
作者: 小迪    時間: 2014-11-30 16:03
謝謝大家 ~  可以測了  但是測量距離只有5CM  是否有什麼方法可以增長距離!!??
作者: ates1687    時間: 2014-11-30 17:32
以我的看法,因為你是買模組,所以你的硬體是被"綁死"的,
所以AO那個腳位,在接放大倍率的IC,如ua741(OPA)這一顆看看,
可是需要接示波器,你要增長的不是距離,而是把接收"更微小"的訊號放大
但是越大會越受到"環境音"的影響更大,所以要斟酌一下放大倍率!
作者: 小迪    時間: 2014-12-1 09:48
這模組有人會使用嗎@@?  
比上一個難 我看不太懂
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, 下載次數: 477)

電路圖.png

作者: ates1687    時間: 2014-12-1 18:38
既然是模組的話,我是不太建議說去做任何更動!
作者: 小迪    時間: 2014-12-2 17:50
這是我在測試版子的程式碼:
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 調多一點的話就無法到低電位  不懂哪邊有設定錯誤或是沒有增測到需要的值




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2