Blog (14)
Komentarze (382)
Recenzje (0)
@Maniek_88Radio Internetowe, da się? Da!

Radio Internetowe, da się? Da!

Od mojego ostatniego wpisu na blogu upłynęło już wiele wody w Wiśle, i wiele piwa na HotZlocie zostało wypite. Od teraz postaram się zwiększyć aktywność, i tym wpisem chciałbym to zainaugurować. Jest to wpis krótko omawiający powód przez który straciłem wiele czasu i zdrowia, co przeszkadzało mi w pracy nad moim portfolio na dobrychprogramach.

Przez ostatnich kilka miesięcy toczyłem walkę z moją pracą magisterską. Uważam że tematyka projektu nadaje się do podzielenia się tym co udało mi się zrealizować. Urządzenie przeze mnie zbudowane stanowi niezależny odbiornik radia internetowego. Wiem że wśród użytkowników portalu jest też część elektroników dla których ten wpis może być interesującą lekturą, tak więc od początku:

Cele

Temat wybrałem z 2 powodów, po pierwsze tego typu urządzenie wydaje się bardzo ciekawym wyzwaniem, po drugie... kompletnie nie miałem pojęcia jak to zrobić. Moja znajomość interfejsów sieciowych, protokołu TCP/IP, sposobu łączenia się między hostami oscylowała w granicach zera absolutnego. Dodatkowo chciałem zrealizować takie urządzenie na mikrokontrolerze ARM STM32, gdyż wcześniej jakoś nie było okazji aby nauczyć się programować tego typu układy. Miałem więc za zadanie zbudować urządzenie, o którego działaniu nie wiedziałem nic, na bazie platformy sprzętowej z którą nigdy wcześniej się nie mierzyłem. Chciałem być ambitny, czego przez znaczną część czasu spędzonego na realizacji projektu żałowałem :). Zbudowany odbiornik radia internetowego miał umożliwiać połączenie się z dowolną stacją radiową i umożliwić jej komfortowy odsłuch. W miarę możliwości chciałem dodać więcej elementów zwiększających jego funkcjonalność.

Budowa

Całe urządzenie opiera się na mikrokontrolerze ARM STM32F4 który zainstalowany jest na płytce DISCOVERY. Do niego dołączone są inne moduły dzięki którym możliwe jest połączenie z Internetem, słuchanie stacji jak i sterowanie pracą urządzenia. Schemat połączeń przedstawia rysunek:

485976

Aby urządzenie posiadało dostęp do Internetu, mikrokontroler obsługujący warstwę łącza danych MAC musi mieć podłączony układ realizujący warstwę fizyczną PHY. To za jego pośrednictwem dane są przesyłane między światem a urządzeniem. Drugim kluczowym elementem w moim projekcie jest sprzętowy dekoder formatów audio. Dzięki niemu mogę odebrany strumień MP3 lub AAC zamienić bezpośrednio na dźwięk :) Możecie się zapytać czemu nie użyłem software'owego dekodera MP3 i AAC, rozważałem to rozwiązanie, jednak po próbach użycia dekodera MP3 zauważyłem ze znaczna większość stacji przesyła strumień AAC, dokładanie drugiego dekodera, tworzenie 2 konfiguracji i zapanowanie nad tym w programie wbudowanym przy ograniczonym czasie na realizację wydał mi się odrobinę karkołomny. Używając sprzętowego dekodera MP3 i AAC w jednym zaoszczędziłem sporo czasu na programowanie, a przy okazji odciążyłem mikroprocesor o jedno zadanie. Dodatkowo dorzuciłem gniazdo karty SD. Dzięki niemu, można za pomocą pliku tekstowego wrzucić własną listę adresów stacji internetowych które będzie można odsłuchiwać przez urządzenie. Ostatnia część to wyświetlacz z kultowego telefonu NOKIA 3310 (Podziękowania dla kolegi zigguard za poświecenie swojego egzemplarza w imię nauki!) i 4 przyciski służące do kontroli głośności i zmiany odtwarzanej stacji internetowej. Całe urządzenie scaliłem używając płytki głównej którą zaprojektowałem i wykonałem.

Pracujące urządzenie
Pracujące urządzenie

Oprogramowanie

Nie będę szczegółowo opowiadał o tym co się dzieje w oprogramowaniu, jeśli macie pytanie to chętnie odpowiem w komentarzu. Cały kod urządzenia został napisany w języku C i skompilowany przy użyciu kompilatora armgcc. Do pisania i debugowania użyłem środowiska CooCoox które jest całkiem niezłym środowiskiem programistycznym do mikrokontrolerów ARM zbudowany na popularnym Eclipse. Pakiet umożliwia utworzenie projektu na platformę STM32F4 Discovery dzięki czemu po kilku kliknięciach mamy w pełni skonfigurowane środowisko. Program urządzenia jest własnym tworem, nie korzystam w działaniu oprogramowania z żadnego systemu operacyjnego typu RTOS. Obsługa sieci realizowana jest dzięki wykorzystaniu biblioteki lwIP. Program główny obsługuje funkcje biblioteki wywoływane okresowo w przerwaniach, oraz cały przepływ odebranych danych do dekodera audio. W programie obsługiwane jest łączenie się z nowym serwerem, podejmowane są działania związane ze zmianą stacji, odświeżanie informacji na wyświetlaczu i kontrola wciśniętych przycisków wraz z odpowiadającymi im akcjami do wykonania przez radio. Podczas odtwarzania stacji, odtwarzany strumień przesyłany jest do dekodera audio, i jednocześnie sprawowany jest nadzór nad pojawianiem się metadanych. Metadane to informacje tekstowe wtrącane w strumień audio zawierające dane o aktualnej audycji bądź tytuł piosenki i inne poboczne informacje które radio może przesyłać. Tego typu dane należy przetworzyć, i wyciąć z właściwego strumienia audio.

Działanie

Teraz wisienka na torcie, działanie urządzenia. Na samym końcu zamieszczam film prezentujący pracę urządzenia. Niestety w trakcie prac rozwojowych uszkodził mi się moduł dekodera audio i musiałem go zastąpić innym przez co widać plątaninę kabli które łączą moduł z innym modułem (rozkład pinów nie zgadzał się niestety z oryginalnym). Urządzenie niestety ma jedną wadę której nie da się przeoczyć. Po przełączeniu stacji pierwszych kilka sekund odtwarzany jest bardzo poszarpany dźwięk. Wiem czym jest to spowodowane, jednak nie zdążyłem ostatecznie tego wyeliminować, a terminy goniły... w końcu projekt to nie wszystko, trzeba by jeszcze pracę napisać :) Dzisiaj wiem że kilka rzeczy zrobił bym inaczej, teraz zaprojektował bym już obwód pcb aby całość miała jednocześciową budowę, a program nieco przebudował aby poprawić odtwarzanie. Jednak tego nie zrobię, bo w kolejce czeka już kilka nowych projektów które ze względu na ten specjalny musiały być ciągle odkładanie, a takie radio... było ciekawym wyzwaniem przy którym na prawdę wiele się nauczyłem, i wiem że wiedza zdobyta przy jego budowie nie raz pomoże mi w przyszłości :)

I obiecany film z działającym urządzeniem: [youtube=https://www.youtube.com/watch?v=QzDphrLSrwI]

Jeśli ktoś by się zastanawiał to tak, dnia 3.10.2013 roku zostałem magistrem :)

Wybrane dla Ciebie
Komentarze (40)