Мне всегда нравились портативные вычислительные устройства, которые имели при себе полноценную qwerty-клавиатуру, а не какой-либо обрубок в виде телефонных клавиш. Это была настоящая мечта — заиметь в своё распоряжение какой-нибудь КПК или хотя бы мобильник с qwerty. Годы шли и индустрия пересела на сенсорные экраны, удобные в производстве девайсы заполонили прилавки. Теперь делать физические клавиатуры немодно и дорого. В какой-то момент мне на глаза попалась очередная поделка от китайцев на базе ESP32 и с маленькой прищелкивающейся клавиатурой. Она позиционировалась как MicroPython доска, обучать, программировать, хороший, молодец. И тут в голове моей щелкнуло — я ж могу и сам такую штуку сделать! Идея пошла дальше и зачем мне ESP32? Возьму сразу SBC, будет полноценный ПК. Форм-фактор «старенький тетрис» мне пришелся по вкусу и решено было на нём и остановиться. Держать двумя руками удобно и пользоваться стоя — только в путь! Итак, мысль сделать своё устройство есть, теперь перейдём к реализации. Осторожно, внутри много картинок.

Вычислительный кирпич - 1
Вычислительный кирпич - 1

Дисплей и одноплатный компьютер

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

У четвертой малинки есть два microHDMI порта и один DSI (Display Serial Interface) порт. Меня очень привлекла возможность подключать дисплей через DSI и я отправился на поиск по маркетплейсам. К своей радости я нашел 5-ти дюймовый сенсорный дисплей от WaveShare. Прелесть в том, что сигнальная часть и питание идут по одному шлейфу, есть крепления под Raspberry Pi сзади дислпея и всё работает из коробки.

5 inch DSI display. Ёмкостной, сенсорный, твой.
5 inch DSI display. Ёмкостной, сенсорный, твой.

Печатная плата

С дисплеем определился и значит надо приступать к печатной плате. Логично, что её надо делать примерно такого же размера, как и дисплей. Кнопки взял обычные тактовые, 6х6х5 мм с упреждением на то, чтобы в будущем сделать на них колпачки.

Разводил плату в KiCAD, печатка двухслойная без всяких изысков. Основная дилемма заключалась в следующем: сделать хардварное определение нажатой кнопки с помощью диодов или сделать софтварный детект кнопки с помощью логики контроллера. Было две версии платы как раз с этими двумя вариантами.

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

Первая версия клавиатуры
Первая версия клавиатуры
Куча диодов
Куча диодов

Во второй версии учел недостатки и решил отказаться от тактовых джойстиков. Заменил их одним джойстиком от PSP. Также уменьшил количество кнопок на будущей клавиатуре, что позволило уменьшить её размеры. Ещё отказался от диодов, настоящий ужас при ручной пайке.

В процессе монтажа компонентов оторвал контакты для джойстика, лень распаивать вторую плату.

Скрин с 3д-модельки, верх
Скрин с 3д-модельки, верх
Скрин с 3д-модельки, низ
Скрин с 3д-модельки, низ

Микроконтроллер

Выбор пал на 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 мм.

Скриншот из редактора FreeCAD
Скриншот из редактора FreeCAD

Фото

Несколько штук фотокарточек
Первый корпус как первый блин
Первый корпус как первый блин
Выпуклая задняя крышка оказалась неудобной
Выпуклая задняя крышка оказалась неудобной
Внутренняя компоновка с проводами
Внутренняя компоновка с проводами
Задняя крышка без изысков
Задняя крышка без изысков
Доступ к USB и Ethernet имеется
Доступ к USB и Ethernet имеется

Ссылки на репозитории:

Корпус в формате STL

Печатная плата в виде проекта для KiCAD 5.X

Код для МК

Комментарии (23)


  1. ignat99
    24.12.2021 13:08
    +4

    Есть отличные BT клавиатуры. Вот например: Accessories (olimex.com) . Но тогда вам бы потребовался упор для экрана.


    1. maxim_koksharov Автор
      24.12.2021 13:19
      +2

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


  1. vitsam
    24.12.2021 13:08
    +1

    Интересный проект! А не было мысли найти что-то из готовых блутучных клавиатур, коих на том же али больше чем три?
    Просто такие же тактильные кнопки использую в реплике программируемого калькулятора МК52/61 - не самые лучшие ощущения от работы.


    1. maxim_koksharov Автор
      24.12.2021 13:21
      +1

      Спасибо! В дальнейшем планировал использовать колпачки на кнопках, но из имеющихся нет подходящих. Чуть позже поэкспериментирую с печатными модельками-колпачками.


      1. vitsam
        24.12.2021 13:37
        +2

        У нас лучший результат для кнопок получился на фотополимерном принтере. Разрешение принтера позволяет сделать "впуклые" буквы для последующего заполнения краской.


      1. Timka21213
        26.12.2021 23:42
        +1

        такие кнопки немного получше тактовых https://aliexpress.ru/item/1005002844791918.html


  1. 4p4
    24.12.2021 14:22
    +1

    Можно ссылку на батарейный модуль на Али, пожалуйста?


    1. skhida
      24.12.2021 14:59
      +1

      1. alex1478
        24.12.2021 17:52

        А нет ли модулей, у которых можно получить процент оставшегося заряда?


        1. maxim_koksharov Автор
          24.12.2021 17:57

          На задней стороне этого модуля есть 5 светодиодов, которые показывают текущий заряд.


          1. alex1478
            24.12.2021 18:00

            Имею ввиду что бы получать эти данные по i2c или как то ещё без переделки модуля.


            1. Jesusatana
              25.12.2021 16:39
              +1

              Есть. HAT SW6106

              У меня похожая и система видит заряд батареи.


              1. maxim_koksharov Автор
                25.12.2021 16:41

                Спасибо! Единственный минус, что установлен акб на 3000 мАч. В мой текущий батарейный модуль влезает 4х3000 мАч аккумуляторов.


                1. leonidy85
                  27.12.2021 09:23

                  А не проще было самому это сколхозить использую bms 4S плату, dc/dc преобразователь на 5 вольт и pd triger на 16 вольт и i2c АЦП?


                  1. maxim_koksharov Автор
                    27.12.2021 10:13

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


        1. skhida
          24.12.2021 19:22

          Не знаю, не искал


  1. DrAndyHunter
    24.12.2021 17:42
    +1

    Когда-то давно хотел собрать себе вот такой лаптоп на Raspberry PI zero

    Даже корпус распечатал на 3D-принтере и валяется в коробке


  1. K_Chicago
    25.12.2021 04:43
    +1

    Вот про это:" чередная поделка от китайцев на базе ESP32 и с маленькой прищелкивающейся клавиатурой " можно ссылку?


    1. maxim_koksharov Автор
      25.12.2021 16:38

      1. K_Chicago
        25.12.2021 23:52

        нет. Что из этого "черное с прищелкивающейся клавиатурой"? Хочу увидеть ответ автора.


        1. maxim_koksharov Автор
          26.12.2021 00:13

          Константин, я и есть автор. Устройство было от M5Stack, вот ссылка, нашел специально.

          https://shop.m5stack.com/products/face?variant=17290437623898


  1. dlinyj
    25.12.2021 11:35
    +1

    Великолепный проект!


  1. Ad_Infinitum
    26.12.2021 01:28
    +1

    Надеюсь повеселю вас. Название статьи навеяло воспоминания, когда я занимался моддингом кнопочных телефонов. И ожнажды реально хотел поместить телефон в маленький кирпич. На подобие этого. Было это во времена, когда телефоны были ещё "кирпичами" а не "лопатами". К сожелению или к счастью, руки не дошли.