🛒
0 товаров
0 руб.

Интернет-магазин «Неглупый Дом»


📻 Проект: FM-радиоприёмник на RDA5807M с выводом частоты на TM1637

RDA5807M принимает обычные FM-станции и настраивается командами по I2C, а текущая частота в мегагерцах выводится крупными цифрами на TM1637 — получается простой цифровой радиоприёмник без единого аналогового переменного резистора настройки.

Как это работает

RDA5807M — это полностью цифровой FM-тюнер на одной микросхеме: внутри неё уже есть вся аналоговая часть приёмника (усилитель высокой частоты, смеситель, детектор), а настройкой станции, громкостью и режимом работы управляет Arduino не крутилкой конденсатора, как в старых радиоприёмниках, а отправкой чисел по шине I2C. Частота задаётся в виде целого числа — конкретная единица измерения (чаще всего шаг 10 кГц) зависит от используемой библиотеки, поэтому в коде ниже заведён отдельный множитель, который удобно подправить, если дисплей и реальная станция будут отличаться на кратную величину.

TM1637 в этом проекте работает ровно как в музыкальном VU-метре на сайте — он просто показывает число, без какого-либо знания о радио. Чтобы цифры выглядели как частота (например "101.5"), используется режим вывода с десятичной точкой: число умножается на 10 перед отправкой на экран, а точка зажигается программно на нужном разряде.

Пошаговая сборка

Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.

  1. RDA5807M (I2C): SDA → A4, SCL → A5, VCC → 3.3V (на большинстве модулей уже есть свой стабилизатор, но проверьте маркировку питания конкретной платы), GND → GND.
  2. К выходу аудио модуля (обычно обозначен L/R или AUDIO) подключите усилитель, например, на LM386 или PAM8403, и далее динамик — сам модуль не выдаёт мощность, достаточную для громкоговорителя.
  3. Отрезок провода 20-30 см, подключённый к антенному входу модуля, уже заметно улучшает приём городских станций.
  4. TM1637: CLK → D9, DIO → D10, VCC → 5V, GND → GND.
  5. Две тактовые кнопки для настройки станции: одна → D2 (частота вверх), другая → D3 (частота вниз), вторые выводы кнопок на GND (используется внутренняя подтяжка INPUT_PULLUP).

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
// Названия методов библиотеки радио могут отличаться в зависимости от версии —
// если что-то не компилируется, сверьтесь с примерами из Менеджера библиотек Arduino IDE.

#include <Wire.h>
#include <radio.h>        // библиотека "Radio" (mathertel) — поддерживает RDA5807M и другие FM-чипы
#include <RDA5807M.h>     // конкретная реализация для чипа RDA5807M
#include <TM1637Display.h> // стандартная библиотека для 7-сегментного дисплея TM1637

RDA5807M radio;
TM1637Display display(9, 10); // CLK, DIO

int freqTimes10 = 1015;  // текущая частота×10, т.е. 101.5 МГц — отсюда начинаем при включении
const int BTN_UP = 2;
const int BTN_DOWN = 3;

void showFrequency() {
  // showNumberDecEx выводит число с точкой: маска 0b01000000 зажигает точку после 3-го разряда слева,
  // что при 4 цифрах даёт вид "101.5" — если точка встанет не на то место на вашем экземпляре экрана,
  // подберите маску по документации TM1637Display.
  display.showNumberDecEx(freqTimes10, 0b01000000, false);
}

void setup() {
  Serial.begin(9600);
  pinMode(BTN_UP, INPUT_PULLUP);
  pinMode(BTN_DOWN, INPUT_PULLUP);

  radio.init();
  radio.setBand(RADIO_BAND_FM);
  radio.setVolume(10);
  radio.setMono(false);
  radio.setFrequency(freqTimes10 * 10); // библиотека ждёт частоту в шаге 10 кГц

  display.setBrightness(5);
  showFrequency();
}

void loop() {
  bool changed = false;

  if (digitalRead(BTN_UP) == LOW) {
    freqTimes10 += 1; // шаг 0.1 МГц
    changed = true;
    delay(200); // простая защита от дребезга и повторного срабатывания
  }
  if (digitalRead(BTN_DOWN) == LOW) {
    freqTimes10 -= 1;
    changed = true;
    delay(200);
  }

  if (changed) {
    radio.setFrequency(freqTimes10 * 10);
    showFrequency();
    Serial.print("Частота: ");
    Serial.println(freqTimes10 / 10.0);
  }
}

Библиотеку "Radio" (автор mathertel) и TM1637Display ставьте через Менеджер библиотек Arduino IDE. Если радио молчит — убедитесь, что антенна подключена и что выбранная частота попадает в диапазон реально работающих в вашем городе станций (обычно 87.5-108 МГц).

Частые проблемы

Как улучшить проект

Товары по теме

Ещё модули для Arduino: Электронные модули.

← 📊 веб-страница истории измерений из EEPROM н…⚙️ регулятор скорости и направления DC-мотора… →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу в корзину: 171 ₽ 154 ₽ (экономия 17 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина


Поиск



Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA