FM-радиоприемник на Arduino и модуле TEA5767
Компоненты и материалы
| Компонент | Количество |
|---|---|
| Arduino Nano (в тексте указан Micro, но далее используется Nano) | 1 |
| Модуль TEA5767 | 1 |
| LCD-дисплей Nokia 5110 (84x48) | 1 |
| Потенциометр 10 кОм (регулировка частоты) | 1 |
| Аудиоусилитель LM386 (модуль) | 1 |
| Динамик 3 Вт | 1 |
| Плата для прототипирования | 1 |
| Аудиокабель (3.5 мм джек) | 1 |
| Перемычки | 1 набор |
| FM-передатчик (для тестов) | 1 |
Программное обеспечение
- Arduino IoT Cloud (опционально)
О проекте
Введение
Соберем простой FM-радиоприемник на макетной плате. Мозг проекта — Arduino Nano. Дисплей Nokia 5110 показывает частоту, уровень сигнала и индикатор стерео. Громкость и частота регулируются двумя потенциометрами. Стоимость проекта ~$15.
Шаг 1: Детали
Список выше. Nokia 5110 — любимый дисплей автора: низкое потребление (0.4 мА без подсветки, 0.06 мА в спящем режиме), интерфейс SPI (8 проводов). TEA5767 — FM-чип с I2C. На модуле есть слабый усилитель для наушников, поэтому нужен внешний LM386 и потенциометр громкости.
Шаг 2: Подключение
- Расположите детали на breadboard. Общие GND и VCC (кроме потенциометров).
- TEA5767: SCL → A5, SDA → A4 (I2C).
- Потенциометр частоты: средний вывод → A0.
- Громкость: аудиокабель в выход модуля → вход потенциометра громкости → средний вывод → вход LM386. GND кабеля → GND LM386. Питание LM386 от рельсов breadboard. Динамик на выход LM386.
- Nokia 5110: RST→D12, CE→D11, DC→D10, DIN→D9, CLK→D8, VCC→3.3V, LIGHT→GND (подсветка ВКЛ), GND→GND.
- Опционально: конденсатор 330 мкФ на питании для снижения шумов.
Шаг 3: Программная часть
Используются библиотеки: Nokia5110_Graph и библиотека для TEA5767.
Алгоритм:
- Инициализация радио и дисплея, заставка 3 сек.
- В loop: чтение потенциометра частоты, маппинг 0–1023 → 87.0–107.0 МГц.
- Для стабильности: перестройка только если частота изменилась ≥ 0.1 МГц.
- Обновление экрана: частота, уровень сигнала, стерео-индикатор.
void setup() {
radio.setMonoReception();
radio.setStereoNoiseCancellingOn();
initScreen();
showSplashScreen();
Serial.begin(9600);
}
void loop() {
int val = analogRead(A0);
int frequencyInt = map(val, 2, 1014, 8700, 10700);
float frequency = frequencyInt / 100.0f;
static float previousFrequency = 0;
if (abs(frequency - previousFrequency) >= 0.1f) {
lcd.clrScr();
radio.selectFrequency(frequency);
printSignalStrength();
printStereo();
printFrequency(frequency);
previousFrequency = frequency;
}
}
Полный код в архиве FMRadio.zip (ссылка в оригинале). Актуальная версия на сайте проекта: educ8s.tv.
Итоги и планы
За полчаса собран рабочий радиоприемник. Качество звука с текущим усилителем и динамиком среднее — планируется улучшение: другой усилитель/динамик, переход на монтажную плату, 3D-печати корпуса в ретро-стиле, доработка кода (тонкая настройка, снижение потребления для батарейного питания).
Схема
Производственный процесс
- Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
- Wi‑Fi интернет-радио на Raspberry Pi и Arduino: стриминг станций со всего мира
- Строим Iron Man на Arduino: компоненты, сенсоры и пошаговый гайд
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- Сборка функционального 3D-печатного манипулятора на Arduino: пошаговое руководство
- DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
- Сборка компактного FM-радио на Arduino Nano и RDA5807M
- NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10
- Своё рулевое управление (джойстик) для игр на Arduino
- Arduino 101: Пedometer с датчиком DHT11 и LCD-дисплеем