Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Pozytywka z optycznym zapisem melodii

ghost666 23 Nov 2013 22:53 12621 9
phoenixcontact
  • Muzyka jest najbardziej uniwersalnym sposobem ekspresji. Niezależnie od języka, kultury czy wieku pewne idee przekazywane przez muzykę się nie zmieniają. Można bezpiecznie założyć iż każdy lubi muzykę - taki czy inny jej rodzaj. Każdy zna to uczucie gdy podczas słuchania naszego ulubionego kawałka nóżka sama lata do rytmu albo ręką przebiera po niewidzialnym gryfie 'powietrznej gitary'.

    Autor tego projektu niestety nie jest zaznajomiony z użytkowaniem żadnego instrumentu muzycznego i szczytem jego możliwości była gra na wirtualnej gitarze w takt dźwięków dobywających się z głośnika. Dlaczego by nie skompensować braku tych umiejętności z wykorzystaniem zdolności technicznych? w odpowiedzi na to pytanie autor postanowił skonstruować jakiś układ który generować będzie muzykę przy minimalnym treningu użytkownika jednakże nadal przy bardzo dużym jego zaangażowaniu.

    Stworzenie pozytywki wydawało się dobrym startem. Układ taki 'gra' muzykę w czasie rzeczywistym, odmiennie niż na przykład odtwarzacz plików mp3 który zaledwie dokonuje konwersji cyfrowych danych na zmianę napięcia w czasie. Jednakże od czasów największej popularności pozytywek metody zapisu zmieniły się i metalowy dysk z otworami lub wystającymi szpilkami nie jest już ani optymalny ani umożliwiający daleko idące przeróbki. Z kolei jeśli by zapisać muzykę w pliku to... wracamy do punktu wyjścia naszych rozważań. Ale jeśli by zapisać melodię na papierze - to pozwoliłoby na zrealizowanie założeń projektu! Tak właśnie narodził się pomysł stworzenia elektronicznej pozytywki.

    Pozytywka z optycznym zapisem melodii


    Do jej konstrukcji potrzebować będziemy:

    * Dwie płytki prototypowe
    * Stabilizator napięcia 5 V LM7805
    * Mikrokontroler ATmega328 albo ATmega168
    * Oscylator kwarcowy o częstotliwoci 16 MHz i dwa kondensatory o pojemności 22 pF

    Oczywiście zamiast powyższych zastosować można po prostu moduł Arduino :).

    Dodatkowo potrzebujemy:

    * 3 X wzmacniacz operacyjny LM324
    * 14 X podczerwonych diod LED
    * 14 X podczerwone fotodiody
    * Potencjometr 10 kΩ
    * Potencjometr 50 kΩ
    * Gniazdo jack 3.5mm
    * Przetwornik Cyfrowo-analogowy MCP4911 o rozdzielczości 10 bitów
    * Para 20 pinowych konektorów - męski i damski
    * Rozmaite elementy dyskretne.

    Dodatkowo potrzebne są pewne elementy mechaniczne:
    * Silnik zasilany 6 V z przekładnią w celu uzyskania około 30 obrotów na minutę
    * Wałki - o nich później.

    Jak zapisać muzykę na kartce papieru? Najprostszym sposobem jest podzielenie kartki papieru na kolumny o równej szerokości. Każda z kolumn reprezentować będzie, w pewnym uproszczeniu, konkretną nutę. Jest to zapis dosyć podobny do klasycznego zapisu nutowego na pięciolinii. Nuty są odpowiednio zakolorowane na przygotowanej kartce, a długość trwania dźwięku kontrolowana jest za pomocą zakolorowania kolumny na odpowiednią długość. Papier z zapisaną melodią wygląda tak jak pokazano to na zdjęciu poniżej.

    Pozytywka z optycznym zapisem melodii


    Jak układ odczytuje taki zapis nutowy? Bardzo prostu. Użyteczne są tutaj systemu optyczne. Wykorzystanie podczerwieni dodatkowo zmniejszy podatność układu na zakłócenia wynikające z zewnętrznego światła. Podobnie jak dla światła widzialnego zakolorowane prostokąty absorbują światło podczerwone. Kartka zapisem przesuwa się pomiędzy diodami LED a fotodetektorami, tak jak pokazano to poniżej. Teraz wystarczy odczytać napięcie wyjściowe z każdej fotodiody i można już odróżniać czarne od białego.

    Pozytywka z optycznym zapisem melodii


    Jak teraz wygenerować muzykę? Jako że metoda generowania dźwięku w naszym urządzeniu jest w pełni elektroniczna można posłużyć się podobną metodyką z jaką zetkniemy się na przykład odtwarzaczach mp3. W celu wygenerowania sygnału wykorzystujemy szybki konwerter cyfrowo-analogowy, który generuje nam zmienne w czasie napięcie. W ten sposób jesteśmy w stanie wygenerować bardzo prosto pojedynczy ton. Używając nie dużo bardziej skomplikowanej metody jesteśmy w stanie wygenerować tak nie tylko pojedynczy ton a dowolny przebieg, co pozwala na na przykład polifonię w naszym układzie.

    Opisywany układ jest w istocie bardzo prosty, mimo rozbudowanego detektora. Projekt został rozdzielony na dwie części - płytę główną i podczerwony detektor. Układ obsługujący detekcję znaków zapisanych na kartce jest bardzo prosty. Składa się on z celujących w siebie nawzajem 14 diod podczerwonych i 14 fotodiod czułych w tym zakresie spektralnym. Dlaczego akurat 14? ponieważ z jednej strony 14 'kanałów' pozwala nam na obsłużenie dwóch oktaw, a po drugie maksymalnie tyle zmieściło się na płytce prototypowej którą do dyspozycji miał autor. Na wyjściu sensora obecne jest 14 sygnałów napięciowych, po jednym dla każdej kolumny. Sygnały z fotodetektorów podawane są na wzmacniacze operacyjne LM324 działające tutaj jako komparatory. Układy te zostały wybrane do tego projektu nie ze względu na swoje parametry lecz z uwagi na możliwość zasilania niesymetrycznym napięciem już od 3 V. Fakt iż jest to poczwórny wzmacniacz (tj. w jednej obudowie znajdują się cztery wzmacniacze operacyjne - przyp. tłum.) także przyczynił się do wyboru LM324 do tego projektu. Dodatkowe własności układu, jak niskie zużycie mocy czy niska cena, są niejako bonusem do powyższego. Komparatory konwertują sygnały z macierzy detektorów do postaci cyfrowej. Jako sygnały wysoki lub niski trafiają one do mikrokontrolera, co umożliwia mu rozpoznanie które kolumny na kartce zostały zakolorowane. Następnie mikrokontroler może przystąpić do tego w czym jest najlepszy - do obliczeń.

    Pozytywka z optycznym zapisem melodii


    Na podstawie informacji z detektora mikrokontroler generuje odpowiedni przebieg wyjściowy. Do generacji przebiegu sinusoidalnego wykorzystano tzw. look-up table czyli tablicę zapisaną w pamięci flash mikrokontrolera która opisuje przebieg napięcia w funkcji czasu dla funkcji sin(t). Uzyskanie w takiej sytuacji polifonii jest relatywnie proste. Wystarczy dodać do siebie dwie liczby (lub więcej, zależnie od ilości dźwięków) odczytane z tabeli i podać je na wyjście. Układem wyjściowym jest przetwornik cyfrowo-analogowy który na podstawie nadesłanych z mikrokontrolera danych cyfrowych generuje przebieg analogowy.

    Konstrukcja detektora optycznego jest krytyczna dla działania całego układu. Odległość pomiędzy diodami musi być zachowana stała. Autor wykorzystał płytkę prototypową o rozstawie otworów wynoszącym 1,5 mm. Dzięki temu odległość pomiędzy diodami wyniosła 5 mm. Następnie pomiędzy diodami a fotodetektorami wyfrezowana została szczelina szeroka na 75 mm. Tędy przesuwać się będzie papier z zapisanymi dźwiękami. Płytka detektora podłączona zostanie do płytki z mikrokontrolerem z wykorzystaniem 20 pinowego złącza. Nie bez powodu autor nie podaje wartości oporników R1 - R14 na schemacie. Dobranie odpowiednich wartości jest istotne dla działania układu i jest jednym z kroków podczas jego 'strojenia'. Wstępnie przyjąć można wartość 100 Ω.

    Pozytywka z optycznym zapisem melodii


    Konstrukcja płyty głównej układu nie była wcale skomplikowana. W układ można wbudować mikrokontroler ATmega328 lub ATmega168 z bootloaderem Arduino można także zamiast mikrokontrolera umieścić gotowy moduł Arduino. Autor na stronie( http://www.instructables.com/id/Electronic-Music-Box-Powered-by-Arduino-sort-of/step4/Construction-Main-circuit-board/ ) udostępnia dokumentację płytki drukowanej w postaci plików programu Eagle. Znajduje się tam schemat oraz projekt płytki drukowanej. Dzięki temu w układzie można wprowadzić dowolne przeróbki na własne potrzeby.

    Pozytywka z optycznym zapisem melodii


    Kolejnym krokiem jest strojenie układu. Jako że wykorzystane najtańsze diody LED i fotodiody podczerwone nie trzymają zbyt ściśle parametrów różnica pomiędzy poszczególnymi elementami może być na tyle znacząca iż zakłóci działanie układu. Spowodować może ona fałszywe wykrywanie obiektów przez detektor. Do korekcji układu detektora potrzebny jest nam multimetr. W pierwszej kolejności trzeba podpiąć detektor do głównej płytki i załączyć zasilanie. Korzystając z multimetra mierzy się spadek napięcia na opornikach R7-R20. Powinien on być mniej-więcej taki sam na każdym oporniku. Jeśli na którymś oporniku będzie on diametralnie (o 100 mV lub więcej) odbiegać od pozostałych należy skorygować to poprzez zmianę wartości oporu towarzyszącego mu opornika. Teraz gdy wszystkie detektory ustawione są podobnie z pomocą potencjometru ustala się próg zadziałania komparatorów. W przedstawionym projekcie próg jest jeden, wspólny dla wszystkich komparatorów. Należy ustawić go w taki sposób aby dla pola zaciemnionego wyjście było w stanie niskim a dla białego papieru w stanie wysokim. Po tych krokach pozytywka powinna być gotowa do pierwszego uruchomienia.

    Kod programu (umieszczony tutaj - Link) to miejsce gdzie dzieje się cała magia. Program sterujący działaniem pozytywki nie jest skomplikowany jednak jest dosyć długi z uwagi na powtarzanie pewnych bloków kilka razy. Dodatkowo autor wprowadził sporą ilość komentarzy do tekstu. Część kodu została napisana w klasycznym AVR C zamiast korzystać z używanego najczęściej na Arduino języka charakterystycznego dla tych modułów. Przyczyna tego jest dosyć prosta - szybkość. To co w języku Arduino wydaje się być jedną komendą, na przykład digitalRad() jest w rzeczywistości odwołaniem do biblioteki które realizowane jest przez kompilator. Taki proces jest bardziej czasochłonny co powoduje że pojedynczy odczyt wartości jednego pinu może zająć do pięciu mikrosekund. To stanowczo za dużo jak na pracę w aplikacji gdzie zależności czasowe są krytyczne. Dzięki wykorzystaniu klasycznego AVR C czas ten da się skrócić do 80 ns. Dzięki przyspieszeniu zbierania danych przez układ procesor ma więcej czasu na obliczenia związane z generacją dźwięku.

    Program działa w pętli o czasie trwania 45 mikrosekund, co daje 22,2 kSPS (22,2 tysiąca próbek wyjściowych na sekundę - przyp. tłum). Do każdego dźwięku przyporządkowana jest zmienna która ulega inkrementacji w każdym cyklu aż do momentu gdy dany dźwięk nie zostanie zauważony przez detektor podczerwieni. Na podstawie tej zmiennej program odczytuję stosowną wartość z tabeli danych zapisanej w pamięci flash. Suma wartości odczytanych dla wszystkich aktualnie odtwarzanych dźwięków podawana jest na wyjście poprzez interfejs SPI. Interfejs ten pozwala na komunikację z przetwornikiem DAC który generuje sygnał analogowy.

    Nowa wersja programu rozszerzyła funkcjonalność układu o możliwość zmiany całego zakresu tonalnego pozytywki. Skrajna dioda i fotodetektor odpowiadają za flagę UP. Oznacza ona podniesienia całego zakresu tonalnego o jedną oktawę. To znaczy że jeśli chcemy uzyskać dźwięk C6 należy zakolorować UP i C5.

    Po podłączeniu detektora do układu możemy podłączyć zasilanie do naszej pozytywki. Należy wydrukować załączony do projektu plik PDF w którym znajduje się szablon do zapisu nut. Wytnijmy papier w odpowiedni kształt (można połączyć kilka kart razem) i wsuńmy go w szczelinę układu. Do gniazda jack ukłądu podłączyć należy słuchawki albo wzmacniacz z głośnikami. Podczas przesuwania kartki w detektorze w głośnikach powinniśmy słyszeć melodię którą zapisaliśmy na papierze. Głośność odtwarzanego dźwięku regulowana jest potencjometrem R1.

    Do układu dodać można mechaniczny posuw kartki z zapisanymi nutami. Nie jest to konieczne dla działania układu, ale znacznie poprawia jego komfort. Dodanie mechanizmu przesuwania kartki pozwala na zagwarantowanie stabilnego przesuwu kartki z nutami. Do konstrukcji tego układu wykorzystać należy silnik z przekładnią w celu zapewnieni niskich obrotów. Wałki przesuwające wykonać można z dowolnych pasujących rurek. Autor mechanizm wykonał z silniczka zasilanego napięciem 6 V o prędkości obrotowej równej 30 obrotów na minutę oraz dwóch rolek wykonanych z zasobników z tuszem do długopisu. Jako że naboje te są plastikowe zostały one dodatkowo otulone warstwą wykonaną z koszulki termokurczliwej ażeby papier się nie ślizgał.




    Źródła:
    http://www.instructables.com/id/Electronic-Music-Box-Powered-by-Arduino-sort-of/step6/Put-it-all-together/

    Cool? Ranking DIY
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
    About Author
    ghost666
    Translator, editor
    Offline 
    Fizyk z wykształcenia. Po zrobieniu doktoratu i dwóch latach pracy na uczelni, przeszedł do sektora prywatnego, gdzie zajmuje się projektowaniem urządzeń elektronicznych i programowaniem. Od 2003 roku na forum Elektroda.pl, od 2008 roku członek zespołu redakcyjnego.
    ghost666 wrote 11801 posts with rating 9939, helped 157 times. Live in city Warszawa. Been with us since 2003 year.
  • phoenixcontact
  • #2
    Tremolo
    Level 43  
    Trzeba delikatnie zestroić :) lub może nawet rozważyć czy nie pominął jakiegoś bemola lub krzyżyka :) Strojenie można zrobić cyfrowo, a nie analogowo jak w starych keyboardach... wtedy nie będzie problemu z odstrojeniami.
  • #3
    Gigantor
    Level 19  
    Zawsze bardzo ciekawią mnie wszelkiej maści konstrukcje pozytywkowe, gdyż poza umiejętnościami z zakresu elektroniki wymagają również pewnej wiedzy mechanicznej. Boli mnie jednak to, że w 99% pozytywek układy syntezy traktowane są co najmniej po macoszemu. Tutaj mamy zapowiedź wodotrysku - 22kHz, 10 bitów- spodziewałem się dzwiękowego szaleństwa, a dostałem chroboczącą stację dyskietek (gdy grają 2 kanały). Można było odpuścić przetwornik i generować przebieg prostokątny bezpośrednio na pinach uC - byłoby prościej i lepiej.
  • phoenixcontact
  • #4
    Tremolo
    Level 43  
    Jak robiłem na commodore 64 takie zabawki, to binarnie miałem zakodowane częstotliwości w programie. Nie ma też tam ani bemoli ani krzyżyków czyli AISów CISów itp. Większość ciekawych melodii idzie przez te skale. To już lepiej byłoby 20 młoteczków podpięte do klawiatury midi :)

    Można tak -> układ IR włącza przez siatkę diod odpowiednie binarne wejścia, te wejścia powodują w procesorze wygenerowanie ręcznie wpisanej częstotliwości w pamięci procesora - powiedzmy na wyjściu - trzeba będzie po prostu mieć jakiś proc co będzie miał zegar na wielokrotność 440Hz (dźwięk A). Tylko wtedy jest problem z wielodźwiękami.

    Gigantor, masz racje, tutaj na elektrodzie są mini pozytywki, które w kosmos wyprzedzają te FLOPPy.

    Poza tym jak koleś Canon w D ma zagrać w C

    http://www.enchantedlearning.com/music/label/cmajscale/
  • #5
    chaka
    VIP Meritorious for electroda.pl
    Fail. Wiem, ze to budowa tego ma walor jedynie edukacyjny, ale tu wyszedł fail. Zdecydowanie najgorsza pozytywka jaka słyszałem. To przykład tego jak nie budować pozytywki.
  • #6
    SylwekK
    Level 32  
    O rany, pomijając dość ciekawe rozwiązanie zadawania melodii, mój słuch został wystawiony na ciężką próbę - tak nieudolnie wprowadzonej melodii dawno już nie słyszałem. Moim zdaniem jeśli się już coś demonstruje to autor powinien wziąć pod uwagę rozpoznawalność odgrywanego kawałka, a tenże jest chyba wszystkim znany i gdybym nie przeczytał na karteczce, o który chodzi to pewnie dopiero pod koniec bym się zorientował. To najgorsza wersja jaką słyszałem, a słyszałem ich wiele :)
  • #7
    Urgon
    Level 38  
    AVE...

    Lepszy byłby efekt, jakby koleś wziął 14xNE555 i dokładnie zestroił częstotliwości, bo to coś fałszuje jak diabli...
  • #8
    a.bakus
    Level 15  
    To się nadaje do programu "Co to za melodia", Tej karteczki nie wsadziłeś odwrotnie?
  • #9
    mikstu2
    Level 27  
    No cóż, jakość wygrywanej melodii nie jest powalająca, biorąc pod uwagę skomplikowanie układu.
    Jednak przyznałbym autorowi duży plus za oryginalność pomysłu i konstrukcji, bo jak dotychczas nie spotkałem się z pozytywką która wygrywałaby melodie zaprogramowane mazakiem, ołówkiem, długopisem... (nie dziurkowane), na taśmie papierowej.
    Nie znam się za bardzo na tym wszystkim, ale w moim odczuciu, mogłoby to być urządzenie, które oczywiście po ulepszeniu, wygrywałoby melodię bezpośrednio z podsuniętego mu zapisu nutowego.
  • #10
    marti_944
    Level 28  
    Witam!

    Odczyt zapisu nutowego zaiste byłby ciekawy, ale pomyślmy, jak skomplikowałby układ... należałoby zastosować mniejszy rozstaw diod/odbiorników, coby się na pięciolinii mieściły, albo używać zapisu powiększonego odpowiednio. I proszę, poprawcie mnie, jeśli się mylę: nawet pomijając to - odczyt nut, to już złożony proces... to coś musiałoby mieć jakiś sensor, kamerę, która odczytywałaby obraz, który następnie byłby porównywany z wzorcem. Dochodzi kwestia wszelkich dodatkowych zapisów zawierających się na pięciolinii... poza tym mamy przydałoby się, by odczyt odbywał się w zakresie klucza wiolinowego i basowego. To już lepiej zastosować zamalowywane kwadraciki, ale o odpowiednio większej rozdzielczości, by można było bardziej precyzyjne ustalać długość nut.
    No i to nie stroi, za grosz, nic, null, zero. :D Gdyby to były prawdziwe dwie oktawy, jak zasugerował Tremolo - cyfrowo nastrojone... to byłaby dobra zabawka. ;)
    Niemniej jednak sam zamysł odtwarzania dźwięków zapisanych graficznie jest niezwykle inspirujący i wart realizacji (oczywiście, jak najpewniej już zauważyliście, sam specem nie jestem, zarówno w kwestii muzyki, jak i elektroniki, stąd też te - najpewniej nieludzkie - głupoty w tym poście).

    Pozdrawiam! \m/