0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Arduino構(gòu)建一架小而有趣的鋼琴

科技觀察員 ? 來(lái)源:circuitdigest ? 作者:里沙布·耆那教 ? 2022-11-14 16:26 ? 次閱讀

Arduino對(duì)于不是電子背景的人來(lái)說(shuō)是一個(gè)福音,可以輕松構(gòu)建東西。這是一個(gè)很棒的原型工具,或者嘗試一些很酷的東西,在這個(gè)項(xiàng)目中,我們將使用 Arduino 構(gòu)建一架小而有趣的鋼琴。這架鋼琴非常簡(jiǎn)單,只有8個(gè)按鈕和蜂鳴器。它使用Arduino的tone()函數(shù)在揚(yáng)聲器上創(chuàng)建各種類型的鋼琴音符。為了給它增添趣味,我們?cè)陧?xiàng)目中添加了錄音功能,這使我們能夠播放一首曲子,并在需要時(shí)重復(fù)播放。聽(tīng)起來(lái)很有趣吧?。∷宰屛覀冮_(kāi)始建設(shè)吧。

所需材料:

Arduino Uno

16 * 2液晶顯示器

蜂鳴器

修剪器 10k

單刀雙擲開(kāi)關(guān)

按鈕 (8 否)

電阻器 (10k, 560R, 1.5k, 2.6k, 3.9, 5.6k, 6.8k, 8.2k, 10k)

面包板

連接線

電路圖:

完整的Arduino鋼琴項(xiàng)目可以構(gòu)建在帶有一些連接線的面包板上。使用弗里茨制作的電路圖顯示了項(xiàng)目的試驗(yàn)板視圖,如下所示

pYYBAGNx-7OAG6aYAADjJqq2XPI691.png

只需按照電路圖并相應(yīng)地連接電線,按鈕和蜂鳴器與PCB模塊一起使用,但在實(shí)際硬件中,我們只使用了開(kāi)關(guān)和蜂鳴器,它不應(yīng)該讓您感到困惑,因?yàn)樗鼈兙哂邢嗤愋偷囊_輸出。您還可以參考下面的硬件圖像進(jìn)行連接。

poYBAGNx-7WAH2seAAC10ag1V2A425.jpg

左起電阻值按以下順序排列,10k、560R、1.5k、2.6k、3.9、5.6k、6.8k、8.2k 和 10k。如果您沒(méi)有相同的DPST開(kāi)關(guān),則可以使用普通的撥動(dòng)開(kāi)關(guān),如上面的電路圖所示。現(xiàn)在讓我們看看項(xiàng)目的原理圖,以了解為什么我們進(jìn)行了以下連接。

原理圖和解釋:

上面顯示的電路圖原理圖如下,也是使用Fritzing制作的。

pYYBAGNx-7aAASi4AACd3j73el0607.png

我們必須了解的一個(gè)主要連接是我們?nèi)绾瓮ㄟ^(guò)模擬A8引腳將8個(gè)按鈕連接到Arduino?;旧衔覀冃枰?8 個(gè)輸入引腳,可以連接到 8 個(gè)輸入按鈕,但對(duì)于這樣的項(xiàng)目,我們不能將微控制器的 8 個(gè)引腳僅用于按鈕,因?yàn)槲覀兛赡苄枰鼈児┮院笫褂?。在我們的例子中,我們有?a target="_blank">接口的LCD顯示器。

因此,我們使用Arduino的模擬引腳,并形成具有不同電阻值的電位分壓器來(lái)完成電路。這樣,當(dāng)按下每個(gè)按鈕時(shí),將向模擬引腳提供不同的模擬電壓。下面顯示了僅具有兩個(gè)電阻和兩個(gè)按鈕的示例電路。

poYBAGNx-7eANa9AAAAugOpHbIU301.jpg

在這種情況下,當(dāng)按鈕未按下時(shí),ADC引腳將接收+5V,如果按下第一個(gè)按鈕,則電位分壓器通過(guò)560R電阻完成,如果按下第二個(gè)按鈕,則使用1.5k電阻競(jìng)爭(zhēng)電位分壓器。這樣,ADC引腳接收到的電壓將根據(jù)分壓器的公式而變化。如果您想了解更多關(guān)于分壓器的工作原理以及如何計(jì)算ADC引腳接收到的電壓值,則可以使用此電位分壓器計(jì)算器頁(yè)面。

除此之外,所有連接都是直截了當(dāng)?shù)模琇CD 連接到引腳 8、9、10、11 和 12。蜂鳴器連接到引腳 7,SPDT 開(kāi)關(guān)連接到 Arduino 的引腳 6。整個(gè)項(xiàng)目通過(guò)筆記本電腦USB端口供電。您還可以通過(guò)直流插孔將Arduino連接到9V或12V電源,項(xiàng)目仍將正常工作。

了解 Arduino 的Tone()函數(shù):

Arduino有一個(gè)方便的tone()函數(shù),可用于生成不同的頻率信號(hào),這些信號(hào)可用于使用蜂鳴器產(chǎn)生不同的聲音。因此,讓我們了解該功能的工作原理以及如何將其與Arduino一起使用。

在此之前,我們應(yīng)該知道壓電蜂鳴器的工作原理.我們可能在我們學(xué)校了解過(guò)壓電晶體, 它只不過(guò)是一種將機(jī)械振動(dòng)轉(zhuǎn)化為電能的晶體,反之亦然.在這里,我們應(yīng)用一個(gè)可變的電流(頻率),晶體振動(dòng)從而產(chǎn)生聲音。因此,為了使壓電蜂鳴器產(chǎn)生一些噪音,我們必須使壓電晶體振動(dòng),噪聲的音調(diào)和音調(diào)取決于晶體振動(dòng)的速度.因此,可以通過(guò)改變電流頻率來(lái)控制音調(diào)和音高。

好的,那么我們?nèi)绾螐腁rduino獲得可變頻率呢?這就是音調(diào)()函數(shù)的用武之地。音調(diào)()可以在特定引腳上生成特定頻率。如果需要,也可以提及持續(xù)時(shí)間。音調(diào) () 的語(yǔ)法是

Syntax

tone(pin, frequency) tone(pin, frequency, duration)

Parameters

pin: the pin on which to generate the tone frequency: the frequency of the tone in hertz – unsigned int duration: the duration of the tone in milliseconds (optional1) – unsigned long

引腳的值可以是您的任何數(shù)字引腳。我在這里使用了引腳 8。可以生成的頻率取決于Arduino板中計(jì)時(shí)器的大小。對(duì)于UNO和大多數(shù)其他常見(jiàn)板,可以產(chǎn)生的最小頻率為31Hz,可以產(chǎn)生的最大頻率為65535Hz。然而,我們?nèi)祟愔荒苈?tīng)到2000Hz到5000Hz之間的頻率。

在Arduino上彈奏鋼琴音調(diào):

好的,在我開(kāi)始這個(gè)話題之前,讓我明確一點(diǎn),我是一個(gè)音符或鋼琴的新手,所以如果這個(gè)標(biāo)題下提到的任何內(nèi)容都是胡言亂語(yǔ),請(qǐng)?jiān)徫摇?/p>

我們現(xiàn)在知道我們可以使用 Arduino 中的音調(diào)功能來(lái)產(chǎn)生一些聲音,但是我們?nèi)绾问褂孟嗤囊粽{(diào)來(lái)播放特定音符的音調(diào)。幸運(yùn)的是,有一個(gè)名為“pitches.h”的圖書館,由Brett Hagman編寫。該庫(kù)包含有關(guān)哪個(gè)頻率等同于鋼琴上哪個(gè)音符的所有信息。我很驚訝這個(gè)圖書館實(shí)際上可以很好地工作并演奏鋼琴上的幾乎每個(gè)音符,我用同樣的東西來(lái)彈奏加勒比海盜、瘋狂青蛙、馬里奧甚至泰坦尼克號(hào)的鋼琴音符,它們聽(tīng)起來(lái)很棒。哎呀!我們?cè)谶@里有點(diǎn)偏離主題,所以如果你對(duì)此感興趣,請(qǐng)查看使用Arduino項(xiàng)目播放旋律。您還可以在該項(xiàng)目中找到有關(guān)pitches.h庫(kù)的更多解釋。

我們的項(xiàng)目只有 8 個(gè)按鈕,因此每個(gè)按鈕只能播放一個(gè)特定的音符,因此我們總共只能播放 8 個(gè)音符。我選擇了鋼琴上最常用的音符,但是您可以選擇任何8個(gè),甚至可以使用更多按鈕擴(kuò)展項(xiàng)目并添加更多音符。

此項(xiàng)目中選擇的音符是音符 C4、D4、E4、F4、G4、A4、B4 和 C5,可以分別使用按鈕 1 到 8 演奏。

對(duì) Arduino 進(jìn)行編程

足夠的理論讓我們進(jìn)入Arduino編程的有趣部分。完整的Arduino程序在本頁(yè)末尾給出,如果您渴望或進(jìn)一步閱讀以了解代碼的工作原理,您可以跳下來(lái)。

在我們的Arduino程序中,我們必須從引腳A0讀取模擬電壓,然后預(yù)測(cè)按下了哪個(gè)按鈕并播放該按鈕的相應(yīng)音調(diào)。在執(zhí)行此操作時(shí),我們還應(yīng)該記錄用戶按下了哪個(gè)按鈕以及他/她按下了多長(zhǎng)時(shí)間,以便我們可以重新創(chuàng)建用戶稍后播放的音調(diào)。

在進(jìn)入邏輯部分之前,我們必須聲明我們將演奏哪 8 個(gè)音符。然后從 pitches.h 庫(kù)中獲取音符的相應(yīng)頻率,然后形成如下所示的數(shù)組。這里演奏音符C4的頻率是262,依此類推。

int notes[] = {262, 294, 330, 349, 392, 440, 494, 523}; // Set frequency for C4, D4, E4, F4, G4, A4, B4,

接下來(lái)我們必須提到LCD顯示器連接到哪些引腳。如果您遵循上面給出的完全相同的原理圖,則無(wú)需在此處更改任何內(nèi)容。

const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; //Pins to which LCD is connected

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

接下來(lái),在我們的設(shè)置功能中,我們只需初始化LCD模塊和串行監(jiān)視器以進(jìn)行調(diào)試。我們還會(huì)顯示介紹消息,以確保事情按計(jì)劃進(jìn)行。接下來(lái),在主循環(huán)函數(shù)中,我們有兩個(gè) while 循環(huán)。

只要將SPDT開(kāi)關(guān)放置在錄制更多內(nèi)容中,就會(huì)執(zhí)行一個(gè)while循環(huán)。在錄制模式下,用戶可以支付所需的音調(diào),同時(shí)正在播放的音調(diào)也將保存。所以 while 循環(huán)如下所示

while (digitalRead(6) == 0) //If the toggle switch is set in recording mode { lcd.setCursor(0, 0); lcd.print("Recording.."); lcd.setCursor(0, 1); Detect_button(); Play_tone(); }

您可能已經(jīng)注意到,我們?cè)?while 循環(huán)中有兩個(gè)函數(shù)。第一個(gè)函數(shù)Detect_button() 用于查找用戶按下的按鈕,第二個(gè)函數(shù)Play_tone()用于播放相應(yīng)的音調(diào)。除了這個(gè)函數(shù)之外,Detect_button() 函數(shù)還記錄按下了哪個(gè)按鈕,Play_tone() 函數(shù)記錄按下了多長(zhǎng)時(shí)間。

在Detect_button()函數(shù)中,我們從引腳 A0 讀取模擬電壓,并將其與一些預(yù)定義的值進(jìn)行比較,以找出按下了哪個(gè)按鈕。該值可以通過(guò)使用上面的分壓器計(jì)算器或使用串行監(jiān)視器檢查每個(gè)按鈕讀取的模擬值來(lái)確定。

void Detect_button()

