2016年3月23日 星期三

第四課 — 光學特雷門,不~應該叫噪音製造機

教學影片的第四課是 一個叫光學特雷門的東西
因為之前沒有聽過特雷門這種樂器,還特別Google了一下
還有人用特雷門演奏超級瑪莉

搞清楚了特雷門是 什麼東西以後
再回來看看教學影片的第四課

這一次的輸入多了一個光敏電阻
也就是要利用亮度來改變電阻值,配合電路即可以量測到不同的電壓值
電路還是一樣很簡單
利用+5V的輸出串接電阻和光敏電阻,將中間Vout的電壓值送回Arduino的A0腳位做類比輸入
另外將數位接腳的第8腳接上一個蜂鳴器
接起來的電路如下

程式使用-開啟舊檔,選擇10.StarterKit_BasicKit的p06—LightThermin開啟即可
程式在起始的時候先執行setup()內的程式碼,將LED13點亮後
void setup() {
  // Make the LED pin an output and turn it on將13腳位的LED點亮
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, HIGH);

  // calibrate for the first five seconds after program runs使用5秒偵測
  while (millis() < 5000) {
    // record the maximum sensor value記錄亮度的最大值
    sensorValue = analogRead(A0);
    if (sensorValue > sensorHigh) {
      sensorHigh = sensorValue;
    }
    // record the minimum sensor value記錄亮度的最小值
    if (sensorValue < sensorLow) {
      sensorLow = sensorValue;
    }
  }
  // turn the LED off, signaling the end of the calibration period偵測結束將13腳位的LED熄減
  digitalWrite(ledPin, LOW);
}
接下來進入loop()重覆執行的動作

void loop() {
  //read the input from A0 and store it in a variable由A0腳位將感測到的光度電壓值讀回
  sensorValue = analogRead(A0);

  // map the sensor values to a wide range of pitches將讀回的電壓值轉換為頻率值
  int pitch = map(sensorValue, sensorLow, sensorHigh, 50, 4000);

  // play the tone for 20 ms on pin 8由第8腳位輸出指定的頻率20ms
  tone(8, pitch, 20);

  // wait for a moment間隔10ms
  delay(10);

在這裡看到二個新的函數,一個是 map()函數
因由A0感測回的電壓值編碼是由0~1023
經過setup()後己將可偵測到的最小值存在sensorLow,最大值存在sensorHigh變數中
要將目前感應到的值對於感測範圍中的位置轉換為50~4000的頻率值中相對應的位置
再將頻率值送回pitch變數

另一個函數則是tone()函數,裡面的二個變數分別給的是腳位、頻率和時間

接好了電路做測試,果然和Massimo Banzi先生講的一樣,不用5分鐘,就會有人叫你把它關掉
根本就是噪音製造機嗎!

沒有留言:

張貼留言