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

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


📻 Проект: автопоиск радиостанций на RDA5807M со звуковым подтверждением находки

В других проектах на сайте частоту RDA5807M меняют вручную — кнопками или с веб-страницы, шаг за шагом. Здесь Arduino сама сканирует весь FM-диапазон и подаёт сигнал зуммером каждый раз, когда находит достаточно сильную станцию, — классический автопоиск, знакомый по автомобильным магнитолам.

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

Настройка частоты такая же, как и в других проектах — команда `setFrequency()`. Разница — в самой логике сканирования: код пошагово перебирает все частоты от нижней до верхней границы FM-диапазона, на каждом шаге ненадолго задерживается (чтобы тюнер успел перестроиться) и считывает уровень принимаемого сигнала (RSSI) через метод библиотеки радио. Если уровень сигнала превышает заданный порог, станция считается найденной — Arduino подаёт сигнал зуммером и останавливает перебор на пару секунд, прежде чем продолжить сканирование дальше.

Уровень сигнала (RSSI — Received Signal Strength Indicator) — это число, которое сама микросхема RDA5807M вычисляет по силе принимаемой несущей частоты; на чистой частоте без реальной станции это значение низкое и шумовое, а на частоте настоящей вещающей станции — заметно и стабильно выше порога.

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

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

  1. RDA5807M (I2C): SDA → A4, SCL → A5, VCC → 3.3V (на большинстве модулей уже есть свой стабилизатор, но проверьте маркировку питания конкретной платы), GND → GND.
  2. Зуммер: сигнал → D8, GND → GND.
  3. Отрезок провода 20-30 см на антенном входе модуля заметно улучшает приём и качество сканирования.

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему. Названия методов
// библиотеки радио (включая чтение 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: Электронные модули.

← 📡 автономный сетевой узел ESP8266 с питанием…🛑 защитное отключение нагрузки по худшему из… →

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

Все 2 товара сразу в корзину: 142 ₽ 128 ₽ (экономия 14 ₽)

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

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

Корзина


Поиск



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