
Интернет-магазин «Неглупый Дом»
RDA5807M принимает обычные FM-станции и настраивается командами по I2C, а текущая частота в мегагерцах выводится крупными цифрами на TM1637 — получается простой цифровой радиоприёмник без единого аналогового переменного резистора настройки.
RDA5807M — это полностью цифровой FM-тюнер на одной микросхеме: внутри неё уже есть вся аналоговая часть приёмника (усилитель высокой частоты, смеситель, детектор), а настройкой станции, громкостью и режимом работы управляет Arduino не крутилкой конденсатора, как в старых радиоприёмниках, а отправкой чисел по шине I2C. Частота задаётся в виде целого числа — конкретная единица измерения (чаще всего шаг 10 кГц) зависит от используемой библиотеки, поэтому в коде ниже заведён отдельный множитель, который удобно подправить, если дисплей и реальная станция будут отличаться на кратную величину.
TM1637 в этом проекте работает ровно как в музыкальном VU-метре на сайте — он просто показывает число, без какого-либо знания о радио. Чтобы цифры выглядели как частота (например "101.5"), используется режим вывода с десятичной точкой: число умножается на 10 перед отправкой на экран, а точка зажигается программно на нужном разряде.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
// Названия методов библиотеки радио могут отличаться в зависимости от версии —
// если что-то не компилируется, сверьтесь с примерами из Менеджера библиотек 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: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 171 ₽ 154 ₽ (экономия 17 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.