Pretvorite vaš Arduino u muzički instrument!

Da li ste se nekada zapitali da li je moguće napraviti primitivni klavir uz pomoć papira i olovke? Odgovor je: da. Sve što vam treba je nekoliko žica, par spajalica, parče papira i meka olovka (2B, ako je nemate, poslužiće i HB). Sve što treba da uradite jeste da nacrtate tastaturu na papiru i lepo je obojite (potrudite se da nema prekida u boji kako bi sve bilo lepo povezano). Grafit je zahvaljujući svojoj strukturi veoma dobar provodnik, što će nam poslužiti za pravljenje mini sintisajzera.

Ideja je sledeća:

Povezaćemo naš Arduino Leonardo (ili Arduino Uno) sa našom tastaturom iz „kućne radinosti“ i piezo zvučnikom i vaša muzička karijera može da počne :)

Šta je potrebno od materijala:

 

Na slici je šema u kojoj je korišćen Arduino Leonardo. Arduino Uno se može povezati na isti način. Crvena i crna žica koje izlaze iz Arduina (sa gornje strane) će preko spajalica biti povezane sa tastaturom. Zelenom žicom ćemo pritiskati naše nacrtane tastere.

Papirna tastatura se dobija crtanjem i senčenjem pravougaonika na papiru za štampu. Možete nacrtati svoju tastaturu na računaru, odštampati i obojiti je 2B olovkom. Važno je samo da sve dirke budu dobro povezane kako bi postojala zatvorena kontura od Arduina preko papira i nazad do Arduina. Na ivici papira iscrtajte malo šire linije (pravougaonike) za koje ćete pričvrstiti spajalice. Važno je da spajalice ne budu plastificirane, kako bi mogle da provode struju. Za spajalice pričvrstite crvenu i crnu žicu tako da se formira već pomenuta kontura.

Zvučnik koji koristimo u ovom primeru je piezoelektrični zvučnik (zovu ih još i visokotonci, tviteri) i radi na principu piezoelektričnog efekta. Sastoji se od piezo kristala koji imaju tu osobinu da dolazi do deformacije kada kroz njih teče električna energija (kada fizički vršimo pritisak na sam kristal na njegovim krajevima se javlja napon – druga strana piezo efekta). Pošto je za kristal pričvršćena membrana zvučnika, kretanjem kristala vibrira i membrana i tako dolazi do stvaranja zvuka. Otpornik koji je vezan za jedan kraj zvučnika je tu da bi ograničio struju koja protiče kroz sam zvučnik (kako ne bi došlo do trajne deformacije kristala i pucanja membrane, a time i samog zvučnika).

Arduino sintisajzer izgleda ovako:

arduino_muzicki_instrument

Programski kod* koji se učitava na Vaš Arduino možete videti ovde:

#include "pitches.h"

int melody[] = { NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};

int noteDurations[] = { 4, 8, 8, 4,4,4,4,4 };

int speakerPin = 8;
int inputPin = A0;
int old_tone = 0;

void setup() {

  pinMode(speakerPin, OUTPUT);
  pinMode(inputPin, INPUT);
  old_tone = GetTone(analogRead(inputPin));
  Serial.begin(115200);

}

void loop() {

  int value = MeasureWithFilter();
  Serial.println(value);
  int ton = GetTone(value);
  if(ton != old_tone){
    if(ton == 1){
      tone(speakerPin, NOTE_C3, 250);
    }
    else
      if(ton == 2){
        tone(speakerPin, NOTE_E3, 250);
      }
      else{
        tone(speakerPin, NOTE_G3, 250);
      }
    delay(350); 
    noTone(speakerPin);
    old_tone = ton;
  }

}

int GetTone(int value){
  int result = 3;
  if(value<300)
    result = 1;
  else
    if(value<600)
      result = 2;
  return result;
}

int MeasureWithFilter(){
  int value1 = analogRead(inputPin);
  delay(10);
  int value2 = analogRead(inputPin);
  delay(10);
  int value3 = analogRead(inputPin);
  delay(10);
  return floor( ( value1 + value2 + value3 ) / 3 );
}

Fajl pitches.h se mora nalaziti u istom direktorijumu kao i fajl u kome je programski kod i u njemu se nalaze opisi tonova kako bi Arduino mogao da pravilno koristi zvučnik.

Kako radi Arduino sintisajzer? Papirna tastatura se napaja strujom iz Arduina. Zelena žica (sa slike) je vezana na ulaz A0 koji predstavlja ulaz na A-D konvertor Arduina. Kada žicom pipnete na neki od vaših tastera, ta vrednost koja predstavlja napon u opsegu od 0 do 5V se konvertuje u opseg od 0 do 1023 (Arduino poseduje 10-bitni A-D konvertor). Na samom programskog koda vrši se inicijalizacija ulaznih i izlaznih pinova (u okviru funkcije setup() ), a zatim se prelazi na očitavanje vrednosti na A-D konvertoru. Ovo je u kodu realizovano na liniji  int value = MeasureWithFilter();  Ova funkcija cita vrednost napona na zici tri puta (sa razmakom od 10 milisekundi) i vrši usrednjavanje radi tačnije procene vrednosti. Zatim se dobijena vrednost šalje u funkciju GetTone, gde se poredi sa zadatim granicama i određuje se koji se ton pušta na zvučniku. Program koji se nalazi u glavnoj petlji (loop() ) poredi da li se novi očitani ton razlikuje od prethodnog, kako ne biste stalno slušali isti bip bip (posle nekog vremena postaje zamorno J ) i u slučaju da razlika postoji dobijeni ton se emituje na zvučniku.

Potrebno je da izvršite nekoliko merenja, kako biste odredili granice tastera. Vrednosti koje se dobiju kao rezultat A-D konverzije se ispisuju u okviru Serial Monitora u Arduino programskom okruženju. Kada odredite gornje i donje vrednosti koje odgovaraju tasterima, izmenite to u datom programskom kodu.

Na kraju ostaje samo da uživate i da se zabavite. Zvučnik koji koristimo u ovom primeru korektno radi sa visokim tonovima, dok niže pušta dosta slabije. Nećete se baš proslaviti kao koncert majstor, ali možete da odsvirate neku dečju pesmicu.

 

 

*Ako koristite Arduino Leonardo, bilo bi dobro da koristite prethodnu verziju Arduino razvojnog okruženja (1.0.4) jer sa aktuelnom (1.0.5) postoje problemi prilikom učitavanja koda. Verziju 1.0.4 možete skinuti ovde.