Buzzer (brzęczyk) aktywny

Buzzer (brzęczyk) aktywny

Najprostszym sposobem aby na Arduino wygenerować jakiś sygnał akustyczny jest wykorzystanie do tego celu buzzera (brzęczyka) aktywnego czyli takiego, który posiada wbudowany wewnątrz generator. Tutaj uwaga ponieważ na rynku występują buzzery aktywne i pasywne. Buzzer aktywny można szybko rozpoznać podłączając do jego nóżek napięcie 5V, a zacznie on wydawać z siebie dźwięk o stałej częstotliwości około 2,3kHz. Napięcie oczywiście trzeba podłączyć zachowując biegunowość - nóżka dodatnia jest dłuższa i dodatkowo na górnej części obudowy jest wytłoczony znak "+", a nóżka krótsza to masa. Buzzer pasywny po podłączeniu napięcia do jego nóżek nie wyda z siebie żadnego dźwięku, a nawet może ulec szybkiemu uszkodzeniu gdyż działa on jak zwykły głośnik.

Parametry czujnika

  • wymiary: 9.5 mm (wysokość) x 12 mm (średnica)

  • napięcie zasilania: 5 V

  • głośności 85 dB

  • pobór prądu: maks. 30 mA

  • częstotliwość: 2,3 kHz ± 500 Hz

Na rynku dostępnych jest kilka modeli buzzerów aktywnych jednak ten pokazany na zdjęciach jest najpopularniejszym modelem. Najbardziej przydatnym do zastosowania w Arduino jest model działający na napięcie 5V chociaż istnieją też modele działające na napięcie 3V oraz 12V. Modele na napięcie pracy 3V można też wykorzystać w Arduino na płytkach, które działają na logice 3.3V. Jakie napięcie pracy ma buzzer można poznać na po naklejce ochronnej, którą chińscy producenci umieszczają na buzzerach w trzech kolorach: purpurowa napięcie 3V, niebieska napięcie 5V i czarna napięcie 12V. Jeśli buzzer nie posiada już naklejki ochronnej poznanie napięcia jego pracy jest praktycznie niemożliwe ponieważ poza naklejką ochronną przeważnie nie posiadają na obudowie żadnych oznaczeń.

Zasada działania

Najprostszy sposób wykorzystania buzzera aktywnego w projektach Arduino sprowadza się podłączenia nóżki ujemnej do masy, nóżki dodatniej do dowolnego cyfrowego pinu w Arduino i sterowania tym pinem na zasadzie ustawienia stanu wysokiego co spowoduje generowanie dźwięku o stałej częstotliwości lub ustawienia stanu niskiego gdy chcemy wyłączyć generowanie dźwięku na buzzerze. Standardowe przykłady, które są dostępne w Arduino IDE wykorzystują pin 8 do podłączenia buzzera ale może to być dowolny cyfrowy pin w Arduino.

Posłużę się tutaj modyfikacją programu "blink", który zapala i gasi co sekundę diodę LED tylko, że tym razem elementem wykonawczym nie będzie dioda LED tylko buzzer podłączony do pinu 8:

Buzzer aktywny może też generować dźwięk o innych częstotliwościach (tonach), z których można potem odgrywać proste melodie. Arduino IDE daje nam gotową funkcję do generowania dźwięku na buzzerze jest to funkcja tone() oraz funkcja noTone() aby generowanie dźwięku zatrzymać. Funkcja tone() bazuje na programowalnym sprzętowym timerze w Arduino, za pomocą którego można wygenerować sygnał prostokątny o wypełnieniu 50% i zadanej częstotliwości, który zmienia częstotliwość dźwięku generowanego przez buzzer.

Funkcja tone() może przyjmować 2 lub 3 parametry. Pierwszy parametr to pin na jakim ma być generowany sygnał prostokątny, drugi to jego częstotliwość, a trzeci opcjonalny to czas generowania tonu na podanym pinie po upłynięciu, którego generowanie sygnału zostanie zatrzymane. Jeśli korzystamy z funkcji tone() używając podczas jej wywołania z dwóch parametrów to należy pamiętać, że sygnały będą generowane w nieskończoność dopóki nie wydamy polecenia noTone() ze wskazaniem pinu, na którym chcemy zakończyć generowanie sygnału.

Przykład generowania dźwięku na buzzerze o różnych częstotliwościach:

Generowanie dźwięku za pomocą funkcji tone() ma kilka niedogodności, które trzeba brać pod uwagę jeśli projekt jest bardziej rozbudowany. W dokumentacji Arduino IDE można przeczytać, że używanie funkcji tone() zakłóca jednoczesne generowanie sygnału PWM na pinach 3 i 11 na wszystkich płytkach Arduino oprócz Arduino Mega.

W sieci można znaleźć wiele przykładów odgrywania za pomocą buzzera dowolnych melodii bardziej lub mniej znanych np. motyw muzyczny z filmu "Gwiezdne wojny" do pobrania 📂 >TUTAJ< ale aby samemu tworzyć takie melodie na Arduino należy znać częstotliwości buzzera odpowiadające użytym w melodii nutom. Do tego celu można wykorzystać plik nagłówkowy pitches.h do pobrania 📂 >TUTAJ<, w którym zdefiniowane są nuty kilku oktaw odpowiadające częstotliwością pracy buzzera od nut B0 do DS8 czyli ponad 7 oktaw. Korzystając z definicji tych nut można odegrać na buzzerze praktycznie każdą istniejąca melodię. Plik nagłówkowy pitches.h należy przekopiować do folderu, w którym zapisany jest nasz kod źródłowy programu korzystający z tych definicji nut.

Przykładowy program wykorzystujący zdefiniowane nuty:

Schemat podłączenia

W sieci funkcjonują różne podejścia co do podłączenia buzzera do Arduino. Jeśli projekt jest mało rozbudowany i oprócz buzzera nie posiada innych modułów wykonawczych można buzzer podłączyć bezpośrednio do dowolnego pinu cyfrowego (tutaj na przykładzie do pinu 8) tak jak to widać na rysunku po lewej stronie. Jednak żeby zabezpieczyć obwody Arduino przed ewentualnymi uszkodzeniami należy przynajmniej dodać rezystor ograniczający prąd na nóżce dodatniej buzzera np. o wartości 220 ohm lub nawet większy gdy chcemy uzyskać niższą głośność dźwięku generowanego przez buzzer lub zabezpieczając układ w pełni przez zastosowanie rezystora 220 ohm, tranzystora NPN oraz diody zabezpieczającej typu 1N4001 jak na rysunku po prawej.

Na rynku dostępne są tez buzzery aktywne w formie modułu na płytce drukowanej zawierającej wszystkie niezbędne elementy zabezpieczające oraz 3 piny połączeniowe VCC, GND i I/O gdzie pin I/O podłączamy bezpośrednio do np. do cyfrowego pinu 8, a dwa pozostałe do pinów zasilania Arduino.