Prezentowane radio powstało na bazie modułu z układem RDA5807, jego najważniejsze cechy to:
- Jednoukładowy, kompletny tuner radiowy.
- Odbiór informacji RDS.
- Stereofoniczny.
- Funkcje redukcji szumów, podbicia basów, regulacji głośności.
- Interfejs I²C, zasilanie 3,3 V.
Podstawową aplikację układu tunera pokazano na rysunku 1. Do prawidłowej pracy wymaga on dosłownie kilku elementów zewnętrznych. Moduł z układem widoczny jest na fotografii 2. Kłopotliwy może okazać się niestandardowy raster wyprowadzeń, ale można poradzić sobie dolutowując listwy golpinów z lekko zgiętymi szpilkami, jak pokazano na fotografii 3. Na rysunku 4 pokazano rozmieszczenie wyprowadzeń modułu.
Układ RDA5807 pozwala na dołączenie słuchawek do wyjścia audio, wtedy kabel słuchawkowy może pełnić rolę anteny. Aby uzyskać większą moc sygnału audio w projekcie zastosowano dodatkowy wzmacniacz mocy - moduł AVT1498 (fotografia 5). Funkcję anteny pełni typowa antena teleskopowa.
Sterowanie modułem zrealizowano na bazie płytki Arduino Uno z dołączoną płytką interfejsu użytkownika AVT1615. Dla wygody zestaw został uzupełniony o płytkę ze złączami - AVT1633. Elementy zestawu pokazano na fotografii 6. Sposób połączenia wszystkich komponentów zaprezentowano na rysunku 7 i dla ułatwienia, rzeczywisty wygląd na fotografii 8.
Program sterujący pracą urządzenia powstał w środowisku Arduino IDE i bazuje na jednym z przykładów dołączonych do dokumentacji modułu. Chodzi o projekt SerialRadio, który pozwala na uruchamianie wszystkich funkcji modułu poprzez komendy wysyłane z terminala.
Lista dostępnych komend i funkcji jest wyświetlana po wysłaniu znaku zapytania do układu, jak na listingu 1. Jednak zanim projekt zostanie skompilowany, należy dołączyć dodatkową bibliotekę "Radio". W tym celu należy postępować zgodnie ze wskazówkami z rysunku 9.
Do projektu należy dodać obsługę wyświetlacza oraz przycisków dostępnych w płytce AVT1615. Przed wywołaniem funkcji setup() należy dodać fragment z listingu 2, natomiast wewnątrz tej funkcji fragment z listingu 3. W ten sposób przypisujemy wyprowadzeniom płytki Arduino odpowiednie funkcje, inicjujemy wyświetlacz oraz wyłączmy port szeregowy, który zakłócałby działanie przycisków.
Kolejne zmiany mają za zadanie przeniesienie na wyświetlacz informacji wysyłanych do portu szeregowego. Należy zmodyfikować funkcje DisplayFrequency() oraz DisplayServiceName() jak na listingu 4. Ostatnia zmiana to umieszczenie na końcu programu funkcji sprawdzającej stan przycisków ButtonCheck() oraz wywoływanie tej funkcji wewnątrz pętli głównej loop() jak na listingu 5.
Dzięki modyfikacjom po przyciśnięciu któregoś przycisku program wykona funkcje jak gdyby otrzymał komendę z terminala runSerialCommand(). W tym przypadku przyciski powodują zwiększenie/zmniejszenie głośności oraz przełączenie na kolejną/poprzednią stacje z listy. Warto jeszcze uzupełnić listę stacji wpisując wartości częstotliwości ulubionych stacji (listing 6).
Pełne źródła programów znajdują się w materiałach dodatkowych dołączonych do projektu.
KS