Программаторы для прошивки микроконтроллеров а также микросхем памяти
Здравствуйте! В этом видео Вы можете узнать о программаторах, с помощью которых можно прошить микроконтроллер разных производителей, а также микросхемы памяти. А также об адаптерах переходниках для разных типов микросхем.
Управление шаговым двигателем на К1986ВЕ92QI
Доброго дня. Сразу говорю, я начинающий. Помогите, нужна помощь как можно скорее, 4 дня времени. Стоит задача реализовать управление шаговым двигателем без использования готовых драйверов, только лишь на наших отечественных компонентах. Всем будет управлять микроконтроллер К1986ВЕ92QI (отечественный аналог STM32). Двигатель АD-200-31.Нужно реализовать дробление шага на 8 микрошагов и чтобы ток, подаваемый на обмотки ШД, менялся ступенчато в виде синусоиды от 0 до 2.8 А (фото приложил), при этом напряжение питания обмоток оставалось стабильным 24В и происходила вовремя переполюсовка посредством управления ключами Н-моста. Управляться это должно при помощи двух Н-мостов (фото приложил). Ступенчатое изменение тока по синусоиде, скорее всего, должно управляться при помощи компараторов (но это не точно).
Необходимо:
1) Составить схему подключения всех элементов к микроконтроллеру.
2) Составить программу управления шаговым двигателем на языке С.
3) Реализовать включение реверса двигателя и управление системой по интерфейсу RS-422.
4) Сделать возможность выбора скорости вращения ротора со скоростями 0.25, 0.5, 1, 2, 4, 8, 10, 20 град/сек.
Если надо, мог скинуть модель схемы в протеусе на atmega128 и кодом программы.
Плата разработчика LILYGO® TTGO T-Display ESP32 Development Board WiFi и Bluetooth модуль с дисплеем
Плата разработчика LILYGO® TTGO T-Display
Очень удобный модуль разработчика. На основе микроконтроллера esp32 с дисплеем, а также со многими дополнительными модулями. Как замена популярных плат Arduino.
Для вас новинка:
Это плата позволяет очень быстро собрать какое-то конечное устройство. Особенно если оно у вас было реализовано на модуле Arduino и вы решили это переделать на более мощную и новую платформу.
Модуль TTGO T-Display ESP32 WiFi Bluetooth с контроллером ESP32, цветным дисплеем и схемой зарядки и питания от литиевого аккумулятора. Позволяет быстро собрать макет устройства сбора, отображения и обработки информации с датчиков. Использование контроллера ESP32 и схемы зарядки позволит собрать автономные и портативные устройства для которых важны быстродействие, малые размеры и малое потребление тока.
Характеристики:
Чипсет: ESPRESSIF-ESP32 240MHz Xtensa® двухядерный 32-бит LX6 микропроцессор
Память программ: QSPI flash 16МБ
Оперативная память:520 КБ SRAM
Кнопки: Сброс
Конвертер USB в TTL: CH9102
Интерфейсы: UART, SPI, SDIO, I2C, LED PWM, TV PWM, I2S, IRGPIO,ADC, интерфейс емкостного экрана, DACLNA предусилитель
Дисплей: IPS ST7789V 1.14 дюйма
Рабочее напряжение: 2.7В — 4.2В
Рабочий ток: примерно 60мА
Ток в спящем режиме: 120мкА
Диапазон рабочих температур: -40 ~ +85 °C
Размеры: 51.52 x 25.04 x 8.54мм
Питание модуля:
Источник питания: USB 5В/1А
Ток заряда аккумулятора: 500мА
Аккумулятор: 3.7В литиевый с JST разъёмом
Разъём питания: 2х контактный шаг 1.25мм
USB разъём: Type-C
Wi-Fi характеристики:
Стандарт: FCC/CE-RED/IC/TELEC/KCC/SRRC/NCC
Протоколы: 802.11 b/g/n (802.11n, скорость до 150Mbps) A-MPDU и A-MSDU полимеризация 0.4мкс
Частотный диапазон: 2.4ГГц ~ 2.5ГГц (2400МГц — 2483.5МГц)
Выходная мощность передатчика: 22dBm
Расстояние устойчивой связи: 300м
Bluetooth характеристики:
Протокол: Поддерживается bluetooth V4.2BR/EDR и BLE стандарт
Чувствительность приемника: -97dBm NZIF Class-1, Cl ass-2 & Class-3 emitter AFH
Характеристики контроллера и интегрированных модулей
Характеристики встроенного дисплея и ещё некоторые доп. параметры
На борту контроллера встроен цветной LCD дисплей
Возможности по питанию
Плата имеет возможность использовать в качестве источника питания литиевой аккумулятор. Также она имеет контроллер заряда этих аккумуляторов.
Распиновка МОДУЛЯ
Расположение внешних выводов модуля микроконтроллера.
Многие выводы поддерживают различные функции.
Габаритные РАЗМЕРЫ
Габаритные размеры платы модуля а также расстояние между выводами
Ссылки: Статья с САЙТА : http://schip.com.ua/plata-razrabotchika-lilygo-ttgo-display/
Комплект КИТ -Микроконтроллер ESP32 и Модуль камеры 2MP с режимом ночного видения
Комплект КИТ -Контроллер ESP32 CAM 2,4 ГГц WiFi Bluetooth 8 МБ PSRAM OV2640 Модуль камеры
Кто интересуется микроконтроллерами Arduino, ESP и им подобными.
Для вас новинка:
Модуль ESP32-CAM-MB представляет собой небольшой модуль Кит. Микроконтроллер и камера размером .
Этот модуль может работать независимо. Совершенно новая плата разработки + WiFi + Bluetooth основана на конструкции ESP32, использует встроенные антенны на печатной плате.
Оснащена двухъядерным высокопроизводительным 32-разрядным процессорам LX6, использует 7-ступенчатую конвейерную структуру и возможность регулировки частоты — составляет от 80 МГц до 240 МГц.
Сверхнизкое энергопотребление, ток глубокого сна всего 6 мА.
HK-ESP32-CAM-MB использует интерфейс micro USB, который удобен и надежен в режиме подключения, который удобен и подходит для различных аппаратных терминалов IoT.
Распиновка МОДУЛЯ
Этот модуль можно использовать независимо от камеры как полноценный микроконтроллер ESP
Комплектация
В этом комплекте Кит могут на выбор поставляться различные типы камер.
Но они различаются не только внешним видом но и шлейфом подключения а также углом Обзора:
Основные параметры производительности
1 Двухъядерный процессор можно использовать в различных режимах.
2 Основная частота до 240 МГц, а вычислительная мощность до 600 dmips.
3 Встроенная SRAM 520 КБ, внешняя PSRAM 8 МБ
4 Поддержка UART/SPI/I2C/PWM/ADC/DAC и других интерфейсов
5 Поддержка вспышки OV70 и OV2640
6 Поддержка загрузки изображения по Wi-Fi
7 Поддержка TF-карты
8 Поддержка нескольких режимов сна.
9 Встроенный Lwip и FreeRTOS
10 Поддержка режима работы STA/AP/STA+AP
11 Поддержка интеллектуальной конфигурации/конфигурации сети с одним ключом AirKiss
12 Поддержка вторичного развития
* * * * * * Дополнительно -Сценарий приложения
1 Передача изображения домашнего смарт-устройства
2 Для беспроводного мониторинга
3 Умное сельское хозяйство
4 Беспроводная идентификация 4QR
5 беспроводной сигнал системы позиционирования
6 и другие IoT-приложения
Образцы фотографий с камеры и камерой
Статья с сайта http://schip.com.ua/kit-kontroller-esp32-i-kamery-2mp/
Аналогово-ламповые штуки? Есть у меня их
Вижу тут поток пошел постов с приемниками и часами с ламповыми индикаторами.
Отмечусь и я.
Аналоговый регулятор громкости и выбора источника звука из начала 00х
Городился для усилителя Одисей-100У. Вот он на фото. Фото не мое. В усилителе ДУ не было изначально чем сильно напрягало. Делать какое-то электронное управление громкостью не хотелось т.к. везде очень большие искажения.
Это вам на ардуины с Сями и загрузчиками. Только хардкор. Ассемблер и УФ ПЗУ.
Шаговый электродвигатель от 3х фазного электросчетчика. Шестерни от него же.
Декодирование сигналов ИК управления аппаратное на К1506ХЛ2 с выдачей чистой команды в последовательном коде в процессор. Герконы на соплях временно т.к. программа не умела на тот момент считать до крайних положений.
До готового устройства контроллер не дожил совсем чуть чуть: квартиру обнесли и уперли усилитель и все остальное оставив винил и колонки.
И да, дурная голова рукам покоя не дает
Как GhatGPT умеет общаться с микроконтроллерами
И меня не обошло сие новомодное поветрие. Нашел чат в телеграме с доступом к ChatGPT и стал думать: а что бы такое его спросить? Давайте сначала теста ради что-нибудь простенькое:
Потрясающе! Но может ли оно объяснить, что там в коде за что отвечает?
Обалдеть. Оно почти понимает. А вот интересно, оно умеет только стандартный Си?
Однако. Оно умеет под STM32, причем самым пионерским ардуиновским способом - считая такты процессора. Но, тем не менее, под SPL. Умеет ли оно использовать таймер?
Так, и что мы видим? Мы видим, что инициализировать таймер оно умеет. И с правильными значениями. Но в процедуре прерывания оно не использует! И вместо этого вводит дополнительную процедуру, считающую такты процессора.
Таймер же оно использует, чтобы сделать задержку в 1 секунду в главном цикле! Напоминает известный анекдот: как вскипятить пустой чайник? налить воду и поставить на огонь. а если в чайнике уже есть вода? Вылить и тем самым свести условия задачи к предыдущему :) Возможно, робот неправильно меня понял :)
Охренеть. Во-первых, используется совсем другой метод - через флаг, устанавливаемый в прерывании. В самом прерывании оно не захотело вставлять команду переключения выхода. Во-вторых, все-таки необходимо было конкретизировать.
Вердикт - человек пока что пишет программы под STM32 лучше этой штуки. Но эта штука пишет уже лучше ардуиновского пионера. Где-то и такой подход сойдет.
Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера
К сожалению, в наше время многие старые, но весьма неплохие по характеристикам гаджеты отправляются напрямую в помойку, и их владельцы не подозревают, что им можно найти применение. Сервер, мультимедийная-станция, да даже просто как TV-приставка — люди в упор не замечают сфер, где старенький планшет мог бы быть полезен. Но как быть, если посвящаешь жизнь портативным гаджетам, кодингу и копанию в железе? Правильно: сделать довольно мощную игровую консоль из старого планшета самому! Сегодня вам расскажу, как я сделал свою портативную приставку из планшета с нерабочим тачскрином, Raspberry Pi Pico и 8 кнопок! За рабочим результатом прячется несколько дней работы: поиск UART на плате, разработка контроллера геймпада на базе RPi Pico, написание приложения-сервиса, которое слушает события и отправляет их в подсистему ввода Linux в обход Android. Интересно? Тогда жду вас под катом!
❯ Мотивация
Прошло уже практически 10 лет с того момента, как у меня появилась моя первая портативная консоль. Несмотря на то, что я был заядлым ПК-игроком, я уже успел посмотреть на PS3 и PSP, но денег на их покупку у меня особо не было, да и к тому времени уже был в наличии Android-планшет. Но к моему 13-летию в 2014 году, когда я ходил и выбирал себе будущий девайс на день рождения, отец и мама решили подарить мне мою первую портативную консоль. Изначально, я уговаривал её купить мне целых два девайса, но бюджет был ограничен 4.000 рублей, а я хотел взять смартфон Fly IQ239 и консоль JXD S601 одновременно:
Однако, увидев здоровую 7-дюймовую консоль в магазине TREC (думаю, жители южной части РФ помнят такой), мама уговорила меня взять именно её, мотивируя это «ну и чего ты будешь тыкаться в этот мелкий экран? Возьми большую». После покупки гаджета, я был доволен: играл какие-то игрушки с ретро-платформ, устанавливал игры на Android, сидел в ВК через Kate Mobile. Что еще нужно было школяру? Однако, планшет прожил у меня недолго: с очередного лага я психанул и ударил по нему кулачком, унеся на тот свет и дисплей и тачскрин. Так консолька и пролежала в подвале около 8 лет. Впрочем, мне продолжали импонировать подобные устройства и в прошлом году я купил и написал про несколько подобных девайсов.
Несколько месяцев назад, мой читатель Кирилл Севостьянов с Хабра прислал мне HTC HD2 в качестве донора и планшет Prestigio PMP7170B3G, который был рабочим, но… у него отказал тачскрин. Я всё думал, чего бы с ним сделать и решил реализовать игровую консольку своими руками из подручных средств. Идея крутилась в голове довольно давно, но реализовал я её только сейчас.
❯ Что нам нужно сделать?
Итак, что должно быть у портативной консоли? Чипсет, дисплей, звук, ОС — это всё нам уже предоставляет планшет. Нам остаётся лишь сделать свой геймпад. Давайте подумаем, что нам будет нужно для того, чтобы его сделать и передавать от него события на планшет:
Контроллер для геймпада: тут нам подойдет практически любой микроконтроллер, который работает от 3.3в. Выбор большой: Arduino Pro Mini 3.3v, ESP32, RPi Pico. Я остановился на последнем: недавно я взял себе две штучки «пощупать» их — и они мне очень понравились!
Физический интерфейс: с планшетом нужно как-то общаться. У нас есть три варианта: USB (не факт, что поддержка преобразователей включена в ядре), UART и SPI/I2C на пятачках тачскрина (потребуют написания драйвера т. к. в android-устройствах нет прямого доступа к SPI/I2C из userland'а). Я остановился на UART: его легко найти на большинстве китайских планшетов, а если не получилось — то на помощь может прийти схема платы.
Программная реализация: как это будет работать? Я решил реализовать геймпад в виде сервиса на Android, который слушает состояния кнопок с UART и «инжектит» события напрямую в драйвер ввода. Таким образом, поддержка нашего геймпада появляется даже в самой системе — можно управлять менюшкой или приложениями как с клавиатуры!
С планом определились, пора начать с программной части: сначала нам обязательно понадобится ROOT-доступ. Его получение на разных девайсах отличается — на prestigio уже был порт CWM и я просто поставил SuperSU. Без ROOT доступа мы не сможем использовать UART!
Теперь нам нужно найти пятачки UART на плате. Разведен он не везде, но в случае устройств на MediaTek — почти всегда, ещё и пятачки подписаны. На моём планшете он нашёлся сразу: был между двух металлических экранов и соответствовал 4-ому каналу UART. Получить к нему доступ можно в /dev/ttyMT3. Я использую ESP32 в качестве UART преобразователя: подпаиваемся к RX/TX, запускаем putty и заходим в adb shell. Определяем бодрейт (скорость) нашего UART порта — на MediaTek он обычно равен 921600, на других чипсетах — 115200. Пытаемся что-то вывести и хоба — мы уже можем «поболтать» с планшетом!
❯ Приложение-сервис
Итак, у нас уже есть доступ к UART и мы можем общаться с планшетом из внешнего мира. Но получить события с кнопок пол дела, нужно их ещё и послать в систему. Для этого есть целых три способа:
InputManager.injectInputEvent — именно этим методом пользуется команда input, которую вы можете использовать через adb. Но увы, он работает только при наличие разрешения INJECT_EVENTS, который доступен только системным приложениям — находятся они в /system/app и подписаны тем же сертификатом, что и остальная прошивка.
Модуль uinput дает возможность создать виртуальное устройство ввода и посылать события из userland'а — т. е. из прикладного приложения. У моего планшета было устройство /dev/uinput, но lsmod показывал, что сам модуль не загружен. Так что отметаем — он есть не везде.
Прямой инжект событий в character устройство — весьма грязный хак, который позволяет инжектить события, не притворяясь системным приложением, но имеет некоторые ограничения. Именно его я и выбрал и о ограничениях ниже.
Сначала нам нужно узнать, какие кнопки поддерживают загруженные устройства ввода в системе. Для этого используем команду getevent -li. Там есть разные устройства ввода, в том числе и тачскрин (если вам нужно симулировать нажатия на экран), мне же подошёл драйвер физических кнопок mtk-kpd. Он занимается обработкой кнопок громкости, включения и т. п. Тут важно обратить внимание на то, что если попытаться послать кнопку, которое устройство не реализует (например пробел), то ничего не произойдет:
Инжект событий я писал на C, т. к. это требовало прямой записи input_event, а в Java прокинул его через Jni. Концепция простая: открываем устройство /dev/input/event2 и посылаем в него события ввода и синхронизации (это обязательно!), которые затем Android читает и обрабатывает:
#include <linux/uinput.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <android/log.h>
#include <jni.h>
int uinput;
extern "C" JNIEXPORT void JNICALL Java_com_monobogdan_inputservicebridge_InputNative_init(JNIEnv *env, jclass clazz) {
uinput = open("/dev/input/event2", O_WRONLY);
__android_log_print(ANDROID_LOG_DEBUG , "Test", uinput >= 0 ? "Open event OK" : "Failed to open event"); }
void emit(int fd, int type, int code, int val) {
struct input_event ie; ie.type = type;
ie.code = code; ie.value = val;
ie.time.tv_sec = 0;
ie.time.tv_usec = 0;
write(fd, &ie, sizeof(ie)); }
extern "C" JNIEXPORT void JNICALL Java_com_monobogdan_inputservicebridge_InputNative_sendKeyEvent(JNIEnv *env, jclass clazz, jint key_code, jboolean pressed) {
__android_log_print(ANDROID_LOG_DEBUG , "Test", "Send");
emit(uinput, EV_KEY, key_code, (bool)pressed ? 1 : 0);
emit(uinput, EV_SYN, SYN_REPORT, 0);
}
Основной обработкой занимается сервис, который я реализовал в отдельном потоке: он слушает события с UART и посылает соответствующие изменения состояния через sendKeyEvent. На вход приходят простые сообщения вида:
U L где U/D — нажато, не нажато, а L — однобайтовый идентификатор кнопки. В случае L — это влево, R — вправо и т. п. Вся доступная раскладка хранится в словаре. Причём само чтение из UART реализовано костылем с чтением «чужого» stdout, т. к. android-приложения не умеют сами по себе работать с root правами. В теории, это могло дать неприятный оверхед, но на практике никакого серьезного инпут лага это не создает. Не забываем сделать устройство event записываемым — ставим ему права 777:
package com.monobogdan.inputservicebridge;
public class InputListener extends Service {
private static final int tty = 3;
private InputManager iManager;
private Map<Character, Integer> keyMap;
private Method injectMethod;
private Process runAsRoot(String cmd)
{
try {
return Runtime.getRuntime().exec(new String[] { "su", "-c", cmd });
}
catch (IOException e)
{
e.printStackTrace();
return null;
}
}
public void onCreate() {
super.onCreate();
// According to linux key map (input-event-codes.h)
keyMap = new HashMap<>();
keyMap.put('U', 103);
keyMap.put('D', 108);
keyMap.put('L', 105);
keyMap.put('R', 106);
keyMap.put('E', 115);
keyMap.put('B', 158);
keyMap.put('A', 232);
keyMap.put('C', 212);
InputNative.init();
try {
runAsRoot("chmod 777 /dev/input/event2").waitFor();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
Executors.newSingleThreadExecutor().execute(new Runnable() {
public void run() {
Process proc = runAsRoot("cat /dev/ttyMT" + tty);
BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
while(true)
{
try {
String line = reader.readLine();
if(line != null && line.length() > 0) {
Log.i("Hi", "run: " + line);
boolean pressing = line.charAt(0) == 'D';
int keyCode = keyMap.get(line.charAt(2));
Log.i("TAG", "run: " + keyCode);
InputNative.sendKeyEvent(keyCode, pressing);
}
}
catch(IOException e)
{
e.printStackTrace();
}
/*try {
Thread.sleep(1000 / 30);
} catch (InterruptedException e) {
e.printStackTrace();
}*/
}
}
});
}
public IBinder onBind(Intent intent) {
return null;
}
}
Таким образом, если мы отправляем с ПК «D L» — система считает, что мы зажали стрелку влево, а U L — считает что мы отпустили. Но если mtk-kpd поддерживает стрелки и еще некоторые действия без каких либо проблем, то enter в список обрабатываемых кнопок не входит: придется мудрить! И тут нам приходит на помощь механизм трансляции кодов кнопок в действия: они хранятся в специальных файлах .kl в /system/usr/keylayout/. Я назначил DPAD_CENTER на… кнопку регулировки громкости звука! Ну, а почему бы и нет. :) Таким образом можно переназначить уже имеющиеся кнопки громкости на, например, start/select.
❯ Геймпад
После того, как сервис был готов и отлажен, нужно было реализовать хардварную часть проекта — сам геймпад. В качестве контроллера я, как уже говорил, выбрал Raspberry Pi Pico на базе МК RP2040 — бодреньком контроллере с двумя ARM Cortex-M0 ядрами. Стоит копейки, а в отличии от ESP'шек, его SDK не такое перегруженное и выглядит более приближенным к bare-metal.
На данный момент, я решил развести все кнопки на бредборде — макетной плате без пайки, т. к. макеток для пайки у меня под рукой не было. Сделал примитивный геймпад:
Развел на соответствующие GPIO:
И написал примитивную прошивку, которая отслеживает состояние кнопок. В прошивке точно так же есть словарь, задающий ассоциацию между физическими пинами и «виртуальными» кнопками. При нажатии или отжатии кнопки, программа изменяет стейт и отсылает новое состояние планшету.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "pico/stdlib.h"
#include "pico/time.h"
#include "hardware/uart.h"
struct keyMap
{
int gpio;
char key;
bool pressed;
int lastTick;
};
keyMap keys[] = {
{
15,
'L',
false,
0
},
{
14,
'U',
false,
0
},
{
13,
'D',
false,
0
},
{
12,
'R',
false,
0
},
{
11,
'E',
false,
0
},
{
10,
'B',
false,
0
},
{
20,
'A',
false,
0
},
{
21,
'C',
false,
0
}
};
#define KEY_NUM 8
int main() {
stdio_init_all();
uart_init(uart0, 921600);
gpio_set_function(PICO_DEFAULT_UART_TX_PIN, GPIO_FUNC_UART);
gpio_set_function(PICO_DEFAULT_UART_RX_PIN, GPIO_FUNC_UART);
sleep_ms(1000); // Allow serial monitor to settle
for(int i = 0; i < KEY_NUM; i++)
{
gpio_init(keys[i].gpio);
gpio_set_dir(keys[i].gpio, false);
gpio_pull_up(keys[i].gpio);
}
while(true)
{
int now = time_us_32();
for(int i = 0; i < KEY_NUM; i++)
{
char buf[5];
buf[1] = ' ';
buf[3] = '\n';
buf[4] = 0;
if(!gpio_get(keys[i].gpio) && !keys[i].pressed && now - keys[i].lastTick > 15500)
{
buf[0] = 'D';
buf[2] = keys[i].key;
puts(buf);
keys[i].lastTick = now;
keys[i].pressed = true;
continue;
}
if(gpio_get(keys[i].gpio) && keys[i].pressed && now - keys[i].lastTick > 15500)
{
buf[0] = 'U';
buf[2] = keys[i].key;
puts(buf);
keys[i].pressed = false;
keys[i].lastTick = now;
}
}
}
}
Собираем всё вместе и тестируем. Хоба, всё работает, мы можем перемещаться по менюшке используя наш геймпад!
А почему бы не попробовать поиграть в какую-нибудь игру? Ну мы же консоль вроде делаем: берём эмулятор NES, биндим кнопки в настройках и наслаждаемся игрой в Марио!
❯ Заключение
Реализация этого проекта заняла у меня не так уж и много времени: всего около 3-х дней работы по вечерам. Вероятно кто-то спросит: «а чего ты просто Bluetooth геймпад не купил?». Так это не прикольно ведь. Гораздо приятнее играть в девайс, к которому ты приложил руку сам. Более того, не у всех старых планшетов есть BT. Обошёлся на данной стадии проект недорого: планшет мне подарили бесплатно (точно также у вас дома может лежать подобный), RPi Pico — 350 рублей, кнопки по 10 рублей/штучка.
В целом, я сам по себе обожаю копаться в различных железках и их софтварной части (вспомнить хотя-бы статью про перекомпиляциюu-boot из вендорских исходников для нонейм консоли), а созидать что-то свое вообще вызывает какие-то нереальные всплески эндорфина — оно и понятно! :)
Однако несмотря на то, что мы уже имеем рабочий «прототип», проект далёк от завершения: я намерен довести его до конца и окончательно перевоплотить старый планшет в автономную игровую консоль (и рассказать об этом во второй части статьи). Для этого мне понадобится распечатать корпус и кнопки на 3D-принтере. К сожалению, у меня в городе ни у кого особо нет 3D-принтеров, поэтому начну копить на Ender 3, а от вас, читателей, с удовольствием почитаю мнение в комментариях и советы касательно выбора принтера!
Статья подготовлена при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, чтобы не пропускать еженедельные статьи про моддинг различных гаджетов!