
學習目標 :利用faya電子積塊製作一透過光線強弱控制音鍵的電子琴
學習時間 : 180min
使用模組 : (1) faya brickNano x 1
(2) 光感應模組 x 7
(3) BCD開關模組 x 1
(4) 蜂鳴器模組 x 1
工具 : 樂高積木 / 底板 (相容)
小螺絲起子 (十字,一字亦可)
====================相關知識====================
這篇文章中所用到的模組使用方式及相關知識整理如下,需進一步了解時可點進去參考:
模組介紹 : faya brickNano
模組介紹 : faya光感應模組
模組介紹 : fayaBCD開關模組
模組介紹 : faya蜂鳴器模組
======================開箱======================
光影電子琴(型號NTG-502)是fayalab的第二款創意組合系列產品,這一款的的牛皮紙盒只有夢幻泡泡機(型號NGT-501)一半的大小,特別設計給16x16的積木底板,這次創意組合利用3個16x16的底板,組合成48x16的大底板,面積能夠橫放七個faya光感應模組,並且結合蜂鳴器和BCD開關,產生7x4=49個音階。
盒內包含了製作夢幻泡泡機所需的全部模組及附件:
1.faya brickNano主板 2.BCD開關模組 3.蜂鳴器模組 4.光感應模組x7
5.電源線(A)/(B) 6.積木柱子 7. 長跳線x4 8.跳線盒
9.積木包 10.micro USB傳輸線 11.積木底板x3

===================範例實作=====================
目標:
(1) 利用faya電子積塊,製作出光感應電子琴
(2) 電子琴上共七鍵 [Do][Re][Mi][Fa][So][La][Si]
(3) 當照射光感應器的光線被遮住時,蜂鳴器模組發出相對應的聲音,從Do~Si共七音
(4) 利用BCD開關改變音階,共七階
組裝:
首先把[1.faya brickNano主板]、[2.BCD開關模組]、[3.蜂鳴器模組]、[4.光感應模組x7]的四個角落裝上[6.積木柱],詳細組裝過程可參考[功能介紹 : faya電子積塊與LEGO積木的結合],完成後如下圖所示:

接下來可以開始組裝積木了,大家可以先參考以下所提供的組裝方式,但沒有強制一定要和以下的範例組的一模一樣。由於組裝出來的外觀結構和程式沒有直接的關係,只要確認電源 / 訊號線夠長,即可依自己的喜好組出心中夢想的光影電子琴。
(註) : 上一款創意組合[夢幻泡泡機],由於程式需配合組出來的結構,因此強力建議初學者先按照文章裡的範例組一次,再更改成自己喜歡的樣式,但在本篇範例並無此問題。
首先利用兩片[9.積木包]裡的2x10的薄片板,把三片的 [11.積木底板x3]固定起來。

接著我們要組14個(2x5)的座台放置7個光感應模組,底下的排列方式,能夠讓7個光感應模組對稱的在積木底板上排列,白色圓圈部分是光感應模組四個腳座的擺放位置。

將[4.光感應模組x7] 擺放在白色圈圈的標記位置,完成後如下圖所示:

接下來我們在中間空位架一個能夠放faya_brickNano的小平台,白色圓圈部分是brickNano四個腳座的擺放位置。
將[1.faya brickNano主板] 擺放在白色圈圈的標記位置(USB朝左),完成後如下圖所示:
接下來我們要在左邊空位架一個能夠放BCD開關模組的小平台,底下的範例是利用2組(2x5x2)的長方體配合2片白色(2x6)的平板製作而成,平板上的圓圈部分是fBCD模組四個腳座的擺放位置。
再來我們要在右邊空位架一個能夠放BCD開關模組的小平台,這邊的範例是利用6顆(2x8)的基本款積木組合而成,積木上的圓圈部分是蜂鳴器模組四個腳座的擺放位置。
將[ 3.蜂鳴器模組] 擺放在白色圈圈的標記位置,完成後如下圖所示:
積木和模組的安裝告一段落,接下來開始接線的部分
接線:
(1) 電源線連接
電源線的連接如下圖所示,連接的詳細說明可參考這篇文章 或簡易版。這個範例我們透過9條[5.電源線(B)]將10個模組的電源全部串起來,電源供應的順序如圖箭頭所示:
完成電源線的連接後,可以稍微整理一下走線(走線也是一門藝術喔!),把一些線段藏在模組下方,讓畫面清爽一些,到時候訊號線再加進來時才不會感覺一團亂!
我們順便定義一下光感應模組的代號,由左至右分別為 Do-Re-Mi-Fa-So-La-Si :

(2) 訊號線連接
Arduino_D12 ===> BCD開關模組_1
Arduino_D11 ===> BCD開關模組_2
Arduino_D10 ===> BCD開關模組_4
Arduino_D2 ===> 蜂鳴器模組_BZ
Arduino_A1 ===> 光感應模組(DO)_OUT
Arduino_A2 ===> 光感應模組(RE)_OUT
Arduino_A3 ===> 光感應模組(MI)_OUT
Arduino_A4 ===> 光感應模組(FA)_OUT
Arduino_A5 ===> 光感應模組(SO)_OUT
Arduino_A6 ===> 光感應模組(LA)_OUT
Arduino_A7 ===> 光感應模組(SI)_OUT
範例程式:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 2017/6/12 | |
// Faya-Nugget 範例程式 (DigitalPiano_1.ino) | |
// 單元: 創意組合-光影電子琴 | |
// 網址: http://fayalab.blogspot.com/2017/06/fayadigitalpiano.html | |
// 目標 (1) 利用faya電子積塊,製作出光感應電子琴 | |
// (2) 電子琴上共七鍵 [Do][Re][Mi][Fa][So][La][Si] | |
// (3) 當光感應器光線被遮住時,蜂鳴器模組發出相對應的聲音,從Do~Si共七音 | |
// (4) 利用BCD開關改變音階,共七階 | |
// 接線: Arduino ==> faya模組 | |
// A1 ==> Vout (光感應模組 Do) | |
// A2 ==> Vout (光感應模組 Re) | |
// A3 ==> Vout (光感應模組 Mi) | |
// A4 ==> Vout (光感應模組 Fa) | |
// A5 ==> Vout (光感應模組 So) | |
// A6 ==> Vout (光感應模組 La) | |
// A7 ==> Vout (光感應模組 Si) | |
// D2 ==> BZ (蜂鳴器模組) | |
// D12 ==> 1 (BCD開關模組) | |
// D11 ==> 2 (BCD開關模組) | |
// D10 ==> 4 (BCD開關模組) | |
#include "pitches.h" | |
// 建立矩陣,讀取pitches.h內定義的音頻,每階7個音,共七階 | |
int notes[7][7] = { {NOTE_C1, NOTE_D1, NOTE_E1, NOTE_F1, NOTE_G1, NOTE_A1, NOTE_B1}, | |
{NOTE_C2, NOTE_D2, NOTE_E2, NOTE_F2, NOTE_G2, NOTE_A2, NOTE_B2}, | |
{NOTE_C3, NOTE_D3, NOTE_E3, NOTE_F3, NOTE_G3, NOTE_A3, NOTE_B3}, | |
{NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4}, | |
{NOTE_C5, NOTE_D5, NOTE_E5, NOTE_F5, NOTE_G5, NOTE_A5, NOTE_B5}, | |
{NOTE_C6, NOTE_D6, NOTE_E6, NOTE_F6, NOTE_G6, NOTE_A6, NOTE_B6}, | |
{NOTE_C7, NOTE_D7, NOTE_E7, NOTE_F7, NOTE_G7, NOTE_A7, NOTE_B7} }; | |
//儲存類比腳位順序至key[] | |
int key[] = {A1,A2,A3,A4,A5,A6,A7}; | |
//蜂鳴器腳位設定 | |
int Buzzer_pin =2; | |
//BCD開關腳位設定 | |
int BCD_Pin1 = 12; | |
int BCD_Pin2 = 11; | |
int BCD_Pin4 = 10; | |
//初始化BCD開關狀態 | |
//0=關,1=開 | |
//n1=輸出埠1, n2=輸出埠2, n3=輸出埠3 | |
int n1=0, n2=0, n4=0, n=0; | |
void setup() | |
{ | |
Serial.begin(9600); | |
pinMode(Buzzer_pin,OUTPUT); // 設定蜂鳴器為輸出 | |
pinMode(BCD_Pin1, INPUT); //設定BCD埠1,2,4為輸入 | |
pinMode(BCD_Pin2, INPUT); | |
pinMode(BCD_Pin4, INPUT); | |
for (int i=0; i<=6; i++) //設定腳位A0~A6(連接光感應器)為輸入 | |
{ | |
pinMode(key[i], INPUT); | |
} | |
} | |
void loop() { | |
if(digitalRead(BCD_Pin1) == HIGH) //偵測BCD_輸出埠1狀態 | |
n1 = 1; | |
else | |
n1 = 0; | |
if(digitalRead(BCD_Pin2) == HIGH) //偵測BCD_輸出2狀態 | |
n2 = 2; | |
else | |
n2 = 0; | |
if(digitalRead(BCD_Pin4) == HIGH) //偵測BCD_輸出4狀態 | |
n4 = 4; | |
else | |
n4 = 0; | |
n = n1+n2+n4; // 加總n1, n2, n4可得知BCD目前轉的位置 | |
//Serial.println(n); //檢測BCD轉的位置是否正確 | |
//輪流讀取7個光感測值 | |
for (int thisKey = 0 ; thisKey <= 6; thisKey++) { | |
int keyReading = analogRead(key[thisKey]); //讀取光感測器的值 | |
// Serial.print(keyReading); | |
// Serial.print(" "); | |
if (keyReading <= 750) { //當光感測值小於750時 (變暗) | |
tone(Buzzer_pin, notes[7-n][thisKey], 20); //撥放相對應音階上的音符 | |
} | |
} | |
// Serial.println(" "); | |
} |
備註:
- 程式裡面的語法和各模組的用法都在之前的文章介紹過了,請參考本文前面相關文章的連結
- pitches.h 可在此下載,記得把這個檔案和範例檔案放在同一個資料夾,可參考 (模組介紹 : faya蜂鳴器模組)
- 程式裡面有關Serial指令(預設階被註解),可用來監測資料的輸入或輸出狀態,使者可以取消註解,利用序列埠監測視窗(Serial Monitir)除錯
- L77:Serial.println(n); 可查看BCD轉出的數字是否和Serial Monitor相同
- L82, L83, L88: 可查看每個光感應器接收到光的值
- L85: tone(Buzzer_pin, notes[7-n][thisKey], 20);
我們希望BCD開關逆時針方向撥的時候,音階愈來愈高,這樣才和鋼琴鍵盤的音階方向一致,但是逆時針方向撥的時候,數字愈來愈小,因此我們用[7-n],讓程式讀取高音階的部分,最後再取[thisKey],撥放相對位置的音符!
校正光感應靈敏度:
下載成功後,很有可能遇到光影電子琴會一直發出聲音的情形,此時不用緊張,這是由於光感應器的靈敏度尚未調整(光感應器模組的詳細介紹可參考[模組介紹 : faya光感應模組]),
這邊直接介紹如何快速的校正符合現場光線的光感應靈敏度。
(1) 首先確認環境有穩定的光源。
(2) 用螺絲起子輕輕的將可變電阻順時針撥到底,注意要很輕,可變電阻的結構無法承受大力的旋轉。
(3) 用幾根手指將光感應器遮住以擋住光線,擋光的程度隨個人喜好,但注意這個擋光的程度就是觸發此感測器發出聲音的程度!
(4) 另一隻手用螺絲起子慢慢的逆時針轉可變電阻,當蜂鳴器一發出聲音馬上停止。
(5) 接著移開螺絲起子和遮住感測器的那隻手,聲音會停止。
(6) 完成後,用手去遮此顆感測器時,會再發出聲音,移開時,聲音停止,此時代表此顆感測器的校正完成了。
(7)以上動作重複七次,校正Do Re Mi Fa So La Si七個音
用影像示範一次Do音的校正:
測試結果:
我們從最低音的Do(Note_C1,BCD開關位置=7)開始測試到最開音的Si(Note_B7,BCD開關位置=1),總共7x7=49個音。
最後,我們利用這台光影電子琴演奏[綠野仙蹤主題曲-Over the Rainbow]的前面一小段!
希望大家能夠順利地組出光影電子琴,並且更改心目中電子琴外型,彈出自己喜愛的音樂,也歡迎大家在底下留言或到我們的粉絲團留言喔!
====================================
fayalab 粉絲團
FB本篇留言版
- 程式裡面有關Serial指令(預設階被註解),可用來監測資料的輸入或輸出狀態,使者可以取消註解,利用序列埠監測視窗(Serial Monitir)除錯
- L77:Serial.println(n); 可查看BCD轉出的數字是否和Serial Monitor相同
- L82, L83, L88: 可查看每個光感應器接收到光的值

- L85: tone(Buzzer_pin, notes[7-n][thisKey], 20);
我們希望BCD開關逆時針方向撥的時候,音階愈來愈高,這樣才和鋼琴鍵盤的音階方向一致,但是逆時針方向撥的時候,數字愈來愈小,因此我們用[7-n],讓程式讀取高音階的部分,最後再取[thisKey],撥放相對位置的音符!
校正光感應靈敏度:
下載成功後,很有可能遇到光影電子琴會一直發出聲音的情形,此時不用緊張,這是由於光感應器的靈敏度尚未調整(光感應器模組的詳細介紹可參考[模組介紹 : faya光感應模組]),
這邊直接介紹如何快速的校正符合現場光線的光感應靈敏度。
(1) 首先確認環境有穩定的光源。
(2) 用螺絲起子輕輕的將可變電阻順時針撥到底,注意要很輕,可變電阻的結構無法承受大力的旋轉。
(3) 用幾根手指將光感應器遮住以擋住光線,擋光的程度隨個人喜好,但注意這個擋光的程度就是觸發此感測器發出聲音的程度!
(4) 另一隻手用螺絲起子慢慢的逆時針轉可變電阻,當蜂鳴器一發出聲音馬上停止。
(5) 接著移開螺絲起子和遮住感測器的那隻手,聲音會停止。
(6) 完成後,用手去遮此顆感測器時,會再發出聲音,移開時,聲音停止,此時代表此顆感測器的校正完成了。
(7)以上動作重複七次,校正Do Re Mi Fa So La Si七個音
用影像示範一次Do音的校正:
測試結果:
我們從最低音的Do(Note_C1,BCD開關位置=7)開始測試到最開音的Si(Note_B7,BCD開關位置=1),總共7x7=49個音。
最後,我們利用這台光影電子琴演奏[綠野仙蹤主題曲-Over the Rainbow]的前面一小段!
希望大家能夠順利地組出光影電子琴,並且更改心目中電子琴外型,彈出自己喜愛的音樂,也歡迎大家在底下留言或到我們的粉絲團留言喔!
====================================
fayalab 粉絲團
FB本篇留言版
沒有留言:
張貼留言