{

analogVal = analogRead(A0); //read the analog voltag on pin A0

pev_button = button; //remember the previous button pressed by the user

if (analogVal < 550)

button = 8;

if (analogVal < 500)

button = 7;

if (analogVal < 450)

button = 6;

if (analogVal < 400)

button = 5;

if (analogVal < 300)

button = 4;

if (analogVal < 250)

button = 3;

if (analogVal < 150)

button = 2;

if (analogVal < 100)

button = 1;

if (analogVal > 1000)

button = 0;

/****Rcord the pressed buttons in a array***/

if (button != pev_button && pev_button != 0)

{

recorded_button[button_index] = pev_button;

button_index++;

recorded_button[button_index] = 0;

button_index++;

}

/**End of Recording program**/

}

如前所述,在此功能中,我們還記錄按下按鈕的順序。記錄的值存儲(chǔ)在名為 recorded_button[] 的數(shù)組中。我們首先檢查是否按下了新按鈕,如果按下,我們還檢查它是否不是按鈕 0。其中按鈕 0 什么都沒(méi)有,但沒(méi)有按下按鈕。在 if 循環(huán)中,我們將值存儲(chǔ)在變量 button_index 給出的索引位置上,然后我們還增加此索引值,這樣我們就不會(huì)在同一位置過(guò)度寫入。

/****Rcord the pressed buttons in a array***/

if (button != pev_button && pev_button != 0)

{

recorded_button[button_index] = pev_button;

button_index++;

recorded_button[button_index] = 0;

button_index++;

}

/**End of Recording program**/

在Play_tone()函數(shù)中,我們將使用多個(gè) if 條件播放按下按鈕的相應(yīng)音調(diào)。我們還將使用一個(gè)名為 recorded_time[] 的數(shù)組,在其中我們將保存按下按鈕的持續(xù)時(shí)間。該操作類似于記錄按鈕序列,我們使用 millis() 函數(shù)來(lái)確定每個(gè)按鈕被按下了多長(zhǎng)時(shí)間,也是為了減小變量的大小,我們將值除以 10。對(duì)于按鈕 0,這意味著用戶沒(méi)有按下任何內(nèi)容,我們?cè)谙嗤某掷m(xù)時(shí)間內(nèi)沒(méi)有播放任何音調(diào)。函數(shù)內(nèi)的完整代碼如下所示。

void Play_tone()

{

/****Rcord the time delay between each button press in a array***/

if (button != pev_button)

{

lcd.clear(); //Then clean it

note_time = (millis() - start_time) / 10;

recorded_time[time_index] = note_time;

time_index++;

start_time = millis();

}

/**End of Recording program**/

if (button == 0)

{

noTone(7);

lcd.print("0 -> Pause..");

}

if (button == 1)

{

tone(7, notes[0]);

lcd.print("1 -> NOTE_C4");

}

if (button == 2)

{

tone(7, notes[1]);

lcd.print("2 -> NOTE_D4");

}

if (button == 3)

{

tone(7, notes[2]);

lcd.print("3 -> NOTE_E4");

}

if (button == 4)

{

tone(7, notes[3]);

lcd.print("4 -> NOTE_F4");

}

if (button == 5)

{

tone(7, notes[4]);

lcd.print("5 -> NOTE_G4");

}

if (button == 6)

{

tone(7, notes[5]);

lcd.print("6 -> NOTE_A4");

}

if (button == 7)

{

tone(7, notes[6]);

lcd.print("7 -> NOTE_B4");

}

if (button == 8)

{

tone(7, notes[7]);

lcd.print("8 -> NOTE_C5");

}

}

最后,在錄制后,用戶必須將DPST切換到另一個(gè)方向才能播放錄制的音調(diào)。完成此操作后,程序?qū)⒚撾x上一個(gè) while 循環(huán)并進(jìn)入第二個(gè) while 循環(huán),我們按照按下的按鈕順序播放音符,持續(xù)時(shí)間為先前錄制的持續(xù)時(shí)間。執(zhí)行相同操作的代碼如下所示。

