- Загальна робота FM-радіо
- Потрібні компоненти
- Приймач RDA5807
- Підсилювач звуку
- Схема електричного приймача Arduino FM
- Пояснення коду радіостанції Arduino FM
- Працює FM-радіо Arduino
Сьогодні майже всі використовують свої мобільні телефони для прослуховування музики, новин, подкастів тощо. Але не так давно ми всі залежали від місцевих FM-радіо, щоб отримувати останні новини та пісні, повільно ці радіо втрачають популярність, але в надзвичайних ситуаціях, коли Інтернет не працює, радіоприймачі відіграють важливу роль для передачі інформації користувачам. Радіосигнали завжди присутні в ефірі (які транслюються станціями), і все, що нам потрібно, це схема приймача FM, щоб вловлювати ці радіосигнали і передавати їх на аудіосигнали. У наших попередніх підручниках ми також створили кілька інших FM-передавачів та приймачів, перелічених нижче.
- FM-передавач Raspberry Pi
- Радіоприймач FM Raspberry Pi
- Схема FM-передавача
- Схема FM-передавача без індуктора
У цьому підручнику ми збираємося створити FM-приймач Arduino та додамо його до нашого арсеналу проектів. Ми будемо використовувати мікросхему FM-приймача RDA5807 з Arduino та запрограмувати його так, відтворювати будь-яку FM-радіостанцію, яку користувач може налаштувати за допомогою потенціометра. Ми також будемо використовувати аудіопідсилювач разом із ланцюгом для контролю вихідної гучності нашого FM-радіо Arduino, звучить цікаво, правда? Отже, давайте почнемо.
Загальна робота FM-радіо
Радіостанції перетворюють електричні сигнали в радіосигнали, і ці сигнали повинні бути модульовані перед передачею через антену. Існує два методи, за допомогою яких сигнал може модулюватися, а саме AM і FM. Як випливає з назви, амплітудна модуляція (АМ) модулює амплітуду перед передачею сигналу, тоді як при частотній модуляції (FM) частота сигналу модулюється перед передачею через антену. На радіостанціях вони використовують модуляцію частоти для модуляції сигналу, а потім передачі даних. Тепер нам потрібно лише побудувати приймач, який можна налаштувати на певні частоти і приймати ці сигнали, а згодом перетворювати ці електричні сигнали в звукові. Ми збираємось використовуватиУ цьому проекті модуль FM-приймача RDA5807, що спрощує нашу схему.
Потрібні компоненти
- Arduino Nano
- Приймач RDA5807
- Підсилювач звуку
- Підключення проводів
- Горщик - 100К
- Perf Board
Приймач RDA5807
RDA5807 - це одночіповий FM-стереомодуль із повністю інтегрованим синтезатором. Модуль підтримує всесвітній діапазон частот 50 - 115 МГц, регулювання гучності та приглушення звуку, програмоване де-акцентування (50 / 75us), індикатор сили прийому сигналу та SNR, кристалічний генератор 32,768 кГц, цифровий автоматичний контроль посилення тощо. Нижче на рис. блок-схема тюнера RDA5807M.
Він має цифрову архітектуру з низьким коефіцієнтом ПЧ і інтегрує підсилювач з низьким рівнем шуму (LNA), який підтримує діапазон широкомовної трансляції (від 50 до 115 МГц), програмований регулятор посилення (PGA), аналого-цифровий перетворювач з високою роздільною здатністю та цифрові аналогові перетворювачі високої точності (ЦАП). Обмежувач запобігає перевантаженню та обмежує кількість продуктів інтермодуляції, створених сусідніми каналами. PGA підсилює вихідний сигнал змішувача, а потім оцифровується за допомогою АЦП. Ядро DSP управляє вибором каналів, FM-демодуляцією, стереодекодером MPX та вихідним аудіосигналом. Схема розписування RDA5807 для мікросхеми наведена нижче.
Модуль працює на джерело живлення 1,8 - 3,3. При виході в режим відпочинку та вибраного інтерфейсу управління модуль скидає себе, коли VIO є Power up, а також підтримує м'яке скидання тригером bit1 від 0 до 1 адреси 02H. Модуль використовує зв'язок I2C для зв'язку з MCU, а інтерфейс починається з умови запуску, байту команди та байтів даних. RDA5807 має 13 16-розрядних регістрів, кожен з яких виконує певну функцію. Адреси реєстру починаються з 00H, який призначається ідентифікатору мікросхеми і закінчується 0FH. У всіх 13 регістрах деякі біти зарезервовані, а деякі - R / W. Кожен регістр виконує такі завдання, як зміна гучності, зміна каналів тощо, залежно від призначених їм бітів.
Ми не можемо використовувати модуль безпосередньо при підключенні його до ланцюга, оскільки штифти закриті. Отже, я використав перф-дошку і кілька чоловічих штифтів і припаяв кожен штифт модуля до кожного чоловічого штифта, як показано на малюнку нижче.
Підсилювач звуку
Аудіопідсилювач - це електронний пристрій, який підсилює малопотужні електронні аудіосигнали до рівня, на якому він досить високий для керування гучномовцями або навушниками. Ми побудували простий підсилювач звуку за допомогою LM386, схема для того ж показана нижче, і ви також можете перевірити посилання, щоб дізнатися більше про цю схему, а також перевірити інші схеми підсилювача звуку.
Схема електричного приймача Arduino FM
Ми використовували два потенціометри для налаштування діапазону FM та регулювання гучності звукового підсилювача. Щоб змінити гучність, ви можете змінити горщик, який підключений між 1 і 8- м штифтом LM386, або горщик, який підключений на штифті 3 LM386. На малюнку нижче наведена повна електрична схема FM-радіо Arduino.
Я мало змінив підсилювач. Замість того, щоб використовувати два потенціометри в підсилювачі, я використав лише один. Я поміняв горщик, який використовується для зміни коефіцієнта посилення, резистором. Тож тепер у нашому проекті є два потенціометри - один для настройки, а другий для зміни гучності. Потенціометр, який використовується для налаштування каналу, підключений до нано Arduino. Центральний штифт горщика підключений до штифта A0 нано Arduino, а будь-який із двох інших висновків підключений до 5 В, а інший - до GND. Інший горщик використовується для регулювання гучності радіо і підключається, як показано на рис.
Висновки A4 і A5 Arduino підключені до SDA і SCL-виводу RDA5807M. майте на увазі, що модуль приймача працює лише на 3,3 В. Отже, підключіть контакт 3v3 Nano до контакту VCC модуля приймача. Після встановлення зв’язків моє налаштування виглядало так
Пояснення коду радіостанції Arduino FM
Код ініціалізує модуль приймача, а потім встановить канал із заданою частотою. Коли значення, зчитуване нано на виводі A0, змінюється (змінюючи горщик), частота змінюється, що в свою чергу змінює канал. Повний код наведено в кінці сторінки.
Ми розпочинаємо свою програму з додавання необхідної бібліотеки проводів для спілкування з RDA5807. Потім у змінній “канал” ми встановлюємо значення каналу. Щоразу, коли радіо запускається, воно автоматично налаштовується на цей канал.
#включати
Далі ми завантажимо байти до кожного реєстру на нашому ІС RDA5807, щоб встановити початкову конфігурацію. На даний момент ми скидаємо налаштування приймача.
uint8_t boot_config = {/ * реєстр 0x02 * / 0b11000001, 0b00000011, / * регістр 0x03 * / 0b00000000, 0b00000000, / * регістр 0x04 * / 0b00001010, 0b00000000, / * регістр 0x05 * / 0b10001000, 0b000011x, / * регістр 0b0000110 0b00000000, 0b00000000, / * реєстр 0x07 * / 0b01000010, 0b00000010,};
Після перезавантаження пристрою ми можемо налаштувати пристрій. Для налаштування каналу нам потрібно лише запрограмувати перші 4 байти. Ця частина коду змінить канал на потрібну частоту. Спочатку в I2C ми починаємо передачу, записуємо або читаємо дані, а потім закінчуємо передачу. У цьому приймачі IC нам не потрібно вказувати адресу, оскільки в таблиці даних чітко сказано, що інтерфейс I2C має фіксований регістр запуску, тобто 0x02h для операції запису та 0x0Ah для операції читання.
uint8_t tune_config = {/ * регістр 0x02 * / 0b11000000, 0b00000001, / * регістр 0x03 * / (канал >> 2), ((канал & 0b11) << 6) - 0b00010000};
При установці ми ініціалізуємо конфігурацію завантаження (скидання), а потім налаштовуємось на канал, записуючи байти налаштування конфігурації на RDA5807M.
void setup () {Serial.begin (9600); pinMode (A0, INPUT); / * Підключення до FM-тюнера RDA5807M: * / Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (boot_config, BOOT_CONFIG_LEN); Wire.endTransmission (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Коли я використовував пот для налаштування частоти, я зіткнувся з проблемою. Значення, які зчитуються штифтом A0, не є постійними. Існує шумозаглушення з потрібною вартістю. Я використовував керамічний конденсатор 0,1 мкФ, підключений між A0 та GND, хоча шум був зведений до мінімуму, він не досягає бажаного рівня. Отже, мені довелося внести деякі зміни в код. Спочатку я записав показання, на які впливає шум. Я виявив, що максимальне значення шуму дорівнює 10. Тому я написав програму таким чином, що вона буде враховувати нове значення лише в тому випадку, якщо різниця між новим значенням і старим значенням того самого штифта перевищує 10 а потім налаштовується на потрібний канал.
void loop () {int channel1 = 187, avg = 0, newA; static int oldA = 0; int результат = 0; newA = analogRead (A0); if ((newA - oldA)> 10 - (oldA - newA)> 10) {Serial.println (newA); if (newA! = oldA) {channel = channel1 + (newA / 10); myChangeChannel (канал); oldA = newA; }}} // кінець циклу
Ця функція використовується для встановлення байтів масиву tune_config, а потім передає дані в IC RDA5807M за допомогою протоколу I2C.
void myChangeChannel (int channel) {/ * void, якщо нічого не повертається інакше int * / tune_config = (channel >> 2); tune_config = ((channel & 0b11) << 6) - 0b00010000; Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Працює FM-радіо Arduino
Коли модуль живиться, наш код скидає мікросхему RDA5807-M і встановлює його на канал бажаного користувачем (Примітка: ця частота приймається як базова частота, на якій частота буде збільшуватися). Змінюючи потенціометр (підключений до A0), значення, зчитувані Arduino Nano, змінюються. Якщо різниця між новим та старим значенням перевищує 10, наш код розгляне це нове значення. Канал змінюється залежно від зміни нового значення зі старого. Збільшення або зменшення гучності залежить від потенціометра, який підключений між штифтом 3 і GND.
Після закінчення побудови та кодування ви отримаєте власне FM-радіо. Повну роботу FM-радіо можна знайти у відео, на яке посилається внизу цієї сторінки. Сподіваюся, вам сподобався проект і ви дізналися щось корисне. Якщо у вас виникли запитання щодо запуску цього проекту, ви можете залишити їх у розділі коментарів або скористатися нашими форумами для отримання іншої технічної допомоги.