Магнитола на ардуино своими руками
Радио работает в 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 компоненты, припаянные на переходные платы
Компонент | Описание |
---|---|
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 |
Q1 | NPN транзистор 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 (3.3 В) | Si4844-A10 |
---|---|
A5/SCL | SCLK |
A4/SDA | SDIO |
D2 | INT |
D12 | RST |
Тестирование основной схемы
Когда у вас будет собранная на макетной плате схема, подключенные к ней 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 |
---|---|
Строка 1 | D8 |
Строка 2 | D9 |
Строка 3 | D10 |
Строка 4 | D11 |
Столбец 1 | D13 |
Столбец 2 | D14 |
Столбец 3 | D15 |
В программном обеспечении я использовал библиотеку от Марка Стэнли и Александра Бревига, которая выпущена под лицензией GNU General Public License. Для проекта мы сопоставим функции с кнопками, как показано ниже.
Назначение кнопок для управления радиоприемником
Назначение кнопок клавиатуры:
- AM: переключить в режим AM (средние волны), диапазон 22;
- FM: переключить в режим FM (ультракороткие волны), диапазон 8;
- SW: переключить в режим SW (короткие волны), диапазон 31.
Обратите внимание, что стандартные диапазоны для изменения режима настраиваются в программе и легко могут быть изменены. Кроме того, текущие значения громкости и тона будут перенесены в новый режим.
Добавление дисплея
Теперь, когда у нас есть устройство ввода, нам необходима возможность отображать настройки радиоприемника. Я не смог придумать ничего лучше, чем использовать дисплей от старых мобильных телефонов Nokia 5110/3310.
Дисплей Nokia 5110/3310
При работе с этим дисплеем необходимо учитывать два важных момента. Во-первых, существует несколько разновидностей этих дисплеев, и у них могут быть разные распиновки. Вы должны проверить распиновку на своем дисплее, убедиться, что он на самом деле работает от 3,3 В, и проверить правильность подключения к Arduino Pro Mini. Во-вторых, поскольку все входы/выходы Arduino используют напряжение 3,3 В, мне не пришлось использовать понижающие резисторы, которые вы обычно видите, когда эти дисплеи используются 5-вольтовыми платами Arduino, например, Uno.
В программе я решил использовать библиотеку LCD5110_Basic, которая быстра и очень проста в использовании.
На рисунке ниже показан заполненный данными дисплей радиоприемника.
Дисплей Nokia 5110/3310 при использовании в радиоприемнике (на скриншоте некорректно показаны единицы измерения частоты mHz, в прошивке это исправлено MHz)
Начиная с левого верхнего угла, мы показываем:
- строка 1 – режим (AM/FM/SW) и номер диапазона;
- строка 2 – частотный диапазон;
- строка 3 – уровни громкости и баса/тембра;
- строка 4 – текущая частота (МГц или кГц);
- строка 1 – индикаторы стерео (только для FM) и выключения звука (если активно).
Разумеется, эта информация постоянно обновляется, чтобы показывать изменения в настройках или вводе с клавиатуры.
Собранный радиоприемник
Ниже представлен собранный на макетной плате проект радиоприемника – возможно, не такой аккуратный, каким мог бы быть (хорошо, здесь полный бардак), но полностью рабочий. Конечно, качество его работы можно улучшить только с помощью окончательной сборки.
Макет радиоприемника на 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 проект
кнопку для "китайца" нужно реализовать )
и пару ШИМ
понимающего что тут написано )
Подавление помех - это целая наука.
Если кратко - здесь указаны рекомендации по сведению к минимуму наводок на кварц.
Могу помочь чем смогу.
) привет нужно развести в 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 Pro Mini.
С помощью этого устройства можно создать следующие приборы:
- приспособления для диагностики работы автомобильного двигателя и элементов трансмиссии;
- контроллер для настройки светодиодной подсветки в салоне транспортного средства;
- электронная сигнализация;
- прибор для управления системой климат-контроля;
- датчики дождя, устанавливаемые на лобовом стекле.
Самым распространенным проектом на Ардуино для автомобиля является жидкокристаллический дисплей с сенсорным экраном.
Во время движения транспортного средства на нем отображаются следующие показатели:
- напряжение в колесных шинах;
- степень нагрузки на мотор;
- температура охлаждающей жидкости;
- заряд аккумулятора.
Если плата Arduino совместима с платформой IDE Teensy 3.6, то можно установить в салоне датчики движения. Они рассчитывают расстояние между машинами, что позволит снизить риск возникновения дорожно-транспортного происшествия.
Дистанция рассчитывается с помощью микропроцессора. Если расстояние между объектами меньше 1,5 м, то светодиоды на датчиках становятся зелеными. При меньшей дистанции диоды меняют цветовой оттенок.
При использовании микроконтроллера Ардуино нужно знать основные свойства проприетарного протокола связи. С его помощью осуществляется передача данных между устройствами. Работа самодельных устройств осуществляется при помощи скетча, написанного в программной среде Arduino IDE. Вывод данных производится через портативную консоль. Для стабильной работы платы рекомендуется приобрести SD-карту, где будут храниться скетчи и дополнительное программное обеспечение.
Какие датчики можно подключить
Для создания основных проектов на базе Ардуино требуются следующие датчики:
- Порт Freematics OBD-II.
- Драйвера для светодиодных экранов на базе последовательного периферийного интерфейса SPI.
- Провода “плюс-минус”, резисторы с сопротивлением не менее 220 ОМ и резервные конденсаторы.
- Shifter, предназначенный для преобразования поступающих сигналов.
Комплектующие необходимо приобретать на официальном сайте производителя или в сертифицированных магазинах. В противном случае можно приобрести неисправное устройство, способное вызвать короткое замыкание.
Инструкция по подключению, запуску и настройке автоустройств на Arduino
Перед настройкой платы Ардуино рекомендуется установить расширение Teensyduino для программной среды Arduino IDE. Оно поддерживает большую часть электронных библиотек, необходимых для корректного написания скетчей. В папке с аппаратным обеспечением Ардуино нужно изменить местоположение эскизов и отредактировать их в настройках Arduino IDE.
При подключении платы к основным комплектующим могут возникнуть ошибки, связанные с некорректной работой приборов при недостаточном освещении или низкой температуре. Для устранения неполадок необходимо вставить скетч display_code_with_new_temperature_sensor и загрузить его на микроконтроллер. Для включения платы требуется подать на нее питание с помощью кабеля 12 В, подключаемого к порту OBD-II.
(голосов: 4, средняя оценка: 1,50 из 5)
Читайте также: