Spisu treści:

Digitalizuj piosenkę za pomocą Arduino: 6 kroków
Digitalizuj piosenkę za pomocą Arduino: 6 kroków

Wideo: Digitalizuj piosenkę za pomocą Arduino: 6 kroków

Wideo: Digitalizuj piosenkę za pomocą Arduino: 6 kroków
Wideo: Jak skanuję/digitalizuję stare fotografie? 2024, Listopad
Anonim
Digitalizuj piosenkę za pomocą Arduino
Digitalizuj piosenkę za pomocą Arduino

Chciałem stworzyć projekt, który łączył dwa moje ulubione przedmioty: naukę i muzykę. Pomyślałem o wszystkich sposobach, w jakie mógłbym połączyć te dwie domeny, i pomyślałem, że byłoby interesujące sprawić, by Arduino grało Fur Elise, wyświetlając wysokość nuty w Hertzach. Teraz zacznijmy budować!

Będziesz potrzebował jednego Arduino Uno lub Mega, wielu kabli rozruchowych, brzęczyka Piezo, płytki stykowej, ekranu LCD 16*2 ze wszystkimi pinami wycieraczek i potencjometru 10k (możesz również usłyszeć, że są one nazywane potencjometrami). Najlepiej jest zebrać wszystkie te materiały razem przed rozpoczęciem budowy.

Krok 1: Przekształć partyturę muzyczną w nuty cyfrowe: wartości opóźnienia

Konwertuj partyturę muzyczną na nuty cyfrowe: wartości opóźnień
Konwertuj partyturę muzyczną na nuty cyfrowe: wartości opóźnień

Cyfrowa transkrypcja nuty z partytury na jej cyfrowy odpowiednik składa się z dwóch kroków. Najpierw będziemy musieli wpisać czas trwania notatki w milisekundach. Do tego zadania użyłem wykresu znalezionego w Internecie. W oparciu o to, czy nuta była półnutą, ćwierćnutą, ósemką itd., przepisałem długość nuty na milisekundy. Możesz zobaczyć te liczby w moim kodzie jako delay(); funkcja i liczba w nawiasach będą wartością opóźnienia w milisekundach, którą określiliśmy w tym kroku.

Krok 2: Przekształć partyturę muzyczną w nuty cyfrowe: wartości w hercach

Konwertuj partyturę muzyczną na nuty cyfrowe: wartości w hercach
Konwertuj partyturę muzyczną na nuty cyfrowe: wartości w hercach

Zanim przystąpię do tego kroku, zdefiniuję kilka terminów technicznych. „Wartość” nuty może być używana zamiennie ze słowami „wysokość”, „wartość” i „nuta”. Teraz musisz przeczytać każdą nutę utworu z partytury. Będziesz musiał następnie przetłumaczyć każdą nutę na Hertz za pomocą tabeli muzyki na Hertz, którą możesz łatwo znaleźć w Internecie. Jedną rzeczą do zapamiętania jest to, że środkowe C jest wymienione na stole jako C4, a oktawa wyższe to C5 i tak dalej. Gdy wszystkie te nuty zostaną przepisane na Hertz, będziesz umieszczał wartości w funkcji ton(x, y, z); gdzie X to numer pin lub const int, sposób definiowania zmiennych, który wyjaśnię później. Y będzie wartością w hercach, którą właśnie zapisałeś, a Z będzie czasem trwania nuty w milisekundach zaokrąglonym do najbliższej setnej części. Opóźnienie(); wartości to czas trwania nuty. Teraz zaprojektujmy obwód, który może odtwarzać muzykę.

Krok 3: Projekt obwodu

Projekt obwodu
Projekt obwodu

Teraz, gdy przetłumaczyliśmy wszystkie notatki na wartości cyfrowe, które komputer może zrozumieć, nadszedł czas na zbudowanie obwodu. Rozpocznij od wzięcia płytki stykowej i umieszczenie ekranu LCD z pierwszym pinem (GND) w rzędzie 14. Umieść brzęczyk w dowolnym miejscu i umieść obok niego potencjometr. Celem jest wyrównanie wszystkiego, aby zminimalizować bałagan na przewodach. Umieść Arduino obok płytki stykowej i podłącz pin 5v do szyny dodatniej płytki stykowej, a pin uziemiający do szyny ujemnej. Teraz jesteśmy gotowi do podłączenia zworek pomiędzy Arduino a komponentami.

Porozmawiajmy teraz o pinach na wyświetlaczu LCD i o tym, jak je podłączyć.

GND oznacza uziemienie, jest to przewód ujemny w prądzie stałym. Podłącz GND do ujemnej szyny płytki stykowej.

VCC to skrót od Voltage at the Common Collector, do którego podłączasz swoje 5-woltowe źródło zasilania (dodatnia szyna zasilająca).

VO oznacza kontrast, podłącz go do środkowego styku potencjometru. Podłącz lewy pin potencjometru do dodatniej szyny zasilającej, a prawy pin do uziemionej szyny zasilającej.

RS oznacza Register Select i jest używany przez Arduino, aby poinformować wyświetlacz, gdzie przechowywać dane. Podłącz ten pin do pinu 12 w Arduino.

RW oznacza pin odczytu/zapisu, którego Arduino używa do sprawdzania, czy ekran pokazuje to, co zaprogramowałeś. Podłącz ten pin do szyny ujemnej na płytce stykowej.

E oznacza Enable, które informuje wyświetlacz LCD, które piksele należy włączyć (włączyć) lub wyłączyć (wyłączyć). Podłącz ten pin do pinu Arduino 11.

D4, D5, D6 i D7 to styki wyświetlacza, które kontrolują wyświetlane znaki i litery. Podłącz je odpowiednio do pinów 5, 4, 3 i 2 Arduino.

Pin A, czasami oznaczony jako LED, jest anodą LED podświetlenia. Podłącz go do dodatniej szyny zasilającej za pomocą przewodu lub rezystora 220 omów. Rezystor jest lepszy do dłuższego użytkowania, ponieważ oszczędza wyświetlacz LCD, ale jeśli urządzenie nie będzie używane w dzień iw nocy, nie potrzebujesz rezystora.

Pin K, czasami również (mylnie) oznaczony jako LED, jest pinem uziemiającym LED. Podłącz to do uziemionej szyny zasilającej.

Krok 4: Przesyłanie kodu: instrukcje

Podłącz Arduino do portu USB komputera. Prześlij poniższy kod za pomocą programatora Arduino IDE.

#włączać

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

pusta konfiguracja () {

// ustaw liczbę kolumn i wierszy LCD: lcd.begin(16, 2); // Wydrukuj wiadomość na wyświetlaczu LCD. lcd.print("Podziałka w hercach:!"); opóźnienie (1000); void loop() { //odtwórz e4 delay(600);//pauza na 0,6 sekundy dźwięk(10, 329,63, 300);//odtwórz e do brzęczyka na pinie 10, ostatni przez 0,3 sekundy lcd.print(" 329.63");//wyświetlanie komunikatu na LCD "329.63"

opóźnienie (350);//opóźnienie o 0,35 sekundy

lcd.clear();//wyczyść LCD i zresetuj dla następnej wiadomości // odtwórz ton d4#(10, 311.13, 300); lcd.print("311.13"); opóźnienie(350); lcd.clear(); // odtwórz ton e4(10, 329,63, 300); lcd.print("329.63"); opóźnienie(350); lcd.clear(); // odtwórz ton d4#(10, 311,13, 300); lcd.print("311.13"); opóźnienie(350); lcd.clear(); // odtwórz ton e4(10, 329,63, 300); lcd.print("329.63"); opóźnienie(350); lcd.clear(); // odtwórz ton b3(10, 246,94, 300); lcd.print("246.94"); opóźnienie(400); lcd.clear(); // odtwórz ton d4 (10, 293.66, 300); lcd.print("293.66"); opóźnienie(400); lcd.clear(); // odtwórz ton c4(10, 261.63, 300); lcd.print("261.63"); opóźnienie(400); lcd.clear(); // odtwórz ton a3(10, 220, 900); lcd.print("220.0"); opóźnienie (1000); lcd.clear();//line60//helpsave//avrdude.failure.eeprom // odtwórz ton d3(10, 146.83, 300); lcd.print("146.63"); opóźnienie(350); lcd.clear(); //odtwórz dźwięk f3 (10, 174.61, 300); lcd.print("174.61"); opóźnienie(400); lcd.clear(); //odtwórz dźwięk a3 (10, 220, 300); lcd.print("220"); opóźnienie(400); lcd.clear(); // odtwórz ton b3(10, 246,94, 900); lcd.print("246.94"); opóźnienie (1000); lcd.clear();

// odtwórz e3

ton (10, 164,81, 300); lcd.print("164.81"); opóźnienie(400); lcd.clear(); // odtwórz dźwięk g3#(10, 207.65, 300); lcd.print("207.65"); opóźnienie(400); lcd.clear(); // odtwórz ton b3(10, 246,94, 300); lcd.print("246.94"); opóźnienie(400); lcd.clear(); // odtwórz ton c4(10, 261.63, 900); lcd.print("261.63"); opóźnienie (1000); lcd.clear(); //odtwórz e ton(10, 164,81, 300); lcd.print("164.81"); opóźnienie(400); lcd.clear(); // odtwórz ton e4(10, 329,63, 300); lcd.print("329.63"); opóźnienie(400); lcd.clear(); // odtwórz ton d4#(10, 311,13, 300); lcd.print("311.13"); opóźnienie(400); lcd.clear(); // odtwórz ton e4(10, 329,63, 300); lcd.print("329.63"); opóźnienie(400); lcd.clear(); // odtwórz ton d4#(10, 311,13, 300); lcd.print("311.13"); opóźnienie(400); lcd.clear(); // odtwórz ton e4(10, 329,63, 300); lcd.print("329.63"); opóźnienie(400); lcd.clear(); // odtwórz ton b3(10, 246,94, 300); lcd.print("246.94"); opóźnienie(400); lcd.clear(); // odtwórz ton d4(10, 293.66, 300); lcd.print("293.66"); opóźnienie(400); lcd.clear(); // odtwórz ton c4(10, 261.63, 300); lcd.print("261.63"); opóźnienie(400); lcd.clear(); // odtwórz ton a3(10, 220, 900); lcd.print("220.0"); opóźnienie (1000); lcd.clear(); // odtwórz ton d3 (10, 146,83, 300); lcd.print("146.83"); opóźnienie(400); lcd.clear(); // odtwórz ton f3(10, 174.61, 300); //eeprom 20--6 yesno, flash 65--0 noyes lcd.print("174.61"); opóźnienie(400); lcd.clear(); // odtwórz ton a3(10, 220, 300); lcd.print("220.0"); opóźnienie(400); lcd.clear(); // odtwórz ton b3(10, 246,94, 900); lcd.print("246.94"); opóźnienie (1000); lcd.clear(); // odtwórz ton f3(10, 174.61, 300); lcd.print("174.61"); opóźnienie(400); lcd.clear(); // odtwórz ton c4(10, 261.63, 300); lcd.print("261.63"); opóźnienie(400); lcd.clear(); // odtwórz ton b3(10, 246,94, 300); lcd.print("246.94"); opóźnienie(400); lcd.clear(); // odtwórz ton a3(10, 220, 900); lcd.print("220.0"); opóźnienie (1000); lcd.clear(); // odtwórz ton b3(10, 246,94, 300); lcd.print("246.94"); opóźnienie(400); lcd.clear(); // odtwórz ton c4(10, 261.63, 300); lcd.print("261.63"); opóźnienie(400); lcd.clear(); // odtwórz ton d4(10, 293.66, 300); lcd.print("293.66"); opóźnienie(400); lcd.clear(); // odtwórz ton e4(10, 329,63, 900); lcd.print("329.63"); opóźnienie (1000); lcd.clear(); // odtwórz dźwięk g3 (10, 196, 300); lcd.print("196,0"); opóźnienie(400); lcd.clear(); // odtwórz dźwięk f4 (10, 349,23, 300); lcd.print("349.23"); opóźnienie(400); lcd.clear(); //odtwórz dźwięk e4 (10, 329,23, 300); lcd.print("329.23"); opóźnienie(400); lcd.clear(); // odtwórz ton d4 (10, 293,63, 900); lcd.print("293.63"); opóźnienie (1000); lcd.clear(); // odtwórz ton e3(10, 164,81, 300); lcd.print("164.81"); opóźnienie(400); lcd.clear(); // odtwórz ton e4(10, 329,63, 300); lcd.print("329.63"); opóźnienie(400); lcd.clear(); // odtwórz ton d4(10, 293.63, 300); lcd.print("293.63"); opóźnienie(400); lcd.clear(); // odtwórz ton c4(10, 261.63, 900); lcd.print("261.63"); opóźnienie (1000); lcd.clear(); // odtwórz ton d3 (10, 146,83, 300); lcd.print("146.83"); opóźnienie(400); lcd.clear(); // odtwórz ton d4(10, 293.63, 300); lcd.print("293.63"); opóźnienie(400); lcd.clear(); // odtwórz ton c4(10, 261.63, 300); lcd.print("261.63"); opóźnienie(400); lcd.clear(); // odtwórz ton b3(10, 246,94, 900); lcd.print("246.94"); opóźnienie (1000); lcd.clear(); // odtwórz ton e4(10, 329,63, 300); lcd.print("329.63"); opóźnienie(400); lcd.clear(); // odtwórz ton d4#(10, 311,13, 300); lcd.print("311.13"); opóźnienie(350); lcd.clear(); // odtwórz ton e4(10, 329,63, 300); lcd.print("329.63"); opóźnienie(350); lcd.clear(); // odtwórz ton d4#(10, 311,13, 300); lcd.print("311.13"); opóźnienie(350); lcd.clear(); // odtwórz ton e4(10, 329,63, 300); lcd.print("329.63"); opóźnienie(350); lcd.clear(); // odtwórz ton b3(10, 246,94, 300); lcd.print("246.94"); opóźnienie(400); lcd.clear(); // odtwórz ton d4 (10, 293.66, 300); lcd.print("293.66"); opóźnienie(400); lcd.clear(); // odtwórz ton c4(10, 261.63, 300); lcd.print("261.63"); opóźnienie(400); lcd.clear(); // odtwórz ton a3(10, 220, 900); lcd.print("220.0"); opóźnienie (1000); lcd.clear(); // odtwórz ton d3 (10, 146,83, 300); lcd.print("146.83"); opóźnienie(350); lcd.clear(); //odtwórz dźwięk f3 (10, 174.61, 300); lcd.print("174.61"); opóźnienie(400); lcd.clear(); //odtwórz dźwięk a3 (10, 220, 300); lcd.print("220.0"); opóźnienie(400); // odtwórz b3 lcd.clear(); ton (10, 246,94, 900); lcd.print("246.94"); opóźnienie (1000); lcd.clear(); // odtwórz ton e3(10, 164,81, 300); lcd.print("164.81"); opóźnienie(400); lcd.clear(); // odtwórz dźwięk g#3(10, 207,65, 300); lcd.print("207.65"); opóźnienie(400); lcd.clear(); // odtwórz ton b3(10, 246,94, 300); lcd.print("246.94"); opóźnienie(400); lcd.clear(); // odtwórz ton c4(10, 261.63, 900); lcd.print("261.63"); opóźnienie (1000); opóźnienie(300); lcd.clear(); //odtwórz dźwięk e3 (10, 164,81, 300); lcd.print("164.81"); opóźnienie(400); lcd.clear(); // odtwórz ton e4(10, 329,63, 300); lcd.print("329.63"); opóźnienie(400); lcd.clear(); // odtwórz ton d4#(10, 311,13, 300); lcd.print("311.13"); opóźnienie(400); lcd.clear(); // odtwórz ton e4(10, 329,63, 300); lcd.print("329.63"); opóźnienie(400); lcd.clear(); // odtwórz ton d4#(10, 311,13, 300); lcd.print("311.13"); opóźnienie(400); lcd.clear(); // odtwórz ton e4(10, 329,63, 300); lcd.print("329.63"); opóźnienie(400); lcd.clear(); // odtwórz ton b3(10, 246,94, 300); lcd.print("246.94"); opóźnienie(400); lcd.clear(); // odtwórz ton d4 (10, 293.66, 300); lcd.print("293.66"); opóźnienie(400); lcd.clear(); // odtwórz ton c4(10, 261.63, 300); lcd.print("261.63"); opóźnienie(400); lcd.clear(); // odtwórz ton a3(10, 220, 900); lcd.print("220.0"); opóźnienie (1000); lcd.clear(); // odtwórz ton d3 (10, 146,83, 300); lcd.print("146.83"); opóźnienie(400); lcd.clear(); // odtwórz ton f3(10, 174.61, 300); lcd.print("174.61"); opóźnienie(400); lcd.clear(); // odtwórz ton a3(10, 220, 300); lcd.print("220.0"); opóźnienie(400); lcd.clear(); // odtwórz ton b3(10, 246,94, 900); lcd.print("246.94"); opóźnienie (1000); lcd.clear(); // odtwórz ton f3(10, 174.61, 300); lcd.print("174.61"); opóźnienie(400); lcd.clear(); // odtwórz ton c4(10, 261.63, 300); lcd.print("261.63"); opóźnienie(400); lcd.clear(); // odtwórz ton b3(10, 246,94, 300); lcd.print("246.94"); opóźnienie(400); lcd.clear(); // odtwórz ton a3(10, 220, 900); lcd.print("220.0"); opóźnienie (1000); lcd.clear(); }

Krok 5: Przesyłanie kodu: co to wszystko oznacza?

Zdefiniujmy niektóre funkcje w języku angielskim, abyś mógł zrozumieć kod.

ton (x, y, z); = zagraj ton o wysokości y Hertz, do brzęczyka na pinie x, przez z milisekund.

lcd.print("XYZ"); = wydrukować wiadomość ze znakami XYZ na ekranie LCD. (np. wyświetl skok herca)

opóźnienie(x); = pauza na x milisekund.

const int X=Y = ustaw zmienną stałą X na pin Y i użyj X lub Y do przypisania zadań do urządzenia.

lcd.clear(); = wyczyść ekran LCD i zresetuj, aby wyświetlić nowy wyświetlacz

pinMode(X, WYJŚCIE); = ustaw pin X dla trybu wyjścia

Gdy zrozumiesz wszystkie te funkcje, możesz łatwo zastąpić zmienne danymi, które zbierasz podczas tłumaczenia utworu, a następnie możesz zakodować własną piosenkę!

Krok 6: Zakończony!

Skończone!!!
Skończone!!!
Skończone!!!
Skończone!!!

Masz Arduino, które odtwarza Fur Elise i wyświetla wartości nut w Hertzach, albo stworzyłeś Arduino, które odtwarza melodię wybranej piosenki i wyświetla tekst, który chcesz pokazać. Dziękuję za odwiedzenie tego samouczka i mam nadzieję, że ten projekt na Arduino.

Zalecana: