В последнее время поймал себя на том, что меня успокаивает процесс создания плат, от разводки, до пайки и я какое-то время вынашивал идею, что неплохо было бы сделать какую-то свою отладочную плату, например, с программированием по USB. Но зачем что-то придумывать без веской причины, тогда как можно взять готовый проект, например, Arduino UNO или Digispark и заодно подсмотреть, как там все устроено. Поэтому я ухватился за эту идею.
Эта статья — рассказ о том, как я собрал клоны Arduino UNO и Digispark, сделал три разные платы расширения своими руками и протестировал две из них, купленные в магазине.
Попробуем сделать Arduino UNO DIY — свой ответ Arduino UNO Q.
❯ Введение
Признаюсь, что сначала я хотел делать отладочную плату для CH32V003, но долгое время меня сдерживало то, что непонятно, как подписывать контакты, чтобы не запутаться. Но вскоре я научился делать относительно простенькую шелкографию с помощью лазерного принтера и утюга. И для меня этого оказалось достаточно, чтобы приступить к этой задаче.
Вы могли заметить по фотографиям, что платы я аккуратно вырезаю на фрезерном станке, поэтому то, что я буду рассказывать в этой статье, не сказать, что универсально — это просто на данный момент мое увлечение и я решил, что раз я этим занимаюсь, то почему бы не попробовать что-то новенькое. На маркетплейсах нашел наборчик для сборки под ATmega8. К слову, к нему прилагается принципиальная схема и я думал было его повторить, но решил, что это слишком просто и не интересно, хоть и хорошо для разминки. И тогда задумался о Digispark. Начал его делать и тоже понял, что лучше сделать что-то посложнее, тогда и подумал об Arduino UNO.

Почему выбрал Arduino UNO или Digispark на самом деле просто. Мне хочется приобщиться к этому сообществу побольше, потому что для CH32V003 я делаю платы, а под AVR как-то не очень. Понимаю, что 8-битные микроконтроллеры уже не так актуальны, но для изучения электроники и для решения простых задач они вполне хорошо себя чувствуют, кроме лишь того, что стоят в разы дороже CH32V003, но на этот раз я решил сильно не обращать на это внимания, т.к. это затея больше для развлечения, а для готового устройства уже буду основательнее выбирать микроконтроллер.
Еще причина попробовать Arduino UNO или Digispark было в том, что это открытые проекты, другими словами профессиональные принципиальные схемы доступны для всех желающих и мне было интересно их изучить, попробовать на основе их что-то сделать свое, а не только изучать спорные или любительские схемы из интернета.
В статье сначала будет рассмотрено создание клона Arduino UNO, затем две купленные платы расширения (LCD Keypad Shield, Multi-Functional Shield) и три самодельные для него (для программирования ATtiny85, для подачи питания и с WiFI). Затем рассмотрим коротко клон Digispark.
На самом деле, в этой статье рассматривать Digispark кажется, что не уместно, но я сделал эту плату до того, как решил делать клон Arduino UNO, поэтому это просто дополнительный бонус.
Дальше в статье будет много принципиальных схем, все они рабочие. Некоторые устройства я делал не с первой попытки и все ошибки уже поправил, точнее все мне известные, т.к. устройства функционируют корректно. Кроме, возможно, платы расширения с WiFi, но я про это отдельно напишу еще.
❯ Arduino UNO DIY
Надеюсь, мне не придется объяснять, что такое Arduino, поэтому дальше я делаю предположение, что мой читатель уже знаком или имеет какое-то базовое предоставление об этой платформе. В противном случае, даже если я все объясню, моя статья вам окажется бессмысленной, т.к. проще купить готовую плату и не ломать себе голову. Скажу только, что Arduino UNO — это одна из первых плат, которые появились для Arduino. Они изначально использовали микроконтроллер в DIP корпусе, поэтому я и захотел повторить именно ее, т.к. она мне хорошо запомнилась. Возможно, это была не UNO, а Arduino Diecimila, но это не принципиально.

Перед разработкой у меня было несколько вопросов: «Как подключать микроконтроллер?», «Где мне взять размеры платы и плат расширения?» и «Что делать с программированием по USB?».
❯ Принципиальная схема
Отвечаю на вопрос: «Как подключить микроконтроллер?».
К этому проекту я приступил больше месяца назад, поэтому все в деталях не помню, но сейчас могу сказать, что самый лучший ответ на «Как подключить микроконтроллер?» находится на странице MiniCore. Например, вот принципиальная схема с примером подключения оттуда:

На вопрос «Где мне взять размеры платы и шилдов?», как мне показалось, лучшим способ было подсмотреть в файлах в открытом доступе самой Arduino UNO. Но быстрым поиском по сети я нашел проект Make Your UNO Kit, в котором содержались все нужные мне файлы: принципиальная схема и CAD файлы с размерами платы.

Поначалу принципиальную схему из Make Your UNO Kit я изучал и пытался полностью повторить, но после всего, что делал, скажу, что самая удобная схема — это все же из MiniCore и она полностью совместима. Надо добавить, что принципиальная схема Arduino UNO R3 гораздо сложнее выглядит, чем из Make Your UNO Kit. Что-то интересное не нашел, но мне запомнился один момент — это странное подключение светодиода, который используется через BUILTIN_LED и я его отметил на принципиальной схемы ниже. Кроме как инвертирование сигнала, я не понял, зачем он нужен, можно же просто было на землю завести или нет?


В итоге я сделал также светодиод в своей схеме:

Если говорить коротко, то моя схема отличается от Make Your UNO Kit тем, что там нет разъема питания, все остальное очень похоже, кроме специфики, например, модуля для подключения к USB. А от разъема питания отказался, потому что его практически никогда не использовал, поэтому подумал, что мне он не нужен.
❯ Размеры платы
Отвечаю на вопрос: «Где мне взять размеры платы и плат расширения?».
Но прежде, чем я мог составить эту принципиальную схему, мне нужны были размеры платы. И они очень легко находятся в Make Your UNO Kit, только проблема в том, что они сделаны в Altium Designer, а в открытом доступе конвекторов их в формат например EasyEDA я не нашел. Но самое забавное, что в EasyEDA есть опция импортировать схему из Altium Designer, но нужен ascii формат файлов, а у них был только бинарный. Потом я пробовал импортировать Altium Designer в KiCAD, оно получалось, но как это потом экспортировать в EasyEDA я так и не понял. В общем, ни один способ не работал. В итоге я делать этого не хотел, но «достал» копию Altium Designer, сконвертировал этот бинарный файл в ascii формат, импортировал в EasyEDA и удалил Altium Designer.

На этой плате я подглядел разводку и почти сделал также у себя.

Можете сравнить мою разводку с ихней. Т.к. у меня плата односторонняя, то хорошо укомплектовать компоненты не получилось, у меня вышло в итоге 8 перемычек, они отмечены красным.


❯ USB
Отвечаю на вопрос: «Что делать с программированием по USB?».
Вы могли заметить в левом углу квадрат, отмеченный как U6 — так это модуль преобразования USB в UART. Другими словами, через него происходит питание платы и её программирование через среду Arduino IDE. С ним оказалось больше всего несостыковок. Сначала я хотел использовать чип CH340N, т.к. его нашел на Озон и почти тут же купил, но оказалось, что зря, потому что для работы с Arduino UNO нужен сигнал DTR, а в CH340N его нет. Я почитал, говорят, что не для всех плат этот сигнал обязательный, некоторым микроконтроллера могла и подойти CH340N, но мне не подошла. В итоге нужно смотреть то, где есть DTR сигнал. Можете посмотреть на список разных CH340 чипов ниже:

По нему видно, что нам подходят CH340G, CH340C, CH340B, CH340T, CH340K, CH340X. Я выбрал CH340B потому, что в нем есть внутренний генератор. К слову, еще он есть у CH340C, CH340K, другими словами, не у всех.
Вот такая принципиальная схема модуля у меня получилась:



С этим модулем оказалось еще не все законченно — когда его спаял, он не заработал. Я потратил больше двух часов на решение проблемы, а оказалось, что просто ножки плохо спаяны. Потом, когда я решил делать плату расширения питания, то подумал, что надо добавить диод в CH340B Module по питанию (раз питание может быть теперь из двух мест, то нужна получается какая-то защита) и пришлось все перепаивать. А когда перепаивал, то намучился с USB разъемом. Припаял его, проверил мультиметром, все было хорошо, но когда начал тестировать плату, у меня контакты замкнулись и USB кабель повредился. В итоге перепаял еще раз этот разъем и все уже было без проблем. Вот так, захотел поставить защитный диод, а получилось то, что что-то спалил.
❯ Тесты
Вот такая плата у меня получилась:

Еще была особенность при сборке, это разъемы куда вставляются платы расширения или провода. Между ними, можно заметить есть промежутки, так они не стандартные, т.е. нельзя отрезать длинный разъем, например на 20 дырок, а надо делить на два. В итоге я брал один большой, кусачками кромсал его и гравером шлифовал кончики.
Тесты в итоге прошли удачно. Сначала я попробовал MiniCore в Arduino IDE и он завелся без проблем, надо было только прошить через программатор загрузчик в ATmega328, для чего предусмотрен разъем ISP. После того, как загрузчик был зашит, плату можно было прошивать обычным Upload в Arduino IDE. Чем мне нравится микроконтроллер в DIP корпусе так тем, что я заменил его на ATmega8, прошил, и он тоже заработал. Но самое главное, что когда я выбрал Arduino UNO как плату, она также без проблем заработала.
Теперь можем переходить к платам расширения.
❯ Платы расширения
Платы расширения в Arduino называются «шилд» — это от английского shield. Интересная технология, которая позволяет расширить функционал основной платы за счет других, например, тех которые могут проигрывать музыку или имеют доступ в интернет или с внешней картой памяти. Просто хочу сказать, что плата расширения может быть достаточно полезными и интересными, но на деле я нашел мало интересных и полезных на маркетплейсах. Точнее я нашел не так много этих плат, может быть у нас они не продаются, но это не важно, этих шилдов в природе очень много, можете посмотреть примеры на сайте со списками, например, Arduino Shield List.
Поэтому мне было интересно сделать такую плату расширения самому. Но для начала давайте рассмотрим те, которые я купил, потому что они мне показались занимательными: LCD Keypad Shield, Multi-Functional Shield, — эти названия были напечатаны на самих платах, т.е. по ним можете их найти в сети.
❯ Готовые платы расширения
Готовые платы расширения, это те, которые я купил. С ними все просто: включаешь и они должны работать. Код тоже очень простой: ищешь в интернете готовую библиотеку и пользуешься. Поэтому я кратко по ним пробегусь. Только хочу сказать, что рассмотреть готовые платы расширения очень важно, чтобы проверить правильно ли у меня получилось развести и собрать плату, т.к. я отказался покупать готовую Arduino UNO, чтобы не соблазняться, но согласился протестировать свою плату на готовых платах расширения. Как только проверю, что они заработали правильно, то значит можно приступать к созданию своих плат расширения.
Multi-Functional Shield
Это плата расширения из сборной солянки. Тут есть кнопочки, пищалка, семисегментный индикатор. Занятная штука. Сначала хотел для неё что-то написать, но потом решил, что лучше воспользуюсь готовым кодом из интернета и пойду дальше по плану. Нашел библиотеку MFShield, взял из неё тестовый пример и запустил его на плате, что вы можете видеть на фотографиях.


Скрытый текст
#include <MFShield.h>
MFShield mfs;
void setup ()
{
Serial.begin (9600);
/* Handle buttons */
mfs.onKeyPress ([](uint8_t button) {
mfs.beep(10); // make sound
mfs.setLed (button, !mfs.getLed(button)); // toggle onboard leds
Serial.println ("Button pressed: " + String(button));
});
}
void loop ()
{
/* Display seconds */
mfs.display (millis() / 1000);
mfs.loop();
/* ^ It's important to insert this loop function in the main loop
* else numeric display wont work
*/
}LCD Keypad Shield
Эта плата расширения более специализированная с текстовым экраном и кнопочками. В принципе, было достаточно и первой платы расширения, чтобы понять, что все заработало, а размеры с контактами совпали, но у меня уже была эта плата расширения, поэтому можно и ее проверить.


Скрытый текст
#include <Arduino.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#define BTN_UP 1
#define BTN_DOWN 2
#define BTN_LEFT 3
#define BTN_RIGHT 4
#define BTN_SELECT 5
#define BTN_NONE 10
// определяем, какая кнопка нажата (А0)
int detectButton() {
int keyAnalog = analogRead(A0);
if (keyAnalog < 100) {
// Значение меньше 100 – нажата кнопка right
return BTN_RIGHT;
} else if (keyAnalog < 200) {
// Значение больше 100 (иначе мы бы вошли в предыдущий блок результата сравнения, но меньше 200 – нажата кнопка UP
return BTN_UP;
} else if (keyAnalog < 400) {
// Значение больше 200, но меньше 400 – нажата кнопка DOWN
return BTN_DOWN;
} else if (keyAnalog < 600) {
// Значение больше 400, но меньше 600 – нажата кнопка LEFT
return BTN_LEFT;
} else if (keyAnalog < 800) {
// Значение больше 600, но меньше 800 – нажата кнопка SELECT
return BTN_SELECT;
} else {
// Все остальные значения (до 1023) будут означать, что нажатий не было
return BTN_NONE;
}
}
// очищаем вторую строку
void clearLine(int line){
lcd.setCursor(0, 1);
lcd.print(" ");
}
// функция вывода нажатой кнопки на экран и в Монитор порта
void printDisplay(String message){
Serial.println(message);
lcd.setCursor(0, 1);
lcd.print(message);
delay(500);
clearLine(1);
}
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Button");
}
void loop() {
int button = detectButton();
switch (button) {
case BTN_UP:
printDisplay("UP");
break;
case BTN_DOWN:
printDisplay("DOWN");
break;
case BTN_LEFT:
printDisplay("LEFT");
break;
case BTN_RIGHT:
printDisplay("RIGHT");
break;
case BTN_SELECT:
printDisplay("SELECT");
break;
default:
//printDisplay("Press any key");
break;
}
}❯ Самодельные платы расширения
Теперь, как мне кажется, мы приступаем к самой интересной теме данной статьи — самодельным платам расширения. Они интересны в первую очередь тем, что они являются чем-то уникальным, чего нет в обычной плате, будь это моей самодельной плате (Arduino UNO DIY) или оригинальным платам (правильнее сказать оригинальным клонам, но это не принципиально). Т.е. они по-хорошему должны состоять из логики предметной области, которая в данный момент решается: хотите делать устройство с WiFi — добавляете беспроводную плату расширения и так далее. Второе, чем могут быть интересны платы расширения это тем, что они более универсальны, у кого-то разработчика уже может быть готовая Arduino UNO, но он все же думает о создании своей платы расширения.
Сначала я решил делать одну плату расширения, только для теста, это был ATtiny Shield. Плата расширения для программирования ATtiny85 (и схожих микросхем). Затем я понял, что в моей плате есть один существенный и вопиющий недостаток — не отсутствие разъема питания, а из-за отказа от разъема питания я не заметил как отказался от линии 3.3В, поэтому решил все таки добавить разъем питания и соответственно линию 3.3В. Назвал это Power Shield. А потом я вошел во вкус и решил, что можно сделать ради эксперимента и увеличения сложности самый полезную плату расширения из всех — ESP12F Shield, т.е. плату расширения с WiFi.
ATtiny Shield
Это самая простая плата расширения, которая мне пришла в голову, когда хотел сделать что-то попроще, чтобы понять как все работает. Логика работы очень простая: можно прошивать ATtiny85 с помощью Arduino UNO DIY плюс дополнительная кнопка со светодиодом для тестов.
Это была моя первая плата расширения, поэтому я задавался вопросом как ее лучше сделать. Больше всего меня волновало как крепить разъемы, ведь используется односторонняя плата, поэтому если слой меди находится снизу, то получается сверху не за что крепится. Можно конечно, сделать так, что слой меди находился сверху, тогда можно использовать обычные штырьевые разъемы и припаять на них плату, но это не работает с компонентами для сквозного монтажа, только для поверхностного.
Потом поиском по сети я пытался найти кто как сделал готовые платы расширения и нашел что-то вроде этого:


На картинке с платой расширения, когда слой меди находится снизу, легко видно, что штырьевой разъем надевается сверху и припаивается снизу. Оказывается, простое решение это использовать длинные штырьевые разъемы. Я заказал 15 мм и они подошли ровно-ровно, так что я бы сейчас заказывал бы лучше 17 мм, потому что тогда меньше шансов, что низ платы расширения будет касаться основной платы, а такое может быть!
В итоге у меня получилась вот эта плата:


И она не работала. Не прошивалась. Потому что я просто не увидел как забыл развести линию RESET к контроллеру. Но на самом деле не беда, потому что в какой-то момент, когда искал в сети, то обнаружил, что плату можно уменьшить вдвое! Сделать её гораздо меньше, поэтому сразу же начал делать вторую, исправленную плату.
Вот такая в итоге у меня получилась принципиальная схема:

Конечный результат:


В итоге все очень просто работает. Делаешь из Arduino UNO DIY программатор ISP и прошиваешь ATtiny85, который находится на ATtiny Tiny Shield. Прошивается и светодиод моргает.
Power Shield
С платой расширения питания возникли несколько других сложностей. Первая, в отличие от ATtiny Shield здесь нужен доступ к разъемам у платы снизу, другими словами на плате расширения должны быть тоже штырьевые разъемы-мама. Это, решается просто, в магазинах оказывается уже продаются разъемы предназначенные для плат расширения:

Вторая проблема это то, что теперь в устройстве, собранного из плат расширения могут быть два и более источника питания. Поэтому я принял волевое решение и добавить диод по питанию в CH340B Module, про что написал в разделе выше. В других местах диоды решил не ставить, потому что иначе напряжение с регуляторов напряжения будет ниже заявленного, а это совсем не то, что нужно. Плюс, это решение я подсмотрел в Make Your UNO Kit, а там нет никаких диодов после регуляторов напряжения.
В итоге у меня получилась эта принципиальная схема:

Все бы хорошо, но и эта плата получилась бракованной и проблема была в том, что я поставил не той стороной разъем питания. Т.е. проблема была в разводке. Как только я её собрал и подключил, все у меня заработало. Я даже подключил одновременно USB и питание, ничто не отвалилось и не сгорело.
Со второй попытки у меня получилась эта плата:

В этой плате на самом деле ничего сложного, два регулятора напряжения, один на 5В, другой на 3.3В и диод на вход. Схему подсмотрел в Make Your UNO Kit. Я подумал, раз Make Your UNO Kit подразумевает питание от двух источников и там нет никакой защиты, то не стал её тоже добавлять. Теперь, получается можно сделать бутерброд из Arduino UNO DIY, Power Shield и любой другой платы расширения, которому нужны 3.3В и логика от Arduino UNO DIY. Можно даже обойтись без Arduino UNO DIY.
ESP12F Shield
Теперь наверно самая интересная и полезная плата расширения. Основную идею я подсмотрел у Arduino Wi-Fi Shield using ESP8266. (Правда потом заметил, что перепутал ножки идущие к RX, TX, но т.к. UART используется программный, то оно спокойно разрешилось.) Лишь добавил отдельный регулятор напряжения 3.3В, чтобы можно было не подключать Power Shield. Получившиеся принципиальная схема:

Здесь важно залезть в даташит ESP12F и увидеть такую таблицу:

По которой видно какие примерно должны быть установленны уровни.
Вот такая плата у меня получилась:


Но есть нюанс, что работать придется по UART с помощью AT команд. Их достаточно много и все я не объясню, но у меня получилось без проблем сделать простые запросы по 80-му порту, т.е. по HTTP, а вот по HTTPS ничего не работало. Я долго думал и для себя решил, что если найти нужную прошивку, то запросы по HTTPS должны заработать. Кстати, вот те две кнопки BOOT и RESET как раз нужны для загрузки новой прошивки: нажимаешь BOOT, затем RESET, держишь BOOT и отпускаешь RESET, затем BOOT — микроконтроллер входит в режим загрузки.
Сначала я попробовал последнюю официальную прошивку, но она не заработала. Я не понял почему, но решил искать дальше. И тут наткнулся на репозиторий esp-at-binaries, там была вот такая сноска:

Оказывается, прошивка не заработала, потому что они изменили пины! Нехорошо как-то это, но что поделать, просто кто будет этим заниматься, имейте в виду. Я поставил прошивку из esp-at-binaries, она заработала, но HTTPS нет. Поэтому я стал искать дальше, потому что даже в последней официальной прошивке, та которая у меня не завелась, было написано в руководстве, что поддержка SSL есть. И я нашел репозиторий ESP_ATMod.
Эта прошивка оказалась проблемной, UART плохо определялся, но HTTPS заработал и данные приходили без ошибок. Поэтому я остановился в своих поисках, но правильно было бы переделать плату расширения и добавить входы на новые ножки, чтобы официальная прошивка заработала.
Скрытый текст
#include <SoftwareSerial.h>
#include "credentials.h"
SoftwareSerial ESP(11, 12);
void sendCommand(String command, int timeout) {
ESP.print(command);
ESP.print("\r\n");
long time = millis();
while ((time + timeout) > millis()) {
while (ESP.available()) {
Serial.print((char)ESP.read());
}
}
}
void setup() {
Serial.begin(9600);
Serial.println("Start");
ESP.begin(115200);
ESP.println("AT+UART_CUR=9600,8,1,0,0");
delay(100);
ESP.begin(9600);
delay(100);
sendCommand("AT+CWMODE=1", 1000);
sendCommand("AT+CWJAP=\""+ WIFI_SSID +"\",\""+ WIFI_PASSWORD +"\"", 6000);
sendCommand("AT+CIPMUX=0", 2000);
sendCommand("AT+CIPSTART=\"SSL\",\"m039.ru\",443", 2000);
sendCommand("AT+CIPSEND=64", 2000);
sendCommand("GET /hello-world.txt HTTP/1.1\n"
"Host: m039.ru\n"
"Accept: text/html\n", 7000);
}
void loop() {
}
❯ Выводы после эксплуатации

Все это, конечно, замечательно и весело, но давайте поговорим про то, что в итоге получилось.
Arduino UNO DIY — это по сути урезанная версия оригинальной платы Arduino UNO. Возможно одно существенное преимущество — это наличие USB Type-C разъема, но и такую плату тоже можно найти сейчас в продаже, поэтому спорно. Во всем остальном одни минусы: отсутствие линии 3.3В и разъема питания. Это те выводы, которые можно сделать при беглом осмотре платы, но как по мне есть один существенный минус, который все перекрывает, это нет металлизированных отверстий, из-за чего разъемы для крепления плат расширения могут отвалиться, очень и очень легко. Поэтому один раз будешь долго делать такую плату, а потом она развалится в руках.
А вот с платами расширения никаких проблем и нет, нужна плата расширения под конкретную задачу — делаешь и не важно, кто что подумает, потому что такой до этого момента платы расширения не было. Кроме готовых плат расширения, здесь, конечно, все выводы выше тоже применимы, потому что оно сильно уступает промышленному производству.
Но действительно ли это важно? На самом деле нет, все эти минусы с лихвой окупаются полученным опытом и удовольствием. В крайнем случае, если возникнет желание сделать плату промышленного качества, то можно ее развести заново и заказать, а все основные моменты уже протестированы. При этом, что не мало важно, это скорость прототипирования, сделанные платы вручную не надо ждать две недели или месяцы, она готова в течении дня.
❯ Бонус: Digispark DIY
В моей прошлой статье про программный USB для CH32V003 я упомянул Digispark. Это плата с микроконтроллером ATtiny85, которая может прикидываться USB клавиатурой используя программный USB. Я про неё немного говорил, но на самом деле у меня её нет, она правда стоит не дорого и мне тоже захотелось её у себя иметь, только мне больше хочется её сделать самому, а не покупать. Точнее у меня есть клон Digispark, она ищется как ATtiny85 Development Board, куда можно вставить ATtiny85 в DIP корпусе.

Вначале я хотел сделать её такой же маленькой, поэтому решил использовать SMD компоненты, она получилась небольшой, но все равно в несколько раз больше оригинала, поэтому странная затея, возможно имело смысл стараться сделать её как можно меньше. Но если честно, я не хотел этого, просто хотел сделать такую же плату, которая работала с программным USB.
Плата делается очень и очень просто, потому что по первому запросу в сети находятся готовые схемы, которые очень легко читаются. Например, эта:

В этой схеме основная особенность, это наличие стабилитронов. Есть еще регулятор напряжения, но как и с Arduino UNO DIY я решил, что мне он не нужен.
Еще возможно кто-нибудь мне объяснит почему диод направлен катодом к USB порту, как на схеме? Разве схема не будет работать или разве таким образом USB порт компьютера будет менее защищен? Возможно его надо поставить в противоположную сторону, но точно не знаю, раз это официальная схема. Я хотел задать вопрос на Stack Overflow, но не успел еще этого сделать.
В итоге у меня получилась вот эта принципиальная схема:

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




Работать с ней оказалось очень просто. Устанавливаем ATTinyCore, а он уже устанавливает все нужные драйверы для работы по USB с этой платой. Через ISP разъем программатором зашиваем загрузчик работающий по USB (плата «ATtiny85 (Micronucleous / DigiSpark)»), затем подключаем плату через USB, нажимаем Upload, вытаскиваем плату и вставляем её обратно, надо успеть за 60 секунд, после чего она по USB прошивается. Возможно надо было добавить кнопку RESET или похожую, чтобы упростить этот процесс, но что-то сразу не догадался.
Скрытый текст
#include <EasyHID.h>
void setup() {
HID.begin();
pinMode(1, OUTPUT);
pinMode(0, INPUT_PULLUP);
}
bool buttonState;
void loop() {
bool bs = digitalRead(0) == 1;
if (bs != buttonState) {
buttonState = bs;
if (!bs) {
Keyboard.click(KEY_A);
}
}
HID.tick();
}❯ Заключение

Не могу сказать, что в этой статье рассказывал что-то принципиально новое, это уже очень давно всем известно. Arduino UNO в том виде, в котором я здесь её рассматривал, существует очень давно, но я не пробовал до этого создавать на основе её платы с нуля, причем в чистом виде отладочный платы тоже (с чипами CH340), поэтому мне было интересно это изучить. Надеюсь что мои приключения вам тоже были интересны.
Минутка саморекламы
Если вам интересно то, что я делаю, то можете зайти в мою группу ВК, не удивляйтесь сильно, т.к. она была большей частью посвящена играм, а теперь электронике, но вести мне её сложно, т.к. нет никакой активности. Но если будет какая-то активность, то мне будет смысл это делать, например, освещать промежуточные процессы разработки.
Все схемы и исходники находятся в проекте avr-playground.
Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале ↩
Комментарии (47)

liutas4x4
13.10.2025 14:20Прям вот погладило по ностальгии.
Поясню: лет 12-13 тому назад AutoCAD решил съесть Eagle. А у меня идиосикразия на поглощение любимых полезных всякими микромягкими и иже с ними корелями и адобами. Ни к чему хорошему это ни разу за всю мою жизнь это не приводило. "Надо ехать" (с). Посему надо было пеезжать в KiCAD, на тот момент вроде был V5. Все библиотеки, свои и Sparkfun, было жалко, но "в новой хате мебель уже была": KiCAD как раз был на второй (?) волне и библиотеки были уже вполне. Да и open source, -- накидают. [я и сам стряхнул пыль с FreeCAD и дописал чего-то, вроде пищалки и барреля под 12 Вольт].
И тоже за основу взял готовое, DIY измеритель ёмкости. Плату померял, детали расставил так же. "И давай на ней жениться," то есть трассировать уже в KiCAD. К концу процесса KiCAD стал понятен и приемлем.
Заказал у китайцев [смешно, но проект для них нужен был в Eagle, благо KiCAD с этим справляется] за 20 копеек, получил, спаял. При этом взял более точные резисторы и перемерял конденсаторы перед пайкой, и получил очень хорошую версию, всё поднялось с полтыка. Приятель ей меряет и менять ни на что не собирается, обещая себе сделать корпус на 3Д принтере. На самом деле просто смахивает пыль с платы. Ну как большиство из нас.
Вот, собственно.

m039 Автор
13.10.2025 14:20Интересно, я правда платы сам стал делать только совсем недавно, поэтому ничего этого не застал. Хотя микроконтроллеры стал программировать давно, потом перестал, а сейчас иногда занимаюсь.

liutas4x4
13.10.2025 14:20Я, сейчас, -- по небходимости. Перестала работать фича или чуча в древнем станке CNC -- мы ей обманку на Arduino или на PIC (чаще). И она, дура, довольная мигает лампочками.

PatakinVVV
13.10.2025 14:20Если останетесь на одностороннем текстолите подумайте о заклёпках-втулках для псевдометаллизации. Дёшево и спасает пэды под гребёнками

m039 Автор
13.10.2025 14:20Да, часто думаю об этом, потому что это почти всегда слабое место. В этом проекте и в платах расширения даже и думать не решался их ставить, потому что уж очень много контактов надо было бы вбивать, но по-хорошему, если придется постоянно пользоваться устройством, то без них не обойтись. Или как-то по-другому проблему решать. Просто я пока не сильно эту плату затоскал, как затаскаю, то прям уверен, что все сразу отвалится.

Swordsman
13.10.2025 14:20Подходил к концу 25 год 21 века, а мы всё на 8 битках. ESP32 в разы дешевле и проще в плане дальнейшего развития. Выбы ещё ATiny в работу взяли.
Какие затраты на эту поделку?

xSVPx
13.10.2025 14:20Сегодня собирал схему мигающую тремя адресными светодиодами.
Думаете надо было на esp32 :)?
Жаль, что ни одной тиньки не нашлось в сусеках. Вообще формфактор ардуин внушает мне печаль. Очень большие. Видел как-то раз на авито вариант собранный на смд с ноготь величиной, вся разводка под чипами и паяться надо к падам на обратной стороне, но ссылка куда-то делась, а у китайцев не нашел.

m039 Автор
13.10.2025 14:20В статье я писал, что использую в основном CH32V003 (это и видно по прошлым моим статьям), а Arduino пробую для развлечения (даже не решил их покупать, а сделал сам), поэтому и затраты не считал, но получилось не много, то, что видно на фотографиях. Самое дорогое, наверно, это микроконтроллер, я брал ATmega328PU за 150 рублей где-то, дальше идет чип CH340B, он может максимум 50 рублей, потом текстолит где-то 40 рублей, т.к. плата большая, остальное уже меньше. Ради примера, на Озоне видел самую дешевую Arduino UNO R3 и она стоила 300 рублей, микроконтроллер в DIP корпусе, как у меня, так вот моя плата выходила в полтора-два раза больше, а с учетом попыток и того больше.
К тому же в статье есть еще ESP12F, поэтому ваше утверждение о 8-битных микроконтроллеров понятно, но в плане дальнейшего развития все хорошо.

LAutour
13.10.2025 14:20ESP32 в разы дешевле и проще в плане дальнейшего развития
У ESP32 есть свои недостатки, из-за которых она не везде годится, даже по сравнению с простыми 8-битками.

SkylineXXX
13.10.2025 14:20Esp-idf в Eclipse и в VSCode постоянно хаотически выдает всевозможные ошибки. Даже hello-world не собирает. В интернете люди колдуют перебирая версии idf и питоновских пакетов.
Иногда чудом можно уговорить "Это" заработать. После десятилетий работы с stm, я даже не мог представить, что такой глюкодром вообще возможен. Однако китаец сумел его устроить

xSVPx
13.10.2025 14:20Там фреймворк фреймворком погоняет. Даже для хелло ворд надо собрать гигабайты кода(ну ок, возможно сотни мегабайт). Дожили называется....

LAutour
13.10.2025 14:20Большой объем компилируемого кода для хелло-ворда - это родная проблема с\с++ с упрощенным автоматическим выбором файлов для компиляции и линковки (инклюды вместо нормальных модулей никак не указывают откуда именнно нужно цеплять внешние функции). А базовых библиотек в ESP-IDF - много.

SkylineXXX
13.10.2025 14:20Даже не ясно, что там происходит....Хрупкая система сборки на python, которая ломается, если отвернуться и не записать все версии пакетов. Прямо надо записывать, что в питоне ставил.

SkylineXXX
13.10.2025 14:20Похоже на АД с лапшой батников древней Windows Embedded CE 5.0/6.0
Слава Богу это умерло. Шар утекал от этого.

SkylineXXX
13.10.2025 14:20Господи!!! Десятки раз снося esp-idf. Колупаясь в консоли и udev.rules.
Читая документацию idf-esp(вообще не помогает, только путает), наконец-то собралось в Eclipse:
#include <stdio.h>
#include <stdbool.h>
#include <unistd.h>
void app_main(void)
{
while (true) {
printf("Hello from app_main! Im do it\n");
sleep(1);
}
}
Если бы я не работал с EMBEDDED 20 лет, то сбрендил бы.
Зачем-то нужно было прыгать из user в root и пускать idf.py по всякому.
Теперь тратить часы на запись того, что делал и архивировать всё.
И к этой помойке я шел 20 лет.
Просто пытаюсь немного ковырнуть плату ESP32-S3-A7670E-4G.
В интеренете только плачь, что ни кто не может ёё ковырнуть. И всего 3 поста, поскольку
все кто с ней работали охренели и бросили.
Документации ноль. Только понты от китайцев.
Уважаемый

"Подходил к концу 25 год 21 века, а мы всё на 8 битках. ESP32 в разы дешевле и проще в плане дальнейшего развития."
Вы пробовали похожий девайс?
SkylineXXX
13.10.2025 14:20Вернее именно этот.
Похожие я поднимал.
SkylineXXX
13.10.2025 14:20И огромная просьба...не на ардуино, который до сих пор Notepad, а на isp-idf.

SkylineXXX
13.10.2025 14:20И какой же кайф после этого stm32 F4, F7, H7, которые купить проблема нынче.
Даже китайский клон GD32F103 от GigaDevice и то более опрятен, хоть и слаб, но документирован, поскольку слизан с ST (как сумели косоглазые)
SkylineXXX
13.10.2025 14:20Если ткнете меня мордой в примеры кода на ESP32-S3-A7670E-4G, я заткнусь . Но я не вижу их в тырнете.

CrashLogger
13.10.2025 14:20Восьмибитки просты и понятны, в них можно разобраться за вечер и программировать хоть на Си, хоть на ассемблере. При этом контролируя каждый такт процессора и каждый бит памяти. ESP32 - это закрытый китайский черный ящик, у которого внутри какая-то RTOS, живущая сама по себе. Чтобы собрать простейший hello world, нужно качать гигабайты их SDK, разбираться с их IDE, нет, спасибо.

Matshishkapeu
13.10.2025 14:20Такой теплый ламповый постапокалиптический дизайн в духе фоллаута. Из найденного на свалке и почти не радиоактивного текстолита, станком гравером, питаемым полуживой солнечной панелькой вытачивают плату, чтоб починить какой-нибудь насос. Атмосферно.

m039 Автор
13.10.2025 14:20Хорошая идея, в ретрофутуристическом стиле эти платы должны хорошо смотреться.

LAutour
13.10.2025 14:20По примененным компонентам: для своих плат, особенно самодельных (ЛУТ) предпочитаю вместо выводных компонентов ставить SMD: меньше сверлить (если вручную), SMD обычно стоит заметно дешевле выводных, большая вариативность доступных в продаже номиналов, проще паять. Еще короткие перемычки можно из нулевых резисторов делать.

m039 Автор
13.10.2025 14:20Согласен с вами, добавлю только, что у компонентов сковозного монтажа есть один плюс, их проще развести на односторонней плате (правда место занимают много), остальное уже надо смотреть по месту, например, электролетические конденсаторы дешевле сквозного монтажа, а не поверхностного.

Moog_Prodigy
13.10.2025 14:20Зато резисторы - нулевки вместо перемычек паять потом одно удовольствие. Ну и плата как была односторонней, так ей и останется. Если частоты конечно позволяют.

Radish
13.10.2025 14:20Светодиод подключен через ключ чтобы не занимать ногу порта. Полевик с изолированным затвором практически не влияет на этот пин и его можно использовать с другими целями, отличными от зажигания лампочки

m039 Автор
13.10.2025 14:20Спасибо, рад, что смог получить ответ здесь, в комментариях, а то ломал голову. Потому, что смотрел в схему Arduino Nano и там он подключен напрямую, вот и запутался.

KivApple
13.10.2025 14:20На официальной плате Arduino Uno много штук "nice to have", которые повышают универсальность схемы во всяких граничных случаях. Они в целом опциональны, китайцы в своих клонах их невозбранно выкидывают для удешевления.
По факту для создания Arduino-совместимой платы достаточно самой atmega, кварца на 16 МГц, пары конденсаторов 22пФ к нему, керамического и электролитического конденсаторов по питанию, резистора подтяжки RESET и как-то приделать USB-UART (либо на саму плату, либо вывести на пины возможность подключить внешний, в обоих случаях не забывая про DTR).
Для полной совместимости с Uno надо ещё светодиод на D13 и линейный регулятор напряжения для возможности подключения внешнего источника питания.
Компоненты ставятся по более-менее типовым схемам из даташита. Можно вообще не видеть схему самой ардуины, достаточно ТЗ "запускаем atmega328 на 16 МГц + USB uart с dtr на reset atmega + светодиод на pb6 + опциональное внешнее питание через линейный стабилизатор".
Всё остальное вообще по вкусу и можно навешивать до бесконечности - предохранитель по питанию (приятно, но 99% портов USB имеют встроенный ограничитель тока), светодиод через транзистор (который уберёт штраф в пару миллиампер к нагрузочной способности PB6, что сыграет роль лишь при попытке извлечь максимум из этого пина) и т. п. Это больше рюшечки.

m039 Автор
13.10.2025 14:20Получилось так, что минимальную обвязку, которую вы описали, часто находил в сети, и с ней все стало понятно, а вот про рюшечки никто нигде не пишет, а у меня как раз больше вопросов про них, т.к. не понимаю зачем так светодиод ставить или диод, поэтому понадеялся, что хоть тут спрошу, чтобы разобраться. Да и интересно узнать какие-то новые применения в схемах. Я вот в этот раз диоды понаставил, а понимаю слабо как лучше было, ведь и без них все работает)

j_aleks
13.10.2025 14:20вот до чего доводит "конский ценник" у наших производителей пробников плат...

PEMOK
13.10.2025 14:20Все хорошо, осталось освоить 2х стороннюю фрезеровку и покрытия для плат. А потом поймёте что лучше в Китае заказать)

m039 Автор
13.10.2025 14:20Хаха, точно сказано) Я как раз хочу попробовать делать двухстороннюю плату, а про маску пока еще думаю. И, правда, каждый раз про себя думаю, что заказал бы плату в Китае, проблем бы не было. Поэтому у меня план простой, прототипирую на фрезерном станке, а когда станет необходимо, то буду заказывать, но пока дальше прототипов еще не ушло.

PEMOK
13.10.2025 14:20Все правильно делаете, я прототипы сначала фрезерую отлаживаю, а потом уже в Китай, сейчас хочу сразу со сборкой заказать, уже и паять надоело)

KivApple
13.10.2025 14:20У Китая минус, что ждать пока изготовят и привезут (никак не меньше пары недель), в то время как сам плату можешь сделать за один вечер. Плюс у тех китайцев кого я знаю, минимальный обьем партии хотя бы десяток штук.
То есть для прототипирования самоделка удобнее. А заказывать уже финальную версию или если хочется что-то сложное типа многослойной платы.

Moog_Prodigy
13.10.2025 14:20У Китая минус еще в том, что хотя между нашими странами вроде никаких заметных терок нет, но многие китайские сервисы изготовления плат поотваливались. Тупо даже оплатить нельзя. Приходится через посредников, иногда аж через трех. Стоит ли говорить, что хоть и раньше заказ плат в Китае было долгой и непростой затеей, а сейчас так и вообще стало уровня "nightmare". В РФ тоже делают платы, но долго, дорого и еще не факт что нафиг не пошлют по причине "потому что вы не юрлицо и вообще у нас тут заказами на 10 лет завалено".

y_mur
13.10.2025 14:20Свой прототип лучше китайского тем что не надо ждать. И ведь после первой сборки 99% что захочется сделать улучшенную версию, а при заказе это опять ожидание + выкинутые платы, потому что при заказе по одной не делают.
Я сначала подумал что односторонний вариант выбран чтобы иметь чистую сторону с "шелкографией". Двухсторонние по трудозатратам практически такие же как односторонние, поэтому я никогда с односторонними не связывался.

Prokop1977
13.10.2025 14:20Хвала энтузиастам и "самоделкиным" :) Дмитрий, а что за фрезерный станок? Он специальный для плат? И ещё... У меня давно лежат несколько Аttiny (8 ног) и несколько атмег разного калибра (не сказать что маленькие), если не все, то почти все для поверхностного монтажа, готов отдать безвозвмездно (т.е. даром:)), если Вы от Мск не далеко...

m039 Автор
13.10.2025 14:20Спасибо большое, но лучше не стоит, а то у меня есть свои атмеги и аттини (набрал уже), а вот проектов, где их использовать еще нет и будет наверно их не много :)
Станок самый обычный, CNC 3018 Pro, его еще называют народным, наверно потому что других станков такого типа практически нет. Это любительский или хоббийный станок с рабочей областью 30 на 18 см, годится фрезеровать что-то очень простое, поэтому идеально подходит для печатных плат, хоть и у меня прошло где-то месяц, как научился на нем их ферезеровать приемлемого качества (но мне пришлось контроллер заменить, иначе все плохо делал). Я сначала взял его, чтобы попробовать какого это, а потом увлекся, сейчас бы брал что-то немного посолиднее, например CNC 3018 Pro MAX, потому что там вроде люфтов нет, но в целом не жалею, на нем уже многому научился.

webself
13.10.2025 14:20Классная статья. Надеюсь добраться до экспериментов с платами на лазере ) Вроде как еще проще должно оказаться.
BoriskovKB
Псевдо-шелкография очень классно получилась. Какая толщина линии ?
m039 Автор
Где-то 0.2-0.3 мм, не меньше. Если делать меньше, то оно будет все сливаться, возможно из-за того, что утюгом когда прижимаю, то все мажется.
LinkToOS
Сначала показалось что надписи тоже фрезеровкой выполнены, с последующей затиркой краской.
m039 Автор
Интересная мысль, надо попробовать, можно будет белой или другой краской покрасить. Плюс возможно будет более стойкая и точность лучше.
LAutour
В этом отношении ламинатор гораздо удобнее.
m039 Автор
Не добрался до него еще, но по-хорошему надо попробовать. Но с утюгом я пока намучался, по несколько раз делал для этого проекта, пока не разобрался как лучше.
Swordsman
В моей молодости это называли ЛУТ.