วันนี้เรามาหาอะไรทำสนุกๆ กับ Arduino กันดีกว่าครับ อุปกรณ์ที่จะใช้วันนี้ก็ไม่มีอะไรมาก (มีให้ในชุด Arduino Kit 1 ของร้านเรา) แค่ Speaker ขนาดเล็ก 32 โอห์ม 1 W กับ Board Arduino ของเรา
การต่อวงจรก็ไม่มีอะไรมากครับ ง่ายสุด ต่อ Speaker กับ Digital port 8 ผ่านตัวต้านทานซะหน่อย เพื่อลดความดังของลำโพง เอาซัก 50 - 100 โอห์ม ก็พอ แต่ถ้าไม่ต่อก็ต้องระวังบอร์ดจะขับกระแสเกิน หรือ จะได้เสีงดังซักหน่อยเท่านั้นครับ
จากนั้นก็มาดูที่ Sketch กัน
ฟังก์ชั่นที่ใช้ก็ไม่มีอะไรมากครับ แค่ Tone()กับ noTone() เท่านั้น จากนั้นมาดูรายละเอียดกันนิดนึงครับ
ฟังก์ชั่น Tone() ก็มี Syntax ตามนี้ครับ
tone(pin, frequency, duration)
เอาไว้เลือก Pin ที่จะขับเสียงออก และความถี่ของเสียง (เสียงสูง-ต่ำ) และระยะเวลาที่เสียงจะดัง
ส่วน noTone() ก็แค่หยุดเสียงที่จะขับออกที่ Pin ที่เรากำหนดเท่านั้นครับ
คราวนี้มาดูที่ Sketch ของเราในวันนี้ครับ ผมดัดแปลงในส่วนที่เล่นเพลง โดยใช้ Sketch จาก Arduino.cc/en/Tutorial นะครับ
/*MelodyPlays a melodycircuit:* 8-ohm speaker on digital pin 8created 21 Jan 2010modified 30 Aug 2011by Tom IgoeThis example code is in the public domain.http://arduino.cc/en/Tutorial/ToneModified by Arduitronics.com*/#include "pitches.h"// เพลง "หนูมาลีมีลูกแมวเหมืยว" โดย Arduitronics.com// notes in the melody:int melody[] = {NOTE_E4, NOTE_D4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_G4, NOTE_G4,NOTE_E4, NOTE_D4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_D4, NOTE_C4};// note durations: 4 = quarter note, 8 = eighth note, etc.:int noteDurations[] = {3, 6, 4, 4, 4, 4, 2, 4, 4, 2, 4, 4, 2,3, 6, 4, 4, 4, 4, 2, 4, 4, 3, 3, 1 };void setup() {// iterate over the notes of the melody:for (int thisNote = 0; thisNote < 25; thisNote++) {// to calculate the note duration, take one second// divided by the note type.//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.int noteDuration = 1000/noteDurations[thisNote];tone(8, melody[thisNote],noteDuration);// to distinguish the notes, set a minimum time between them.// the note's duration + 30% seems to work well:int pauseBetweenNotes = noteDuration * 1.30;delay(pauseBetweenNotes);// stop the tone playing:noTone(8);}}void loop() {// no need to repeat the melody.} |
แต่ยังไม่จบเท่านี้ครับ ลองดูใน Sketch นะครับ เนื้อเพลงคือส่วนที่ผม Highlight ไว้ วันนี้นึกเพลงไม่ออกก็เลยจัด "หนูมาลีมีลูกแมวเหมียว" ไปให้
// notes in the melody:
int melody[] = {
NOTE_E4, NOTE_D4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_G4, NOTE_G4,
NOTE_E4, NOTE_D4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_D4, NOTE_C4
};
// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
3, 6, 4, 4, 4, 4, 2, 4, 4, 2, 4, 4, 2,
3, 6, 4, 4, 4, 4, 2, 4, 4, 3, 3, 1 };
ถ้าสังเกตดู เพลงแต่ละเพลงจะมี 2 ส่วนสำคัญนะครับ คือเนื้อเพลง melody[] กับ จังหวะ noteDurations[]
อยากรู้มั้ยครับว่าผมแกะเพลงยังไง ไม่ยากครับ ไปที่นี่เลย Virtual Keyboard แล้วเล่นเพลงที่คุณชอบ แต่อย่าลืมจดโน็ตไว้ด้วยนะครับ อย่างเพลงหนูมาลีนี้ก็คือ "EDCDEEE DDDEGG EDCDEEE DDEDC"
จากนั้นกำหนดความยาวของโน็ตแต่ละโน็ต ในตัวอย่างนี้หนึ่งห้องโน็ต ยาว 1 วินาที เล่นได้ 4 ตัวโน็ต ถ้าต้องการเล่นยาว ให้ใช้เลขมาก ถ้าเล่นสั้นก็เลขน้อย เช่น noteduration = 4 หมายถึง 1 จังหวะ ถ้า noteduration = 2 หมายถึง 2 จังหวะครับ
จากนั้นอย่าลืมใส่ library นะครับ การใส่ Library ให้ทำโดยเปิดหน้าต่างใหม่ และตั้งชื่อว่า "pitches.h"
ใน New Tab นี้ให้ใส่ค่าความถี่ของเสียงตามนี้ครับ โดย Library นี้จะใส่ความถี่ของเสียงตามโน็ตที่ต้องเล่นครับ เช่น NOTE_C4 262 คือ "โด กลาง" NOTE_CS4 277 คือ "โดชาร์ป กลาง"
NOTE_D4 262 คือ "เร กลาง" NOTE_DS4 311 คือ "เร ชาร์ป กลาง"
NOTE_E4 330 คือ "มี กลาง"
NOTE_C5 523 คือ "โด ออกเตฟที่สูงขึ้น" NOTE_CS5 554 คือ "โดชาร์ป ออกเตฟที่สูงขึ้น"
ก็จะไล่ไปเรี่อยๆแบบนี้ครับ ได้ทั้งออกเตฟที่ต่ำและสูงนะครับ
/************************************************** Public Constants*************************************************/#define NOTE_B0 31#define NOTE_C1 33#define NOTE_CS1 35#define NOTE_D1 37#define NOTE_DS1 39#define NOTE_E1 41#define NOTE_F1 44#define NOTE_FS1 46#define NOTE_G1 49#define NOTE_GS1 52#define NOTE_A1 55#define NOTE_AS1 58#define NOTE_B1 62#define NOTE_C2 65#define NOTE_CS2 69#define NOTE_D2 73#define NOTE_DS2 78#define NOTE_E2 82#define NOTE_F2 87#define NOTE_FS2 93#define NOTE_G2 98#define NOTE_GS2 104#define NOTE_A2 110#define NOTE_AS2 117#define NOTE_B2 123#define NOTE_C3 131#define NOTE_CS3 139#define NOTE_D3 147#define NOTE_DS3 156#define NOTE_E3 165#define NOTE_F3 175#define NOTE_FS3 185#define NOTE_G3 196#define NOTE_GS3 208#define NOTE_A3 220#define NOTE_AS3 233#define NOTE_B3 247#define NOTE_C4 262#define NOTE_CS4 277#define NOTE_D4 294#define NOTE_DS4 311#define NOTE_E4 330#define NOTE_F4 349#define NOTE_FS4 370#define NOTE_G4 392#define NOTE_GS4 415#define NOTE_A4 440#define NOTE_AS4 466#define NOTE_B4 494#define NOTE_C5 523#define NOTE_CS5 554#define NOTE_D5 587#define NOTE_DS5 622#define NOTE_E5 659#define NOTE_F5 698#define NOTE_FS5 740#define NOTE_G5 784#define NOTE_GS5 831#define NOTE_A5 880#define NOTE_AS5 932#define NOTE_B5 988#define NOTE_C6 1047#define NOTE_CS6 1109#define NOTE_D6 1175#define NOTE_DS6 1245#define NOTE_E6 1319#define NOTE_F6 1397#define NOTE_FS6 1480#define NOTE_G6 1568#define NOTE_GS6 1661#define NOTE_A6 1760#define NOTE_AS6 1865#define NOTE_B6 1976#define NOTE_C7 2093#define NOTE_CS7 2217#define NOTE_D7 2349#define NOTE_DS7 2489#define NOTE_E7 2637#define NOTE_F7 2794#define NOTE_FS7 2960#define NOTE_G7 3136#define NOTE_GS7 3322#define NOTE_A7 3520#define NOTE_AS7 3729#define NOTE_B7 3951#define NOTE_C8 4186#define NOTE_CS8 4435#define NOTE_D8 4699#define NOTE_DS8 4978 |
อย่าลืมนะครับ ถ้าไม่เพิ่ม Library pitch.h ใน New Tab จะ Compile ไม่ผ่านเพราะมันจะหา Library ที่เรียกไม่เจอ
ถ้าอยากฟังเพลงหนูมาลีอีกรอบ ก็แค่ กด Reset นะครับ เพราะ Sketch นี้เขียนไว้เฉพาะใน Setup() เท่านั้นครับ ไม่ได้วน Loop
เอาละครับคราวนี้ก็ไอเดียบรรเจิดอีกนิดก็ได้ นั่นคืออาจะมีการใช้ Speaker แบบนี้อีกตัวหรือ 2 ตัวให้ขับชับ Digital Port อื่นๆ ที่มีเหลืออยู่อีกเยอะ เพื่อให้ Arduino ของเราสามารถมีเสียประสานจากหลายลำโพง และเล่นโน็ตเพลงได้หลายระดับเสียงในเวลาเดียวกันก็ได้ครับ
วันนี้พอแค่นี้ก่อนนะครับ เขียนมายาวมากแล้ว ถ้ามีอะไรจะสอบถามเพิ่มเติมก็ยินดีครับ
โดย Mountain "A"
หน้านี้เป็นสารบัญของบทความที่ปรากฏในเว็บของ Arduitronics.com นะครับ จะขอแบ่งออกเป็นหัวข้อตามกลุ่มของสินค้าในร้านดังต่อไปนี้
หน้าที่เข้าชม | 15,393,408 ครั้ง |
ผู้ชมทั้งหมด | 5,896,486 ครั้ง |
เปิดร้าน | 21 พ.ค. 2556 |
ร้านค้าอัพเดท | 16 ก.ย. 2568 |