Chế tạo một cây đàn piano đơn giản với Arduino

Chế tạo một cây đàn piano đơn giản với Arduino

Chế tạo một cây đàn piano đơn giản với Arduino

  1. Linh kiện và giới thiệu mô hình

1 board Arduino Uno

7 button

1 loa hoặc buzzer

1 test board và nhiều dây cắm test board

Pin 9v,đế pin và jack kết nối pin với Arduino

Chắc hẳn nhiều người đã tự mơ ước về cây đàn piano để thỏa niềm vui với âm nhạc. Thế nên không có gì thú vị hơn việc tự tay tạo nên những âm thanh của phím đàn piano bằng 1 ứng dụng đơn giản mà chính tay bạn có thể tạo nên được từ board Arduino cùng một vài linh kiện đơn giản khác.

  1. Sơ đồ toàn mạch

8 button tương ứng với 8 nốt nhạc thông dụng mà ta thường gặp trong các loại nhạc cụ dùng phím như piano là do-re-mi-pha-son-la-si-đố. Khi nhấn vào từng button theo thứ tự ta sẽ nghe được.

III. Kết nối các linh kiện và giải thích mạch

8 button ta sẽ kết nối vào các ngõ digital của Arduino từ 2 đến 9. Khi ta bấm các button, Arduino sẽ xử lý tín hiệu điện áp ở các ngõ ra số,làm thay đổi tần số,từ đó tạo ra tín hiệu âm thanh ở các mức trầm và bổng khác nhau tương tự như phím đàn của piano.

Các tần số tương ứng là

1915, 1700, 1519, 1432, 1275, 1136, 1014, 956

  1. Giới thiệu về chương trình

Chương trình chỉ đơn giản là xuất tín hiệu là các tần số khác nhau tương ứng với các phím bấm qua loa để tạo nên các âm thanh tương tự đàn piano

int button_C = 2;
int button_D = 3;
int button_E = 4;
int button_F = 5;
int button_G = 6;
int button_A = 7;
int button_B = 8;
int button_Cup = 9;
int speaker = 13;

int buttonstate_C = 0;
int buttonstate_D = 0;
int buttonstate_E = 0;
int buttonstate_F = 0;
int buttonstate_G = 0;
int buttonstate_A = 0;
int buttonstate_B = 0;
int buttonstate_Cup = 0;
//NOTES         'c'  , 'd',  'e',  'f',  'g', 'a',  'b',  'C'
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; //freq
int Cur_tone = 0;
void setup()
{  
pinMode(button_C, INPUT);  
pinMode(button_D, INPUT);  
pinMode(button_E, INPUT);  
pinMode(button_F, INPUT);  
pinMode(button_G, INPUT);  
pinMode(button_A, INPUT);  
pinMode(button_B, INPUT);  
pinMode(button_Cup, INPUT);   

pinMode(speaker, OUTPUT);
}
void loop()
{        
buttonstate_C = digitalRead(button_C);        
buttonstate_D = digitalRead(button_D);        
buttonstate_E = digitalRead(button_E);        
buttonstate_F = digitalRead(button_F);        
buttonstate_G = digitalRead(button_G);        
buttonstate_A = digitalRead(button_A);        
buttonstate_B = digitalRead(button_B);        
buttonstate_Cup = digitalRead(button_Cup); 

if((buttonstate_C == HIGH) || (buttonstate_E == HIGH) ||
   (buttonstate_G == HIGH) || (buttonstate_D == HIGH) ||             
   (buttonstate_F == HIGH) || (buttonstate_A == HIGH) ||            
    (buttonstate_B == HIGH) || (buttonstate_Cup == HIGH) )        
{                
if (buttonstate_C == HIGH)               
{                       
Cur_tone = tones[0];               
}                
if (buttonstate_E == HIGH)              
 {                       
Cur_tone = tones[1];               
}               
if (buttonstate_G == HIGH)
{                       
Cur_tone = tones[2];                
}               
if (buttonstate_D == HIGH)               
{                       
Cur_tone = tones[3];               
}               
if (buttonstate_F == HIGH)               
{                       
Cur_tone = tones[4];               
}               
if (buttonstate_A == HIGH)               
{                       
Cur_tone = tones[5];               
}               
if (buttonstate_B == HIGH)               
{                       
Cur_tone = tones[6];               
}               
if (buttonstate_Cup == HIGH)              
 {                       
Cur_tone = tones[7];               
}
digitalWrite(speaker, HIGH);
delayMicroseconds(Cur_tone);               
digitalWrite(speaker, LOW);               
delayMicroseconds(Cur_tone);        
}        
else //in case no button is pressed , close the piezo        
{               
digitalWrite(speaker, LOW);        
} 
}