Магнитола на ардуино своими руками

Обновлено: 05.07.2024

Радио работает в FM диапазоне на частоте 87,5—108 МГц. Программное решение полностью автономно - для настройки (перенастройки) перепрошивка радиоприемника с помощью компьютера не потребуется. Список радиостанций сохраняется во внутренней флеш-памяти ESP32, и будет доступен даже после отключения питания.

Радио управляется 2 энкодерами.

Кнопка правого энкодера включает/выключает радиоприемник. Когда радио включено - ручка энкодера выполняет роль регулятора громкости.

Кнопка левого энкодера переводит радио в режим настройки предназначенный для поиска и заполнения списка радиостанций. Ручка энкодера служит для переключения между сохраненными каналами (всего для записи доступно 99 ячеек)

После прошивки ESP32 необходимо выполнить сохранение частот вещающих местных радиостанции в ячейки памяти.

Идея радиоприемника на одной микросхеме выглядит довольно увлекательной. Такая возможность интересна особенно мне, потому что, честно говоря, я завидую людям, обладающим навыками в аналоговой схемотехнике, необходимыми для создания радиоприемника. Когда я просматривал литературу на эту тему, я наткнулся на микросхемы от Silicon Labs. Моё внимание привлекла одна из этих микросхем, Si4844-A10. Этот приемник может работать в AM сигналом в диапазонах СВ/КВ и FM сигналом в диапазоне УКВ и предназначен для работы с микропроцессором и компонентами управления, при этом потребуется лишь небольшая антенна. Я не мог удержаться.

Справочные документы

Рекомендуется с данными микросхемы и информацией по её использованию. Рекомендуется ознакомиться с тремя документами, приведенными ниже, для понимания и сборки проекта:

Основная схема

Схема радиоприемника

Схема радиоприемника

На рисунке 1 представлена основная схема радиоприемника, взятая и адаптированная из технического описания Silicon Labs Si4844 и рекомендаций по применению. Для приема в диапазоне КВ я использовал ферритовую антенну от старого портативного приемника. Q1 – усилитель для СВ/УКВ, здесь я так же использовал телескопическую антенну от старого приемника. Стоит заметить, что руководство по проектированию, приведенное выше, дает несколько альтернатив и различные подходы к антеннам.

Возможно, наиболее сложная часть сборки – это работа с микросхемой в корпусе SSOP-24. Если у вас нет опыта работы с SMD микросхемами, возможно, самым простым способом будет использование переходной платы. У меня была переходная плата SSOP-28; немного пайки, и с микросхемой стало можно работать, как с микросхемой в DIP корпусе. Другими потенциально трудными компонентами для работы является пара из ферритового фильтра (бусинки) и конденсатора. Эти компоненты также можно припаять на переходную плату, чтобы работать с ними как с DIL элементом.

SMD компоненты, припаянные на переходные платы
SMD компоненты, припаянные на переходные платы

Список компонентов основной схемы
КомпонентОписание
B1Ферритовый фильтр (бусинка) 2,5 кОм (100 МГц)
C1,C2,C5Неполярный конденсатор 4,7 мкФ
C3,C4Конденсатор 22 пФ
C6,C7,C9Конденсатор 0,1 мкФ
C8Неполярный конденсатор 47 мкФ
C10,C11Конденсатор 0,47 мкФ
C12,C14Конденсатор 33 нФ
C13Конденсатор 33 пФ
C15Конденсатор 10 пФ
IC1Радиоприемник Si4844-A10
Q1NPN транзистор SS9018
R1, R2Резистор 2,2 кОм
R3Резистор 1 кОм
R4,R7Резистор 100 кОм
R5Резистор 10 Ом
R6Резистор 120 кОм
R8Резистор 100 Ом
L1Индуктивность 270 нГн
VR1Линейный потенциометр 100кОм
Y1Кварцевый резонатор 32,768 кГц
ANT1Ферритовая антенна
ANT2Телескопическая/штыревая антенна

Подключение Arduino

Подключение Arduino к Si4844-A10
Arduino (3.3 В)Si4844-A10
A5/SCLSCLK
A4/SDASDIO
D2INT
D12RST

Тестирование основной схемы

Когда у вас будет собранная на макетной плате схема, подключенные к ней Arduino и аудиоколонки со встроенным усилителем, вы сможете запустить тестовую программу, которая приведена в архиве в конце статьи (Si4844_Quick_Test.ino). Эта программа выполняет простой тест, который включает питание устройства, устанавливает диапазон FM (УКВ) и предоставляет информацию о версии микросхемы. Если всё пройдет хорошо, вы сможете настроить частоту радиоприемника, повернув ручку VR1, увидите частоту, динамически отображаемую на экране и, конечно, услышите то, что выдает радиоприемник.

Скриншот экрана с результатами вывода тестовой программы

Скриншот экрана с результатами вывода тестовой программы

Если основная схема и ее подключение к Arduino работают, то можно собирать полноценный радиоприемник.

Программирование Arduino

Микросхема Si в этом проекте является ведомым устройство I2C, имеющим фиксированный адрес 0x11; при этом ведущим устройством (мастером) является плата Arduino. Однако скорость обмена информацией по I2C у этой микросхемы относительно медленная: максимальная поддерживаемая скорость 50 кГц. Кроме того, во время процедуры включения питания скорость не должна превышать 10 кГц. Чтобы удовлетворить эти требования, мы должны явно установить у Arduino скорость I2C, которая, как правило, слишком велика для Si4844-A10. К счастью, благодаря большому количеству документации по функциям I2C Arduino, мы можем легко выполнить необходимые изменения.

В принципе, скорость I2C для наших целей определяется в программном обеспечении Arduino двумя переменными. Эти переменные – это TWBR и TWSR . Биты 0 и 1 TWSR управляют предделителем, который работает со значением TWBR для установки скорости I2C. Скорость (тактовая частота) передачи по I2C рассчитывается по формуле:

Частота = Тактовая частота процессора / (16 + (2 * ( TWBR ) * (предделитель))

Arduino Pro mini 3,3В работает на частоте 8 МГц. Чтобы установить скорость I2C на 10 кГц, мы используем значение TWBR 98 и установим предделитель в значение 4 (путем установки в 1 только бита 0 TWSR ). Таким образом,

8 000 000 / (16 + (2 * 98 * 4 )) = 10 000 или 10 кГц

Чтобы установить скорость I2C на 50 кГц, мы используем значение TWBR 18 и установим предделитель в значение 4 (путем установки в 1 только бита 0 TWSR ). Таким образом,

8 000 000 / (16 + (2 * 18 * 4)) = 50 000 или 50 кГц

Для более подробной информации смотрите документацию библиотеки Wire для Arduino. Суть в том, что мы можем выполнить изменение скорости I2C всего парой строк кода, что вы можете увидеть в тестовой программе.

Программирование Si4844-A10

По сути, Arduino посылает команды микросхеме радиоприемника по шине I2C, затем микросхема выполняет запрошенные действия и возвращает информацию о состоянии. Микросхема Si может работать в нескольких режимах, что позволяет настроить в ней точную частоту и нужные параметры. В этом проекте мы используем чип Si4844-A10 в режиме, который принимает предварительно определенные (или стандартные) диапазоны радиочастот с параметрами по умолчанию. Этот режим был выбран потому, что он легко дает доступ к базовому функционалу и при этом предлагает определенную степень настройки.

В данном проекте программное обеспечение будет обеспечивать доступ ко всем стандартным диапазонам, а также к управлению основными параметрами, включая изменение режима (AM/FM/SW), громкость, тон и отключение звука.

Добавление клавиатуры

Для управления радиоприемником нам необходимо устройство ввода. Для наших целей достаточно простой мембранной клавиатуры. Их легко подключить к Arduino. Ниже приведена иллюстрация назначения выводов клавиатуры (где строки, а где столбцы), которую использовал я, вы должны убедиться, что ваша клавиатура аналогична.

Простая мембранная клавиатура
Простая мембранная клавиатура

Подключение клавиатуры к Arduino
КлавиатураArduino
Строка 1D8
Строка 2D9
Строка 3D10
Строка 4D11
Столбец 1D13
Столбец 2D14
Столбец 3D15

В программном обеспечении я использовал библиотеку от Марка Стэнли и Александра Бревига, которая выпущена под лицензией GNU General Public License. Для проекта мы сопоставим функции с кнопками, как показано ниже.

Назначение кнопок для управления радиоприемником

Назначение кнопок для управления радиоприемником

Назначение кнопок клавиатуры:

  • AM: переключить в режим AM (средние волны), диапазон 22;
  • FM: переключить в режим FM (ультракороткие волны), диапазон 8;
  • SW: переключить в режим SW (короткие волны), диапазон 31.

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

Добавление дисплея

Теперь, когда у нас есть устройство ввода, нам необходима возможность отображать настройки радиоприемника. Я не смог придумать ничего лучше, чем использовать дисплей от старых мобильных телефонов Nokia 5110/3310.

Дисплей Nokia 5110/3310

Дисплей Nokia 5110/3310

При работе с этим дисплеем необходимо учитывать два важных момента. Во-первых, существует несколько разновидностей этих дисплеев, и у них могут быть разные распиновки. Вы должны проверить распиновку на своем дисплее, убедиться, что он на самом деле работает от 3,3 В, и проверить правильность подключения к Arduino Pro Mini. Во-вторых, поскольку все входы/выходы Arduino используют напряжение 3,3 В, мне не пришлось использовать понижающие резисторы, которые вы обычно видите, когда эти дисплеи используются 5-вольтовыми платами Arduino, например, Uno.

В программе я решил использовать библиотеку LCD5110_Basic, которая быстра и очень проста в использовании.

На рисунке ниже показан заполненный данными дисплей радиоприемника.

Дисплей Nokia 5110/3310 при использовании в радиоприемнике

Дисплей Nokia 5110/3310 при использовании в радиоприемнике (на скриншоте некорректно показаны единицы измерения частоты mHz, в прошивке это исправлено MHz)

Начиная с левого верхнего угла, мы показываем:

  • строка 1 – режим (AM/FM/SW) и номер диапазона;
  • строка 2 – частотный диапазон;
  • строка 3 – уровни громкости и баса/тембра;
  • строка 4 – текущая частота (МГц или кГц);
  • строка 1 – индикаторы стерео (только для FM) и выключения звука (если активно).

Разумеется, эта информация постоянно обновляется, чтобы показывать изменения в настройках или вводе с клавиатуры.

Собранный радиоприемник

Ниже представлен собранный на макетной плате проект радиоприемника – возможно, не такой аккуратный, каким мог бы быть (хорошо, здесь полный бардак), но полностью рабочий. Конечно, качество его работы можно улучшить только с помощью окончательной сборки.

Макет радиоприемника на Arduino

Макет радиоприемника на Arduino

Программное обеспечение для запуска приемника доступно для загрузки ниже. Оно снабжено комментариями и, надеюсь, легко понятно и при необходимости легко модифицируется. Основной цикл программы очень прост. Он (1) проверяет и отображает любое изменение частоты приемника и (2) проверяет, выполнено ли нажатие клавиши, и, если да, выполняет соответствующую команду. Остальная часть программы состоит из вспомогательных функций.

Я был очень впечатлен качеством приема с учетом того, что это просто макет. В FM всё очень хорошо. На средних волнах тоже всё нормально, и я смог принять довольно много сигналов на коротких волнах. Тем не менее, качество приема может быть улучшено за счет использования нормальных антенн.

Заключение

Это был сложный и приятный проект. Я определенно поражен микросхемой Si4844-A10 и ее возможностями. Этот проект только слегка затронул её функционал и может послужить основой чего-то для более сложного.

Приветствую! В общем, заказал я на Алиэкспресс 2DIN автомагнитолу - 7 дюймов емкостный экран, Android 5.1, процессор intel sofia, 2 гига оперативки, 32 встроенной, GPS, WIFi, 3G т.д., короче как для такой цены и класса устройств очень круто и полный фарш, получил посылку, подключил - все работает четко, качественный звук и сборка, ну думаю, наконец-то китайцы научились делать хорошо. Но получилось как в той поговорке - "танцевали, танцевали, но не поклонились", решил проверить потребление в выключенном режиме и чуть офигел - 500мА, во включенном состоянии при маленькой громкости динамиков 800ма, то есть фактически магнитола не выключается, а все время жрет аккумулятор, при таком потреблении оставишь машину на пару дней и завести уже не сможешь. Реальный спящий режим с потреблением 10мА у магнитолы все-таки есть, но он включается только если отключить вывод магнитолы ACC от питания, но в таком случае включать и выключать магнитолу надо только поворотом ключа в положение ACC на замке зажигания, бред какой-то, переписка с китайцами ничего не дала, так и посоветовали выключать с ключа, типа "так и было задумано". На панели есть кнопка POWER, но она выключает только экран и внутренний усилитель, а все системы работают на полном ходу с потреблением 500ма. Так вот в чем состоит задача - надо создать электронный выключатель на ардуино, который будет смыкать и размыкать вывод магнитолы ACC с питанием 12в. Описание работы:

P.S. Нашел такой электронный выключатель на PIC12F629 , но очень неохота играться с прошивкой (программатора у мя нет), хочу сделать на Ардуино.

Остання редакція martinways (2016-12-04 11:27:44)

привет, рад видеть )
я сначала тоже нервничал что музыку без ключа не послушать, но после пары подкуриваний забывшему выключить магнитолу "вьехал" в тему ) китайцы рулят )
сейчас висит 3-4 близких задачи, поворотники, для меня ) , сигналы куме , и т.д. хочу объединить - участвуете?

но релиз после НГ (, чуток занят, даже лодку некогда доделать (

ищу "смехотехника" на небольшой EAGLE проект
кнопку для "китайца" нужно реализовать )
и пару ШИМ

https://snag.gy/0hzRJU.jpg

понимающего что тут написано )

Подавление помех - это целая наука.
Если кратко - здесь указаны рекомендации по сведению к минимуму наводок на кварц.
Могу помочь чем смогу.

) привет нужно развести в EGALE плату с источником Vin = 6-24V ( 12V номинал ) источник, да с подавлением помех генератора и потребителей еще те муки выбора) , т.е. незнаю что поставить ))))

под Kinetis® EA series of 32-bit ARM® Cortex® MCUs
на неделе закажу S9KEAZN8AMTG
Kinetis E 32-bit MCU, ARM Cortex-M0+ core, 8KB Flash, Automotive Qualified, 48MHz, 16TSSOP
что то соберу, но правильную плату нужно будет сделать, я что то могу, но это так, баловство, вот заранее разбираюсь кто может сделать, полного ТЗ еще нет Вы правы, ет целая наука

Для начала надо схему состряпать. Потом габариты платы внесут свои корректировки в используемые элементы. Потом еще всякие тонкости компоновки и совместимости. И т.д. и п.т.
В конце концов получается ожидаемый продукт.

))) спасибо за инфу ),
купить Altium я точно сейчас не могу. поэтому все проекты нынче в EAGLE, 2 фришных слоя с головой хватает,

я еще еще правда не предупредил что нам всем нужно скинуться на схемотехника ) но пока ТЗ нет ), все что то потерялись, как только разговор зашел за NXP, но я ардуино не буду ставить в машину, а тут такой чип занимателен, который нужно обязательно посмотреть.

если есть опыт разработки плат в "нестандарте" по условиям, девайс должен соответствовать 2ExibIICT2 (это я проверю правильно ли набил код %) был бы рад с Вами поработать. но пока ТЗ нет, развлекаемся прототипам )

Плата Arduino является одним из самых популярных аппаратных модулей для модификации машин. Она не занимает большое количество свободного пространства в салоне и обладает высокой мощностью. Для реализации Ардуино-проектов для автомобиля не требуются знания микроэлектроники и программирования.

Плата Arduino

Особенности применения Ардуино в автомобиле для его улучшения

Для улучшения периферийных деталей авто рекомендуется использовать микроконтроллер Arduino Pro Mini.

С помощью этого устройства можно создать следующие приборы:

  • приспособления для диагностики работы автомобильного двигателя и элементов трансмиссии;
  • контроллер для настройки светодиодной подсветки в салоне транспортного средства;
  • электронная сигнализация;
  • прибор для управления системой климат-контроля;
  • датчики дождя, устанавливаемые на лобовом стекле.

Самым распространенным проектом на Ардуино для автомобиля является жидкокристаллический дисплей с сенсорным экраном.

Во время движения транспортного средства на нем отображаются следующие показатели:

  • напряжение в колесных шинах;
  • степень нагрузки на мотор;
  • температура охлаждающей жидкости;
  • заряд аккумулятора.

Схема

Если плата Arduino совместима с платформой IDE Teensy 3.6, то можно установить в салоне датчики движения. Они рассчитывают расстояние между машинами, что позволит снизить риск возникновения дорожно-транспортного происшествия.

Дистанция рассчитывается с помощью микропроцессора. Если расстояние между объектами меньше 1,5 м, то светодиоды на датчиках становятся зелеными. При меньшей дистанции диоды меняют цветовой оттенок.

При использовании микроконтроллера Ардуино нужно знать основные свойства проприетарного протокола связи. С его помощью осуществляется передача данных между устройствами. Работа самодельных устройств осуществляется при помощи скетча, написанного в программной среде Arduino IDE. Вывод данных производится через портативную консоль. Для стабильной работы платы рекомендуется приобрести SD-карту, где будут храниться скетчи и дополнительное программное обеспечение.

Какие датчики можно подключить

Для создания основных проектов на базе Ардуино требуются следующие датчики:

  1. Порт Freematics OBD-II.
  2. Драйвера для светодиодных экранов на базе последовательного периферийного интерфейса SPI.
  3. Провода “плюс-минус”, резисторы с сопротивлением не менее 220 ОМ и резервные конденсаторы.
  4. Shifter, предназначенный для преобразования поступающих сигналов.

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

Инструкция по подключению, запуску и настройке автоустройств на Arduino

Перед настройкой платы Ардуино рекомендуется установить расширение Teensyduino для программной среды Arduino IDE. Оно поддерживает большую часть электронных библиотек, необходимых для корректного написания скетчей. В папке с аппаратным обеспечением Ардуино нужно изменить местоположение эскизов и отредактировать их в настройках Arduino IDE.

При подключении платы к основным комплектующим могут возникнуть ошибки, связанные с некорректной работой приборов при недостаточном освещении или низкой температуре. Для устранения неполадок необходимо вставить скетч display_code_with_new_temperature_sensor и загрузить его на микроконтроллер. Для включения платы требуется подать на нее питание с помощью кабеля 12 В, подключаемого к порту OBD-II.

(голосов: 4, средняя оценка: 1,50 из 5)

Читайте также: