Fruit piano

Fruit piano

Fruit piano

Trong bài hướng dẫn này, chúng ta sẽ cùng nhau thiết kế một cây đàn piano sử dụng các loại trái cây ngay trong bếp nhà bạn nhé!

Chuẩn bị

  • 1 board UnoX.
  • 1 bread board.
  • 1 buzzer.
  • 4 điện trở 1M Ohm.
  • 4 trái cây bất kỳ (VD: chuối).
  • Một vài dây cắm để kết nối

Nguyên lý hoạt động

  • Mỗi phím piano là 1 mạch chia điện áp giữa điện trở 1M Ohm và 1 miếng trái cây. Chạm vào miếng trái cây sẽ làm thay đổi điện áp giữa điện trở và miếng trái cây. UnoX có thể đo mức thay đổi điện áp này bằng các ngõ vào analog.
  • Để hoàn thành mạch này, 1 tay cần phải chạm vào GND của Unox, tay còn lại sẽ chạm vào trái cây. Để kết nối trái cây với mạch điện, chỉ cần cắm trực tiếp dây cắm vào trái cây đó.
  • Khi không chạm tay, mạch trở thành mạch hở. Điện áp tại ngõ vào analog là 5V, và giá trị đọc được sẽ là 1023.
  • Khi chạm tay vào miếng trái cây, miếng trái cây sẽ đóng vai trò là một điện trở. Như vậy, mạch điện trở thành mạch chia áp. Tùy thuộc vào giá trị điện trở của miếng trái cây, giá trị analog đọc được sẽ nhỏ hơn một giá trị ngưỡng, ở đây chọn là 1020. Lúc này, buzzer sẽ phát ra âm thanh được cài đặt sẵn.

Kết nối bộ phím piano bằng trái cây

  • Trong bài này, chỉ sử dụng 4 phím piano được kết nối vào các chân A0, A1, A2, A3. Tuy nhiên, bạn cũng có thể sử dụng nhiều trái cây hơn để tạo ra 1 cây piano hoàn chỉnh.

Buzzer

  • Buzzer là một loại còi để báo hiệu bằng cách cấp điện áp cho nó, tuy nhiên ta cũng có thể thay đổi mức điện áp để tạo ra các âm thanh khác nhau bằng cách kết nối nó với 1 chân PWM (chân có dấu ~) trên UnoX.

    • Bảng kết nối
BuzzerBoard UnoX
Chân +Chân 11
Chân GNDChân GND

Mô hình thực tế và lập trình

  • Kết hợp 2 mô hình trên, ta thu được mô hình kết nối tổng quát như như bên.
  • Bài toán:

    • Đọc tín hiệu từ các chân A0, A1, A2, A3.
    • Nếu có sự thay đổi điện áp lên các chân này thì phát âm thanh ra buzzer theo những âm bất kỳ được cài đặt sẵn.
  • Sử dụng thư viện:

    • Đọc sử thay đổi điện áp: dùng analogRead.
    • Phát âm thanh trên buzzer: dùng hàm tone (hàm có sẵn của arduino).
int melodia1 = 261;
int melodia2 = 523;                        
int melodia3 = 1046;
int melodia4 = 880;

int zumbador = 11;
int numeroTonos = 1;

void setup(){
 Serial.begin(9600);
 pinMode(zumbador, OUTPUT); 
}

void loop(){
 Serial.print("Analog 1: ");
 Serial.println(analogRead(0));
 Serial.print("Analog 2: ");
 Serial.println(analogRead(1));
 Serial.print("Analog 3: ");
 Serial.println(analogRead(2));
 Serial.print("Analog 4: ");
 Serial.println(analogRead(3));
 
 if(analogRead(0)<=1020){
  tone(zumbador, melodia1);
  delay(500);
  noTone(zumbador);
 }
 if(analogRead(1)<=1020){
  tone(zumbador, melodia2);
  delay(500);
  noTone(zumbador);
 }
 if(analogRead(2)<=1020){
  tone(zumbador, melodia3);
  delay(500);
  noTone(zumbador);
 }
 if(analogRead(3)<=1020){
  tone(zumbador, melodia4);
  delay(500);
  noTone(zumbador);
 }
}

Kết quả

Sau khi hoàn thành thiết kế theo những bước như trên, ta sẽ thư được kết quả: