- Wymagany sprzęt:
- Zrozumienie funkcji Tone () Arduino:
- Pitches.h nagłówek pliku:
- Odtwarzanie nut na Arduino:
- Schemat i sprzęt:
- Objaśnienie programu Arduino:
- Działanie tego obwodu Melody Player Arduino:
Arduino to doskonały sposób na uproszczenie i przyspieszenie projektów mikrokontrolerów dzięki społeczności programistów, którzy sprawili, że prawie wszystko wygląda na proste. Jest tutaj wiele projektów Arduino, które możesz wypróbować i dobrze się bawić. Niektóre z Twoich projektów mogą wymagać dźwięków, aby o czymś powiadomić lub po prostu zaimponować widzom. A co, jeśli powiem ci, że prawie wszystkie utwory tematyczne, które można odtworzyć na pianinie, można naśladować na twoim Arduino za pomocą prostego programu i taniego głośnika Piezo?
W tym samouczku dowiemy się, jak łatwo i łatwo można odtwarzać melodię na piezo Buzzer lub głośniku za pomocą funkcji Arduino tone (). Pod koniec tego samouczka będziesz mógł zagrać w słynne dźwięki Piratów z Karaibów, Crazy Frog, Super Mario i Titanic. Dowiesz się również, jak zagrać dowolny utwór fortepianowy za pomocą Arduino. Sprawdź wideo na końcu.
Wymagany sprzęt:
- Arduino (dowolna wersja - tutaj używane jest UNO)
- Głośnik / brzęczyk piezoelektryczny lub dowolny inny głośnik 8ohm.
- Płytka prototypowa
- Podłączanie przewodów
- Wciskać przyciski
- Rezystor 1k (opcjonalnie)
Zrozumienie funkcji Tone () Arduino:
Zanim zrozumiemy, jak działa tone () , powinniśmy wiedzieć, jak działa brzęczyk piezoelektryczny. Być może dowiedzieliśmy się o kryształach piezoelektrycznych w naszej szkole, to nic innego jak kryształ, który przekształca wibracje mechaniczne w elektryczność lub odwrotnie. Tutaj stosujemy zmienny prąd (częstotliwość), przy którym kryształ wibruje, wytwarzając dźwięk. Dlatego, aby buzzer Piezo wydawał trochę hałasu, musimy wprawić kryształ piezoelektryczny w wibracje, wysokość i ton hałasu zależy od szybkości wibracji kryształu. Stąd ton i wysokość mogą być kontrolowane przez zmianę częstotliwości prądu.
Ok, więc jak możemy uzyskać zmienną częstotliwość z Arduino ? W tym miejscu pojawia się funkcja tone (). Funkcja tone () może generować określoną częstotliwość na określonym pinie. W razie potrzeby można również podać czas trwania. Składnia funkcji tone () to
Ton składni (pin, częstotliwość) ton (pin, częstotliwość, czas trwania) Parametry pin: pin, na którym generowana jest częstotliwość tonu: częstotliwość tonu w hercach - unsigned int duration: czas trwania tonu w milisekundach (opcjonalnie) - długi bez znaku
Wartości pinów mogą być dowolnymi cyfrowymi pinami. Użyłem tutaj numeru PIN 8. Częstotliwość, która może zostać wygenerowana, zależy od wielkości timera na twojej płycie Arduino. W przypadku płyt UNO i większości innych popularnych płyt minimalna częstotliwość, jaką można wytworzyć, to 31 Hz, a maksymalna częstotliwość, jaką można wytworzyć, to 65535 Hz. Jednak my, ludzie, słyszymy tylko częstotliwości między 2000 Hz a 5000 Hz.
Pitches.h nagłówek pliku:
Teraz wiemy, jak wygenerować hałas za pomocą funkcji arduino tone () . Ale skąd wiemy, jaki rodzaj tonu zostanie wygenerowany dla każdej częstotliwości?
Arduino dostarczyło nam tabelę nut, która zrównuje każdą częstotliwość z określonym typem nut. Ta tabela nut została pierwotnie napisana przez Bretta Hagmana, na którego pracy opierała się komenda tone () . Będziemy używać tej tabeli notatek do odtwarzania naszych motywów. Jeśli jesteś kimś zaznajomionym z nutami, powinieneś być w stanie nadać sens tej tabeli, dla innych, takich jak ja, to tylko kolejny blok kodu.
# zdefiniować NOTE_B0 31 # zdefiniować NOTE_C1 33 # zdefiniować NOTE_CS1 35 # zdefiniować NOTE_D1 37 # zdefiniować NOTE_DS1 39 # zdefiniować NOTE_E1 41 # zdefiniować NOTE_F1 44 # zdefiniować NOTE_FS1 46 # zdefiniować NOTE_G1 49 # zdefiniować NOTE_GS1A 52 # zdefiniować # 551 NOTE_B1 62 # zdefiniować NOTE_C2 65 # zdefiniować NOTE_CS2 69 # zdefiniować NOTE_D2 73 # zdefiniować NOTE_DS2 78 # zdefiniować NOTE_E2 82 # zdefiniować NOTE_F2 87 # zdefiniować NOTE_FS2 93 # zdefiniować NOTE_G2 98 # zdefiniować NOTE_GS2 104 # zdefiniować NOTE_Define # 110 # zdefiniować NOTE_C3 131 # zdefiniować NOTE_CS3 139 # zdefiniować NOTE_D3 147 # zdefiniować NOTE_DS3 156 # zdefiniować NOTE_E3 165 # zdefiniować NOTE_F3 175 # zdefiniować NOTE_FS3 185 # zdefiniować NOTE_G3 196 # zdefiniować NOTE_GS3 208 # zdefiniować NOTE_E3 220 # zdefiniować NOTE_C4 262 # zdefiniować NOTE_CS4 277 # zdefiniować NOTE_D4 294 # zdefiniować NOTE_DS4 311 # zdefiniować NOTE_E4 330 # zdefiniować NOTE_F4 349# zdefiniować NOTE_FS4 370 # zdefiniować NOTE_G4 392 # zdefiniować NOTE_GS4 415 # zdefiniować NOTE_A4 440 # zdefiniować NOTE_AS4 466 # zdefiniować NOTE_B4 494 # zdefiniować NOTE_C5 523 # zdefiniować NOTE_CS5 554 # zdefiniować NOTE_A4 440 # zdefiniować NOTE_FS5 740 # zdefiniować NOTE_G5 784 # zdefiniować NOTE_GS5 831 # zdefiniować NOTE_A5 880 # zdefiniować NOTE_AS5 932 # zdefiniować NOTE_B5 988 # zdefiniować NOTE_C6 NOTE # NOTE # zdefiniować NOTE_CS6 1109 # zdefiniować NOTE_D6 1175 # zdefiniować NOTE_Define # 1397 # zdefiniować NOTE_G6 1568 # zdefiniować NOTE_GS6 1661 # zdefiniować NOTE_A6 1760 # zdefiniować NOTE_AS6 1865 # zdefiniować NOTE_B6 1976 # zdefiniować NOTE_C7 2093 # zdefiniować NOTE_CS7 2217 # zdefiniować NOTE_D7 2349 # zdefiniować NOTA_DS7 2489 # zdefiniować NOTE_G7 3136 # zdefiniować NOTE_GS7 3322 # zdefiniować NOTE_A7 3520 # zdefiniować NOTE_AS73729 # zdefiniować NOTE_B7 3951 # zdefiniować NOTE_C8 4186 # zdefiniować NOTE_CS8 4435 # zdefiniować NOTE_D8 4699 # zdefiniować NOTE_DS8 4978
Powyższy kod znajduje się w pliku nagłówkowym pitches.h w tym pliku zip , wystarczy pobrać i dołączyć ten plik do naszego kodu Arduino, jak podano na końcu tego samouczka lub użyć kodu podanego w pliku zip.
Odtwarzanie nut na Arduino:
Aby zagrać przyzwoitą melodię za pomocą Arduino, powinniśmy wiedzieć, co składa się na te melodie. Trzy główne czynniki wymagane do odtworzenia tematu to
- Uwaga wartość
- Czas trwania notatki
- Tempo
Mamy plik nagłówkowy pitches.h do odtwarzania dowolnej wartości nuty, teraz powinniśmy znaleźć określony czas trwania nuty, aby ją odtworzyć. Tempo to nic innego jak szybkość grania melodii. Gdy już znasz wartość nuty i czas trwania nuty , możesz ich używać z tonem () jak
ton (nazwa pinezki, wartość nuty, czas trwania nuty);
Dla dźwięków granych w tym samouczku podałem wartość nuty i czas trwania nuty w pliku nagłówkowym „themes.h”, dzięki którym możesz je odtwarzać w swoich projektach. Ale jeśli masz jakiś specyficzny ton w swojej kopalni i chcesz go odtworzyć w swoim projekcie, czytaj dalej… W przeciwnym razie pomiń ten temat i przejdź do następnego.
Aby zagrać jakikolwiek konkretny dźwięk, musisz pobrać nuty tej konkretnej muzyki i przekonwertować nuty na szkic Arduino, odczytując z nich wartość nuty i czas trwania nuty. Jeśli jesteś muzycznym studentem, to byłaby dla ciebie bułka z masłem, inaczej spędzisz trochę czasu i złamiesz ci głowę, tak jak ja. Ale pod koniec dnia, gdy Twój dźwięk gra na brzęczyku Piezo, stwierdzisz, że Twój wysiłek jest tego wart.
Gdy masz już wartość nuty i czas trwania nuty, załaduj je do programu wewnątrz pliku nagłówkowego „themes.h”, jak pokazano poniżej
// ############## ** „HE IS A PIRATE” Motyw przewodni Piratów z Karaibów ** ############## // int Pirates_note = {NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4)) NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_D4, 0, NOTE_A3, NOTE_C4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_D4, 0, NOTE_A3, NOTE_C4, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_D4, 0, 0, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_G_A4, NOTE_A4, 0, NOTE_D4, NOTE_E3, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_D4, 0, NOTE_D4, NOTE_F4,NOTE_E4, NOTE_E4, NOTE_F4, NOTE_D4}; int Pirates_duration = {4,8,4,8,4,8,8,8,8,8,4,8,4,8,4,8,8,8,8,4,8,4,8, 4, 8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,8,4,4,8,8, 4,4,8,8,4,4,8,4, 4,8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8 8,4,8,8,8,4,4,4,4,8,4,8,8,8,4,4,8,8}; // ########### End of He to piracka piosenka ############# //
Powyższy blok kodu pokazuje wartość nuty i czas trwania nuty motywu „He is a Pirate” z filmu Piraci z Karaibów. Możesz dodać swój motyw w podobny sposób.
Schemat i sprzęt:
Schemat tego projektu projektu generatora tonów Arduino pokazano na poniższym rysunku:
Połączenie jest dość proste, mamy głośnik Piezo, który jest podłączony do pinu 8 i uziemienia Arduino za pomocą rezystora 1K. Ten rezystor 1k jest rezystorem ograniczającym prąd, który służy do utrzymywania prądu w bezpiecznych granicach. Mamy również cztery przełączniki do wyboru wymaganej melodii. Jeden koniec przełącznika jest podłączony do masy, a drugi koniec jest podłączony odpowiednio do pinów 2, 3, 4 i 5. Przełączniki będą miały rezystory podciągające włączone wewnętrznie za pomocą oprogramowania. Ponieważ obwód jest dość prosty, można go podłączyć za pomocą płytki do chleba, jak pokazano poniżej:
Objaśnienie programu Arduino:
Po zrozumieniu koncepcji program Arduino jest dość prosty. Pełny kod znajduje się na końcu samouczka. Jeśli nie jesteś zaznajomiony z dodawaniem plików nagłówkowych, możesz pobrać kod jako plik ZIP z tego miejsca i przesłać go bezpośrednio do Arduino.
Powyższe dwa to pliki nagłówkowe, które należy dodać. „Pitches.h” służy do zrównania każdej nuty muzycznej z określoną częstotliwością, a „themes.h” zawiera wartość nuty i czas trwania wszystkich czterech tonów.
#include „pitches.h” #include „themes.h”
Tworzona jest funkcja do odtwarzania każdego brzmienia, kiedy jest to wymagane. Tutaj, gdy funkcja Play_Pirates () zostanie nazwana, zostanie odtworzony dźwięk „He is a Pirate”. Ta funkcja składa się z funkcji tonu, która wytwarza częstotliwość na styku numer 8. Funkcja NoTone (8) jest wywoływana w celu zatrzymania muzyki po jej odtworzeniu. Jeśli chcesz grać własnego tonu, zmień Pirates_note i Pirates_duration do nowych notebooków i czas trwania wartości, które zostały zapisane w „themes.h” wartości
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // zamień czas trwania na ton opóźnienia czasowego (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1.05; // Tutaj 1.05 to tempo, zwiększ, aby odtworzyć wolniejsze opóźnienie (pauseBetweenNotes); noTone (8); }}
Kołki 2, 3, 4 i 5 służą do wyboru konkretnego tonu do odtworzenia. Te styki są domyślnie utrzymywane wysoko przy użyciu wewnętrznych rezystorów podciągających przy użyciu powyższej linii kodu. Po naciśnięciu przycisku jest on dociągany do ziemi.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
Poniższy blok kodu służy do odtwarzania utworu po naciśnięciu przycisku. Odczytuje wartość cyfrową każdego przycisku, a gdy osiągnie niski poziom (zero), zakłada, że przycisk jest naciśnięty i odtwarza odpowiedni dźwięk, wywołując wymaganą funkcję.
if (digitalRead (2) == 0) {Serial.println ("Wybrano -> 'On jest piratem'"); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Selected -> 'Crazy Frog'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Wybrano -> 'Mario UnderWorld'"); Play_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Wybrany -> 'On jest piratem'"); Play_Pirates (); }
Działanie tego obwodu Melody Player Arduino:
Gdy kod i sprzęt będą gotowe, po prostu wypal program w swoim Arduino i powinieneś być w stanie odtworzyć dźwięk, po prostu naciskając przyciski. Jeśli masz jakiekolwiek problemy, spójrz na swój monitor szeregowy w celu debugowania lub skorzystaj z sekcji komentarzy, aby zgłosić problem, a ja z przyjemnością Ci pomogę.
Pełne działanie projektu pokazano na poniższym filmie. Mam nadzieję, że spodobał Ci się projekt i wykorzystasz go w niektórych projektach lub stworzysz nowy ton dla swojego projektu. Jeśli tak, podziel się swoją pracą w sekcji komentarzy.