Как сделать своими руками светящиеся настенные электронные часы на Ардуино с большими цифрами

Что я использовал для настенных электронных часов с большими цифрами.
- Arduino nano V3.0 (к сожалению, поскольку я не могу позволить себе оригинальный ардуино, я использовал китайский клон) — 150 рублей.
- Цифровой модуль измерения интенсивности света Фоторезистор для Arduino — 60 рублей.
- DS3231 AT24C32 IIC-модуль памяти для точного времени для Arduino — 60 рублей.
- DC-DC преобразователь LM2596, Выходная мощность 1.23В-30В — 50 рублей.
- 4 метра WS2811 светодиодной ленты 30 диодов / м — 700 рублей. (один WS2811 контролирует 3 светодиодных чипа)
Общая стоимость электроники: 900 рублей.
- Термоусадочная трубка — 400 рублей (33м в ассортименте)
- 20 шт. 5 x 7 см печатная плата — 200 рублей.
- 3 шт. Микропереключатель — 60 рублей.
- Припой — 50 рублей
- Флюс — 50 рублей.
- Кабель UTP (неэкранированная витая пара)
- ЖК-шрифт (http://www.dafont.com/lcd-lcd-mono.font) — бесплатно.
- Картон — бесплатно в супермаркете.
- Полистирольная панель — 100 рублей.
А также различные инструменты.
Шаг 2: Подготовка — шаблоны цифр

- Скачайте и установите шрифт для часов
- Откройте Word или другую программу, и создайте шаблон, как на первом фото.
Напечатайте шаблон и вырежьте полосы канцелярским ножом (как на втором фото)
Шаг 3: Подготовка — режем картон и светодиодную ленту

Используя цифровой шаблон, вырежьте картон по размеру (не забудьте оставить место для точек между часами и минутами)
Если ваши светодиодные полосы поставляются с разъемами на каждом конце (как у меня), отсоедините разъем и разрежьте их по 3 штуки.
Шаг 4: Крепим светодиодную ленту

Используя шаблон, наклейте светодиодную ленту на картон.
Это не обязательно, но я использовал карандаш, чтобы отметить, где должны быть размещены светодиодные полосы.
Намного удобнее клеить их, когда видишь конечную форму. Благодаря этому я заметил, что оставил слишком много места для точек между цифрами и вовремя это исправил.
Шаг 5: Паяем светодиодную ленту

Теперь начинается долгий процесс пайки.
Спаяйте светодиодную ленту, чтобы сформировать непрерывную полосу. Обратите внимание на порядок припаивания полосок на фото. Для точек я использовал один кусок ленты, которой посередине заклеил скотчем.
Цвета, которые я выбрал:
- Синий для земли
- Зеленый для data
- Красный для +12В
Шаг 6: Установка Ардуино на печатной плате

Я попытался сделать эскиз в Fritzing, но не смог найти все детали
Итак, на первом фото схема подключения проводов, а на втором то, как это выглядит у меня.
Шаг 7: Проверка LED

Прежде чем загружать код (к которому я не имею никакого отношения), не забудьте установить библиотеку FastLED.
Если все сработает нормально, светодиоды должны циклически менять цвета. Если у вас возникли проблемы, в первую очередь проверьте вашу спайку.
Шаг 8: Запрограммируйте часы
Спустя некоторое время мне удалось сделать часы, которые меня полностью устраивают. Однако, каждый найдет для себя, что можно улучшить.
Код хорошо прокомментирован, поэтому с ним не должно возникнуть никаких проблем.
Все сообщения отладки также прокомментированы.
Чтобы изменить используемый цвет, вы должны изменить переменную в строке 22 (int ledColor = 0x0000FF; // Используемый цвет (в шестнадцатеричном формате)). Вы можете найти список цветов в нижней части этой страницы
Если ссылка не работает, вот зеркало.
Шаг 9: Делаем формы для цифр из полистирола

- Вырежьте все сегменты по шаблонам, сделанным вначале.
- Сформируйте каждую цифру в полистироле, используя скальпель (очень жесткий) или горячий резак.
- На фото можно увидеть, как это сделал я.
- Если у вас нет гитарной струны, подойдет практически любой тонкий стальной провод.
- Для питания горячего резака я использовал 12-вольтовый блок питания.
- Также есть фото с готовым вырезом (извините, что забыл снимать в процессе).
Шаг 8: Приклейте цифры и установите рассеиватель

Когда все 4 цифры и точки будут готовы, приклейте их на картон со светодиодной лентой (я использовал двусторонний скотч)
Чтобы рассеять свет светодиодов, я наложил 2 листа бумаги поверх полистирола. Для удобства и красоты я взял один лист формата А2 и сложил его пополам.
В самом конце я вставил светящиеся электронные настенные часы в большую картинную рамку.
Рассказываю как сделать какую-либо вещь с пошаговыми фото и видео инструкциями.
Часы на самодельных светодиодных индикаторах
Уже довольно давно возникла идея обзавестись часами, с большими светящимися циферками (чтобы отлично было видно ночью).
Но купить готовый вариант — слишком просто, поэтому решено было сделать часы самостоятельно.
Первая проблема с которой довелось столкнуться — светодиодные индикаторы.
Не то чтобы их проблемно найти, просто попадались мелкие, а нужного размера (6 см) нашел только у китайцев за цену, которая меня не устраивала (около 600 рублей).
К счастью, сделать семисегментный индикатор довольно просто.
Сначала была напечатана основа на 3D-принтере:

По задумке, в качестве рассеивателя, было решено использовать термоклей, а светодиоды взять обычные 5 мм. Но с ними вышла проблема: при размещении такого светодиода прямо — светилась только точка, а не весь сегмент; при установке светодиода боком — только половина сегмента.
Было решено использовать обычную светодиодную ленту:

Она была успешно разрезана на куски (по 1 светодиоду), а к ним — припаяны провода (много паял, так что не особо следил за аккуратностью):

Дальше залил сегменты термоклеем и поставил на место светодиоды:

Ну и еще немного поработал над внешним видом с помощью наждачки (мне так больше нравится):

Поскольку каждый сегмент имеет 8 контактов (а сегментов у нас 4) + сепаратор — 33 контакта, выходов на Arduino Uno (которая должна стать мозгами проекта) маловато. Да и управлять таким количеством контактов не очень удобно.
Было решено использовать 8-битный регистр смещения 74HC595, который позволит сократить количество нужных выходов к 3 (не считая землю и питание) + один выход на сепаратор.
Была сделана распайка для каждого сегмента (с общим катодом):

Потом все сегменты были склеены дихлорэтаном и сделана общая спайка:

Общая схема подключения выглядит следующим образом:

После подключения протестировал работу индикаторов:
Осталось только подключить модуль часов реального времени (у меня DS1302) и пару кнопок для настройки.
Был напечатан корпус на 3D-принтере, но поскольку часы вышли немаленькие, печатал кусками и склеивал (поэтому корпус смоделировал двухцветный). На заднюю крышку (тоже склеена из двух частей) разместил платы Arduino и часов, сделал вход на питание (гнездо 5,5 х 2,1 мм):

Ну и конечный результат:


Лично я результатом остался доволен, особенно учитывая, что все нужное уже имелось, покупал только резисторы.
«К счастью, сделать семисегментный индикатор довольно просто.
Сначала была напечатана основа на 3D-принтере. «
Илон Маск это ты?)))
А не думали использовать ленту на WS2812? Я себе на таких сделал бинарные часы. Пайки минимум, ни резисторов ни сдвиговых регистров не надо, все управляется по одному проводу.
Улыбнуло со слов «много пайки. )
Бро, часы на самодельной светодиодной матрице, на самодельных платах.
Вот фото матрици.
196 диодов+ 196 переходных отверстий + коннекторы. посчитай, сколько это пайки)
Часы из двух плат состоят. Те кто в теме, часы эти узнают)



Человек проверил свои способности. А вы стебаетесь. Часы годные, только точки великоваты .


Топ 20 электронных комплектов «сделай сам» для самостоятельной сборки, пайки и программирования
1) Зарядная станция

Набор для сборки зарядной станции с солнечной панелью с трекером для отслеживания положения солнца. Для работы требуются знания в Arduino (Ардуино). Ссылка на источник

Набор электронных деталей для сборки умного робота-фургона с множеством интересных функций. Ссылка на модель

Обучающий комплект для сборки дома с различными способностями, например, если датчик ‘почует’ дым, то срабатывает сигнализация, если начинается дождь (капает вода на сенсор), то закрываются окна и тд. Ссылка на набор
4) Поливочный робот

Набор для создания устройства для автоматической поливки цветов. Ссылка

Комплект для сборки руки-манипулятора с пультом управления. Ссылка
6) Электронные весы

Весы для сборки в деревянном корпусе и электронной ‘начинкой’. Ссылка

Умный робот для программирования на ‘гусеницах’. Ссылка на источник

Классный ультразвуковой радар. ссылка

Набор для создания рисующего робота. Ссылка на набор

Набор для сборки и программирования робота-машинки с камерой. Ссылка

Ходячий и танцующий робот-гуманоид. Ссылка

Комплект деталей для сборки любого робота на Ваш вкус. ссылка
13) Мусорное ведерко

Умное мусорное ведро с автоматическим открыванием крышки. ссылка на источник
14) Дозатор мыла

Робот, помогающий нажать на дозатор с мыльным раствором, достаточно показать ему руки. Ссылка

Эмоциональный робот для сборки из 635 деталей. Ссылка на модель

Серьезный аппарат для программирования. Ссылка
Забавный робот, который сначала что-то напишет, потом сотрет. Ссылка на источник

Arduino программируемая рука. Ссылка

Необычный термометр с гигрометром. Ссылка

Робот-паук для самостоятельной сборки и программирования. Ссылка на источник.

Для любителей собрать что-нибудь своими руками


Обучающий электронике и пайке набор для сборки FM радиоприемника с часами и будильником. Вам предстоит по схеме разместить и припаять детали в нужном месте, после сборки все должно заработать. Стоит такой DIY комплект для самостоятельной сборки и пайки около 760 руб. Ссылка на источник.
Частотный диапазон: 72-108,6 МГц
Питание: 3v (2 батареи АА)
Размер: 120×75 мм/4,72×2,95″

Топ 25 электронных устройств ‘сделай сам’ для самостоятельной сборки и пайки
1) Вентилятор с регулировкой скорости

Комплект «собери сам» для самостоятельной сборки и пайки электронных компонентов, в завершенном виде мы получаем устройство вентилятора с платой управления скорости его вращения. Идеально подойдёт для обучения пайке и принципа работы электроники в целом. Стоит такой набор 128 рублей с бесплатной доставкой. Ссылка на источник
2) Светодиодное сердечко

Набор для создания светодиодного светильника с формой красного сердца. Стоит такой 40 рублей. Ссылка
3) Катушка Теслы

Комплект сборки мини-катушки Тесла. Стоит 83 рубля. Ссылка
4) Мигающий светильник

Набор для сборки и пайки микросхем , светодиодов и других электронных компонентов для получения платы весёлого светильника. Стоит комплект 260 рублей. Ссылка
5) Стартовый набор Arduino

Набор начального уровня для любителей сборки, пайки и программирования проектов на Ардуино. Стоит такой около 1 800 руб. Ссылка
6) Набор для создания арфы

Набор ‘сделай сам’ музыкальный инструмент лазерная арфа. Стоит около 600 руб. Ссылка
7) Анализатор спектра

Набор для пайки Анализатор звукового спектра со светодиодными индикаторами. Стоит 105 рублей. ссылка
8) Индикатор заряда батареи

Комплект для сборки индикатора уровня заряда аккумуляторов 3,7В — 12В. Стоит 130 рублей. Ссылка на источник
9) Электронные часы

Набор электронных компонентов для сборки цифровых часов с будильником и светящимися по кругу светодиодами . Стоит около 800 руб. Ссылка
10) Регулятор напряжения

Комплект «сделай сам» LM7805 модуль питания с регулятором напряжения. Стоит 37 рублей. Ссылка
11) Генератор сигналов

Генератор сигналов DIY Kit ICL8038 12V набор для сборки и самостоятельной пайки. Стоит 98 рублей. Ссылка

Электронное пианино для сборки. Состоит из одной октавы нот. Стоит 115 рублей. Ссылка
13) Тестовый модуль

Электронный комплект LED Logic Pen. Стоит 67 рублей. ссылка
14) Модуль диммера 100 Вт

Набор «сделай сам» с переключателем потенциометра, модуль регулирования скорости для Arduino. Стоит 44 рубля. ссылка
15) Макетная плата

Набор для сборки макетной платы ATMEGA8. Стоит 150 руб. ссылка

Набор для сборки модуля преобразования переменного тока в постоянный. Стоит 37 рублей. ссылка
17) Радио своими руками

Набор для сборки FM-радиоприёмника. Стоит около 550 руб. Ссылка
18) Новогодняя ёлка

Набор для сборки 3D ёлочки с разноцветными светодиодами. Стоит такая около 280 рублей. ссылка
19) Умный робот 4WD

Набор для сборки умного робота-автомобиля. стоит такой около 2500 руб. ссылка
20) Дверной звонок

Набор для сборки звонка. Стоит 67 рублей. ссылка
21) Комплект деталей для Ардуино

Набор деталей для сборки недостающих элементов в проектах Arduino и др. Стоит такой 173 рубля. ссылка
22) Высоковольтный генератор

Стоит такой набор 123 рубля. ссылка
23) Усилитель звука

Плата усилителя звука для самостоятельной сборки. Стоит такая 115 рублей. ссылка
24) Воздушный катер

Набор для сборки лодки-катера с дистанционным управлением. Вам лишь потребуется найти 2 бутылки. Стоит такой набор около 800 руб. Ссылка

Набор для сборки планетохода (луноход, марсоход) с солнечными панелями. Аппарат может работать как от батареек, так и от солнечной энергии напрямую. Стоит такой набор 598 руб. Ссылка на источник.

Эти электронные часы. Upd добавил фото дисплея
У всех бунт, колбаса и счётчики набирают десятки тысяч рейтинга.
Посмотрим на что способны пол года моей работы))
Плата, схема и 3D модель выполнены в Altium designer. Модель в формате step поможет умельцам в создании корпуса.
Всю документацию выложу в комментарии, когда разберусь как это сделать и буду за пк.
Телеграмм каналов, увы, не будет. Кому надо очень срочно, можно писать в вк.



Часы из велосипедной кассеты
Всем привет! Пришла мне в голову мысль сделать часы. А бесхозно валяется велосипедная изношенная кассета. Дай думаю чего пропадать, пущу в дело
Для начала что будет стоять. Часовой механизм со штоком 16 мм, который будет удлиняться стержнем от ручки и распечатанной втулкой (позже механизм будет другим)

Затем всё было отмыто от многовековой грязи. Также на суперклей приклеил звёздочку и гайку

Затем был найден кусок сосновой доски. От неё отрезаю квадратный кусок примерно 18х18 см, скругляю и делаю отверстия для крепления кассеты винтами (позже выяснится, что хватит и одного винта, крепление неудобное немного, не хотел приклеивать


А вот сами удлинялки. От секундной стрелки впоследствии откажусь совсем

Предварительная примерка всего

Под часовой механизм сделан паз. Затем основание покрывается лаком цапон в 3 слоя


Устанавливается механизм на место вместе с кассетой



По поводу крепления кассеты: расширены отверстия на лучах до 5 мм (тяжело сверлится калёная сталь), затем крепится гайкой и винтом

В качестве цифр принято решение использовать куски велосипедной цепи старой. Звенья склеены суперклеем

Приклеивается в примерно нужные места

Затем делаю петельку для подвешивания к стене на обратной стороне. Железка — какой-то кронштейн от мультиварки

Ну и финальный результат

Получилось необычно и прикольно, даже несмотря на то, что сделано в стилей «И так сойдёт» (зачёркнуто) Хай-Так. Доска не вышла прозрачной из-за грязной кисточки, но подтёки даже шарма придают. Кончики стрелок подкрасил акриловой краской

Топ 25 электронных компонентов стоимостью до 39 рублей с бесплатной доставкой, найденных на Алиэкспресс
1) Металлический плёночный резистор 100 штук

Электронный компонент резистор. Стоит такой набор 35 рублей с бесплатной доставкой. Ссылка на источник.
2) Светодиоды 100 штук

Набор белых светодиодов. Стоит около 38 рублей. Ссылка
3) Повышающий модуль

Регулируемый повышающий модуль со входом TypeC. 9V, 12V, 15V, 18V, 24V. Стоит такой 31 рубль. Ссылка
4) SMD резисторы 100 штук

Набор резисторов 100 штук. Стоит такой набор 30 рублей. Ссылка на источник
5) Модуль зарядки

