Plumkając sobie ostatnio na gitarze doszedłem do wniosku, że przydałby mi się metronom. Mam co prawda metronom w formie programu na PC, jak i aplikacji na Androida, ale zamarzył mi się taki prawdziwy metronom sprzętowy :) I nie mam tutaj na myśli jakiegoś piszczącego pudełeczka, ale coś bardziej mechanicznego…
Początkowo myślałem nad wykorzystaniem serwomechanizmu, ale szybko wybiłem sobie ten głupi pomysł z głowy ;) Serwa same w sobie są głośne i tylko by przeszkadzały w czasie gry. Musiałem więc znaleźć coś innego, co pozwoliłoby wystukiwać wyraźny rytm, ale jednocześnie pracować bezszelestnie. I wtem spojrzałem na swoją szlifierkę z dysku twardego i mnie olśniło – w roli metronomu idealnie powinno się sprawdzić ramię głowicy z dysku HDD :D
Jak działa ramię dysku twardego?
Ramię głowicy jest napędzane dzięki cewce umieszczonej między dwoma silnymi magnesami stałymi. Gdy przez cewkę przepuści się prąd, wytwarza się w niej pole magnetyczne, które powoduje przyciągnięcie całego ramienia do jednego z biegunów magnesów. Dokładnie ten sam efekt jest wykorzystywany w opisywanym wcześniej głośniku zrobionym z dysku twardego :)
W czasie normalnej pracy kierunek przepływu prądu przez cewkę jest zmieniany z olbrzymią częstotliwością, dzięki czemu sterownik dysku może bardzo precyzyjnie sterować położeniem ramienia z głowicą. Ja w swoim metronomie aż takiej precyzji nie potrzebowałem, dlatego mogłem sobie odpuścić stosowanie wysublimowanego sterownika, zastępując go zwykłym mostkiem H.
Ale po kolei…
Jak zrobić metronom z dysku twardego?
Pracę zaczynamy od rozebrania na części pierwsze dowolnego dysku twardego. Na początek rozkręcamy obudowę:
Następnie wykręcamy talerze dysku wraz z silnikiem:
Odwracamy dysk na drugą stronę i odkręcamy płytkę z całą elektroniką:
Zostawiamy sobie jedynie magnesy i ramię głowicy:
Z tego, co nam zostało, powstanie metronom. Ramię głowicy będzie wybijało rytm, a obudowa dysku będzie pełniła rolę obudowy metronomu (złożymy ją tylko nieco inaczej;)
Omówmy jednak najpierw nieco teorii…
Jak wprawić metronom w ruch?
Do sterowania metronomem zdecydowałem się użyć mikrokontrolera, dzięki któremu będzie można wyposażyć metronom w kilka predefiniowanych programów (trybów pracy), a także dodać kilka przydatnych bajerów ;)
Sam mikrokontroler nie byłby jednak w stanie zasilić cewki, dlatego do układu dołożyłem jeszcze mostek H (układ L293DNE). Ostatecznie układ przybrał taki kształt:
Jak widzicie, całość zdecydowałem się zasilać napięciem 12V. Głównym powodem była cewka, która przy niższym napięciu dosyć niepewnie poruszała ramieniem. Oba układy scalone zostały z kolei zasilone za pośrednictwem stabilizatora 5V, na którego wyjściu dałem dwa kondensatory filtrujące napięcie – elektrolityczny C1 o pojemności 22µF, oraz ceramiczny C2 o pojemności 100nF (C2 powinien się znajdować jak najbliżej mikrokontrolera).
Dodatkowo pierwsza nóżka mikrokontrolera (reset) została podciągnięta rezystorem 10k do zasilania.
Sam mostek H (układ L293DNE) został podłączony do mikrokontrolera poprzez diody 1N4007, które zabezpieczają µC przed większym napięciem wracającym z cewki.
Na schemacie znalazł się też przycisk, który będzie służył do zmieniania tempa pracy metronomu.
Jest to pierwsza wersja metronomu, która będzie jeszcze rozbudowywana i dalej rozwijana w kolejnych postach :)
Program
Program obsługujący metronom zdecydowałem się oprzeć na bibliotece Timers autorstwa Sprae. Co prawda w obecnej wersji metronomu mógłbym się spokojnie obyć bez tej biblioteki, ale przy wprowadzaniu planowanych ulepszeń będzie ona już sporym ułatwieniem pracy i pozwoli w znacznym stopniu uprościć kod :)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
#include <Timers.h> Timers<1> timer; #define mostekH_PIN1 2 #define mostekH_PIN2 3 #define przycisk_PIN 4 int przycisk, poprzedniPrzycisk; unsigned long rytm = 0; unsigned long aktualnyRytm = 0; unsigned long poprzedniRytm = 0; unsigned long wcisniety; void setup() { timer.attach(0, 0, metronom); pinMode(przycisk_PIN, INPUT_PULLUP); pinMode(mostekH_PIN1, OUTPUT); pinMode(mostekH_PIN2, OUTPUT); digitalWrite(mostekH_PIN1, HIGH); digitalWrite(mostekH_PIN2, LOW); poprzedniPrzycisk = HIGH; } void metronom() { // funkcja zmieniająca położenie ramienia metronomu static byte met = LOW; // początkowe ustawienie zmiennej "met" na LOW digitalWrite(mostekH_PIN1, met); // podanie stanu "met" na wejście "1" mostka H met = ~met; // zmiana stanu "met" na przeciwny digitalWrite(mostekH_PIN2, met); // podanie zmienionego "met" na wejście "2" mostka H } void loop() { timer.process(); przycisk = digitalRead(przycisk_PIN); if(przycisk != poprzedniPrzycisk) { if(przycisk == LOW) { aktualnyRytm = millis(); wcisniety = millis(); rytm = aktualnyRytm - poprzedniRytm; poprzedniRytm = aktualnyRytm; timer.setInterval(0, rytm); // ustawianie nowej częstotliwości pracy metronomu metronom(); // zmiana położenia ramienia (przy wciskaniu przycisku) delay(100); } } if(przycisk == LOW) { int czasWcisniecia = millis() - wcisniety; if(czasWcisniecia >= 500) { // JEŻELI przycisk jest wciśnięty dłużej niż 0,5s: timer.setInterval(0, 0); // zatrzymaj metronom } } poprzedniPrzycisk = przycisk; } |
Program nie jest zbyt skomplikowany (jeszcze), więc mam nadzieję, że każdy sobie poradzi ze zrozumieniem jego działania :) Generalnie całość sprowadza się do jednego – program zapamiętuje czas, jaki minął między dwoma ostatnimi wciśnięciami przycisku i ustawia go jako czas pomiędzy kolejnymi zmianami położenia ramienia metronomu. Uh – brzmi skomplikowanie, więc postaram się wyjaśnić to prościej ;)
Wystarczy palcem wystukać rytm (wciskając przycisk), żeby metronom zaczął pracować z tą samą częstotliwością.
Składamy metronom
Cały układ zmontowałem na płytce uniwersalnej:
Na płytce zamontowałem sobie też gniazdo ICSP, żeby w przyszłości móc szybko podpiąć programator i zmienić program w mikrokontrolerze.
Pod płytkę włożyłem podkładkę z tworzywa, żeby uniknąć możliwości zrobienia zwarcia przez metalową obudowę:
Cewkę ramienia podłączyłem od spodu, wyłamując najpierw wszystkie zbędne goldpiny, w miejsce których wkleiłem gniazdo zasilania (metronom będzie zasilany zasilaczem sieciowym od jakiegoś starego routera):
Płytkę przykręciłem dwoma wkrętami korzystając z oryginalnych otworów znajdujących się w obudowie:
Na powyższym zdjęciu widać też już przykręcony i podłączony przycisk, pod który otwór wywierciłem wcześniej :)
I to wszystko :) Na koniec przykręcamy obudowę “od tyłu”, tzn. tak, żeby zakryć całą elektronikę, a ramię z magnesami zostawić na wierzchu. Do skręcenia obudowy będziemy potrzebować dłuższych śrubek (ja u siebie dałem śrubki o długości 2cm):
Tadaaam – metronom skończony!
Nie jest to jednak metrodom doskonały, dlaczego czekają nas jeszcze…
Drobne poprawki
Metronom w czasie pracy wydawał nieprzyjemny, metaliczny dźwięk. Spowodowany był drżeniem blaszek w ramieniu głowicy:
Żeby pozbyć się tego przydźwięku, wkleiłem pomiędzy elementy ramienia małe gumki (wycięte z gumowej uszczelki). Przy okazji pozbyłem się też tych cienkich blaszek z końca ramienia, do których była zamocowana sama głowica:
Dźwięk był już czysty, ale nadal trochę stłumiony. Przyczyną były gumowe elementy amortyzujące znajdujące się z drugiej strony ramienia (od strony magnesów):
W różnych dyskach te elementy mogą wyglądać inaczej, ale generalnie są to jakieś gumowe amortyzatorki mające chronić ramię przed mocnymi uderzeniami w skrajnych położeniach. Z jednej strony znajdziecie też najprawdopodobniej mały magnesik (widoczny na powyższym zdjęciu na końcu prawej gumki), który możecie usunąć razem z gumką (normalnie magnesik ma trzymać ramię w jednej pozycji, gdy dysk nie jest używany).
No – i teraz można już chyba powiedzieć, że to koniec pracy (na dziś;)
Metronom z dysku twardego
Skończony metronom prezentuje się następująco:
I działa tak:
Na filmiku może tak dobrze tego nie słychać (mój aparat sam wycisza głośniejsze dźwięki), ale dźwięk jest dosyć głośny, wyrazisty i przyjemny dla ucha :)
Do zrobienia…
Jak już wspomniałem wcześniej, jest to dopiero pierwsza wersja metronomu, która będzie jeszcze rozwijana. W najbliższej przyszłości chciałbym:
- Dodać wyświetlacz
- Dodać różne tryby pracy do wyboru
- Dodać potencjometr do precyzyjnego ustawiania tempa pracy
- Dodać możliwość podłączenia dodatkowego nożnego pedału do zmiany trybu pracy
- Dodać diodę LED, która mogłaby mrugać w rytm taktu
- Dodać mikrofon, żeby móc ustalać takt np. klaśnięciem dłoni
Macie jeszcze jakieś sugestie, co powinno się znaleźć w metronomie?
Zamiast potencjometru proponowałbym podejrzeć rozwiązanie stosowane w ładowarkach modelarskich – tam nigdy nie trzeba za każdym razem precyzyjnie nastawiać parametrów, zamiast tego można stworzyć sobie presety (kilka zazwyczaj już jest), z których bardzo szybko się korzysta.
Tak – to też będzie. Ale potencjometr (enkoder) chcę dać mimo wszystko, żeby na jakichś próbach móc szybko zmienić ustawienie, gdy padnie hasło “A może spróbujemy odrobinę wolniej?” :)
Ja bym uprościł konstrukcję i poszedł w 555 z potencjometrem.
Na 555 nie porobię tych wszystkich dodatków, które mam w planach.
Może lepiej zamiast potencjometru zastosować funkcję “nabijania” tempa?
uC musiałby zmierzyć odstęp pomiędzy dwoma kolejnymi naciśnięciami przycisku i potem w tych samych odstępach wybijać rytm.
Myślę, że to proste i dobre rozwiązanie.
Chmm… przecież dokładnie tak działa to teraz ;)
Nie doczytałem. W takim razie bardzo dobrze działa :)
w metronomach w których można nabić (tapować) rytm zwykle jest jeszcze stosowane uśrednianie. Czyli wystukując rytm przez dłuższą chwilę, jako podstawa rytmu nie jest brany interwał pomiędzy ostatnimi dwoma stuknięciami, ale średnia odległość brana z powiedzmy ostatnich czterech “tapnięć”. Pozwala to nieco precyzyjniej dostrajać tempo, szczególnie w wypadkach gdy “nabijasz” do lecącego już utworu. Programowa implementacja tego też nie byłaby specjalnie trudna – warto by się może pokusić ;)
Jak skończysz z metronomem, to zrób tuner :)
Jak już w samym metronomie będzie i mikrofon i wyświetlacz, to będzie mógł pełnić także rolę tunera :D
To nie jest metronom. To urządzenie, które udaje metronom. Prawdziwy metronom jest mechaniczny i nie potrzebuje zasilania.
Ale przynajmniej trzyma rytm ;)
Niezwykle pomysłowe. Mógłbyś zmierzyć natężenie prądu w czasie pracy cewki?
Sam prąd płynący przez cewkę, czy dla całego układu?
Tylko prąd zasilający cewkę. Interesuje mnie ile ona pobiera.
Aha, jeszcze jedna prośba. Wrzucaj też schemat elektryczny, wydaje mi się że Fritzing ma taką opcję? Te kolorowe kreseczki dla mnie są masakrycznie nieczytelne a na schemacie od razu widać jak połączenia się układają.
600mA. I sama cewka wydziela też sporo ciepła (ale w bezpiecznych granicach – po całej nocy nadal dało się ją dotknąć;)
A o schematach jakoś prawdę mówiąc wcześniej nie pomyślałem :) Na przyszłość postaram się poprawić!
Dlaczego na schemacie jest atmega32, a używasz atmegi8? :D
Na schemacie jest 328, bo innej nie ma w bibliotece elementów programu Fritzing ;) A że są one kompatybilne (różnią się tylko ilością dostępnej pamięci), to nie było sensu o tym wspominać :)
Ale punkt dla Ciebie za spostrzegawczość ;)
No to jeszcze literówka w tym akapicie:
“Sam mostek H (układ L273DNE) został podłączony do mikrokontrolera poprzez diody IN4007, które zabezpieczają µC przed większym napięciem wracającym z cewki.”
Zły symbol mostka napisałeś.
Mówisz że cewka bierze 0,6A, mostek ten właśnie tyle może dostarczyć (w pikach więcej) a to oznacza że przy dużym bpm może się spalić.
Więcej uwag chyba nie mam ;)
Racja – literówka była. U siebie mam układ L293DNE (który też może dać 0,6A, ale w praktyce ledwo się grzeje;)
Hehe, genialne. Zwłaszcza, że jestem muzykiem:)
Cześć, bardzo fajny projekt :) Może byś zaczął pisać/nakręcać serię poradników jak od zera dojść do takiej wiedzy jaką Ty posiadasz? :) Chodzi o elektronikę, taka nauka od podstaw do takich układów jak np. ten :)
Jeśli mogę ja odpowiedzieć.
Trochę czytania, dużo eksperymentowania. Najważniejsze to wiedzieć co chcesz osiągnąć. Wyznacz sobie cel zbudowania czegoś i staraj się to zrobić.
Myślę że lepszym rozwiązaniem niż potencjometr bylaby regulacja przyciskami + -, aby ustawić tempo precyzyjnie.
Dodatkowo, fajnie jakby dalo się zrobić uderzenia akcentowane, aby oznaczać początki taktów jak w profesionalnych metronomach cyfrowych, z możliwością ustawiania metrum. albo ewentualnie dodać jako opcję podziały triolowe :D
Ale mechaniczna konstrukcja troche wyklucza dodanie akcentu… chyba zeby zastosowac piezobuzzer do podbijania akcentów.
Swoją drogą ciekawym wyzwaniem mogłaby być synchronizacja buzzera, zeby pikał dokładnie w momencie uderzenia ramienia. :)
Bardzo Fajny Pomysł z tym Metronomem. A mam Pytanie odnośnie jakiegoś nowego projektu: Dało by się stworzyć Odtwarzacz Muzyki umiejscowionej na Płytce DVD albo CD? Chodzi mi oczywiście by go stworzyć z Dysku twardego. Jakoś gdy jadłem czkoladki Miałem dylemat jak wykorzystać kolejne aluminiowe pudełko. I wpadłem na ten pomysł. Byłbym podekscytowany gdyby dało by rade stworyć coś takiego. Pozdrawiam.
Z samego dysku jest to raczej niewykonalne w domowych warunkach. Już prędzej z jakiegoś pendrive, albo karty SD :) A odtwarzacz płyt można zrobić na bazie starego CD-romu :)
Mam pytanie: jakiego programu używasz do pisania programu i jakiego kompilatora? Albo może wyślesz mi gotowy plik wsadowy o rozszerzeniu .hex ? Z góry dziękuję za pomoc.
przepraszam lecz mi nie za bardzo się podoba ten post ponieważ nie każdego stać na arduino bądź niektórzy są początkującymi (jak ja ) i nie znają się na programowaniu itp. prosiłbym o schemat takiego metronomu tylko że na ne555 oczywiście schemat potrafię zrobić tylko nie wiem jakie elementy trzeba dobrać aby zrobić sekundnik zamiast metronomu .
Atmega8 się marnuje w tej aplikacji ale jeśli ma być rozwojowo to niech będzie (chociaż ja bym się prędzej zdecydował na m88).
Proponuję następujące udoskonalenia (niektóre się pokrywają z Twoimi):
– koniecznie wyświetlacz bpm, może być na 7-segmentowych ledach
– zmiana bpm nie tylko przez “tap tempo” ale też guzikami +- lub enkoderem (nie potencjometrem)
– jeśli ma mrugać dioda to niech będzie dwukolorowa, żeby sygnalizować akcent
– wyjście słuchawkowe
– zmiana metrum (razem z egzotycznymi metrami nieparzystymi)
jak szaleć to szaleć:
– wysyłanie komend MIDI
– programowanie utworu (zmiana metrum lub tempa po x taktach), do tego już przydałby się wyświetlacz od Nokii.
Tak mi się spodobał ten projekt, że jutro pójdę do sklepu, kupię dysk i też sobie zrobię taki metronom… :)) Gratuluję pomysłu i pozdrawiam.
Fajnie, że jest internet, w moich czasach nie było :(((
krok dodaj obudowe i bedzie zamek do drzwi :) klucz moze byc tylko zamkniecie obiegu