Всеволновое радио (LW, MW, SW, FM) на Arduino и модуле Si4730


По запросу “радио на Arduino” вы в сети интернет найдете, в основном, проекты радиоприемников на основе платы Arduino, которые работают в современном FM диапазоне (88-108 МГц в Европе). Тем не менее, для многих наверняка представляют интерес и диапазоны LW, MW и SW, которые занимают диапазон частот от 0,2 до 30 МГц. Особенно интерес диапазон коротких волн (SW) – радиоволны в этом диапазоне отражаются от ионосферы и, таким образом, могут распространяться на огромные расстояния, и даже огибать земной шар.

Внешний вид всеволнового радиоприемника на Arduino и модуле Si4730В данной статье мы рассмотрим создание на основе платы Arduino и модуля Si4730 радиоприемника с хорошими характеристиками, работающего в широком диапазоне длин волн (LW, MW, SW, FM).

Необходимые компоненты

  1. Плата Arduino Nano (купить на AliExpress).
  2. ЖК дисплей 16х2 (купить на AliExpress).
  3. Модуль Si4730 (купить на AliExpress).
  4. Инкрементальный энкодер c кнопкой (Rotary Encoder) (купить на AliExpress - не уверен в том, что в нем есть кнопка, но она точно есть в этом лоте - купить на AliExpress № 2, но он продается, к сожалению, только по 5 штук).
  5. Модуль усилителя звуковой частоты (класс D), например, PAM8403 (купить на AliExpress).
  6. Громкоговоритель (Speaker) 0,25 Вт, 8 Ом.
  7. Ползунковый переключатель.
  8. Ферритовый стержень от старого радиоприемника средних волн (MW).
  9. Резисторы и конденсаторы согласно схеме, представленной ниже.

Общие принципы работы радиоприемника

“Сердцем” нашего проекта является модуль Si4730 от компании Silicon Labs, который можно купить на AliExpress в форме небольшой платы для разработки всего за несколько долларов (даташит на модуль Si4730) или в форме отдельной микросхемы (менее 100 рублей).

Данным модулем можно управлять с помощью платы Arduino по протоколу I2C с помощью библиотеки Si4735-I2C-R4 (ее можно скачать по ссылке, приведенной в разделе “исходный код программы” данной статьи), написанной Julio C. Rosa. Хотя производитель утверждает, что чип Si4730 работает только в диапазонах AM и FM, тем не менее, он может работать и в диапазоне коротких волн (SW) (хотя если верить последней версии даташита на данный модуль, он работает во всех диапазонах - LW, MW, SW, FM). Для усиления звуковой частоты с выхода модуля автор проекта (ссылка на оригинал приведена в конце статьи) использовал плату цифрового усилителя 2*3W PAM8403 Class D, которая отличается приемлемым функционалом и сравнительно дешево стоит (33 рубля на алиэкспрессе). Данный усилитель ранее уже был использован в проекте радиостанций на Arduino на нашем сайте.

Автор проекта собрал данный радиоприемник в компактном корпусе (см. фото и видео) и прикрепил к нему антенну для диапазона метровых волн. По его утверждению, качество приема рассмотренного проекта радиоприемника не уступает промышленным компактным моделям радиоприемников. К слову сказать, модуль Si4730 используют в своих устройствах такие известные производители компактных радиоприемников как TECSUN, DEGEN, SANGEAN и другие.

Схема проекта

Схема всеволнового радиоприемника на Arduino и модуле Si4730 представлена на следующем рисунке.

Схема всеволнового радиоприемника на Arduino и модуле Si4730Данную схему также можно скачать в форме pdf файла (в более хорошем качестве).

К выходу модуля Si4730 не забудьте подключить усилитель звуковой частоты, например PAM8403, с выхода которого уже и подавайте сигнал на громкоговоритель.

Исходный код программы (скетча)

Библиотеку для работы с модулем Si4730 можно скачать по этой ссылке.

Видео, демонстрирующее работу проекта

Источник статьи

(Проголосуй первым!)
Загрузка...
8 303 просмотров

Комментарии

Всеволновое радио (LW, MW, SW, FM) на Arduino и модуле Si4730 — 14 комментариев

  1. У меня при загрузке скетча выдает целый ряд ошибок. После удаления строк с ошибками и загрузке скетча, энкодер не переключает частоту в обратном направлении. Переключает частоту только в сторону её увеличения причем на всех диапазонах. Доходит до 108000 кгц и дальше тупик.

    • К сожалению, на работу энкодеров (особенно дешевых) очень много жалоб в комментариях на моем сайте. Попробуйте заменить его на две кнопки и проверить работоспособность проекта. Если заработает можно попробовать сменить энкодер

    • Ну если нужен диапазон частот побольше вместо него можно купить Si4734/35, основные принципы работы представленного проекта не изменятся

    • В самом нижнем комментарии к данной статье указаны варианты решения вопроса с command_am(). Можете выбрать какой из этих вариантов вам больше подойдет

  2. Доброй ночи. Есть ферритовый стержень от приемника MW. Только обязательно 300uH должен быть?

    • Добрый день. Не обязательно. Но тогда либо изменится диапазон частот приемника, либо соответствующим образом нужно изменить емкость конденсатора

      • Здравствуйте. Не подскажите, где найти такую антенну? Буду признателен.

        • Добрый вечер. К сожалению, точно не подскажу потому что лично не собирал данный проект. Можно попробовать посмотреть на Алиэкспрессе, Амперке или voltiq.ru.

  3. Можно вопрос, а почему в общей схеме проекта изображена схема платы Arduino Uno, а в необходимых компонентах указана плата Arduino Nano, получается нужно в этом проекте использовать именно Arduino Nano?

    • Добрый вечер. Без разницы. Возможностей любой из этих плат Ардуино для этого проекта хватит. Надо просто по номерам контактов посмотреть все ли совпадает если будете использовать другую плату. Но если даже не совпадает всегда можно внести небольшие изменения в программу чтобы исправить это

  4. При компиляции выскакивает вот такая ошибка.C:\Users\E786~1\AppData\Local\Temp\arduino_modified_sketch_237806\sketch_feb20b.ino: In function 'void setup()':
    sketch_feb20b:55:3: error: 'command_am' was not declared in this scope
    command_am();
    ^~~~~~~~~~
    C:\Users\E786~1\AppData\Local\Temp\arduino_modified_sketch_237806\sketch_feb20b.ino: In function 'void bandpresets()':
    sketch_feb20b:135:7: error: 'command_am' was not declared in this scope
    command_am();
    Библиотеки все установлены.

    • Причина, видимо, в библиотеке Si4735.h потому что команда command_am из нее. Попробуйте эту команду убрать, а вместо нее попробовать использовать какие нибудь другие команды из библиотеки Si4735.h (все ее команды можно найти в ее заголовочном файле). Также из этой библиотеки можно скопировать код функции command_am к себе в программу и изменить немного ее название и попробовать заработает ли программа в этом случае или нет

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *