KursyPoradnikiInspirujące DIYForum

Kurs Arduino II – #3 – syrena alarmowa, MOSFET w praktyce

Kurs Arduino II – #3 – syrena alarmowa, MOSFET w praktyce

Zdarza się, że korzystając z Arduino chcemy użyć podzespołów, które wymagają napięcia wyższego od 5V. Tutaj przydatne okazują się MOSFETy.

Zanim przejdziemy do tego tematu zajmiemy się jednak tworzeniem dźwięków. Generowaliśmy już wcześniej proste sygnały akustyczne, teraz pora na ich urozmaicenie. Dzięki temu możliwa będzie budowa syreny alarmowej.

Podczas pierwszego poziomu kursu Arduino generowaliśmy dźwięki za pomocą buzzera, który miał wbudowany generator. Element ten działał bardzo prosto - po dostarczeniu zasilania wydawał ciągły dźwięk, a właściwie głośny pisk. Działo się tak, ponieważ w jego wnętrzu producent umieścił generator, który wprawiał w szybkie drgania element odpowiedzialny za wytwarzanie dźwięku.

Przykład dźwięku buzzera z generatorem - programowe włączanie i wyłączanie.

Teraz zajmiemy się buzzerem bez generatora. Nazwa tego elementu mówi już wiele. Tym razem, aby coś usłyszeć, sami będziemy musieli dostarczać odpowiedni sygnał. Oczywiście, jak pewnie się domyślasz, zmiana tego sygnału (głównie jego częstotliwości) będzie wpływała na dźwięk.

Buzzer bez generatora z zestawu.

Buzzer bez generatora z zestawu.

Buzzer widoczny na powyższym zdjęciu, nie różni się od tego z generatorem. Bez problemu znaleźć można dwa identycznie wyglądające buzzery, które będą różniły się swoim wnętrzem.

Najłatwiej sprawdzimy, czy element wyposażony jest w generator zaglądając do jego dokumentacji. Jeśli jej nie posiadamy, to można podłączyć go do jakiegoś niskiego napięcia (3-5V). W przypadku wbudowanego generatora usłyszymy ciągły pisk, w przeciwnym razie nie stanie się praktycznie nic.

Dużą zaletą buzzerów bez generatorów jest możliwość ich pracy w szerokim zakresie napięcia. W przypadku omawianego modelu można z niego korzystać w układach zasilanych od 1 do 40V.

Pora na przejście do ćwiczeń praktycznych!

Gotowe zestawy do kursów Forbota

 Komplet elementów  Gwarancja pomocy  Wysyłka w 24h

Części do wykonania ćwiczeć z kursu Arduino (poziom 2) dostępne są w formie gotowych zestawów! W komplecie m.in. diody programowalne, termometry analogowe i cyfrowe, wyświetlacze 7-segmentowe oraz czujnik ruchu (PIR).

Zamów w Botland.com.pl »

Podłączenie buzzera bez generatora do Arduino

Zaczniemy od najprostszego podłączenia, czyli bezpośrednio do pinów naszego sterownika. Jest to możliwe, ponieważ buzzer pobiera bardzo mały prąd i nie uszkodzi wyjścia mikrokontrolera.

Zgodnie z zapowiedzią łączymy:

  • pierwsze wyprowadzenie buzzera z masą (GND),
  • drugie z wyjściem Arduino, np. A5.

Podłączenie układu do testu:

Bezpośrednie podłączenie buzzera do Arduino.

Bezpośrednie podłączenie buzzera do Arduino.

Pierwszy test buzzera bez generatora

Na początku sprawdźmy, co dzieje się, gdy wykorzystamy buzzer w sposób znany z poprzednich ćwiczeń - czyli tak, jakby miał generator. W tym celu po prostu zmieniamy stan wyjścia:

W przypadku wykorzystania buzzera z generatorem słyszelibyśmy głośne piski trwające sekundę. Tym razem jednak słychać jedynie ciche "pyknięcia". Co więcej nie trwają one sekundę. Dźwięk jest krótki i odbywa się wyłącznie przy zmianie stanu wyprowadzenia.

Dzieje się tak, ponieważ wraz ze zmianą dostarczanego napięcia odkształca się blaszka, która znajduje się wewnątrz buzzera. To własnie drgania tej części generują dźwięk.

Generowanie dźwięku poprzez odkształcenie.

Generowanie dźwięku poprzez odkształcenie.

Wniosek z tego jest taki, że im częściej będzie zachodziła zmiana tym częściej usłyszymy dźwięk. Spróbujmy zatem kolejną wersję programu:

Działanie układu w praktyce:

Zgodnie z oczekiwaniem, dźwięk wydobywa się teraz częściej. Możemy więc jeszcze bardziej zwiększyć tempo zmian:

Działanie układu w praktyce:

Tym razem zaczyna dziać się coś dziwnego - ewidentnie słyszymy już inny dźwięk. Idąc krok dalej można sprawdzić działanie programu dla opóźnienia wynoszącego np. 1 ms. To pozostawiam już jednak dla chętnych.


Oczywiście takie generowanie dźwięku z wykorzystaniem funkcji delay nie jest wygodne. Trzeba pamiętać, że opóźnienia zatrzymują cały program. W związku z tym Arduino nie mogłoby robić praktycznie nic innego.

Funkcja Tone

Z pomocą przychodzi bardzo prosta funkcja tone(), która przyjmuje 3 argumenty:

  1. pin, na którym ma być wygenerowany sygnał,
  2. częstotliwość tego sygnału,
  3. czas trwania - parametr ten nie jest obowiązkowy.

W praktyce wykorzystanie tej funkcji wygląda następująco:

Lub w wersji skróconej:

Na razie będziemy korzystać tylko z takiej formy (czyli z dwóch parametrów).

Funkcja Tone w praktyce

Pora na sprawdzenie, czy faktycznie dzięki nowej funkcji uzyskamy dźwięk:

Działanie układu w praktyce:

Warto zapamiętać, że funkcja tone() uruchamia generowanie sygnału na danym pinie i domyślnie będzie on tam wytwarzany cały czas! Dlatego powyższy program, mimo umieszczenia wywołania funkcji tone() w sekcji setup(), sprawia, że dźwięk słyszany jest cały czas. Ma to jednak wadę:

Aby zatrzymać raz uruchomione generowanie sygnału należy skorzystać z drugiej funkcji:

Proste pikanie można zrealizować więc następująco:

Działanie kodu w praktyce:

Działa! Jednak niezbyt głośno i w sumie nie widać tutaj żadnych zalet nad buzzerem z generatorem. Zaraz wszystko się wyjaśni!

Szukanie najgłośniejszej częstotliwości

Każdy buzzer przy pewnej, charakterystycznej dla niego, częstotliwości zaczyna wydawać głośne dźwięki. Konkretnie mowa o częstotliwości rezonansowej. Można ją sprawdzić w dokumentacji, ja zachęcam jednak teraz do podejścia eksperymentalnego.


W powyższych przykładach generowaliśmy sygnał o częstotliwości 1000Hz, czyli 1kHz. Skąd ta wartość? Dobre pytanie - znikąd, po prostu wpisałem ją "z palca" i udało się trafić w wartość, która generuje jakiś dźwięk. Wykorzystajmy jednak pętlę for, aby sprawdzić szerszy zakres:

Dlaczego pętla for wykonuje się od częstotliwości wynoszącej 31Hz do 65535Hz? To ograniczenia funkcji tone(), która na Arduino UNO może generować sygnały o częstotliwości mieszącej się w takim zakresie (na tym etapie kursu nie będziemy wnikać dlaczego).

Działanie powyższego programu w praktyce:

Po uruchomieniu programu słychać świst, a później różne dziwne dźwięki. Po kilku sekundach pętla rusza od początku i ponownie słyszymy krótki świst. Zmieniając zakres, przez który przechodzi pętla można próbować znaleźć najgłośniejszą częstotliwość.

Jeśli mamy taką możliwość można od razu zajrzeć do noty katalogowej i znaleźć częstotliwość rezonansową. W przypadku naszego buzzera wynosi ona: 4000 Hz ± 500 Hz. Czyli powinniśmy spodziewać się jego najgłośniejszej pracy w zakresie 3500-4500 Hz.

Sprawdzamy to prostym programem:

Teraz uzyskujemy zdecydowanie głośniejszy dźwięk:

Głośna syrena alarmowa

Powyższy program pozwala na generowanie przerywanego, jednostajnego dźwięku. Jak pokazał test z pętlą for, buzzer taki pozwala również na generowanie innych dźwięków - wszystko zależy od wybranej częstotliwości. Możemy więc utworzyć prostą syrenę alarmową:

Działanie programu w praktyce:

Czasy i częstotliwości dobrałem eksperymentalnie. Niestety moje zdolności muzyczne kończą się na takich ślepych testach. Wierzę jednak, że część z Was ma większy talent i będzie potrafiła wyczarować znacznie ciekawsze dźwięki.

Dla zaawansowanych - generowanie melodyjek

Jeśli odnajdujecie się w świecie muzyki możecie generować różne melodyjki. Niestety to kompletnie nie mój świat. Całe szczęście, że to kurs programowania (a nie muzyki), czuje się usprawiedliwiony. Jeśli naprawdę chcecie zdziałać więcej, to polecam zajrzeć do:

Plik > Przykłady > Digital > toneMelody

Znajduje się tam przykładowy program, który generuje prostą melodyjkę.

Najciekawsze dla osób, które chcą działać dalej w tym zakresie są definicje z pliku pitches.h, który otwiera się automatycznie razem z powyższym przykładem:

Oczywiście można je wkleić do swoich programów i wykorzystywać do tworzenia rozbudowanych sygnałów dźwiękowych. Temat pozostawiam dla chętnych, ponieważ nie czuje się na siłach, aby doradzać komuś w kwestiach muzycznych...

W Internecie można znaleźć wiele przykładów ciekawego użycia tej funkcji. Oto jeden z nich:

Skupmy się jednak dalej na elektronice i programowaniu!

MOSFET - sterowanie wyższym napięciem

Na myśli mam przypadki, w których musimy sterować urządzeniami wymagającymi przykładowo 9V lub 12V. Są takie elementy, które nie będą mogły pracować z napięciem dostarczanym przez Arduino, czyli 5V. Tutaj pomocne będą tranzystory typu MOSFET.

Oczywiście drugą zaletą sterowania przez "takich małych pośredników" jest ich znacznie większa wytrzymałość prądowa. Z pojedynczego pinu Arduino bezpiecznie można pobierać około 20mA. Po użyciu MOSFETów będą to całe ampery!

Podczas naszego eksperymentu posłużymy się MOSFETem, do sterowania buzzera z 12V.

MOSFET w praktyce - sterowanie buzzerem

W zestawach znajduje się popularny wśród majsterkowiczów tranzystor IRL540N. Jego parametry znaleźć można oczywiście w nocie katalogowej. Najważniejsze z nich, to:

  • maksymalny prąd drenu Id: 36 A,
  • maksymalne napięcie VDSS: 100 V,
  • rezystancja kanału Rdson: 0,044 Ω.

Powyższe artykuły wyczerpują podstawowe zagadnienia związane z MOSFETami. Dlatego nie będę już rozpisywał się na ich temat. Na początek sprawdźmy, czy tranzystor faktycznie pozwala na sterowanie wyższym napięciem. W tym celu łączymy układ tak jak poniżej:

  • sygnał sterujący przez rezystor 10k do bramki (skrajne lewe wyprowadzenie MOSFETa),
  • masa Arduino do źródła (skrajne prawe wyprowadzenie),
  • od drenu (środkowe wyprowadzenie) prowadzimy przewód, który wpinamy w płytkę (tak, aby nie łączył się z żadnym innym sygnałem),
  • dodatkowy przewód od VIN z Arduino wpinamy w płytkę - na razie też tak, aby nie łączył się z żadnym innym sygnałem,
  • podłączamy zasilacz oraz przewód USB. Od teraz na pinie VIN dysponujemy ~12V, które pojawia się tam prosto z zasilacza.
Podłączenie tranzystora MOSFET do Arduino.

Podłączenie tranzystora MOSFET do Arduino.

Następnie wgrywamy prosty program, który zmienia stan wyjścia:

Jeśli wszystko będzie poprawnie, to między dwoma luźno wyprowadzonymi przewodami (zielony i żółty na powyższym schemacie montażowym) otrzymamy napięcie zdecydowanie wyższe od 5V, które będzie pojawiało się tam regularnie (co sekundę):

Sterowanie wyższym napięciem z poziomu Arduino.

Sterowanie wyższym napięciem z poziomu Arduino.

Gdy, wszystko jest poprawnie możemy podłączyć buzzer. Wpinamy go tak, jak jest to widoczne na poniższym schemacie:

Podłączenie buzzera.

Podłączenie buzzera.

Następnie wgrywamy program z naszą syreną alarmową:

Całość zasilamy wyższym napięcie, a dźwięk wychodzący z układu jest znacznie cichszy. Dlaczego? Element piezoelektryczny, znajdujący się wewnątrz buzzera, podczas szybkiego przełączania gromadzi energię (zachowuje się jak kondensator).

Przy tak szybkich zmianach stanu energia ta nie ma gdzie "uciec". W efekcie tłumi to wychodzący z niego dźwięk. Na szczęście stosunkowo łatwo można naprawić ten problem. Wystarczy równolegle z buzzerem wpiąć rezystor np. 10k, który pozwoli na jego szybkie rozładowywanie.

ard2_buz_2

Układ z dodanym rezystorem.

W praktyce układ wygląda ostatecznie następująco:

Układ z dodanym rezystorem 1k.

Układ z dodanym rezystorem 10k.

Teraz wszystko powinno działać poprawnie. Możemy cieszyć się buzzerem zasilanym z wyższego napięcia! Warto sprawdzić, jak układ będzie zachowywał się dla innych częstotliwości. Czy wyższe napięcie zmieniło reakcję na różne częstotliwości? Niech pozostanie to ćwiczeniem dla chętnych.


Akurat w tym przypadku wykorzystanie tego tranzystora nie jest bezwzględnie konieczne i można spokojnie korzystać z buzzera bez niego. Dlatego traktujcie to jako przykład, a nie jako "wyrocznię", że tak trzeba robić. Moim celem było głównie pokazanie, że przez Arduino bardzo łatwo można sterować również podzespołami działającymi z wyższym napięciem. Na ten moment tylko lekko zahaczyliśmy o ten temat!

Podsumowanie

Celem tej części było opanowanie nowych elementów - głównie buzzera bez generatora. Teraz, wraz z linijką diod LED (omówioną w poprzedniej części) możliwe będzie stworzenie głośnego i dobrze widocznego sygnalizatora alarmowego. Zajmiemy się tym w kolejnej części, przy okazji poznając również między innymi czujnik ruchu.

Czy wpis był pomocny? Oceń go:

Średnia ocena 4.8 / 5. Głosów łącznie: 152

Nikt jeszcze nie głosował, bądź pierwszy!

Artykuł nie był pomocny? Jak możemy go poprawić? Wpisz swoje sugestie poniżej. Jeśli masz pytanie to zadaj je w komentarzu - ten formularz jest anonimowy, nie będziemy mogli Ci odpowiedzieć!

Nawigacja kursu

Nie chcesz przeoczyć kolejnych części kursu? Skorzystaj z poniższego formularza i zapisz się na powiadomienia o nowych artykułach!

Autor kursu: Damian (Treker) Szymański

arduino, buzzer, dźwięk, kursArduino2, mosfet, piezo, programowanie, syrena

Trwa ładowanie komentarzy...