Co dwie szafy to nie jedna — nowa dusza Fonica M123 [cz.2]
16.01.2017 | aktual.: 16.01.2017 15:51
W drugiej części wpisu o odnowieniu szaf grających fonica M123, pokażę pozostałe prace jakie zostały wykonane aby zakończyć projekt. W pierwszej części mieliśmy już przyszykowane szafy do montażu pozostałej elektroniki.
Obsługa 100 przycisków
Tutaj do obsługi przycisków użyłem moduł LN HUB32IO dla Banana Pro, który posiada 32 piny GPIO oraz hub USB. W moim przypadku jako, że panel z przyciskami posiada 8 rzędów po 13 i 12 przycisków (po 4 z każdej ilości) użyłem matrycy przycisków 8x13 przez co korzystam z 21 pinów modułu i odczytuje za pomocą ich wciśnięcia 100 przycisków.
Nadaje stan wysoki w danej chwili na pierwszy poziom przycisków a następnie odczytuję pionowo, który z przycisków został wciśnięty. Przechodzenie pomiędzy poziomami jest szybkie i jest przełączana co 5ms. To wystarcza na odczytywanie w szybkim czasie 100 przycisków.
[code=c++] int BananaPins::isButtonPressed() { int pin = 0; int colSize = 0; for(int j = 0; j < 8; j++) { digitalWrite(200 + j, HIGH); delay(10); if(j < 2 || j > 5) colSize = 13; else colSize = 12; for (int i = 0 ; i < colSize ; i++) { if(digitalRead (100 + i) == 1) { //printf ("BananaPins 1 is set on: %i\n", pin + 1) ; delay(20);/////!!!!!!!! więcej???? if(digitalRead (100 + i) == 1){ printf ("BananaPins is set on: %i\n", pin + 1) ; digitalWrite(200 + j, LOW); return (pin + 1); } } //printf("J: %d, pin %d\n", j, pin + 1); pin++;
} delay(5); digitalWrite(200 + j, LOW); } return -1; } [/code]
Jak widać po wciśnięciu sprawdzam jeszcze raz po 20ms odczyt czy przycisk dalej jest wciśnięty aby wyłapać tak zwane drgania przycisku. Myślę, że szerzej opisać działanie i dokładny kod matrycy przycisków można by było przedstawić w osobnym wpisie.
Wrzutnia monet
Jako, że oryginalnie szafa posiadała wrzutnię monet o nominale 2 zł w nowej wersji też nie mogło jej zabraknąć. Użyłem do tego akceptor monet CH‑923 rozpoznający 3 monety.
Akceptor monet programuje się za pomocą przycisków i wyświetlacza z boku urządzenia. Ja ustawiłem obsługę trzech monet 1, 2 i 5 zł. Przy programowaniu wybiera się ilość testowych wrzutów monet dla danego nominału na podstawie którego urządzenie uczy się rozpoznawać monetę (próbkowanie), ilości impulsów jakie zostaną wysłane do kontrolera oraz dokładność próbkowania monet. Na poniższym filmiku można zobaczyć jak programuje się taki akceptor. [youtube=https://www.youtube.com/watch?v=G_ubo3hjXhI] Uchwyt na akceptor oraz skrzyneczkę na monety (skarbonka) zaprojektowałem a następnie uchwyt wydrukowałem zaś skrzyneczkę na monety wyciąłem na laserze.
[join][img=skrzyneczki][join][img=skrzyneczki2]
Oprócz akceptora musiałem wykonać również nowe rynny (stare były niekompletne i uszkodzone) po których pieniążki będą wpadać do akceptora i z niego wypadać do skarbonki albo na zewnątrz w razie nierozpoznania. Tutaj użyłem technologi druku 3D. Nie miałem prostego zadania bo sam otwór na monetę znajduje się z prawej strony panelu z przyciskami a otwór na nierozpoznane monety na prawym boku poniżej połowy wysokości i jest to dość spory odcinek dla monety.
Trochę zeszło mi czasu z projektem tego bo było pełno wydruków i poprawek. A obie szafy w środku nie maja identycznych otworów (wykonywane były ręcznie dlatego miały drobne przesunięcia). Rynnę wyjściowa została zaprojektowana przez kolegę Piotrka , który lepiej radzi sobie z zawijanymi modelami w Rhino a w tym przypadku była potrzeba aby moneta miała taki tor wyjścia w spirali. Ja natomiast zająłem się rynną wejściową.
[join][img=rynna2][join][img=rynna3]
Po zamontowaniu rynien musiałem je na nowo zaprogramować akceptor monet bo prędkość wpadania do niego była inna niż wcześniej przez co akceptor miał problemy z rozpoznaniem ponad 90% wrzutów monet. Dodatkowo zaprojektowałem i wydrukowałem maskownice otworów na monety.
Atrapa mechanizmu kręcenia płyty winylowej
W szafie co prawda muzyka jest odtwarzana z MP3 ale są w niej płyty winylowe dlatego nie mogło zabraknąć atrapy mechanizmu kręcenia płyty winylowej. Atrapę standardowo zaprojektowałem zaś elementy były zarówno drukowane jak i wycinane.
Płyta jest poruszana za pomocą 12V silnika DC. Obroty ustawione są za pomocą układu step-down z potencjometrem do ustalenia napięcia na wyjściu i załączane przekaźnikiem gdy odtwarzane są utwory.
Podświetlenie listy utworów
Jednym z najbardziej czasochłonnych etapów były moduły podświetlające panele na karteczki z tytułami utworów. Wg specyfikacji kartki miały być podświetlane a po wyborze utworu oznaczyć się innym kolorem aby można było wiedzieć, że utwór został poprawnie wybrany. Tutaj użyłem diod RGB na układzie ws2812b, które zasila się napięciem 5V i steruje za pomocą tylko jednego pinu GPIO.
[join][img=diody3][join][img=diody4]
Jak widać zaprojektowaliśmy i wycięliśmy z Piotrem skrzyneczki na diody, które zamontowane zostały z tyłu panelu. Poniżej możecie zobaczyć efekt testów już zlutowanych modułów. [youtube=https://www.youtube.com/watch?v=0cX44jr7Dms]
Ze względu na to, że poprawki były robione do ostatniej chwili przed pakowaniem szaf do transportu nie zdążyłem wykonać dodatkowych filmików i zdjęć szaf już skończonych, ale myślę, że lordjahu, który ma już szafy u siebie na miejscu w Trzebnicy coś dla was przygotuje jako wpis podsumowujący. Ja jeszcze zamieszczam poniżej zdjęcie gotowej szafy i filmik z testów działania.
Projekt zajął mi sporo czasu bo aż 6 miesięcy (z zakładanych na początku 2 miesięcy), ale udało się. Teraz zapewne wiele rzeczy wykonał bym trochę inaczej i na pewno lepiej ale tak to bywa gdy projekt jest rozwojowy i tak naprawdę jest dość zaawansowanym prototypem zawsze można było zrobić coś lepiej.
Szafy posiadają dwa oddzielne programy. Panel do zarządzania przyciskami napisany jest w PHP z wykorzystaniem Symfony, pozwala na wgrywanie plików i przypisywanie ich pod dany przycisk. Pozwala również generować gotowe karteczki z tytułami i numerami piosenek. Użyta została baza danych sqlite3.
Drugim programem jest aplikacja napisana w C++, która ma za zadanie wyłapywać naciśnięcia przycisków i za pomocą serwera mpd i klienta mpc odtwarzać muzykę przypisana pod danym przyciskiem. Dodatkowo aplikacja kontaktuje się z dwoma Arduino (jedno odpowiedzialne za przesyłanie ilości wrzuconych monet, drugie do sterowania diodami RGB) poprzez porty szeregowe. Myślę, że więcej o aplikacji po stronie Banana Pro mógł by napisać mikolaj_s, który pomagał mi i napisał aplikację. Ja zająłem się głowie programowaniem samych Arduino. Liczę na to, że lordjahu przygotuje dla was podsumowanie i jakiś ciekawy filmik z użytkowania szaf.
Jak zawsze na koniec wielkie podziękowanie dla Jarka za wycinkę CNC, Arturowi za obklejanie szyb, Piotrowi za pomoc z lutowaniem diod oraz innymi pracami, Mikołajowi za kawał dobrego oprogramowania do obsługi przycisków i obsługi mpc na Bananie i wszystkim tym, którzy mnie wspierali i pomagali przez te pół roku pracy nad szafami.