Магнитола на ардуино

Проект: a+a=б ч1, arduino+android = борткомпьютер, магнитола и остальное все

Начал новый проект по замене магнитолы и борткомпьютера на альтернативу.
Купил планшет Asus Google Nexus 7 2013, буду встраивать вместо магнитолы. Вопрос только куда его ставить — вверх, вместо борткомпьютера или вниз, вместо магнитолы. Вверх на ходу смотреть удобнее, но придется отрезать 2-3мм пластика с панели.
Также в планах выкинуть или спрятать штатный борткомпьютер, т.к. все, что от него требуется — показывать наружную температуру и режим работы климата, а их буду считывать с шины M-BUS через arduino с блоком управления климата и отображать на планшете.

Позже планирую перевести управление климатом целиком на ардуино, т.к. штатный климат паджерика мягко говоря хреновый — берет информацию о внутренней температуре только в одной точке, не умеет общаться с задним блоком кондиционера. Зимой ногам холодно, голове жарко. Летом в ноги фигачит холодом, ноги мерзнут. Еще очень не хватает датчика запотевания лобового стекла.

Следующим этапом будет подключение к внутренней шине по протоколу MUT II и получение данных о внутреннем состоянии, считывание кодов ошибок, и всего того, что умеет полноценный мультитроникс.

Ну и прочие полезности будут реализованы на ардуино и андроиде:
-Предупреждение о предельном наклоне (кренометр)
-Индикация передачи МКПП и положения РК
-Звуковой сигнал при изменении температуры двигателя или датчика масла.
-Звуковой сигнал при езде с невключенными габаритами
-Звуковой сигнал при нажатии педали сцепления при поднятом ручнике (я задолбался жечь колодки и сцепление).
-Звуковой сигнал при открытии любой двери при включенной передаче в МКПП — во первых, чтобы не уехать с открытым багажником, во вторых чтобы не забыть снять с передачи когда машина буксует на бездорожье.
-Звуковой сигнал при открытии водительской двери, если машина не на передаче и не на ручнике — чтобы машина не укатилась.
-Звуковой сигнал, если зажигание выключено, а стекла не подняты + управление стеклоподъемниками.

Есть еще идеи про полезности?

Еще одним этапом станет замена сигнализации и интеграции ее с ардуиной. Хочу удаленный и по расписанию запуск и поддержание температуры ночью.

Источник

«Магнитофон» для ZX Spectrum на базе Arduino

Есть у меня аналог Спекки — персональный компьютер «Мастер». Он прошел несколько модернизаций, так что сейчас работает от обычного USB и с любым телевизором по SCART.

Аутентичный вариант с ковром и одним из «работающих» планшетов.

Но вот с загрузкой программ есть небольшие сложности. Магнитофона у меня уже нет (зато кассеты остались и зачем храню?). Ноут для этих целей разворачивать лениво. Удобного софта для телефонов не нашел, да и по какой-то причине Мастер не воспринимает мой телефон и один из планшетов. Я склоняюсь к тому, что какие-то «улучшалки» звука сигнал портят. В общем, хочется чего-то серьезного. На века. Залить всю библиотеку софта и игр, положить на полочку и не бояться, что лет через 10 это дело протухнет.

На просторах интернета ходит такой проект как TZXDuino, в самых разнообразных вариациях. Но суть у него одна: к ардуинке подключается дисплей, кард-ридер и несколько кнопок, а сигнал выводится с 9-го пина сразу в Спектрум или на простенький усилитель.

Прототип

Вот и я решил сварганить нечто подобное, но с преферансом и куртизанками. В качестве сердца выступает китайский аналог Arduino Nano. Дисплеем будет обычный LCD1602 без I2C модуля. Для карточки использовал MicroSD Card Adapter (на самом деле полный ноунейм) от товарищей из поднебесной. Плюс россыпь резюков и кнопок. Цена всего этого дела не превышает похода в шаурмячную.

Схема прототипа из Easy IDA

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

Разводка дорожек и общий макет расположения элементов

Пока нет отлаженного софта, решил ограничится макетной платой 8х5 сантиметров. На ней распаять все элементы и проводить тесты. Так как соединяем все проводами, то особого смысла в разводке на два слоя нет. Просто визуальное разграничение пересечений проводов. Ну и элементы постарался расположить так, чтобы не создавать себе лишних проблем при пайке. Результат получился страшненьким, но вполне реализуемым.

Фронтальная часть красивая Все макароны скопились на нижней части макетки

На удивление больше всего проблем при пайке создали кнопки. В первый раз я неправильно нарисовал схему. А во второй раз неправильно их распаял. Но ничего не спалил и не взорвал, так что работу можно считать выполненной на отлично. 😁

Первым делом нужно было обновить ядро, так как на свои клоны Nano китайцы ставят старый загрузчик. Я протестировал этот процесс на «чистой» плате, все прошло успешно. Попробовал накатить на ардуинку из прототипа и. ничего не получилось. Домучал ее до такого состояния, что она на всё перестала реагировать.

Причина предсмертного состояния ардуинки

Оказалось, что пины для подключения программатора (я обвел их оранжевым) дублируются и на основной гребенке. И так получилось, что на этих пинах висела и SD карточка. Пришлось отпаивать контакты обведенные красненьким, прошивать новое ядро и припаивать контакты заново. Урок мне на будущее: все программируемые части макетных плат должны быть в «кроватках», для удобного извлечения и замены.

Я было расстроился, что не смогу работать через программатор (это существенно ускоряет заливку скетчей в ардуинку), но, как оказалось, VSCode тоже не умеет с ним работать (никак баг не починят). Так что по итогу, я не так много и потерял.

Теперь о софте. План был простой и приятный: ищу прошивку, правлю в ней пару моментов под себя, прошиваю и радуюсь жизни. А теперь о том, как все получилось в реальности.

Прошивок для подобных проектов несколько: классический TZXDuino, MAXDuino, ArduiTape, CASDuino и т.п. Вот тут человек посвятил им целый блог:

Я решил остановиться на классическом варианте. Очевидно, что без исправлений не обойдется: у меня четыре кнопки, у них пятикнопочное управление. Но я же у мамы программист, что может пойти не так? 😁

Беспокоиться я начал, когда увидел, что об обновлениях ребята пишут на фейсбуке, а скачивать исходники предлагают с mega.nz. А когда открыл архив, передо мной разверзлась настоящая бездна ада и я понял, что застрял всерьез и надолго. Просто для примера, кнопка Stop умеет переходить в родительскую папку (правда, максимальный уровень вложенности равен трем) и выглядит этот код так:

Кстати, пятая кнопка Root была введена именно из-за того, что ранее этого кода не было.

В итоге, я вычистил все, что хардварно не поддерживается: кнопку Root и пару видов дисплеев. Язык программирования у Arduino — это С++, но система сборки своя, избавляющая новичков от некоторых “неприятных” особенностей языка. Я все перевел на нормальный С++, структурировал и разбил код на логические блоки. Переписал всю логику меню, работу с дисплеем, с SD картой и т.п. Обработчик кнопок взял у AlexGyver Technologies, кстати настоятельно рекомендую ознакомиться с его творчеством на YouTube.

На текущий момент, по софту осталась мелочевка. Я решил, что код для работы с форматом TZX исправлять не буду, так как нет ни желания, ни железа, ни тестовых данных, чтобы все нормально написать и протестить. Поэтому, из глобального остались только настройки для проигрывателя и немного рефакторинга/чистки.

Релиз

Плату для финального варианта я начал разводить в KiCad, так как он мне показался удобнее, чем онлайн программа Easy IDA. Что изменилось по сравнению со старой макетной платой? Во-первых, я сделал два выхода: один на компьютер, а другой, опциональный, на спикер. Во-вторых, перешел от PULL DOWN подтяжки кнопок, к PULL UP подтяжке, встроенной в ардуинку. Тем самым избавился от четырех резюков. Ну и в-третьих, изменилась распиновка, хотя это произошло уже в момент разводки дорожек платы.

Скажу честно, несмотря на минимум различий, работа заняла много времени. Причем я в основном боролся с редактором. Ну да не будем жаловаться на бесплатные программы. 😉

Разводка дорожек для финального варианта

Так как от лазерно-утюжной технологии решил сразу отказаться и делать заказ у тов. из поднебесной, то плату проектировал двухслойной. На верхнем слое все дорожки для «перегонки данных» — они красного цвета. Нижняя часть отвечает за «питание» — зеленые дорожки +5V, а вся остальная поверхность залита землей.

Модули ардуинки и LCD1602 были в библиотеке KiCad, со всеми размерами, распиновкой и т.п. Модуль механической кнопки пришлось искать на просторах интернета. А вот модулей SD-карточки и 3,5 мм джека я не нашел и пришлось разводить их самостоятельно. Ничего сложного, просто, очень много работы с линейкой.

По мелочам естественно перерабатывал все и не раз. Но глобальных изменений в плате практически не было. Из самого интересного могу отметить разве что «систему питания», да вспомнил про перепрошивку ардуинки и добавил на плату перемычки (MISO, MOSI и SCK).

Фронтальный рендер платы Рендер оборотной части платы Плата с расположенными на ней модулями

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

Все подошло идеально и я отправил заказ в JLCPCB. Размеры моей платы меньше 10х10 сантиметров и она в два слоя. Попал по всем параметрам в их акцию — заказ на 5 штук мне обошелся в джва бакса! Правда, доставка вышла в семь с мелочью, но кто это считает? 😁 А через месяц пришла посылка с платками в коммунистической раскраске:

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

Пайка никаких проблем не доставила, сплошное удовольствие. Отмыл, залил прошивку, вставил флешку, включил и все завелось с первого раза! С одной стороны было очень приятно, а с другой грустновато — все самое интересное закончилось.

Ссылки

Ссылка на «железную» часть проекта для программы KiCad. Если не хотите париться с этим софтом, то в Release’ах репозитория лежит готовый к отправке архив с gerber-файлами. Он точно подходит для JLCPCB, но скорее всего подойдет и для других производителей. Чуть позднее приведу описание репозитория в порядок: дам ссылки на необходимые модули, рекомендации и т.п.

А это ссылка на мою прошивку. Так как заливать ее надо через IDE от Arduino, то поставляется только в виде исходных кодов. Зависимости: TimerOne (версия 1.1.0 или новее) и SdFat (версия 1.1.4, версия 2.Х.Х не поддерживается!).

Финал

Каких-то доработок в железной части я не планирую. Была мысль прикрутить усилитель, по рекомендациям от официального проекта TZXDuino. Но, ни спикеру/наушникам, ни моему «Мастеру» это оказалось не нужно. Все работает хорошо и без дополнительных костылей.

Ну и пора перетаскивать весь мой запас кассет на флешку. 😑 Самая тяжелая часть. Оцифровывать их я, конечно, не буду. Но, даже каталогизация и поиск нужных файлов, чувствую, займет порядочно времени…

На этом все. Надеюсь, что-нибудь из статьи вам будет полезно. И спасибо за внимание!

Источник

Ардуину мне в машину ч.2 / Кнопки на руле

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

Сегодня на очереди решение банальной задачи, с которой сталкивается большинство автовладельцев, решивших сменить родное ГУ на что-то более функциональное — управление нештатной магнитолой кнопками на руле.

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

Есть и исключения вроде Alpine 117Ri, 137Bti, с обучаемым интерфейсом рулевых кнопок, но в моем пионере такой роскоши нет. И вот мы подошли к задаче, которую должен решать контроллер — детектировать на входе нажатую рулевую кнопку и предавать на выход значение, понятное конкретному ГУ. Сегодня разберем только проводное управление, а эмуляцию беспроводных пультов оставим на следующий раз.

Для начала измеряем входящее сопротивление. Здесь нам поможет резистивный делитель и аналоговый вход ардуино. Зная входное напряжение Uвх. и сопротивление R1, мы измеряем Uвых. и находим искомое сопротивление кнопки R2. Тут главное понимать, чем ближе по номиналу измеряемый резистор к делителю, тем точнее измерения.

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

Теперь настал черед собирать тестовый стенд. В качестве управляемой магнитолы будет мой Pioneer SPH-DA100, в роли кнопки руля резистор с микриком. Контроллер на базе Arduino Pro Mini с отдельным питанием через DC-DC конвертер. Ниже накидал схему подключения все этого набора.

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

DigiPot pot(2,3,4);
int wheelPin=A0;
float Vout = 0;
int prevButton=0;
float r = 0;

const int VOL_UP=1;
const int VOL_DN=2;
const int PREV_TR=3;
const int NEXT_TR=4;
const int MODE=5;
const int MUTE=6;

void loop()
<
int currButton=getR();
if (currButton!=prevButton)
<
delay(10);
currButton=getR();
if (currButton!=prevButton)
<
prevButton=currButton;
pot.reset();
switch(currButton)
<
case VOL_UP: pot.set(10); break;
case VOL_DN: pot.set(14); break;
case PREV_TR: pot.set(7); break;
case NEXT_TR: pot.set(5); break;
case MODE: pot.set(1); break;
case MUTE: pot.set(2); break;
default: pot.reset(); break;
>
>
>
delay(5);
>

int getR()
<
Vout = (5.0 / 1023.0) * analogRead(wheelPin);
r = 1000 / ((5.0 / Vout) — 1); // Вычисляем сопротивление R2 (1000 это значение R1 1 кОм)
if (r>=900 && r

И небольшое видео работы стенда на столе.

В следующей записи разберемся как работать с ИК-пультами и бонусом рассмотрим еще парочку полезных модулей для Arduino. Всем добра!

Источник

Магнитола на arduino

Ардуину мне в машину ч.2 / Кнопки на руле

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

Сегодня на очереди решение банальной задачи, с которой сталкивается большинство автовладельцев, решивших сменить родное ГУ на что-то более функциональное — управление нештатной магнитолой кнопками на руле.

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

Есть и исключения вроде Alpine 117Ri, 137Bti, с обучаемым интерфейсом рулевых кнопок, но в моем пионере такой роскоши нет. И вот мы подошли к задаче, которую должен решать контроллер — детектировать на входе нажатую рулевую кнопку и предавать на выход значение, понятное конкретному ГУ. Сегодня разберем только проводное управление, а эмуляцию беспроводных пультов оставим на следующий раз.

Для начала измеряем входящее сопротивление. Здесь нам поможет резистивный делитель и аналоговый вход ардуино. Зная входное напряжение Uвх. и сопротивление R1, мы измеряем Uвых. и находим искомое сопротивление кнопки R2. Тут главное понимать, чем ближе по номиналу измеряемый резистор к делителю, тем точнее измерения.

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

Теперь настал черед собирать тестовый стенд. В качестве управляемой магнитолы будет мой Pioneer SPH-DA100, в роли кнопки руля резистор с микриком. Контроллер на базе Arduino Pro Mini с отдельным питанием через DC-DC конвертер. Ниже накидал схему подключения все этого набора.

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

DigiPot pot(2,3,4);
int wheelPin=A0;
float Vout = 0;
int prevButton=0;
float r = 0;

const int VOL_UP=1;
const int VOL_DN=2;
const int PREV_TR=3;
const int NEXT_TR=4;
const int MODE=5;
const int MUTE=6;

void loop()
<
int currButton=getR();
if (currButton!=prevButton)
<
delay(10);
currButton=getR();
if (currButton!=prevButton)
<
prevButton=currButton;
pot.reset();
switch(currButton)
<
case VOL_UP: pot.set(10); break;
case VOL_DN: pot.set(14); break;
case PREV_TR: pot.set(7); break;
case NEXT_TR: pot.set(5); break;
case MODE: pot.set(1); break;
case MUTE: pot.set(2); break;
default: pot.reset(); break;
>
>
>
delay(5);
>

int getR()
<
Vout = (5.0 / 1023.0) * analogRead(wheelPin);
r = 1000 / ((5.0 / Vout) — 1); // Вычисляем сопротивление R2 (1000 это значение R1 1 кОм)
if (r>=900 && r

И небольшое видео работы стенда на столе.

В следующей записи разберемся как работать с ИК-пультами и бонусом рассмотрим еще парочку полезных модулей для Arduino. Всем добра!

Источник

«Магнитофон» для ZX Spectrum на базе Arduino

Есть у меня аналог Спекки — персональный компьютер «Мастер». Он прошел несколько модернизаций, так что сейчас работает от обычного USB и с любым телевизором по SCART.

Аутентичный вариант с ковром и одним из «работающих» планшетов.

Но вот с загрузкой программ есть небольшие сложности. Магнитофона у меня уже нет (зато кассеты остались и зачем храню?). Ноут для этих целей разворачивать лениво. Удобного софта для телефонов не нашел, да и по какой-то причине Мастер не воспринимает мой телефон и один из планшетов. Я склоняюсь к тому, что какие-то «улучшалки» звука сигнал портят. В общем, хочется чего-то серьезного. На века. Залить всю библиотеку софта и игр, положить на полочку и не бояться, что лет через 10 это дело протухнет.

На просторах интернета ходит такой проект как TZXDuino, в самых разнообразных вариациях. Но суть у него одна: к ардуинке подключается дисплей, кард-ридер и несколько кнопок, а сигнал выводится с 9-го пина сразу в Спектрум или на простенький усилитель.

Прототип

Вот и я решил сварганить нечто подобное, но с преферансом и куртизанками. В качестве сердца выступает китайский аналог Arduino Nano. Дисплеем будет обычный LCD1602 без I2C модуля. Для карточки использовал MicroSD Card Adapter (на самом деле полный ноунейм) от товарищей из поднебесной. Плюс россыпь резюков и кнопок. Цена всего этого дела не превышает похода в шаурмячную.

Схема прототипа из Easy IDA

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

Разводка дорожек и общий макет расположения элементов

Пока нет отлаженного софта, решил ограничится макетной платой 8х5 сантиметров. На ней распаять все элементы и проводить тесты. Так как соединяем все проводами, то особого смысла в разводке на два слоя нет. Просто визуальное разграничение пересечений проводов. Ну и элементы постарался расположить так, чтобы не создавать себе лишних проблем при пайке. Результат получился страшненьким, но вполне реализуемым.

Фронтальная часть красивая Все макароны скопились на нижней части макетки

На удивление больше всего проблем при пайке создали кнопки. В первый раз я неправильно нарисовал схему. А во второй раз неправильно их распаял. Но ничего не спалил и не взорвал, так что работу можно считать выполненной на отлично. 😁

Первым делом нужно было обновить ядро, так как на свои клоны Nano китайцы ставят старый загрузчик. Я протестировал этот процесс на «чистой» плате, все прошло успешно. Попробовал накатить на ардуинку из прототипа и. ничего не получилось. Домучал ее до такого состояния, что она на всё перестала реагировать.

Причина предсмертного состояния ардуинки

Оказалось, что пины для подключения программатора (я обвел их оранжевым) дублируются и на основной гребенке. И так получилось, что на этих пинах висела и SD карточка. Пришлось отпаивать контакты обведенные красненьким, прошивать новое ядро и припаивать контакты заново. Урок мне на будущее: все программируемые части макетных плат должны быть в «кроватках», для удобного извлечения и замены.

Я было расстроился, что не смогу работать через программатор (это существенно ускоряет заливку скетчей в ардуинку), но, как оказалось, VSCode тоже не умеет с ним работать (никак баг не починят). Так что по итогу, я не так много и потерял.

Теперь о софте. План был простой и приятный: ищу прошивку, правлю в ней пару моментов под себя, прошиваю и радуюсь жизни. А теперь о том, как все получилось в реальности.

Прошивок для подобных проектов несколько: классический TZXDuino, MAXDuino, ArduiTape, CASDuino и т.п. Вот тут человек посвятил им целый блог:

Я решил остановиться на классическом варианте. Очевидно, что без исправлений не обойдется: у меня четыре кнопки, у них пятикнопочное управление. Но я же у мамы программист, что может пойти не так? 😁

Беспокоиться я начал, когда увидел, что об обновлениях ребята пишут на фейсбуке, а скачивать исходники предлагают с mega.nz. А когда открыл архив, передо мной разверзлась настоящая бездна ада и я понял, что застрял всерьез и надолго. Просто для примера, кнопка Stop умеет переходить в родительскую папку (правда, максимальный уровень вложенности равен трем) и выглядит этот код так:

Кстати, пятая кнопка Root была введена именно из-за того, что ранее этого кода не было.

В итоге, я вычистил все, что хардварно не поддерживается: кнопку Root и пару видов дисплеев. Язык программирования у Arduino — это С++, но система сборки своя, избавляющая новичков от некоторых “неприятных” особенностей языка. Я все перевел на нормальный С++, структурировал и разбил код на логические блоки. Переписал всю логику меню, работу с дисплеем, с SD картой и т.п. Обработчик кнопок взял у AlexGyver Technologies, кстати настоятельно рекомендую ознакомиться с его творчеством на YouTube.

На текущий момент, по софту осталась мелочевка. Я решил, что код для работы с форматом TZX исправлять не буду, так как нет ни желания, ни железа, ни тестовых данных, чтобы все нормально написать и протестить. Поэтому, из глобального остались только настройки для проигрывателя и немного рефакторинга/чистки.

Релиз

Плату для финального варианта я начал разводить в KiCad, так как он мне показался удобнее, чем онлайн программа Easy IDA. Что изменилось по сравнению со старой макетной платой? Во-первых, я сделал два выхода: один на компьютер, а другой, опциональный, на спикер. Во-вторых, перешел от PULL DOWN подтяжки кнопок, к PULL UP подтяжке, встроенной в ардуинку. Тем самым избавился от четырех резюков. Ну и в-третьих, изменилась распиновка, хотя это произошло уже в момент разводки дорожек платы.

Скажу честно, несмотря на минимум различий, работа заняла много времени. Причем я в основном боролся с редактором. Ну да не будем жаловаться на бесплатные программы. 😉

Разводка дорожек для финального варианта

Так как от лазерно-утюжной технологии решил сразу отказаться и делать заказ у тов. из поднебесной, то плату проектировал двухслойной. На верхнем слое все дорожки для «перегонки данных» — они красного цвета. Нижняя часть отвечает за «питание» — зеленые дорожки +5V, а вся остальная поверхность залита землей.

Модули ардуинки и LCD1602 были в библиотеке KiCad, со всеми размерами, распиновкой и т.п. Модуль механической кнопки пришлось искать на просторах интернета. А вот модулей SD-карточки и 3,5 мм джека я не нашел и пришлось разводить их самостоятельно. Ничего сложного, просто, очень много работы с линейкой.

По мелочам естественно перерабатывал все и не раз. Но глобальных изменений в плате практически не было. Из самого интересного могу отметить разве что «систему питания», да вспомнил про перепрошивку ардуинки и добавил на плату перемычки (MISO, MOSI и SCK).

Фронтальный рендер платы Рендер оборотной части платы Плата с расположенными на ней модулями

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

Все подошло идеально и я отправил заказ в JLCPCB. Размеры моей платы меньше 10х10 сантиметров и она в два слоя. Попал по всем параметрам в их акцию — заказ на 5 штук мне обошелся в джва бакса! Правда, доставка вышла в семь с мелочью, но кто это считает? 😁 А через месяц пришла посылка с платками в коммунистической раскраске:

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

Пайка никаких проблем не доставила, сплошное удовольствие. Отмыл, залил прошивку, вставил флешку, включил и все завелось с первого раза! С одной стороны было очень приятно, а с другой грустновато — все самое интересное закончилось.

Ссылки

Ссылка на «железную» часть проекта для программы KiCad. Если не хотите париться с этим софтом, то в Release’ах репозитория лежит готовый к отправке архив с gerber-файлами. Он точно подходит для JLCPCB, но скорее всего подойдет и для других производителей. Чуть позднее приведу описание репозитория в порядок: дам ссылки на необходимые модули, рекомендации и т.п.

А это ссылка на мою прошивку. Так как заливать ее надо через IDE от Arduino, то поставляется только в виде исходных кодов. Зависимости: TimerOne (версия 1.1.0 или новее) и SdFat (версия 1.1.4, версия 2.Х.Х не поддерживается!).

Финал

Каких-то доработок в железной части я не планирую. Была мысль прикрутить усилитель, по рекомендациям от официального проекта TZXDuino. Но, ни спикеру/наушникам, ни моему «Мастеру» это оказалось не нужно. Все работает хорошо и без дополнительных костылей.

Ну и пора перетаскивать весь мой запас кассет на флешку. 😑 Самая тяжелая часть. Оцифровывать их я, конечно, не буду. Но, даже каталогизация и поиск нужных файлов, чувствую, займет порядочно времени…

На этом все. Надеюсь, что-нибудь из статьи вам будет полезно. И спасибо за внимание!

Источник

Adblock
detector