while (digitalRead(6) == 1) //If the toggle switch is set in Playing mode

{

lcd.clear();

lcd.setCursor(0, 0); lcd.print("Now Playing..");

for (int i = 0; i < sizeof(recorded_button) / 2; i++)

{

delay((recorded_time[i]) * 10); //Wait for before paying next tune

if (recorded_button[i] == 0)

noTone(7); //user dint touch any button

else

tone(7, notes[(recorded_button[i] - 1)]); //play the sound corresponding to the button touched by the user

}

}

}

播放,錄制,重播和重復(fù)!:

按照所示電路圖制作硬件,并將代碼上傳到Arduino板及其顯示的時(shí)間。將SPDT置于錄制模式并開(kāi)始播放您選擇的音調(diào),按下每個(gè)按鈕將產(chǎn)生不同的音調(diào)。在此模式下,LCD將顯示“正在錄制...”,在第二行,您將看到當(dāng)前正在按下的筆記的名稱,如下所示

pYYBAGNx-7qAEl9XAADGsC-AHi8256.jpg

播放完音調(diào)后,將SPDT開(kāi)關(guān)切換到另一側(cè),液晶屏應(yīng)顯示“正在播放....”,然后開(kāi)始播放剛剛播放的音調(diào)。只要撥動(dòng)開(kāi)關(guān)保持在下圖所示的位置,就會(huì)一遍又一遍地播放相同的音調(diào)。

poYBAGNx-76AJ-cQAADbM82rzLE181.jpg

/*

Arduino based Piano and Record and play option

Code by: B. Aswinth Raj

Dated: 22-05-2017

*/


#include


int notes[] = {262, 294, 330, 349, 392, 440, 494, 523}; // Set frequency for C4, D4, E4, F4, G4, A4, B4, C5



const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; //Pins to which LCD is connected

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);


char button = 0;

int analogVal;

char REC = 0;


int recorded_button[200];

int pev_button;


int recorded_time [200];

char time_index;


char button_index = 0;


unsigned long start_time;

int note_time;



void setup() {


Serial.begin(9600);

pinMode (6, INPUT);


lcd.begin(16, 2); //We are using a 16*2 LCD display

lcd.print("Arduino Piano"); //Display a intro message

lcd.setCursor(0, 1); // set the cursor to column 0, line 1

lcd.print("-CircuitDigest"); //Display a intro message


delay(2000); //Wait for display to show info

lcd.clear(); //Then clean it


}





void loop()

{


while (digitalRead(6) == 0) //If the toggle switch is set in recording mode

{

lcd.setCursor(0, 0); lcd.print("Recording..");

lcd.setCursor(0, 1);


Detect_button();

Play_tone();

}




while (digitalRead(6) == 1) //If the toggle switch is set in Playing mode

{

lcd.clear();

lcd.setCursor(0, 0); lcd.print("Now Playing..");


for (int i = 0; i < sizeof(recorded_button) / 2; i++)

{

delay((recorded_time[i]) * 10); //Wait for before paying next tune


if (recorded_button[i] == 0)

noTone(7); //user dint touch any button

else

tone(7, notes[(recorded_button[i] - 1)]); //play the sound corresponding to the button touched by the user

}

}

}





void Detect_button()

{

analogVal = analogRead(A0); //read the analog voltag on pin A0


pev_button = button; //remember the previous button pressed by the user


if (analogVal < 550)

button = 8;


if (analogVal < 500)

button = 7;


if (analogVal < 450)

button = 6;


if (analogVal < 400)

button = 5;


if (analogVal < 300)

button = 4;


if (analogVal < 250)

button = 3;


if (analogVal < 150)

button = 2;


if (analogVal < 100)

button = 1;


if (analogVal > 1000)

button = 0;




/****Rcord the pressed buttons in a array***/

if (button != pev_button && pev_button != 0)

{

recorded_button[button_index] = pev_button;

button_index++;

recorded_button[button_index] = 0;

button_index++;

}

/**End of Recording program**/

}



void Play_tone()

