Dawno nic tu nie wstawiałem, więc może od razu do rzeczy Jest to już mój kolejny metronom i chyba wreszcie ostatni DIY. Poprzednie były raczej pchełkami z jedyną opcją taptempo bez możliwości dokładnego ustawienia BPM - pierwszy z latającą linijką, drugi dość mały, przeciętne migadełko. Praktyka jednak i potrzeba (z racji powrotu do grania w zespole) spowodowała, że potrzeba było czegoś co wskazuje, ale też tapuje i przede wszystkim zapamiętuje programy co podczas koncertowania jest po prostu niezbędne - wcześniej ustawiona lista i po każdym kawałku +1 - mega wygodne! Zawsze też chciałem mieć opcję gadającą co bardzo ułatwia odnalezienie się w połamanych rytmach, a poza tym bardzo mi przypadła do gustu podczas treningu kiedy pierwszy raz się z takim czymś spotkałem. Niestety cena tego gadającego i oczywiście też z pamięcią oscylowała w okolicach 1000zł. Mój kosztował mnie kilka wieczorów i jakąś drobnicę elementów. No właśnie elementy...
Urządzenie jest na Atmega328P co zresztą widać na załączonym schemacie. Próbkowanie dźwięku obecnie 8bit 10kHz. Wcześniej 4-bit, ale prace tuningowe zakończone i zostało sporo miejsca to zatankowałem pod korek 99.2% pamięci procka. Na 4 bitach też w sumie dawało radę, jednak teraz wyraźnie mniej szumi no i czyściej gada.
Płytki PCB i klawiatury (zostało mi tego od groma) pochodzi z innego starego projektu, który wykorzystywał ten sam wyświetlacz i procesor. Adaptacja może nie jest do końca estetyczna, (kilka nalutowanych elementów i przyłącza w dziwnych miejscach), jednak docelowo spełnia doskonale zadanie - wszystko trzyma się kupy, a na handel to przecież nie idzie Wzmacniacz m.cz. jest na TDA7050 - mały zgrabny układ wprost do takich zastosowań (minimalna liczba elementów, niskie napięcie zasilania). Ma lekkie szumy, ale w praktyce nie przeszkadzają.
Tapadełko to zwykłe piezo przyklejone od spodu obudowy i zadziwiająco selektywnie zbiera stuki dokładnie z miejsca gdzie się znajduje. Na stukanie obok nie reaguje. Do płynnego zadawania tempa BPM wykorzystałem świetny enkoder optyczny Copal RMS20-250-201-1T. Posiada 250 pełnych impulsów/obrót z czego można zrobić 1000 czytając tylko pojedyncze zmiany. Tu zostałem przy 250 i podzieliłem w programie przez 3 aby mieć wygodną zmianę BPM w najczęściej wykorzystywanym zakresie. Sam algorytm uśredniania uderzeń bazuje na tzw. średniej ciągnionej (czy jakoś tak) i póki co jest to najfajniejsze tapadełko jakie zrobiłem i bije na głowę rozwiązania z tanich metronomów pod względem zadawania i rozpoznawania tempa (porównywałem).
Zasilanie jest z dwóch 18650 spiętych równolegle i ładowanych z USB-C. Ładowarka to moduł zintegrowany z regulowaną przetwornicą ustawioną na 5V. W module przeciąłem ścieżkę zasilania przetwornicy, bo prąd spoczynkowy był zbyt duży i w to miejsce wstawiłem włącznik. Stan akumulatorów pokazany jest procentowo podczas uruchomienia metronomu w prawym dolnym rogu. Napięcie >=4.1 to 100%, <=2.9 to0%, a gdy podczas użytkowania spadnie poniżej 3.1V na ekranie głównym w miejscu podziału rytmicznego wyświetla się cyklicznie migając Batt! (Przy rezystorze 2.2k na schemacie zabrakło równolegle kondka 0.1u)
Wyjście słuchawkowe odłącza głośnik w momencie wpięcia czegoś w gniazdko. Pin masy od gniazda jest połączony z masą przez rezystor 100om, bo było po prostu strasznie głośno w słuchawkach (zaczynały charczeć) i obawiałem się, że mogły by się spalić. Obudowa to standard z uniwersalnych, (też akurat miałem w domu). Naklejki na razie nie robię i nie wiem czy w ogóle zrobię, bo to co mam mi wystarczy (też fragment z innego projektu ), a może jeszcze coś będę zmieniał - czas pokaże.
Postanowiłem udostępnić projekt dla zainteresowanych i oprócz schematu jest też wsad do Atmega328. Fuse 7f, d9, fd. Na filmie jest wersja V4 - to pomyłka, którą zauważyłem nagrywając film. Udostępniony plik ma prawidłową najnowszą wersję czyli V3.1
NIE ZEZWALAM NA KOMERCYJNE WYKORZYSTANIE PROJEKTU
Jak każdy mój udostępniony program wbudowane jest zabezpieczenie, które wskazuje autora (oczywiście oprócz tego co się wyświetla na ekranie) i nawet po podmianie danych w hex można sprawdzić kto jest prawdziwym autorem programu.
I teraz na końcu odpowiedź na pytanie, które na pewno wielu chciałoby zadać już na samym początku "Po co robić metronom jak jest dziesiątki apek na telefon ?" Odpowiedź: "Jeśli nie grasz na perkusji i nie koncertujesz to nawet nie próbuję Cię przekonywać do solidnego hardware stojącego obok. Grający wie, że to niezbędne "
Na filmie jeszcze wersja 4bitowa i bez dodatkowego brzmienia klikadełka.
Załączniki:
Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.
Świetna robota! Widać, że rozwiązanie jest naprawdę praktyczne i zostało dopracowane w oparciu o rzeczywiste potrzeby. Szczególnie podoba mi się połączenie wielu funkcji — zapamiętywanie programów, tap tempo, a nawet wersja gadająca! Wygląda przemyślanie i profesjonalnie.
Zaciekawiło mnie też użycie piezoelektryka jako tapadełka. Chyba nie spotkałem się z takim rozwiązaniem - czy mógłbyś powiedzieć coś więcej na ten temat? Dobrze rozumiem, że używasz ADC w MCU do złapania sygnału o tapnięciu? Jesteś w stanie podrzucić jakiś obrazek jak wygląda przebieg napięcia z piezo na oscyloskopie w tym układzie?
Ogólnie przebieg z piezo to szpilka i jej późniejsze odbicie (czyli powrót odkształconego piezo do pozycji neutralnej. W zależności od podłączenia szpilka jest ujemna lub dodania. Należy pamiętać,m że z takiego krążka można i 50V uzyskać co w najlepszym przypadku resetuje procka, w gorszym ubija port. Na szczęście miałem tylko resety jak mi się nie chciało podczas prototypowania diody zenera wstawić, bo "bede przecież lekko stukał", jednak po drugim resecie już nie ryzykowałem Istotne jest jak czytamy port i w zależności od tego w odpowiednim kierunku podłączamy piezo. W moim projekcie czytam wzrost napięcia stąd rezystor ściągający (obowiązkowo) i jednocześnie regulujący czułość do masy jest podłączony równolegle z zenerką. Po odczycie port jest blokowany na około 50ms aby tylko pierwszy stan złapać i nie zbierać powrotów odkształcenia (czasem jest to kilka las szpilek - foto2). Uzyskanie stanu wysokiego z piezo nie stanowi problemu (wspomniane okolice 50V) dlatego z adc zrezygnowałem i tylko stan baterii jest kontrolowany analogowo. Poniżej przykładowy przebieg po stukaniu paluchem bezpośrednio w piezo.
Gdyby w ten sposób podłączyć piezo to najkorzystniej czytać go będzie podobnie jak przyciski z podciągniętego pinu tylko bez oczekiwania na stabilizację (z oczywistych względów). Zererka zaporowo między masą a pinem obowiązkowa zawsze!!! U mnie w metronomie jest akurat odwrotnie podłączony piezo czyli oczekuję stanu wysokiego Jeśli czas kliku nie jest jakiś krytyczny to jakby nie był podłączony czujnik i tak będzie odczytany, tyle, że 20-40ms później (odczyt nastąpi z powrotu odkształcenia w zależności od typu przetwornika i powierzchni do której jest przyklejony).
Dzięki @SylwekK za obszerne wyjaśnienia. Tak myślałem, że nie musi to być oczywiste w implementacji. Bardzo fajne rozwiązania zastosowałeś. Jeśli dobrze rozumiem to oprócz "ścięcia" potencjału powyżej 4.7V, zener też ładnie wycina odbicia w kierunku potencjału poniżej zera (w tym przypadku działając w kierunku przewodzenia). I jeśli dobrze rozumiem, wykorzystałeś przerwanie PCINT8? Bo w "poolingu" to niektóre tapnięcia przy tak krótkim impulsie mogłyby być chyba nierozpoznane (jeśli procek akurat w tym czasie byłby zajęty czymś innym)
Ależ nie, żadnych przerwań zewnętrznych Jest tylko CTC na 10kHz co daje próbkowanie co 100us więc co najmniej kilka razy impuls byłby wykryty dlatego jest flaga blokująca, o której wspomniałem wcześniej. W przerwaniach tych odgrywają się też próbki dźwiękowe i czytany enkoder. W sumie to wszystko zajmuje coś około 7% czasu w pojedynczym przerwaniu i prawdę mówiąc to żadne obciążenie dla procka. Wszelkie obliczenia 16 i 32 bitowe liczone są w pętli głównej, która też zapierdziela mimo użycia typowego wyświetlacza, bo jego obsługa jest buforowa i cykliczna - w skrócie żeby wyświetlić obraz 16x2 pętla musi się przeturlać około 40 razy. Przez co blokowana jest jednorazowo na około 40us, a nie jak w typowej obsłudze 1.5-2ms (o ile dobrze pamiętam). Warunkiem takiego użycia LCD jest w pełni nieblokująca struktura programu.
Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość
Nie możesz rozpoczynać nowych wątków Nie możesz odpowiadać w wątkach Nie możesz edytować swoich postów Nie możesz usuwać swoich postów Nie możesz dodawać załączników