diumenge, 30 de juny de 2013

Connectar un brunzidor (buzzer) a l'Arduino

Un buzzer és una mena de petit altaveu capaç d'emetre sons. Es tracta d'un sensor molt senzill de connectar però que es pot fer servir tant per emetre un "beep" com per fer sonar notes.

Connexió del brunzidor

La connexió és extremadament senzilla. Un buzzer bàsic només té dues potes, una que va directament al GND i l'altre que va al pin que es vulgui (millor si es connecta a un pin amb sortida analògica com el #9 ja que sinó no podrem enviar notes diferents).

Si teniu una versió amb placa, només cal connectar el pin S i el - (GND) ja que el +5V no es fa servir.

Emetre un beep amb un brunzidor

El següent exemple l'he tret d'aquesta web i explica com fer sonar un "beep" bàsic amb un buzzer.

int buzzer = 9;

void setup()  { 
  // declare pin 9 to be an output:
  pinMode(buzzer , OUTPUT);

void loop()  { 
  beep(200); 
}

void beep(unsigned char delayms){
  analogWrite(buzzer,20);
  //el 20 es arbritari, es el to que emetra
  delay(delayms);//temps que sonara
  analogWrite(buzzer,0);//apagar el buzzer
  delay(delayms);//esperar uns instants
}

Emetre notes amb un brunzidor

Per emetre notes amb un buzzer podem seguir el tutorial de la pàgina d'Arduino que, encara que explica com fer-ho amb un altaveu (la connexió és diferent) el codi és el mateix que per un buzzer.

Per fer-ho, el primer que cal fer és crear un arxiu amb els codis de les notes. Per fer-ho cal fer clic a la icona de triangle que hi ha al costat del nom de l'arxiu, seleccionar l'opció de nova pestanya i escriure "pitches.h". En aquest arxiu copiarem les definicions que podeu trobar aquí.

Com crear una nova pestanya a l'entorn d'Arduino

Un cop fet això, el codi fa servir les funcions:
  • tone (pin, freqüència, duració): que emet una nota. Si no es passa duració sonarà fins que es cridi notone.
  • notune (pin): que atura el buzzer
El codi d'exemple seria tal que així

/*
llibreria estandard on hi ha les notes
*/
#include "pitches.h"

int buzzer = 9;

//les notes
int melody[] = {
  NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};
//la duracio
int noteDurations[] = {
  4, 8, 8, 4,4,4,4,4 };

void setup()  { 

void loop()  { 
  for (int thisNote = 0; thisNote < 8; thisNote++) {

    // la duracio va amb milisegons
    int noteDuration = 1000/noteDurations[thisNote];
    tone(buzzer, melody[thisNote],noteDuration);

    // temps de pausa entre notes
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    // para el buzzer
    noTone(buzzer);
    
    delay(2000);
  } 
}