{


/****Rcord the time delay between each button press in a array***/

if (button != pev_button)

{

lcd.clear(); //Then clean it

note_time = (millis() - start_time) / 10;


recorded_time[time_index] = note_time;

time_index++;


start_time = millis();

}

/**End of Recording program**/


if (button == 0)

{

noTone(7);

lcd.print("0 -> Pause..");

}


if (button == 1)

{

tone(7, notes[0]);

lcd.print("1 -> NOTE_C4");

}


if (button == 2)

{

tone(7, notes[1]);

lcd.print("2 -> NOTE_D4");

}


if (button == 3)

{

tone(7, notes[2]);

lcd.print("3 -> NOTE_E4");

}


if (button == 4)

{

tone(7, notes[3]);

lcd.print("4 -> NOTE_F4");

}


if (button == 5)

{

tone(7, notes[4]);

lcd.print("5 -> NOTE_G4");

}


if (button == 6)

{

tone(7, notes[5]);

lcd.print("6 -> NOTE_A4");

}


if (button == 7)

{

tone(7, notes[6]);

lcd.print("7 -> NOTE_B4");

}


if (button == 8)

{

tone(7, notes[7]);

lcd.print("8 -> NOTE_C5");

}

}


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 揚(yáng)聲器
    +關(guān)注

    關(guān)注

    29

    文章

    1286

    瀏覽量

    62504
  • 蜂鳴器
    +關(guān)注

    關(guān)注

    12

    文章

    888

    瀏覽量

    45794
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6455

    瀏覽量

    186378
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Arduino新玩法:在紙上畫一架能彈的鋼琴

    如果說(shuō)你想過(guò)買一架鋼琴,都是又被它高昂的價(jià)格嚇退了。那么退而求其次,試試 Touch Board 吧。Touch Board 是種基于 Arduino 控制器的創(chuàng)意設(shè)備,它與電子墨水
    發(fā)表于 08-13 16:12

    請(qǐng)教個(gè)日版100V電鋼琴電源問(wèn)題

    一架鋼琴,電源是100V的。想改成220V的,請(qǐng)教下應(yīng)該怎么辦呢?下面是電源板和電路圖。我本來(lái)想直接換個(gè)變壓器上去,但是沒(méi)有找到合適的,接110V電源測(cè)量變壓器次級(jí)輸出是16V
    發(fā)表于 04-05 12:31

    一架四軸原理圖共享

    經(jīng)過(guò)兩個(gè)月的調(diào)試,第一架四軸已經(jīng)起飛,由于程序沒(méi)有定高,在室外飛,然后遙控失控,然后就上天了,至今沒(méi)見(jiàn)下來(lái)。教訓(xùn)啊。共享原理圖,PCB,程序。取自原子哥的,還會(huì)給原子哥。謝謝12.4 四軸V3.0.zip (10.46 MB )夢(mèng)V1.0.zip (6.6 MB )
    發(fā)表于 07-12 04:36

    有趣的激光豎琴制作 電子資料

    在上次的上海世博會(huì)的伊朗館里,我看到了一架沒(méi)有琴弦的豎琴,那是眾多參觀者公認(rèn)的伊朗館里最有趣的展品!參觀者只要伸手穿過(guò)那架通體黑色的豎琴,音調(diào)就會(huì)被“奏響”。沒(méi)有琴弦怎么奏響?工作人員為我們揭示了秘密——他按了...
    發(fā)表于 04-20 06:39

    華夏航空迎來(lái)了2019年第一架空客A320飛機(jī)

    隨著一架嶄新的空客A320客機(jī)B-306X平穩(wěn)降落在重慶江北國(guó)際機(jī)場(chǎng),華夏航空迎來(lái)了2019年第一架空客A320飛機(jī),至此,華夏航空機(jī)隊(duì)規(guī)模達(dá)到45。
    發(fā)表于 01-21 16:44 ?6788次閱讀

    Hyqreal機(jī)器狗可拉動(dòng)一架3噸重的飛機(jī)

    Hyqrea拉動(dòng)一架3.3噸重的Piaggio P180 Avanti客機(jī)近33英尺。
    的頭像 發(fā)表于 06-20 16:48 ?3802次閱讀

    怎么樣才能設(shè)計(jì)一架航模飛機(jī)

    按照現(xiàn)成的圖紙制作一架模型飛機(jī),不是件太難的事。但是,如果根據(jù)您的需要自己設(shè)計(jì)制作一架飛機(jī),恐怕就具有定的挑戰(zhàn)性了。當(dāng)您要下手設(shè)計(jì)制作時(shí),會(huì)遇到很多需要解決的問(wèn)題。如:為什么要選用
    發(fā)表于 11-13 15:55 ?16次下載

    如何使用Arduino制作觸控電容式鋼琴

    本教程對(duì)于電子制造商來(lái)說(shuō)將非常令人興奮,因?yàn)槲覀儗⑹褂?Arduino Nano 設(shè)計(jì)我們自己的觸控電容式鋼琴。我們將在我們的鋼琴上加入錄音和回放功能。
    發(fā)表于 07-28 16:47 ?3152次閱讀
    如何使用<b class='flag-5'>Arduino</b>制作觸控電容式<b class='flag-5'>鋼琴</b>

    Arduino DUE和電阻器制作鋼琴

    電子發(fā)燒友網(wǎng)站提供《Arduino DUE和電阻器制作鋼琴.zip》資料免費(fèi)下載
    發(fā)表于 11-07 10:31 ?0次下載
    <b class='flag-5'>Arduino</b> DUE和電阻器制作<b class='flag-5'>鋼琴</b>

    用鍵盤和Piezos構(gòu)建Netduino復(fù)音鋼琴

    電子發(fā)燒友網(wǎng)站提供《用鍵盤和Piezos構(gòu)建Netduino復(fù)音鋼琴.zip》資料免費(fèi)下載
    發(fā)表于 11-08 15:23 ?0次下載
    用鍵盤和Piezos<b class='flag-5'>構(gòu)建</b>Netduino復(fù)音<b class='flag-5'>鋼琴</b>

    Arduino鋼琴庫(kù)發(fā)布

    電子發(fā)燒友網(wǎng)站提供《Arduino鋼琴庫(kù)發(fā)布.zip》資料免費(fèi)下載
    發(fā)表于 11-16 10:56 ?0次下載
    <b class='flag-5'>Arduino</b><b class='flag-5'>鋼琴</b>庫(kù)發(fā)布

    基于Arduino鋼琴機(jī)器人

    Arduino Uno板控制88個(gè)螺線管彈鋼琴。多年前,雅馬哈推出了自動(dòng)鋼琴。年輕天真的我看到了樂(lè)器店的玻璃窗后面那架正在彈奏音樂(lè)的鋼琴
    發(fā)表于 12-05 17:20 ?0次下載

    基于Arduino UNO的迷你鋼琴

    執(zhí)行器來(lái)影響周圍環(huán)境。我們項(xiàng)目關(guān)注的感官之是聲音。我們已經(jīng)創(chuàng)建了個(gè)微型版本的鋼琴,它可以像普通鋼琴樣產(chǎn)生音符。它是如何工作的?完成連接
    發(fā)表于 12-19 16:59 ?0次下載

    基于Arduino設(shè)計(jì)的簡(jiǎn)單小鋼琴

    方案介紹個(gè)簡(jiǎn)單的小型鋼琴,不僅顧名思義,而且很小,但它源自Arduino Nano Every。硬件部件Arduino Nano Every×?? ?1個(gè)?? ?電阻1k歐姆?? ?
    發(fā)表于 12-30 15:20 ?0次下載

    鋼琴老師:Arduino+LEDs+MIDI鍵盤+MuseScore

    電子發(fā)燒友網(wǎng)站提供《鋼琴老師:Arduino+LEDs+MIDI鍵盤+MuseScore .zip》資料免費(fèi)下載
    發(fā)表于 06-15 11:01 ?0次下載
    <b class='flag-5'>鋼琴</b>老師:<b class='flag-5'>Arduino</b>+LEDs+MIDI鍵盤+MuseScore