
Интернет-магазин «Неглупый Дом»
В других проектах на сайте частоту RDA5807M меняют вручную — кнопками или с веб-страницы, шаг за шагом. Здесь Arduino сама сканирует весь FM-диапазон и подаёт сигнал зуммером каждый раз, когда находит достаточно сильную станцию, — классический автопоиск, знакомый по автомобильным магнитолам.
Настройка частоты такая же, как и в других проектах — команда `setFrequency()`. Разница — в самой логике сканирования: код пошагово перебирает все частоты от нижней до верхней границы FM-диапазона, на каждом шаге ненадолго задерживается (чтобы тюнер успел перестроиться) и считывает уровень принимаемого сигнала (RSSI) через метод библиотеки радио. Если уровень сигнала превышает заданный порог, станция считается найденной — Arduino подаёт сигнал зуммером и останавливает перебор на пару секунд, прежде чем продолжить сканирование дальше.
Уровень сигнала (RSSI — Received Signal Strength Indicator) — это число, которое сама микросхема RDA5807M вычисляет по силе принимаемой несущей частоты; на чистой частоте без реальной станции это значение низкое и шумовое, а на частоте настоящей вещающей станции — заметно и стабильно выше порога.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему. Названия методов
// библиотеки радио (включая чтение RSSI) могут отличаться по версии —
// если getRssi() недоступен в вашей версии, сверьтесь с примерами
// из Менеджера библиотек Arduino IDE.
#include <Wire.h>
#include <radio.h>
#include <RDA5807M.h>
RDA5807M radio;
const int BUZZER_PIN = 8;
const int MIN_FREQ = 875; // 87.5 МГц, нижняя граница диапазона ×10
const int MAX_FREQ = 1080; // 108.0 МГц, верхняя граница ×10
const int RSSI_THRESHOLD = 35; // подберите по месту, зависит от антенны и региона
void setup() {
Serial.begin(9600);
pinMode(BUZZER_PIN, OUTPUT);
radio.init();
radio.setBand(RADIO_BAND_FM);
radio.setVolume(10);
radio.setMono(false);
}
void loop() {
for (int freq = MIN_FREQ; freq <= MAX_FREQ; freq += 2) { // шаг 0.2 МГц
radio.setFrequency(freq * 10);
delay(100); // даём тюнеру время перестроиться
int rssi = radio.getRssi(); // уровень сигнала текущей частоты
Serial.print("Частота ");
Serial.print(freq / 10.0);
Serial.print(" МГц, RSSI: ");
Serial.println(rssi);
if (rssi > RSSI_THRESHOLD) {
Serial.println("Станция найдена!");
tone(BUZZER_PIN, 2000, 300);
delay(2000); // слушаем найденную станцию пару секунд перед продолжением поиска
}
}
}
Библиотека "Radio" (mathertel) с поддержкой RDA5807M ставится через Менеджер библиотек Arduino IDE. Если метод чтения RSSI называется иначе в установленной у вас версии — посмотрите примеры библиотеки в Менеджере библиотек для точного имени.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 142 ₽ 128 ₽ (экономия 14 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.