Ημέρα 6 - Ενότητα 3 - Κάνοντας θόρυβο με το buzzer

Μετά την ολοκλήρωση αυτής της ενότητας ως εκπαιδευόμενοι θα μπορείτε να:

  • περιγράψετε τι είναι ένας βομβητής (buzzer) και τις χρήσεις του
  • δημιουργήσετε ένα κύκλωμα με βομβητή και NodeMCU
  • προγραμματίσετε το NodeMCU για να παράγει απλά ηχητικά σήματα (μπιπ)
  • παράγετε μελωδίες που δημιουργούνται από συγκεκριμένες εντολές σε Arduino IDE, με NodeMCU και βομβητή

Σιωπή ή φασαρία; Ότι και να προτιμάτε, το buzzer είναι απαραίτητο....

Ένας βομβητής ή buzzer είναι μία συσκευή ηχητικών σημάτων, η οποία μπορεί να είναι μηχανική, ηλεκτρομηχανική, ή πιεζοηλεκτρική (piezo χάριν συντομίας). Οι τυπικές χρήσεις των βομβητών και των beepers περιλαμβάνουν συσκευές συναγερμού, χρονομετρητές και διαδικασίες επιβεβαίωσης των ενεργειών χρήστη όπως το κλικ του ποντικιού ή το πάτημα των πλήκτρων.

Αυτό που θα χρησιμοποιήσουμε σε αυτό το μάθημα είναι ο πιεζοηλεκτρικός βομβητής που μοιάζει με τον παρακάτω:
Έτσι όπως μπορείτε να δείτε, υπάρχει το θετικό (+) πόδι το οποίο καταλήγει στον ψηφιακό ακροδέκτη του NodeMCU που επιλέξαμε και το άλλο πόδι καταλήγει στον ακροδέκτη GND.

Δημιουργήστε το παρακάτω διάγραμμα για να πειραματιστείτε με τον ήχο του βομβητή:


Δημιουργήστε το παρακάτω διάγραμμα για να πειραματιστείτε με τον ήχο του βομβητή:

void setup()
{
 
}

void loop()
{
    tone(14, 494, 500);
    delay(1000);
}

Αντιγράψτε τον κώδικα στο IDE του Arduino, μεταφορτώστε τον στο NodeMCU και ακούστε τον ήχο.
Παρατηρούμε εδώ ότι η ενότητα setup() είναι κενή και η ενότητα loop() περιέχει μια λειτουργία tone() και μια καθυστέρηση ενός δευτερολέπτου. Οι τρεις αριθμοί μέσα στη λειτουργία τόνου (   ) αντιπροσωπεύουν: τον ακροδέκτη που στέλνουμε τον ήχο (D5 ή 14 στην περίπτωσή μας), τη συχνότητα του ηχητικού κύματος που στέλνουμε και τη διάρκεια του τόνου.
We notice here that the setup() section is empty and the loop() section contains a tone() function and an one second delay. The three numbers inside the tone() function represent: the pin we send the sound (D5 or 14 in our case), the frequency of the sound wave we send and the duration of the tone.
Μπορείτε να αλλάξετε τις τελευταίες δύο παραμέτρους και να παίξετε με την ταχύτητα των μπιπ και τον ήχο τους.

http://moziru.com/images/music-clipart-2.jpg

Αλλά αντί να ακούμε μόνο μπιπ, μπορούμε να προγραμματίσουμε το κύκλωμα μας για να συνθέσουμε μελωδίες, χρησιμοποιώντας νότες.

Ένα τέτοιο παράδειγμα, είναι το παρακάτω:

int speakerPin = 14;

int length = 15; // the number of notes
char notes[] = "ccggaagffeeddc "; // a space represents a rest
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;

void playTone(int tone, int duration) {
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
    digitalWrite(speakerPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(speakerPin, LOW);
    delayMicroseconds(tone);
  }
}

void playNote(char note, int duration) {
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
  int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };

  // play the tone corresponding to the note name
  for (int i = 0; i < 8; i++) {
    if (names[i] == note) {
      playTone(tones[i], duration);
    }
  }
}

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

void loop() {
  for (int i = 0; i < length; i++) {
    if (notes[i] == ' ') {
      delay(beats[i] * tempo); // rest
    } else {
      playNote(notes[i], beats[i] * tempo);
    }

    // pause between notes
    delay(tempo / 2);
  }
}


Μπορείτε να το αντιγράψετε, να το επικολλήσετε στο IDE του Arduino και στη συνέχεια να το ανεβάσετε στο NodeMCU. Ίσως χρειαστεί να πλησιάσετε στο βομβητή για να ακούσετε τη μελωδία.