Buzzer

Uvod

Buzzer ili beeper je zvučno-signalizacijski uređaj. Može biti mehanički, elektromehanički ili piezoelektrični. Primjer mehaničkog je "joy buzzer" koji se koristi na starim budilicama, elektromehanički je onaj povezan na zvono vaših ulaznih vrata, a s piezo buzzerima ćemo se pozabaviti u ovom tutorialu.

DSC_8597

Piezo efekt

Piezo efekt je sposobnost materijala da generira električni naboj na dano mehaničko opterećenje. Ime potječe od grčke riječi piezo što znači pritisnuti, a otkirili su ga braća Pierre i Jacques Currie. Kada se piezoelektrični materijal izloži mehaničkom opterećenju (pritisak) događa se premještanje pozitivnog i negativnog naboja, što rezultira vanjskim električnim poljem. Odličan piezoelektrični materijal je quartz, koji pokreće quartz satove. Osim navedenih satova, novija primjena ove tehnologije je prepoznavanje govora. Pa tako mikrofon u koji govorite kada želite da računalo zapisuje vaš govor koristi piezo efekt kako bi energiju glasa pretvorio u električni signal kojeg računalo može obraditi.

ezgif.com-gif-maker
Što se tiće buzzera, u njemu se nalazi mala zavojnica i magnet. Kada struja poteče kroz zavojnicu, ona se magnetizira i povlaći prema magnetu. Iz predhodno objašnjenog piezo efekta, jasno nam je da će to izazvati mali "klik". Kako se to ponavlja nekoliko tisuća puta u sekunda, "klik" postaje zvuk.

Kako spojiti buzzer?

Pazeći na polaritet, spojiti ćemo negativni pol buzzera na gnd Croduina, te pozitivni na digitalni pin 9 Croduina. Možete spojiti jedan pol preko nekog otpornika, primjerice 100Ω. Napomena: buzzer mora biti spojen na PWM pin, ukoliko ne želite jednoliki zvuk. Ne zaboravite skinuti naljepnicu s buzzera.

buzz

 

Kod i Tone library

Tone library se nalazi u Arduino IDE i ne trebamo ga posebno instalirati. Koristi funkciju tone() na nekom od PWM pinova.
Sintaksa je sljedeća:
tone(pin, frekvencija);
tone(pin, frekvencija, trajanje);

gdje je:
pin - broj PWM pina
frekvencija - frekvencija tona u Hz (pogledaj frekvencije)
trajanje - duljina tona u milisekundima (nije nužno)

Primjer možete preuzeti ovdje. Kod reproducira pjesmu Hladnog Piva - Nije sve tako sivo. Šaljite nam Vaše, ako napravite nešto.

/*
  Ovaj kod svira pjesmu Hladnog Piva - Nije sve tako sivo
  tonovi koji su koristeni:
  
  ton  frekvencija
  a     220 Hz
  (a)#  233 Hz 
  c     262 Hz
  d     294 Hz
  f     349 Hz
  A     440 Hz

 Vise informacija na http://peabody.sapp.org/class/st2/lab/notehz/
 Written by e-radionica.com

*/

const int buzzerPin = 9;
const int duljinaPjesme = 32;  // mora biti koliko ima nota i pauza

char nota[] = "ddfd fda##d# d#affAf Afdaaa# #cc"; // razmak predstavlja pauzu

// ritam je array vrijednosti svake nota i pauze
// "1" predstavlja cetvrtinku, 2 polovinku i td.

int ritam[] = {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2};

// tepo je brzina izvođenja pjesme, smanjite tempo da ubrzate pjesmu
int tempo = 80;


void setup() 
{
  pinMode(buzzerPin, OUTPUT);
}


void loop() 
{
  int i, trajanje;
  for (i = 0; i < duljinaPjesme; i++) // koraci kroz array pjesme
  {
    trajanje = ritam[i] * tempo; 
    if (nota[i] == ' ')           
    {
      delay(trajanje);            
    }
    else                          
    {
      tone(buzzerPin, frekvencija(nota[i]), trajanje); // za vise pogledajte http://e-radionica.hr/blog/?p=513
      delay(trajanje);            
    }
    delay(tempo/10);              
  }
  
  while(1){} // ako zelite da neprestano svira ovo melodiju, stavite komentare (//) ispred funkcije while 
}


int frekvencija(char nota) 
{

  int i;
  const int brojnota = 6;  // koliko nota spremamo

  // sljedecim arrayima zadajemo imena i frekvencije notama koje zelimo koristiti
  char ime[] = {            'c', 'd', 'f', 'a', '#', 'A' };
  int vratiFrekvenciju[] = {262, 294, 349, 220, 233, 440};

  // prolazimo kroz array i trazimo ton, odnosno njegovu frekvenciju

  for (i = 0; i < brojnota; i++)  
  {
    if (ime[i] == nota)         // ako je to ton koji trazimo
    {
      return(vratiFrekvenciju[i]);     // vrati njegovu frekvenciju
    }
  }
  return(0);
              
}
Leave a Reply