2016年3月24日 星期四

第五課 — 鍵盤樂器

教學影片的第五課是鍵盤樂器
做完了第四課的噪音製造機後的另一個噪音來源



其實接了感覺和第四課差不多
一樣是使用Arduino的A0腳位做類比輸入
另外將數位接腳的第8腳接上一個蜂鳴器

看到照片覺得有點複雜嗎?還是畫一個簡單的電路圖好了

這裡要用到的R1~R3的數值要不一樣,程式裡建議的是用220、10K、1M,R4是用10K,這樣當按鈕按下去時測得的電壓才會不同,如果沒有程式裡建議的電阻,用其它的電阻值也可,只是程式要稍做修改
當S4按下去時,A0偵測到的值應該是+5V,也就是1023
當S3按下去時,A0偵測的值應該是5V×(R3/(R3+R4))
當S2按下去時,A0偵測的值應該是5V×(R3/(R2+R4))
所以,如果要建立更多的音階,只需要在電路並聯上更多的電阻和開關即可
另外在程式裡加上更多的IF敘述即可

發現了嗎,這個電路和上一個光學特雷門很像,只是把光敏電阻可變電阻的特性轉換成一連串階梯形式的電阻

程式使用-開啟舊檔,選擇10.StarterKit_BasicKit的p07—Keyboard開啟即可
當然了,因為使用的電阻值不同,按下每個鈕由A0所測得的值也都不一樣,如果使用的電阻值不是程式中建議的,這時可先用監控畫面看一下由Ardurino讀回的每一個按鈕按下去的值,再來調整一下程式裡IF敘述中的的參數值即可


另外如果要調整每個鍵發出的聲音,它存在程式一開始設定的note[]陣列裡
int note[] = {262, 294, 330, 349);
只要上網去Google一下音階頻率的圖,再把對應的數值設定進去就好了,如果要增加按鈕,那就多設幾個值即可


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分鐘,就會有人叫你把它關掉
根本就是噪音製造機嗎!

2016年3月14日 星期一

第3課 沒有IC的LOVE-O-METER

教學影片的第一課教我們用了數位的輸出來控制LED燈
第二課的太空船加上了數位輸入的按鈕來控制Arduino
第三課的love-o-meter則是一個類比輸入的實驗



在這個例子裡使用了一個測量溫度用的類比IC,叫做TMP36
電路圖還是很簡單,因為官網沒有放,只好自己畫了一張
在電路裡LED還是接到了數位接腳的2、3、4號腳位
但是多使用了一個影片中講到的模擬輸入引腳A0
程式還是一樣使用-開啟舊檔,選擇10.StarterKit_BasicKit的p03—LoveOMeter開啟即可

接下來就要開始實驗了,但是問題來了,跑了一趟長明街,問了好幾間店,都沒有這顆TMP36的溫度IC
但是沒有IC我,這個類比輸入實驗還是要做,那用…什麼做呢?
上網查完了TMP36的特性是將感測到的溫度轉換成類比的電壓輸出,溫度愈高,輸出的電壓值就會愈高,既然如此,那就將IC的位置換成可變電阻,電路圖會變下面這張圖,當R4的可變電阻調整時,A0的腳位就會接收到不同的電壓值來模擬TMP36輸出的電壓變化
結果當然是成功的實驗出來了,如果你想要像影片中多加二個LED變成5顆,那就和我一樣電路多接二顆LED到引腳5.6就可以了,再修改一下程式碼,就會得到5顆LED的輸出了



另外,程式執行時,按一下右上角的序列埠監控視窗的按鈕,就會彈出一個視窗顯示程式中
Serial.print("sensor Value:");
等指令所輸出的感測數值、電壓溫度等…

2016年3月9日 星期三

第2課 — 太空船介面

教學影片的第二課是要製作一個70年代電中的太空船介面

這個程式在Arduino的官網中有一個StarterKit裡面就有程式和電路
https://www.arduino.cc/en/ArduinoStarterKit/Prj02
程式也不用再輸入了,只要執行Arduino程式後
點選那個往上的箭頭就是開啟舊檔,選擇10.StarterKit_BasicKit的P02—SpaceshipInterface開啟即可

官網中有詳細的接線圖
只是官網中的程式和Massimo Banzi先生影片中的程式剛好相反
影片中是按鈕前二個紅色LED閃爍,按下按鈕後亮綠色LED
而Starterkit網頁中的程式則是一開始亮綠色LED,按下按鈕後二個紅色LED閃爍
原因就是在程式中的IF敘述順序不同,可以和影片比對便知道當條件成立後執行的動作是不同的。
  if (switchstate == LOW) {   //當條件成立(按鈕沒按下)
    digitalWrite(3, HIGH); // turn the green LED on pin 3 on將位於PIN腳3的LED點亮
    digitalWrite(4, LOW);  // turn the red LED on pin 4 off將位於PIN腳4的LED關閉
    digitalWrite(5, LOW);  // turn the red LED on pin 5 off將位於PIN腳5的LED關閉
  }
  // this else is part of the above if() statement.
  // if the switch is not LOW (the button is pressed)
  // turn off the green LED and blink alternatively the red LEDs
  else {                         //否則(按鈕按下)
    digitalWrite(3, LOW);  // turn the green LED on pin 3 off 將位於PIN腳3的LED關閉
    digitalWrite(4, LOW);  // turn the red LED on pin 4 off  將位於PIN腳4的LED關閉
    digitalWrite(5, HIGH); // turn the red LED on pin 5 on 將位於PIN腳5的LED點亮
    // wait for a quarter second before changing the light
    delay(250); //(延遲0.25秒)
    digitalWrite(4, HIGH); // turn the red LED on pin 4 on  將位於PIN腳4的LED點亮
    digitalWrite(5, LOW);  // turn the red LED on pin 5 off 將位於PIN腳5的LED關閉
    // wait for a quarter second before changing the light
    delay(250);
  }

這個程式和第一個程式的最大不同就是在增加了PIN腳2的輸入選項
  // declare the switch pin as an input
  pinMode(2, INPUT);

和第一個閃爍LED程式只有輸出是不同的
另外開始使用了
if(){
...
}
eles{
...
}
的條件敘述語法來作判斷

另外在影片中的程式Massimo Banzi先生在程式的一開始就定義了
const int redLed1=5;
const int redLed2=4;
const int greenLed2=3;

所以程式中的
digitalWrite(4, LOW);
就可以寫成
digitalWrite(redLed2, LOW);
這樣的寫法增加了程式的可讀性,減少了程式變大時偵錯的困難

當然最後還是要放一張我做完成果的相片啦!
哈哈!沒錯,我多買了一塊麵包板,還把電池接上去用電池供電了。

2016年3月8日 星期二

第一個ARDUINO程式

Arduino 語言是建立在C/C++基礎上的,其實也就是基礎的C 語言
第一個程式就是要控制LED的閃爍
要用的指令有下面幾個


結構
 void setup() 初始化變數,管腳模式,調用庫函數等
 void loop() 連續執行函數內的語句

數字 I/O指令:
pinMode(pin, mode) :數位I/O 接口輸入輸出模式定義函數,pin 表示為013 mode 表示為INPUT OUTPUT
digitalWrite(pin, value): 數字I/O 接口輸出電位定義函數,pin 表示為013value 表示為HIGH LOW。比如定義HIGH為高電位可以驅動LED

時間函數
delay(ms) 延時函數(單位ms)。


接下來就是進入ARDUINO IDE的編輯介面
接下來將程式輸入:

void setup() {
  // put your setup code here, to run once:
  pinMode(13,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(13,HIGH);
  delay(1000);
  digitalWrite(13,LOW);
  delay(1000);
  }

一開始沒有接上麵包板,直接控制ARDUINO板子第13接腳下方的LED
在初始設定setup()中
  pinMode(13,OUTPUT);
表示定義第13腳位為輸出

接下來在執行迴圈loop()中
  digitalWrite(13,HIGH);
  delay(1000);
將第13 腳電位設定為HIGH後維持1秒
 digitalWrite(13,LOW);
  delay(1000);
再將第13 腳電位設定為LOW後維持1秒
此時LED便會亮1秒後滅1秒後重覆,造成閃爍的效果

下一步就要先設定,點選選單的工具-板子-選"Arduino/Genuino Uno"
因在裝置管理員中看到Arduino的序列埠是COM3,

下一步選序列埠-“COM3(Arduino/Genuino Uno)"

接下來點選左上方的驗證勾號進行編譯

最後再點選上傳將程式傳入Arduino
最後就可以看到13腳位下方的LED開始閃爍了

當然,調整一下程式中的 delay(1000);中的參數
就可以調整閃爍的速度了

接下來,要接上麵包板,將LED的正接到13腳位,LED的負接一顆限流電阻後再接回GND
此時就可以看到我們接上的LED燈和板子上的LED一起閃滅了







Arduino IDE安裝

從官網下載回來了Anduino IDE的安裝程式後
點擊二下後便開始安裝程序


接下來當然是按下I  Agree我同意才會繼續安裝了

按下來按NEXT 下一步

如果你不想變更安裝路徑,那就繼續下一步點擊安裝Install

等待安裝程序直到出現Completed安裝完成後,即可按下Close關閉安裝程式了

下一步就是把Arduino UNO按上電腦的USB介面

此時電腦會發現新的硬體,並安裝驅動程式

在裝置管理員中亦可以看到Arduino UNO/的裝置
接下來點擊桌面的Arduino圖示後便會開始執行Arduino IDE了

最後就會看到開發介面的程式工具了




ARDUINO ABC

今天在露天買回來的ARDUINO UNO到貨了
 
打開包裝看到的板子長這樣



接下來當要去ARDUINO的官網下載它的IDE介面回來


順便上網先找一下它的簡介課程
在YOUTUBE找到了Arduino: 初學者必學的十堂入門視訊課程 (中文字幕)

 
接下來照著影片的教學就是我的ARDUINO初體驗了