- 필요한 하드웨어 :
- Arduino 의 Tone () 함수 이해 :
- pitches.h의 헤더 파일 :
- Arduino에서 음표 재생 :
- 회로도 및 하드웨어 :
- Arduino 프로그램 설명 :
- 이 멜로디 플레이어 Arduino 회로의 작동 :
Arduino는 거의 모든 것을 단순하게 만든 개발자 커뮤니티 덕분에 마이크로 컨트롤러 프로젝트를 단순화하고 속도를 높일 수있는 훌륭한 방법입니다. 시도하고 즐길 수있는 Arduino 프로젝트가 많이 있습니다. 프로젝트 중 일부는 무언가에 대해 알리거나 시청자에게 감동을주기 위해 사운드 액션이 필요할 수 있습니다. 피아노에서 연주 할 수있는 거의 모든 주제곡을 간단한 프로그램과 저렴한 Piezo 스피커의 도움으로 Arduino에서 모방 할 수 있다고 말하면 어떨까요?
이 튜토리얼에서는 Arduino 톤 () 기능을 사용하여 Piezo Buzzer 또는 Speaker에서 Melody 를 재생 하는 것이 얼마나 간단하고 쉬운 지 배웁니다. 이 튜토리얼이 끝나면 Pirates of Caribbean, Crazy Frog, Super Mario 및 Titanic의 유명한 음색을 연주 할 수 있습니다. 또한 Arduino로 피아노 음악을 연주하는 방법도 배웁니다. 마지막에 비디오를 확인하십시오.
필요한 하드웨어:
- Arduino (모든 버전 – 여기에서는 UNO가 사용됨)
- 피에조 스피커 / 부저 또는 기타 8ohm 스피커.
- 브레드 보드
- 전선 연결
- 푸시 버튼
- 1k 저항기 (옵션)
Arduino 의 Tone () 함수 이해:
톤 () 이 어떻게 작동 하는지 이해하기 전에 피에조 버저가 어떻게 작동하는지 알아야합니다. 우리 학교에서 피에조 크리스탈에 대해 배웠을 수도 있습니다. 그것은 기계적 진동을 전기로 또는 그 반대로 변환하는 크리스탈에 지나지 않습니다. 여기에서 크리스탈이 진동하여 소리를내는 가변 전류 (주파수)를 적용합니다. 따라서 Piezo 부저가 약간의 소음을 내기 위해서는 Piezo 전기 크리스탈이 진동하도록 만들어야합니다. 소음의 피치와 톤은 크리스탈이 얼마나 빨리 진동하는지에 따라 달라집니다. 따라서 전류의 주파수를 변경하여 톤과 피치를 제어 할 수 있습니다.
좋아, 그럼 Arduino에서 가변 주파수를 어떻게 얻 습니까? 톤 () 기능이 들어오는 곳입니다. 톤 ()은 특정 핀에서 특정 주파수를 생성 할 수 있습니다. 필요한 경우 기간도 언급 할 수 있습니다. 톤 () 의 구문 은 다음과 같습니다.
구문 tone (pin, frequency) tone (pin, frequency, duration) 매개 변수 pin: 톤 주파수를 생성 할 핀: 톤 주파수 (헤르츠 단위)-unsigned int duration: 톤의 기간 (밀리 초) (선택 사항) -부호없는 긴
핀 값은 디지털 핀이 될 수 있습니다. 여기에 8 번 핀을 사용했습니다. 생성 할 수있는 주파수는 Arduino 보드의 타이머 크기에 따라 다릅니다. UNO 및 대부분의 다른 일반 보드의 경우 생성 할 수있는 최소 주파수는 31Hz이고 생성 할 수있는 최대 주파수는 65535Hz입니다. 그러나 우리 인간은 2000Hz에서 5000Hz 사이의 주파수 만들을 수 있습니다.
pitches.h의 헤더 파일:
이제 arduino tone () 함수를 사용하여 노이즈를 생성하는 방법을 알고 있습니다 . 그러나 각 주파수에 대해 어떤 종류의 톤이 생성되는지 어떻게 알 수 있습니까?
Arduino는 각 주파수를 특정 음표 유형과 동일시하는 음표 테이블을 제공했습니다. 이 노트 테이블은 원래에 의해 작성되었습니다 브렛 그만 누구의 작품에, 톤 () 명령을 기반으로했다. 이 노트 테이블을 사용하여 테마를 재생합니다. 악보에 익숙한 사람이라면이 표를 이해할 수있을 것입니다. 저와 같은 다른 사람에게는 이것들이 또 다른 코드 블록 일뿐입니다.
#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 123 #define NOTE_AS2 117 #define NOTE_AS2 117 #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 233 #define NOTE_AS3 233 #define NOTE_AS3 165 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 698 #define NOTE_E5 698 #define NOTE_E5 622 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 1480 #define NOTE_FS6 1480 #define NOTE_FS6 1480 #define NOTE_E6 1319 #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_F7 2637 NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS73729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
코드가이 zip 파일에 pitches.h 헤더 파일에 주어진보다도 , 당신은 다운로드해야하고, 끝이 튜토리얼에서 제공 또는 zip 파일에 주어진 코드를 사용하여 우리의 아두 이노 코드에서이 파일을 포함한다.
Arduino에서 음표 재생:
Arduino를 사용하여 괜찮은 멜로디를 연주하려면 이러한 멜로디를 구성하는 요소를 알아야합니다. 테마를 플레이하는 데 필요한 세 가지 주요 요소는 다음과 같습니다.
- 참고 값
- 참고 기간
- 속도
음표 값을 재생할 수 있는 pitches.h 헤더 파일이 있습니다. 이제 재생하기위한 특정 음표 지속 시간을 찾아야합니다. 템포는 멜로디가 얼마나 빨리 연주되어야 하는가에 불과합니다. 음표 값과 음표 지속 시간을 알고 나면 다음과 같이 tone () 과 함께 사용할 수 있습니다.
톤 (pinName, Note Value, Note Duration);
이 튜토리얼에서 연주되는 톤의 경우 프로젝트에서 재생할 수있는 "themes.h"헤더 파일에 음표 값과 음표 지속 시간을 제공했습니다. 그러나 광산에 특정 톤이 있고 프로젝트에서 재생하고 싶다면 계속 읽으십시오…. 그렇지 않으면이 주제를 건너 뛰고 다음으로 넘어가십시오.
특정 톤을 재생하려면 특정 음악의 악보를 가져 와서 음표 값과 음표 지속 시간을 읽어 악보를 Arduino 스케치로 변환해야합니다. 당신이 음악 학생이라면 케이크 조각이 될 것입니다. 그렇지 않으면 시간을 보내고 나처럼 머리를 부러 뜨립니다. 그러나 하루가 끝나면 Piezo 버저에서 톤이 재생되면 노력의 가치가 있음을 알게 될 것입니다.
음표 값과 음표 지속 시간이 있으면 아래와 같이 "themes.h"헤더 파일 내의 프로그램에로드합니다.
// ############## ** "HE IS A PIRATE"주제가 of Pirates of caribbean ** ############# // int Pirates_note = {NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4 NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_D4, 0, NOTE_A3, NOTE_C4, NOTE_B3, NOTE_C4, NOTE_B3, NOTE_C4, NOTE_B3, NOTE_C4, NOTE_B3 NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_D4, 0, 0, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A3 0, NOTE_D4, NOTE_E3, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_D4, 0, NOTE_D4, NOTE_F4,NOTE_E4, NOTE_E4, NOTE_F4, NOTE_D4}; int Pirates_duration = {4,8,4,8,4,8,8,8,8,4,8,4,8,4,8,8,8,8,4,8,4,8, 4, 8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,8,8, 4,4,8,8,4,4,8,4, 4,8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,4,8,4,8,8,8,4,4,8,8}; // ########### End of He is a Pirate song ############# //
위의 코드 블록은 영화 캐리비안의 해적에서 "He is a Pirate"테마의 음표 값과 음표 지속 시간을 보여줍니다. 이와 유사하게 테마를 추가 할 수 있습니다.
회로도 및 하드웨어:
이 Arduino Tone Generator 프로젝트 프로젝트 의 회로도는 아래 그림에 나와 있습니다.
연결은 매우 간단합니다. 1K 저항을 통해 Arduino의 핀 8과 접지에 연결된 Piezo 스피커가 있습니다. 이 1k 저항은 전류 제한 저항으로 전류를 안전 한계 내로 유지하는 데 사용됩니다. 필요한 멜로디를 선택할 수있는 4 개의 스위치도 있습니다. 스위치의 한쪽 끝은 접지에 연결되고 다른 쪽 끝은 각각 핀 2, 3, 4 및 5에 연결됩니다. 스위치에는 소프트웨어를 사용하여 내부적으로 풀업 저항이 활성화됩니다. 회로가 매우 간단하기 때문에 아래와 같이 브레드 보드를 사용하여 연결할 수 있습니다.
Arduino 프로그램 설명:
개념을 이해하면 Arduino 프로그램은 매우 간단합니다. 전체 코드는 튜토리얼의 끝에 제공됩니다. 헤더 파일 추가에 익숙하지 않은 경우 여기에서 코드를 ZIP 파일로 다운로드하여 Arduino에 직접 업로드 할 수 있습니다.
위의 2 개는 추가해야하는 헤더 파일입니다. "pitches.h" 는 각 음표를 특정 주파수와 동일시하는 데 사용되며 "themes.h" 에는 4 가지 음색 모두의 음표 값과 음 길이가 포함됩니다.
#include "pitches.h"#include "themes.h"
필요한 경우 각 톤을 재생하는 기능이 생성됩니다. 여기서 Play_Pirates () 함수 가 호출되면 "He is a Pirate"톤이 재생됩니다. 이 함수는 핀 번호 8에서 주파수를 생성하는 톤 함수로 구성됩니다. 음악이 재생되면 noTone (8) 이 호출되어 음악이 중지됩니다. 자신의 톤을 연주하려면 Pirates_note 및 Pirates_duration을 "themes.h" 값에 저장 한 새 음표 및 기간 값으로 변경하십시오.
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // 시간 지연 톤으로 기간 변환 (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1.05; // 여기서 1.05는 템포입니다. 더 느리게 재생하려면 증가시킵니다. delay (pauseBetweenNotes); noTone (8); }}
핀 2, 3, 4 및 5는 재생할 특정 톤을 선택하는 데 사용됩니다. 이러한 핀은 위의 코드 줄을 사용하여 내부 풀업 저항을 사용하여 기본적으로 높게 유지됩니다. 버튼을 누르면지면으로 당겨집니다.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
아래 코드 블록은 버튼을 눌렀을 때 노래를 재생하는 데 사용됩니다. 각 버튼의 디지털 값을 읽고 낮아지면 (0) 버튼을 눌렀다 고 가정하고 필요한 기능을 호출하여 각 톤을 재생합니다.
if (digitalRead (2) == 0) {Serial.println ("Selected-> 'He is a Pirate'"); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Selected-> 'Crazy Frog'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("선택됨-> '마리오 언더 월드'"); Play_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Selected-> 'He is a Pirate'"); Play_Pirates (); }
이 멜로디 플레이어 Arduino 회로의 작동:
코드와 하드웨어가 준비되면 프로그램을 Arduino에 굽기 만하면 버튼을 누르기 만하면 톤을 재생할 수 있습니다. 문제가있는 경우 디버깅을 위해 직렬 모니터를 살펴 보거나 의견 섹션을 사용하여 문제를보고하면 기꺼이 도와 드리겠습니다.
프로젝트의 전체 작업은 아래 비디오에 나와 있습니다. 프로젝트가 즐거웠기를 바라며 프로젝트 일부에서 사용하거나 프로젝트에 새로운 톤을 만들 수 있기를 바랍니다. 그렇다면 의견 섹션에서 작업을 자유롭게 공유하십시오.