Buzzer activ vs Buzzer pasiv
Integrarea unui buzzer este un mod simplu de a aduce sunet in orice proiect Arduino.
Exista doua tipuri de buzzere,diferite ca mod de functionare:
-un buzzer activ functioneaza cu ajutorul unui oscilator piezoelectric integrat,care vibreaza la o frecventa prestabilita cand trece curent prin el,producand sunet.Este buzzerul cel mai usor de folosit;cand este conectat la o sursa de curent (cum ar fi o baterie) emite sunet.
Un buzzer activ are partea inferioara acoperita cu plastic negru si este de obicei mai mare si mai greu decat un buzzer pasiv.
-buzzerul pasiv emite sunet la variatia voltajului curentului electric,folosind un element piezoelectric si o bucata de metal care amplifica sunetul. Acest buzzere sunt mai versatile,emitand sunete de frecvente si amplitudini variabile,dar sunt si mai greu de folosit.
Buzzerul pasiv are partea inferioara expusa,dezvaluind un circuit de culoare verde.
Montajul
Montajul este simplu,fiind similar cu cel al unui LED (ambele tipuri de buzzere se conecteaza identic):
Pinul pozitiv se conecteaza la un pin digital al Arduino,prin intermediul unui rezistor de o valoare mica (eu am folosit de 220 ohmi),iar pinul negativ la un pin GND.
Programul pentru buzzer activ
Pentru un buzzer activ programul este simplu,fiind identic cu cel de la LED:
void setup() {
// put your setup code here, to run once:
pinMode(8,OUTPUT); // initializare pin 8 pentru emisie
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(8,HIGH); // trimite semnal HIGH prin pinul 8
delay(1000); // asteapta 1 secunda
digitalWrite(8,LOW); // trimite semnal LOW prin pinul 8
delay(1000); // asteapta 1 secunda
}
Acest program va determina buzzerul sa emita sunet timp de o secunda,apoi sa "taca" o secunda:
Un buzzer activ va emite doar acel "sunet enervant si monoton",fara a putea fi modificat intr-un fel. Astfel,un buzzer activ este util doar pentru o modalitate simpla de a emite sunet cu Arduino (in alarme sau alte aplicatii similare). In schimb, cu buzzerul pasiv este o cu totul alta poveste...
Programul pentru buzzer pasiv
Pentru a crea acea oscilatie a curentului electric necesara functionarii buzzerului pasiv,vom folosi functia tone(). Functia tone() foloseste trei argumente:
tone(nr.pin,frecventa,durata);
Primul argument este folosit pentru a specifica numarul pinului digital conectat la buzzer. Al doilea argument specifica frecventa curentului in hertzi (numarul de oscilatii pe secunda,1 Hz inseamna o oscilatie pe secunda ) trimisa catre pin. Cu cat frecventa trimisa este mai mare,cu atat sunetul emis va fi mai ascutit. Si invers,cu cat frecventa trimisa este mai joasa,cu atat sunetul emis va fi mai gros.
Nota:pentru al doilea argument pot fi folosite valori cuprinse intre 0 si 65.535,dar buzzerul va emite sunet perceptibil pentru urechea umana la valori cuprinse intre 31 si 20.000.
Ultimul argument este folosit pentru a specifica pentru cat timp se emite sunetul. Impreuna cu functia delay(),acest argument poate fi folosit pentru a separa sunetele intre ele:
void setup() {
// put your setup code here, to run once:
pinMode(8,OUTPUT); // initializare pin 8 pentru emisie
}
void loop() {
// put your main code here, to run repeatedly:
tone(8,100,500); // emite semnal prin pinul 8,la frecventa de 100 Hz timp de 500 ms
delay(1000); // asteapta o secunda
}
Experimentati cu diferite valori pentru argumentele functiei tone() si pentru delay.
Crearea si redarea unui cantec cu Arduino (avansati)
Notele muzicale sunt obtinute facand o oscilatie pe un anumit pin cu o anumita frecventa. Ati vazut probabil cat de repede poate oscila valoarea unui pin si de aici va puteti inchipui si ca se pot face oscilatii care transmise unui buzzer sa il faca sa redea diverse note muzicale.
Pentru cei mai muzicieni dintre voi, Arduino poate si canta (evident cu putin efort).
Sa incepem cu un exemplu de cantec simplu (!):
int speakerPin = 8; // pinul la care este conectat buzzerul
int length = 28; // numarul notelor
char notes[] = "GGAGcB GGAGdc GGxecBA yyecdc"; // denumirile notelor
int beats[] = { 2, 2, 8, 8, 8, 16, 1, 2, 2, 8, 8,8, 16, 1, 2,2,8,8,8,8,16, 1,2,2,8,8,8,16 }; // matrice care contine pauzele intre note
int tempo = 150; // tempo-ul melodiei
void playTone(int tone, int duration) { /* creare functie pentru ton cu argumente pentru durata si ton */
for (long i = 0; i < duration * 1000L; i += tone * 2) { /* pentru i initializat cu 0,i< durata x 1000 "lung",i creste pana este egal cu tone x 2 */
digitalWrite(speakerPin, HIGH); // trimite semnal HIGH prin pinul 8
delayMicroseconds(tone); // asteapta cat valoarea variabilei tone
digitalWrite(speakerPin, LOW); // trimite semnal LOW prin pinul 8
delayMicroseconds(tone); // asteapta cat valoarea variabilei tone
}
}
void playNote(char note, int duration) { /* creare functie pentru nota cu argumente pentru denumirea notei si durata */
char names[] = {'C', 'D', 'E', 'F', 'G', 'A', 'B',
'c', 'd', 'e', 'f', 'g', 'a', 'b',
'x', 'y' }; // matrice cu denumirile notelor
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014,
956, 834, 765, 593, 468, 346, 224,
655 , 715 }; /* matrice cu frecventele corespunzatoare denumirilor notelor */
int SPEE = 5; // variabila de asociere intre elementele celor doua matrici
for (int i = 0; i < 17; i++) { // pentru i initializat cu 0,i<17,i creste
if (names[i] == note) { // daca i corespunde unui element din matrice
int newduration = duration/SPEE; // calculeaza tempo
playTone(tones[i], newduration); // canta nota definita de i si tempo
}
}
}
void setup() {
pinMode(speakerPin, OUTPUT); // initializare pin 8 pentru emisie
}
void loop() {
for (int i = 0; i < length; i++) { /* pentru i initializat cu 0,i mai mic ca durata notelor,i creste */
if (notes[i] == ' ') { // daca nota i=0
delay(beats[i] * tempo); // calculeaza timpul necesar
} else { // altfel
playNote(notes[i], beats[i] * tempo); // canta nota i cu tempo-ul i
}
delay(tempo); /* asteapta valoarea din variabila "tempo" (pauza intre note) */
}
}
Copiati codul in Arduino IDE si dati upload. Buzzerul va canta "Happy Birthday":
Complicat codul,nu? Ei bine,cititi cu atentie comentariile inserate in cod si nu ezitati sa-mi adresati intrebari la sectiunea de comentarii!
Comments