Зарядная плата для литий-ионных батарей. Стоит такая 28 рублей. Ссылка
6) Двухсторонняя плата-заготовка

Плата для пайки различных электронных компонентов для проектов Arduino и др. Стоит маленькая плата 16 рублей с бесплатной доставкой. Ссылка
7) Отсек для батареек

Стоит такой 30 рублей. Ссылка
8) Сенсорный модуль

Электронная плата с сенсорным модулем. Стоит такая 33 рубля. Ссылка
9) Понижающий преобразователь

Понижающий модуль для радиоуправляемых моделей. Входное напряжение: 4,75-23в. Выходное напряжение: 1,0 V-17V. Стоит такая плата 33 рубля Ссылка
10) Плата расширения

Модуль с платой для карты памяти для различных электронных проектов или модернизации существующих=)) Стоит такая 38 рублей. ссылка

Стоит такой 26 рублей. ссылка
12) Светодиоды 10 штук

3 вольтовые светодиоды набор. Стоит 33 рубля. ссылка
13) Инфракрасный модуль

ИК модуль датчика препятствий. Стоит такая плата 38 рублей. ссылка
14) Модуль двигателя

Плата привода двигателя, обычно применяется в робототехнике. Стоит такая 39 рублей. ссылка
15) Переходник на DIP-адаптер 10 штук

Стоит такой набор 33 рубля. ссылка
16) Температурный датчик

Водонепроницаемый NTC термистор 10K 1%. Стоит такой 25 рублей с бесплатной доставкой, как и всё в нашей подборке=). Ссылка на источник
17) Плата для самодельного внешнего аккумулятора

Модуль с зарядкой и выходом USB. Стоит такой 33 рубля. Ссылка
18) Цифровой модуль датчика барометрического давления

Стоит такой датчик 39 рублей. Ссылка
19) Модуль обнаружения дождя

Плата обнаружения капель воды. Стоит такая 39 рублей. Ссылка
20) Лазерный передатчик

Стоит такая плата 39 рублей. Ссылка
21) Звуковой сигнал

Модуль звукового сигнала 95 дБ, 3-24 В. Стоит такой 37 рублей. Ссылка
22) Модуль часов

Стоит такая плата 35 рублей. Ссылка
23) Переходник с батареек Крона 9V

Стоит такой кабель-переходник 31 рубль. Ссылка
24) Маркер с тонким стержнем

Маркер чёрный с тонким кончиком для нанесения различных заметок и опознавательных знаков на электронике. Стоит такой 28 рублей. Ссылка.
25) Штекер Банан

Штекер + разъём «мама-папа» 4 мм. Стоит такой 39 рублей. Ссылка на источник
Уважаемые читатели! Информация актуальна на момент размещения поста.

Топ 17 интересных устройств для самостоятельной сборки
1) Преобразователь электрической энергии в магнитную

Набор электронных компонентов для самостоятельной сборки и пайки устройства электромагнитной пушки, за счёт преобразования энергии оно способно выстреливать снаряды, а именно металлические цилиндры. Увлекательный набор, способствующий развитию знаний в области электроники, пайки и физике. Ссылка на источник
2) Анализатор звукового спектра

Комплект «Сделай сам» светодиодный анализатор. Ссылка
3) Поливатель цветов

Набор для сборки устройства для автоматического полива цветов. Ссылка
4) Музыкальный спектр 2

Набор для сборки 12-ти канального светодиодного анализатор спектра. Ссылка
5) Музыкальная ёлка

Набор для создания музыкальной колонки со светодиодной ёлкой. Ссылка
6) Анализатор спектра v3

Музыкальный анализатор с разноцветными светодиодами. Ссылка
7) Дуговой трансформатор

Набор для самостоятельной сборки генератора высокого напряжения для дугового зажигания. Ссылка на источник
8) Часы настольные

Набор для сборки электронных часов со светодиодами. Ссылка

Набор для самостоятельной сборки и пайки FM радио. Потребуется лишь подключить наушники или колонку. Ссылка
10) Модуль усилителя

Плата двухканального усилителя OCL высокой мощности 100 Вт с 4 транзисторами высокой мощности и двумя независимыми стереоканалами. Ссылка

Набор для самостоятельной сборки настольного вентилятора. Ссылка

Сложный набор для создания радио. Вам потребуется самостоятельно и правильно припаять детали в нужном месте чтобы оно заработало. Ссылка
13) Умный автомобиль

Набор для создания машинки, которая может объезжать препятствия. Ссылка
14) Игровая приставка на скорость реакции

Забавная игрушка для самостоятельной сборки. Ссылка

Комплект для самостоятельного изготовления электронного пианино. Ссылка на источник
16) Стрелочный светофор

Набор для сборки световых маячков. Ссылка

Набор электронного конструктора для Arduino (проектов Ардуино) для самостоятельной сборки и программирования. Ссылка на источник

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 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;
>
>
@override
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() <
@override
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();
>*/
>
>
>);
>
@override
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:

И написал примитивную прошивку, которая отслеживает состояние кнопок. В прошивке точно так же есть словарь, задающий ассоциацию между физическими пинами и «виртуальными» кнопками. При нажатии или отжатии кнопки, программа изменяет стейт и отсылает новое состояние планшету.
Собираем всё вместе и тестируем. Хоба, всё работает, мы можем перемещаться по менюшке используя наш геймпад!

А почему бы не попробовать поиграть в какую-нибудь игру? Ну мы же консоль вроде делаем: берём эмулятор NES, биндим кнопки в настройках и наслаждаемся игрой в Марио!
❯ Заключение
Реализация этого проекта заняла у меня не так уж и много времени: всего около 3-х дней работы по вечерам. Вероятно кто-то спросит: «а чего ты просто Bluetooth геймпад не купил?». Так это не прикольно ведь. Гораздо приятнее играть в девайс, к которому ты приложил руку сам. Более того, не у всех старых планшетов есть BT. Обошёлся на данной стадии проект недорого: планшет мне подарили бесплатно (точно также у вас дома может лежать подобный), RPi Pico — 350 рублей, кнопки по 10 рублей/штучка.
В целом, я сам по себе обожаю копаться в различных железках и их софтварной части (вспомнить хотя-бы статью про перекомпиляциюu-boot из вендорских исходников для нонейм консоли), а созидать что-то свое вообще вызывает какие-то нереальные всплески эндорфина — оно и понятно! 🙂
Однако несмотря на то, что мы уже имеем рабочий «прототип», проект далёк от завершения: я намерен довести его до конца и окончательно перевоплотить старый планшет в автономную игровую консоль (и рассказать об этом во второй части статьи). Для этого мне понадобится распечатать корпус и кнопки на 3D-принтере. К сожалению, у меня в городе ни у кого особо нет 3D-принтеров, поэтому начну копить на Ender 3, а от вас, читателей, с удовольствием почитаю мнение в комментариях и советы касательно выбора принтера!
ЭЛЕКТРОННЫЕ ЧАСЫ СВОИМИ РУКАМИ
Для тех, кто хоть немного разбирается в микроконтроллерах, а также хочет создать несложное и полезное устройство для дома, нет ничего лучше сборки цифровых часов с LED индикаторами. Такая вещь может украсить вашу комнату, а может пойти на уникальный подарок, сделанный своими руками, от чего приобретёт дополнительную ценность. Схема работает как часы и как термометр – режимы переключаются кнопкой или автоматически.
Схема электрическая самодельных часов с термометром


Микроконтроллер PIC18F25K22 берёт на себя всю обработку данных и отсчёт времени, а на долю ULN2803A остаётся согласование его выходов со светодиодным индикатором. Небольшая микросхема DS1302 работает как таймер точных секундных сигналов, частота её стабилизирована стандартным кварцевым резонатором 32768 Гц. Это несколько усложняет конструкцию, зато вам не придётся постоянно подстраивать и корректировать время, которое будет неизбежно запаздывать или спешить, если обойтись случайным ненастроенным кварцевым резонатором на несколько МГц. Подобные часы скорее простая игрушка, чем качественный точный хронометр.


При необходимости, датчики температуры могут быть расположены далеко от основного блока – они соединяются с ним трёхпроводным кабелем. В нашем случае один температурный датчик установлен в блок, а другой расположен снаружи, на кабеле длинной около 50 см. Когда пробовали кабель 5 м, то тоже прекрасно функционировало.

Дисплей часов изготовлен из четырех больших светодиодных цифровых индикаторов. Первоначально они были с общим катодом, но изменены на общий анод в финальной версии. Вы можете ставить любые другие, потом просто подберёте токоограничительные резисторы R1-R7 исходя из требуемой яркости. Можно было разместить его на общей, с электронной частью часов, плате, но так гораздо универсальнее – вдруг вы захотите поставить очень большой LED индикатор, чтоб их было видно на дальнем расстоянии. Пример такой конструкции уличных часов есть тут.

Сама электроника запускается от 5 В, но для яркого свечения светодиодов необходимо использовать 12 В. Из сети, питание поступает через понижающий трансформатор адаптер на стабилизатор 7805, который образует напряжение строго 5 В. Обратите внимание на небольшую зелёную цилиндрическую батарейку – она служит источником резервного питания, на случай пропадания сети 220 В. Её не обязательно брать на 5 В – достаточно литий-ионного или Ni-MH аккумулятора на 3,6 вольта.

Для корпуса можно задействовать различные материалы – дерево, пластик, металл, либо встроить всю конструкция самодельных часов в готовый промышленный, например от мультиметра, тюнера, радиоприёмника и так далее. Мы сделали из оргстекла, потому что оно легко обрабатывается, позволяет увидеть внутренности, чтоб все видели – эти часы собраны своими руками. И, главное, оно было в наличии

Здесь вы сможете найти все необходимые детали предлагаемой конструкции самодельных цифровых часов, в том числе схему, топологию печатной платы, прошивки PIC и исходный код.
Как сделать электронные часы своими руками
Большие часы на светодиодах
Автор: Арсений Вирачев aka *Trigger*
Опубликовано 10.04.2012
Создано при помощи КотоРед.
Началось всё так. На даче у меня был старый механический будильник (made in USSR), у которого были проблемы с механикой. Я решил собрать электронные часы. Первая проблема — какой индикатор выбрать. ВЛИ и ГРИ не подходать из-за больших перепадов температур на даче. ЖКИ отпадает по той же причине. Остаётся светодиодный индикатор. Мне надоело разглядывать мелкие цифры на индикаторах, а большие семисегментники редкие и дорогие. Решено было сделать индикатор с высотой цифры 50мм из отдельных зелёных светодиодов.
С индикатором разобрались, но им нужно как-то управлять. При этом часы должны идти даже при длительном отсутсвии питания. Будем делать на МК ATTiny2313 и микросхеме RTC DS1307, которая так же имеет встоенный контроллер питания и позволяет подключить батарейку.
Делать будем, как я уже сказал, из отдельных зелёных светодиодов диаметром 5мм. Вот схема индикатора:
Пояснять тут особо нечего. Резисторы токоограничивающие, диоды нужны для красивого рисования цифр. В каждом прямоугольнике на схеме должен быть один разряд (схема у всех одинаковая), по середине — разделительное двоеточие.
2. Основная часть.
Схема, как я уже говорил, на ATTiny2313 и DS1307. Вот она:
Тут уже пояснения требуются. Справа два сдвоенных семисегментника и два светодиода — внутренняя схема маленького индикатора с ОА. Зачем два индикатора? Ночью большой индикатор ярким свечением может мешать спать (часы будут около кровати), по этому индикацию можно переключить на маленький индикатор переключателем SW1. В положении «Ночн.» работает маленький индикатор, в положении «Дневн.» — большой. Этот маленький индикатор я достал из стиральной машины, распиновка есть на печетке. Батрейка на 3В, CR2032. Транзисторы Q1-Q4 можно заменить на любые другие маломощные PNP транзисторы, например на КТ315. Q6-Q9 — на PNP током КЭ не менее 1А, Q5 — на NPN с током коллектора не менее 0,4А. Блок питания может быть любой с напряжением 9-20В, полярность не важна, можно даже переменку пускать. Ток не менее 1А. Стабилизатор U4 нужно установить на радиатор. Кстати, чем меньше входное напряжение — тем легче живётся стабилизатору. У меня БП такой:

Теперь переходим к сборке.
Идём в магазин и покупаем детали.

Делаем платы и начинаем паять. Запаять 88 светодиодов, столько же резисторов и 44 диода — не легко, но оно того стоит.


Теперь соединяем всё проводами. Я использовать шлейфы и разъёмы PLS/PBS. Вам помогут эти картинки: