Привет, друзья!
Меня зовут Николай, читателем Хабра являюсь давно, а вот с написанием статей как-то не сложилось. Пора исправлять эту ситуацию, тем более что как раз имеется повод — только что я запустил компанию на Kickstarter для реализации устройства с открытым исходным кодом.
![](https://habrastorage.org/r/w780q1/webt/7l/xi/cq/7lxicq0kiu2ibdkago0kc1qcdjq.jpeg)
Кому интересно — прошу под кат.
Так уж сложилось, что с детства я имел доступ к прогрессивным технологиям своего времени (Atari 65XE, ZX-Spectrum, EC1841 и т.д.), что предопределило не только выбор профессии, но и привило отличное (как я считаю) хобби — программирование и разработка чего-нибудь.
В дальнейшем судьба преподнесла мне еще один сюрприз — возможность эмиграции в США три года назад. При этом мне повезло дважды — практически сразу я нашел работу именно в той области которой хотел: C++ и микроконтроллеры.
С этого момента мое увлечение получило новый "толчок". Во-первых я познакомился с замечательными микроконтроллерами STM32 от компании ST Microelectronics(до этого я баловался с Atmel AVR). Во-вторых с первой зарплаты я купил 3D принтер. По своей сути я перфекционист — с одной стороны это хорошо — делаешь вещи на совесть, а с другой… порой не получается довести проект до конца только лишь потому, что не выходит он "перфектным". Печать корпусов и возможность заказа печатных плат фактически вывели возможности по созданию проектов на новый уровень.
И вот однажды, перебирая разные заказанные модули для построения простейшего осциллографа и пытаясь разместить их на макетной плате я вспомнил об игрушке которую давным давно когда-то купил когда ходил еще в колледж: о GameBoy. Быстро прикинув возможную компоновку решил: буду делать! Причем сразу в голове мелькнула идея: "А ведь не только кнопочки используются-то! Иногда используются джойстики, иногда используются крутилки… а почему бы не сделать съемные модули?". И работа закипела: пайка прототипа, программирование, разработка и печать корпуса, опять программирование… в результате держа в руках рабочий прототип пришло осознание того, что идея-то не плоха. Опять все закрутилось по-новой, только добавился этап заказа печатных плат, причем не только для mainboard но и всех модулей, т.к. подходящих найти не удалось. Причем, поскольку китайцы изготавливают платы по 10 штук, сразу было решено делать мелкую серию. Кстати, после изготовления этой серии я понял, что паять дальше в ручную(имеется ввиду мелкие серии больше 10 штук) — это не вариант.
В итоге получилось это:
![](https://habrastorage.org/r/w780q1/webt/tm/yb/xq/tmybxqfistjyc4il4zskpdjwczm.jpeg)
Итоговые характеристики:
Само устройство со всех сторон:
![](https://habrastorage.org/r/w780q1/webt/4b/dd/gu/4bddgu8kdqm-cydp6o8eaxarw7w.jpeg)
А вот так вот выглядит распиновка разъема расширения:
![](https://habrastorage.org/r/w1560/webt/xm/qc/dh/xmqcdh_ewxgwnghpbvvsntbjequ.png)
Внутри все выглядит так:
![](https://habrastorage.org/r/w780q1/webt/vk/zk/pc/vkzkpciqooyxvoypyrfe4ihbz2u.jpeg)
Вот так выглядит модуль с микроконтроллером:
![](https://habrastorage.org/r/w780q1/webt/kx/bl/cz/kxblczx8dsc9-hedi-w4fxz4qv8.jpeg)
А так его распиновка:
![](https://habrastorage.org/r/w1560/webt/x2/__/ez/x2__ezgzbsgzlnkami_vggczsiu.png)
Модуль экрана:
![](https://habrastorage.org/r/w780q1/webt/ew/lc/h2/ewlch2f2aqsmaaxxmfdo15kwun4.jpeg)
И зарядника для литиевой батареи:
![](https://habrastorage.org/r/w780q1/webt/5e/bf/pd/5ebfpdgw3jdbmiw6n4i2eodsayc.jpeg)
И наконец последняя часть — корпус:
![](https://habrastorage.org/r/w780q1/webt/oc/f0/t9/ocf0t9t-edo0boj79_cz1uilct8.jpeg)
![](https://habrastorage.org/r/w780q1/webt/zg/as/io/zgasio3jdof8aeplx68o6ic3aek.jpeg)
Оранжевые штучки — это толкатели. Извлечь модуль та еще задачка. В итоге были придуманы эти толкатели. Когда модуль вставлен он их придавливает и кнопки сзади оказываются вровень с корпусом. Если же модуль надо извлечь — наживаем на толкатель и он выдавливает модуль вверх. Далее можно легко и просто его вытянуть.
Исходный код заслуживает отдельной статьи. Возможно напишу её позже. Из стороннего ПО используется System Workbench for STM32, STM32CubeMX и FreeRTOS. Это все бесплатные проекты. К этому всему написаны C++ FreeRTOS wrapper, задачи обслуживания экрана, тачскрина, звука и ввода.
![image](https://habrastorage.org/getpro/habr/post_images/3ba/7f1/78b/3ba7f178b8a1d10393c4ccfe6c5c4bac.gif)
Особенно интересен вывод графики — прототип с микроконтроллером STM32F103 мог выводить на экран игру типа Марио с частотой 15 кадров в секунду пр разрешении 320x240 и имея всего 20 Кб ОЗУ на борту(фреймбуфер исключается), при этом ограничение скорее всего было из-за частоты работы SPI. На STM32F415 с частотой SPI вдвое большей выходит 30 кадров в секунду.
Ну и в заключение оставлю ссылки:
Буду признателен если вы поделитесь ссылкой на проект со своими друзьями — сейчас главное набрать критическую массу людей, что бы запустить цепную реакцию — необходимо что бы о проекте узнало как можно больше заинтересованных людей.
Если спросить меня о долгосрочных планах, чего же я хочу в итоге ответ будет простым: создать компанию с идеологией open software и open hardware, заниматься своим любимым делом и помогать другим людям как делают это Adafruit и Sparkfun.
Если вдруг текст покажется сумбурным — не судите строго, сейчас уже почти час ночи… задавайте вопросы в комментариях — постараюсь ответить.
Меня зовут Николай, читателем Хабра являюсь давно, а вот с написанием статей как-то не сложилось. Пора исправлять эту ситуацию, тем более что как раз имеется повод — только что я запустил компанию на Kickstarter для реализации устройства с открытым исходным кодом.
![](https://habrastorage.org/webt/7l/xi/cq/7lxicq0kiu2ibdkago0kc1qcdjq.jpeg)
Кому интересно — прошу под кат.
Так уж сложилось, что с детства я имел доступ к прогрессивным технологиям своего времени (Atari 65XE, ZX-Spectrum, EC1841 и т.д.), что предопределило не только выбор профессии, но и привило отличное (как я считаю) хобби — программирование и разработка чего-нибудь.
В дальнейшем судьба преподнесла мне еще один сюрприз — возможность эмиграции в США три года назад. При этом мне повезло дважды — практически сразу я нашел работу именно в той области которой хотел: C++ и микроконтроллеры.
С этого момента мое увлечение получило новый "толчок". Во-первых я познакомился с замечательными микроконтроллерами STM32 от компании ST Microelectronics(до этого я баловался с Atmel AVR). Во-вторых с первой зарплаты я купил 3D принтер. По своей сути я перфекционист — с одной стороны это хорошо — делаешь вещи на совесть, а с другой… порой не получается довести проект до конца только лишь потому, что не выходит он "перфектным". Печать корпусов и возможность заказа печатных плат фактически вывели возможности по созданию проектов на новый уровень.
И вот однажды, перебирая разные заказанные модули для построения простейшего осциллографа и пытаясь разместить их на макетной плате я вспомнил об игрушке которую давным давно когда-то купил когда ходил еще в колледж: о GameBoy. Быстро прикинув возможную компоновку решил: буду делать! Причем сразу в голове мелькнула идея: "А ведь не только кнопочки используются-то! Иногда используются джойстики, иногда используются крутилки… а почему бы не сделать съемные модули?". И работа закипела: пайка прототипа, программирование, разработка и печать корпуса, опять программирование… в результате держа в руках рабочий прототип пришло осознание того, что идея-то не плоха. Опять все закрутилось по-новой, только добавился этап заказа печатных плат, причем не только для mainboard но и всех модулей, т.к. подходящих найти не удалось. Причем, поскольку китайцы изготавливают платы по 10 штук, сразу было решено делать мелкую серию. Кстати, после изготовления этой серии я понял, что паять дальше в ручную(имеется ввиду мелкие серии больше 10 штук) — это не вариант.
В итоге получилось это:
![](https://habrastorage.org/webt/tm/yb/xq/tmybxqfistjyc4il4zskpdjwczm.jpeg)
Итоговые характеристики:
- Базируется на микроконтроллере STM32F415RG, ядро Cortex-M4 работающее на частоте 168 MHz
- 1024 KB ПЗУ и 192 KB ОЗУ
- 2.8" экран с разрешением 320x240 точек и 16-тибитным цветом
- Резистивный тачскрин
- Два слота для модулей ввода, 4 I/O(2 из них могут оцифровывать сигнал с помощью АЦП) линии в каждом
- Слот расширения с I/O линиями практически от всех выводов микроконтроллера
- Слот для карт SD
- И конечно же Open-source
Само устройство со всех сторон:
![](https://habrastorage.org/webt/4b/dd/gu/4bddgu8kdqm-cydp6o8eaxarw7w.jpeg)
А вот так вот выглядит распиновка разъема расширения:
![](https://habrastorage.org/webt/xm/qc/dh/xmqcdh_ewxgwnghpbvvsntbjequ.png)
Внутри все выглядит так:
![](https://habrastorage.org/webt/vk/zk/pc/vkzkpciqooyxvoypyrfe4ihbz2u.jpeg)
Вот так выглядит модуль с микроконтроллером:
![](https://habrastorage.org/webt/kx/bl/cz/kxblczx8dsc9-hedi-w4fxz4qv8.jpeg)
А так его распиновка:
![](https://habrastorage.org/webt/x2/__/ez/x2__ezgzbsgzlnkami_vggczsiu.png)
Модуль экрана:
![](https://habrastorage.org/webt/ew/lc/h2/ewlch2f2aqsmaaxxmfdo15kwun4.jpeg)
И зарядника для литиевой батареи:
![](https://habrastorage.org/webt/5e/bf/pd/5ebfpdgw3jdbmiw6n4i2eodsayc.jpeg)
И наконец последняя часть — корпус:
![](https://habrastorage.org/webt/oc/f0/t9/ocf0t9t-edo0boj79_cz1uilct8.jpeg)
![](https://habrastorage.org/webt/zg/as/io/zgasio3jdof8aeplx68o6ic3aek.jpeg)
Оранжевые штучки — это толкатели. Извлечь модуль та еще задачка. В итоге были придуманы эти толкатели. Когда модуль вставлен он их придавливает и кнопки сзади оказываются вровень с корпусом. Если же модуль надо извлечь — наживаем на толкатель и он выдавливает модуль вверх. Далее можно легко и просто его вытянуть.
Исходный код заслуживает отдельной статьи. Возможно напишу её позже. Из стороннего ПО используется System Workbench for STM32, STM32CubeMX и FreeRTOS. Это все бесплатные проекты. К этому всему написаны C++ FreeRTOS wrapper, задачи обслуживания экрана, тачскрина, звука и ввода.
![image](https://habrastorage.org/getpro/habr/post_images/3ba/7f1/78b/3ba7f178b8a1d10393c4ccfe6c5c4bac.gif)
Особенно интересен вывод графики — прототип с микроконтроллером STM32F103 мог выводить на экран игру типа Марио с частотой 15 кадров в секунду пр разрешении 320x240 и имея всего 20 Кб ОЗУ на борту(фреймбуфер исключается), при этом ограничение скорее всего было из-за частоты работы SPI. На STM32F415 с частотой SPI вдвое большей выходит 30 кадров в секунду.
Ну и в заключение оставлю ссылки:
- Исходный код можно найти в репозитории на GitHub
- 3D файлы вместе и исходниками для OpenSCAD можно найти на Thingiverse
- И, собственно, страница проекта на Kickstarter
Буду признателен если вы поделитесь ссылкой на проект со своими друзьями — сейчас главное набрать критическую массу людей, что бы запустить цепную реакцию — необходимо что бы о проекте узнало как можно больше заинтересованных людей.
Если спросить меня о долгосрочных планах, чего же я хочу в итоге ответ будет простым: создать компанию с идеологией open software и open hardware, заниматься своим любимым делом и помогать другим людям как делают это Adafruit и Sparkfun.
Если вдруг текст покажется сумбурным — не судите строго, сейчас уже почти час ночи… задавайте вопросы в комментариях — постараюсь ответить.