Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz

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

查看數: 8976 | 評論數: 8 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發佈時間: 2014-11-27 20:39

正文摘要:

下面是我所使用的聲音檢測器模組的電路圖與介紹 但是我一直對麥克風講話都 無法從麥克風這部放取得值的變化 但是如果對麥克風吹風才能取得值的變化 我有識過判斷比較完的DO值 也有試過判斷從麥克風輸出得值 但對麥 ...

回復

小迪 發表於 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 調多一點的話就無法到低電位  不懂哪邊有設定錯誤或是沒有增測到需要的值
ates1687 發表於 2014-12-1 18:38:27
既然是模組的話,我是不太建議說去做任何更動!
ates1687 發表於 2014-11-30 17:32:27
以我的看法,因為你是買模組,所以你的硬體是被"綁死"的,
所以AO那個腳位,在接放大倍率的IC,如ua741(OPA)這一顆看看,
可是需要接示波器,你要增長的不是距離,而是把接收"更微小"的訊號放大
但是越大會越受到"環境音"的影響更大,所以要斟酌一下放大倍率!
小迪 發表於 2014-11-30 16:03:54
謝謝大家 ~  可以測了  但是測量距離只有5CM  是否有什麼方法可以增長距離!!??
mzw2008 發表於 2014-11-29 23:34:22
ㄟ.....那個
1.  pinMode(AO, INPUT);  <<< 這行完全不必要,analog 是不需要設定的,除非你想把他變digital腳位
2.  Serial.println(val);   就能自動換行,並不需要換行控制碼,且C語言的換行是\n
3. analogRead回來的數值介於0~1023 (10bit 解析度)

另外這種麥克風受環境音的影響滿大,所以通常要很接近,或是叫很大聲/拍手很大聲
ates1687 發表於 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數值,自由發揮想要做什麼事
ates1687 發表於 2014-11-27 22:38:07
可以請拍一下照片你怎麼接的嗎?

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

GMT+8, 2024-5-21 20:58 , Processed in 0.350783 second(s), 11 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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