Мне всегда нравились портативные вычислительные устройства, которые имели при себе полноценную qwerty-клавиатуру, а не какой-либо обрубок в виде телефонных клавиш. Это была настоящая мечта — заиметь в своё распоряжение какой-нибудь КПК или хотя бы мобильник с qwerty. Годы шли и индустрия пересела на сенсорные экраны, удобные в производстве девайсы заполонили прилавки. Теперь делать физические клавиатуры немодно и дорого. В какой-то момент мне на глаза попалась очередная поделка от китайцев на базе ESP32 и с маленькой прищелкивающейся клавиатурой. Она позиционировалась как MicroPython доска, обучать, программировать, хороший, молодец. И тут в голове моей щелкнуло — я ж могу и сам такую штуку сделать! Идея пошла дальше и зачем мне ESP32? Возьму сразу SBC, будет полноценный ПК. Форм-фактор «старенький тетрис» мне пришелся по вкусу и решено было на нём и остановиться. Держать двумя руками удобно и пользоваться стоя — только в путь! Итак, мысль сделать своё устройство есть, теперь перейдём к реализации. Осторожно, внутри много картинок.
Дисплей и одноплатный компьютер
В продаже имеется бешеное количество одноплатных компьютеров, но большинство из них имеет просто ужасную поддержку производителем и только на комьюнити можно положиться в каких-то специфических вопросах. Поэтому мой выбор остановился на Raspberry Pi как на одном из лидеров недорогих одноплатников.
У четвертой малинки есть два microHDMI порта и один DSI (Display Serial Interface) порт. Меня очень привлекла возможность подключать дисплей через DSI и я отправился на поиск по маркетплейсам. К своей радости я нашел 5-ти дюймовый сенсорный дисплей от WaveShare. Прелесть в том, что сигнальная часть и питание идут по одному шлейфу, есть крепления под Raspberry Pi сзади дислпея и всё работает из коробки.
Печатная плата
С дисплеем определился и значит надо приступать к печатной плате. Логично, что её надо делать примерно такого же размера, как и дисплей. Кнопки взял обычные тактовые, 6х6х5 мм с упреждением на то, чтобы в будущем сделать на них колпачки.
Разводил плату в KiCAD, печатка двухслойная без всяких изысков. Основная дилемма заключалась в следующем: сделать хардварное определение нажатой кнопки с помощью диодов или сделать софтварный детект кнопки с помощью логики контроллера. Было две версии платы как раз с этими двумя вариантами.
Первая версия содержала в себе также пару тактовых джойстиков, которые планировал использовать как манипулятор для указателя. Однако плата получилась очень трудоемкой в монтаже и достаточно широкой из-за того, что сначала решил реализовать num-блок цифр. После сбора тестового образца стало понятно, что это никуда не годится. Я просто не мог двумя руками обхватить плату, чтобы было удобно печатать двумя большими пальцами.
Во второй версии учел недостатки и решил отказаться от тактовых джойстиков. Заменил их одним джойстиком от PSP. Также уменьшил количество кнопок на будущей клавиатуре, что позволило уменьшить её размеры. Ещё отказался от диодов, настоящий ужас при ручной пайке.
В процессе монтажа компонентов оторвал контакты для джойстика, лень распаивать вторую плату.
Микроконтроллер
Выбор пал на STM32G071CBT6, потому что он был в наличии на тот момент. Количество ног по моим прикидкам должно было быть не меньше 40, поэтому выбрал контроллер с 48 ножками.
Шина I2C показалась мне хорошим выбором для соединения малинки и моей клавиатуры. В интернете наткнулся на стандарт HID over I2C от Microsoft. Оказалось, что драйвер этого стандарта уже реализован в ядре Linux и достаточно легко настроить в оригинальном образе RaspberrypiOS работу этого драйвера.
Для управления контроллером взял FreeRTOS — популярное решение для микроконтроллеров, достаточно простое для использования и встраивания в проекты. Драйвера от ST для контроллера, конфигурацию делал в CubeMX. Код лежит в репо, все ссылки будут ниже.
АКБ
Для питания всей этой конструкции удобно использовать аккумуляторы, которые можно будет поменять в процессе использования. Аккумуляторная батарея формата 18650 оказалась идеальным кандидатом. Модуль для преобразования в 5 вольт сначала хотел сделать сам, но на алике нашел уже готовую плату под 4 АКБ 18650, способную выдать 5В 3А. Собственно, её и решил использовать.
Корпус
С покупкой 3д-принтера вопрос с корпусом решился мгновенно! Проектировал в FreeCAD, печать пластиком PET-G. Очень нравится красный цвет, соответственно взял пластик красного цвета. Превосходно смотрится! Черный тоже ничего, но не так эффектно, как красный.
Было две версии корпуса. Первая весила почти 800 грамм, вторую удалось уменьшить до 657 грамм. Размеры текущего корпуса 179 х 133 х 36 мм.
Фото
Несколько штук фотокарточек
Ссылки на репозитории:
Автор: Максим