搜尋此網誌

2014年5月14日 星期三

利用麥克風產生動感炫光效果

前一陣子,在 Youtube 看到這小東西

簡單的幾個元件,成果看起來蠻炫的,剛好也可以趁這個實作來了解如何使用麥克風和運算放大器。所以就決定馬上做一個來玩玩,不過,這個馬上似乎有點久,一晃眼,就一個月了…….XD
這個星期六日,腦海中突想想起這個小玩具,二話不說,馬上動手.....(亡羊補牢猶未晚矣...XD



麥克風大致上分成:
動圈式:參考

主要的構造是線圈(3),振膜(2),永久磁鐵(4),當聲波(1)進入麥克風時,振膜受到聲波的壓力而產生振動,與振膜連接在一起的線圈則開始在磁場中移動,因法拉第定律以及楞次定律,線圈會產生感應電流(5),進而得到聲音的變化。


電容式:

主要是靠著電容兩片隔板間距離的改變來產生電壓變化。當聲波進入麥克風,振膜(2)產生振動,而基板(3)是固定的,使得振膜和基板間的距離會隨著振動而改變,進而使得電容值改變,因此可以得到聲音的變化。


鋁帶式: 參考

一種運用電磁感應原理的動態式麥克風,在磁鐵二極間放入鋁質的帶狀金屬薄膜,此薄膜受聲音振動時,因電磁感應產生訊號。


由於麥克風所產生的訊號很微小,所以,在使用上還需要運算放大器,將麥克風的訊號放大到一定的程度,才能用一般的類比訊號偵測的方式取得輸入麥克風的聲音大小。

這裡用的是 LM358 這顆運算放大器 (http://www.ti.com/lit/ds/symlink/lm158-n.pdf)

一顆裡面有二組放大單元,這裡只用到 pin 1,2,3 這一組。

參考 Datasheet 裡的電路設計,這個應該是比較適合我的需求


這裡可以調整 R1, R2 二顆電阻,來調整放大的倍率,算法如下

Vo = (1 + R2/R1)*Vin

底下就是我畫的電路


然後就是準備材料囉
元件
數量
電阻- 1 K
1
電阻- 2.2 K
3
電阻- 100 K
1
電阻- 300
1
可變電阻 (740K)
1
RGB共陰LED
1
電容- 330n
1
麥克風
1
LM358
1




在努力的把元件塞啊塞後,就成了底下這個樣子了..
正面


背面



因為以相同的電壓和閃爍時間, LED-R 較為不明顯,所以這裡用比較小的電阻值來搭配,使得 LED-R 會稍微亮一點。


完成了硬體的部份,接下來就寫程式來測試囉..

#define led_r  5 
#define led_g  6
#define led_b  7

#define LED_NUM 3

int sensorPin = A0;    // select the input pin for the potentiometer
int sensorValue = 0;  // variable to store the value coming from the sensor
int ledArray[LED_NUM] = {led_r, led_g, led_b};

void setup() {
  // declare the ledPin as an OUTPUT:
  for(int index = 0; index < LED_NUM; index++)
  {
    pinMode(ledArray[index], OUTPUT); 
  }
}

void loop() {
  // read the value from the sensor:
  sensorValue = analogRead(sensorPin);  

  if(sensorValue > 500)
  {
    int lednum = 0;
    
    lednum = random(0,LED_NUM);

    digitalWrite(ledArray[lednum], HIGH); 
 
    delay(10);

    digitalWrite(ledArray[lednum], LOW); 
  }
}

程式不難,只是單純偵測類比訊號,判斷是否大於 500 ,然後再取得一個亂數值,依這個值決定要亮那個顏色的 LED。

不多說,來 Demo...



沒有留言:

張貼留言