ultimo aggiornamento 29 aprile 2011


JLCPCB - 2$ per prototipi di PCB, di qualsiasi colore. Produzione in 24 ore!
L'Azienda di prototipi PCB più popolare, con oltre 700.000 clienti in tutto il mondo!
Continua la produzione dei PCB standard a 2 strati durante le festività primaverili

 

In questa pagina è possibile vedere l'utilizzo del modulo Buzzer, nella pagina presentazione, abbiamo visto cosa sono i buzzer, nella pagina costruzione   ne abbiamo visto la costruzione, ora vendiamo come interfacciarlo con la scheda Arduino.

buzzer_arduino.JPG

homotix

Per generare un suono con la scheda Arduino si può utilizzare il comando tone(), questo comando genera un'onda quadra di frequenza specificata (e duty cycle 50%) su un pin di uscita.
La durata può essere specificata, altrimenti l'onda continua fino a quando viene inserito il comando noTone ().
Può essere generato un solo tono per volta.    Se un tono è già in emissione su un determinato pin, la chiamata a tone () non avrà alcun effetto. Se il tono è in emissione sullo stesso pin , la chiamata può cambiare la frequenza.
L'uso della funzione tone() interferisce con uscita PWM sui piedini 3 e 11
Nota: se vuole emettere dei toni su più pin è necessario chiamare noTone () su un contatto prima di chiamare il tone() sul pin successivo.

buzzer_nuovo_modello-montato_1.JPG

Sintassi

tone (pin, frequenza)
tone (pin, frequenza, durata)

Parametri

pin: il pin su cui generare il tono
frequenza: la frequenza del tono in hertz - unsigned int
durata: la durata del segnale in millisecondi (opzionale) - unsigned long

 

Programma di prova

/*
Programma:prova_buzzer.pde
 Versione: 1.0
 Collaudo modulo buzzer
 di Adriano Gandolfo
 */
 
void setup() {
  pinMode(2, OUTPUT); // Imposta la porta di collegamento per il buzzer
}

void loop() {
  buzz(2, 100, 500); // emissione suono a 100Hz
  delay(1000); // Attesa
  buzz(2, 200, 500); // emissione suono a 200Hz
  delay(1000); // Attesa
  buzz(2, 300, 500); // emissione suono a 300Hz
  delay(1000); // Attesa
  buzz(2, 400, 500); // emissione suono a 400Hz
  delay(1000); // Attesa
  buzz(2, 500, 500); // emissione suono a 500Hz
  delay(1000); // Attesa
  buzz(2, 1000, 500); // emissione suono a 1 KHz
  delay(1000); // Attesa
  buzz(2, 2000, 500); // emissione suono a 2 KHz
  delay(1000); // Attesa
  buzz(2, 4000, 500); // emissione suono a 4 KHz
  delay(1000); // Attesa
}


void buzz(int targetPin, long frequency, long length) {
  long delayValue = 1000000/frequency/2; // calculate the delay value between transitions
  //// 1 second's worth of microseconds, divided by the frequency, then split in half since
  //// there are two phases to each cycle
  long numCycles = frequency * length/ 1000; // calculate the number of cycles for proper timing
  //// multiply frequency, which is really cycles per second, by the number of seconds to 
  //// get the total number of cycles to produce
  for (long i=0; i < numCycles; i++){ // for the calculated length of time...
    digitalWrite(targetPin,HIGH); // write the buzzer pin high to push out the diaphram
    delayMicroseconds(delayValue); // wait for the calculated delay value
    digitalWrite(targetPin,LOW); // write the buzzer pin low to pull back the diaphram
    delayMicroseconds(delayValue); // wait againf or the calculated delay value
  }
}

 

Elenco revisioni
29/04/2011 Emissione preliminare