Доброго времени суток! Наверное, у каждого здесь была какая-то мечта или завидка из детства. Для многих это была железная дорога из ГДР.
Давайте может быть попробуем закрыть этот гештальт, заодно соберём полезное USB устройство DIY?
Рефлексия
Я вырос в 90х и начале 00х, жили мы в тотальной бытовой нищете. Но от дедушки нам осталась дача, куда меня отправляли иногда летом. У соседа по имени Витя была просто шикарная железная дорога от ГДРвской фирмы Piko, которой я страшно завидовал. Надо отдать должное, Витя мне давал погонять эту дорогу, но своей у меня никогда не было. Так и вырос :-)
Сейчас я живу в Германии и что-то рефлексировал на тему детства, потом взял и заказал себе на
местном Авито (он тут называется Kleinanzeigen — дословно «маленькие объявления») несколько моделей паровозиков и коробку с разными вагончиками, рельсами и прочим. Но ведь так неинтересно, верно? Гонять паровозики по рельсам мне не хотелось, решил поставить на стол и подарить им функционал.
Постановка задачи
Работаю я за компьютером и есть некоторые неудобства:
- Переключение раскладки: бывает, что печатаешь в один монитор, смотришь в другой, и получается полотно йцукена, а индикатор в трее малоэффективен, его не видно боковым зрением. Поэтому текущую раскладку можно отображать как-то ещё, например светодиодом.
- Блокировка рабочего стола: у нас на работе есть правило, что рабочий стол обязательно блокировать, кроме того я блокирую дома, что бы киска не прыгала. Проблема в том, что иногда я забываю это сделать, а если отошёл больше чем на пару минут, то мониторы засыпают и что бы понять статус, надо их разбудить (что занимает некоторое время, которое ты должен ждать и стоять как дурак). А если вводить пароль сразу, то есть приличный шанс отправить свой пароль в чат или ещё куда-то, если заблокировать забыл.
Я использую Linux уже много лет и там у меня настроено
переключение раскладки на CapsLock и светодиод CapsLock горит когда включена русская раскладка. Это очень удобно, раскладка переключается одним пальцем (мизинцем), кроме того аппаратно отображает статус раскладки — например на ноуте лампочка CapsLock встроена прямо в клавишу. В дороге или спонтанном месте хорошо, но есть проблемы всё равно — на клавиатуру я всё равно особо не смотрю, кроме того у меня дома вообще механика, там лампочки можно сказать что и не видно вовсе:
Для индикации блокировки использую ScrollLock — он загорается когда система заблокирована, и гаснет когда нет. Это очень ускоряет дело, можно сразу вводить пароль + enter, когда лампочка ScrollLock горит, пока вводишь мониторы как раз проснуться, а понимание статуса обезопасит от ввода пароля куда не следует.
Таким образом, сама напрашивается идея внешнего устройства, которое отображает это всё светодиодами в удобном месте на столе / под монитором / т.п. Какое-то время у меня был вариант для совсем ленивых —
выдранная из клавиатуры платка с диодами, но давайте сделаем более красиво: решил собрать небольшую диораму на столе с железной дорогой, что бы данный статус отображался семафорами.
Железная дорога
Порефлекировав, купил я на местном Авито следующие штучки. Брал всё рандомно, что было в наличии подешевле :-) Потом попытался немного посмотреть исторический бекграунд модели и прототипа.
Коробку с рельсами, пультами, вагончиками и парой локомотивов. За всё отдал 40€. Часть Piko, часть Lima.
Состояние в целом неплохое. Итого имеем: две стрелки, кучу рельс двух типов «квадратные» Piko и «реалистичные» от Lima. Два паровых локомотива и россыпь вагонов (в основном грузовые), так же два блока питания Piko Junior.
Локомотивы: один от Piko, второй от Lima. Паравозики совсем простые, явно какой-то начальный уровень. Судя по номеру 98 002 на паравозике Piko, это локомотив серии
Sächsische I TV, который строился с 1910 по 1914 годы. Но соответствие внешнего вида, мягко говоря, условное. Паравозик Lima — это прототип американского паравоза Alco 1930, к нему нашлась даже
инструкция. На ней стоит дата — октябрь 1970.
Грузовые вагоны — двух-осную платформу (MÄRKLIN H0 4514) докупил отдельно, цена что-то около 10€. Она нам пригодится что бы в неё поставить семейное фото :-)
И ещё немного вагонов, они уже очень простые, детализация совсем уже никакая.
Как видите, сет очень простой, но главное что у меня теперь есть много рельсового материала. Подумал я и приобрёл ещё дополнительные лоты:
Два великолепных локомотива Fleischmann: Электровоз 1336 E44 и паровоз 1351 BR 55. Обошлись по 44€ каждый. Обе модели производились с 1960 по 1970 годы. Состояние — «только из магазина».
Прототип паравоза родом из 1913-1921,
электровоза из 1932–1945 периодов. Сами локомотивы представляют 3 эпоху, то есть послевоенную западную Германию (ливрея DB).
Модели просто великолепные, это уже совсем другой уровень детализации. Металлические шестерни, поручни дверей сделаны отдельными проволочками, каждая деталь сделана просто изумительно. Их страшно было доставать из коробки, думал отломаю что-нибудь сразу. Соседу на даче Вите такое и не снилось конечно :-)
У электровоза имеется рычажок, который переключает тип питания — через рельсы или через пантограф.
Набор почтового поезда, четыре вагона Рейхсбанн (Fleischmann 5000, 5050, 5051, 5052). Отдал 30€ за всё. Вагоны баварской железной дороги второй эпохи, модели производились с 1970 по 1984 годы. Состояние — «только из магазина».
Детализация здесь на высшем уровне. У одного вагона даже приоткрыта дверь и там видно посылочки :-) Сделаны мельчайшие детали, ручки, заклёпки, перила и поручни. Их можно просто сидеть и разглядывать. Всё просто невероятно маленькое и миленькое.
Всё что Fleischmann — производство ФРГ, Piko — ГДР, а Lima — Италия. На коробках Fleischmann остались ценники в марках.
По сравнению с ними набор от Piko кажется просто дешёвой игрушкой с Алишки.
Итак, с паравозиками разобрались, но чем показывать-то статус будем? Для этого взял так же два семафора, так же оказались Fleischmann. Отдал 15€ за комплект из двух.
Вы только посмотрите на это! Мимишность просто зашкаливает :-) Семафоры полностью металлические, и очень аккуратно сделаны. Имеют два сигнала — красный и зелёный.
А внутри — совсем не светодиоды, как я думал, а супер миниатюрные лампочки! Лампы на 16 вольт.
Ну и напоследок, что бы оживить это всё дело — набор из деревьев масштаба H0.
USB HID устройство
Теперь, для управления всем этим нам нужны мозги. Вообще, в том что бы помигать диодами нет никакой хитрости, берём любую Ардуину и через UART управляем. Но такое решение будет требовать софта на компьютере, а это не наш метод — устройство должно работать без драйверов и с любым компьютером. Поэтому реализуем USB HID устройство, именно через этот протокол работает подавляющее большинство перефирии, такие как мышки с клавиатурами.
В качестве базы выбрал микроконтроллер STM32, давно хотел с ними познакомится — низкая цена, поддержка аппаратного USB и целая куча фич. Вообще, в Ардуино есть вариант тоже сделать HID устройство, но там реализация не самая прямая, через загрузчик и прочее.
Заказал на Амазоне несколько плат
STM32F103C8T6 Blue-Pill на тест, с доставкой завтра – цена около 10€ за две штучки, на алишке можно взять значительно дешевле (что-то типа 2€ за штучку). Для заливки и отладки у меня уже был JTAG адаптер (который купил для отладки Zigbee), что-то типа 15€ на Алишке, он отлично работает и определяется как родной (хотя явно не оригинал). Работает с GDB.
Первое с чем столкнулся — странная ситуация со штатной средой разработки, официальная
STM32Cube имеет генератор когда, а так же требует Python 2.7 (у которого EOL была объявлена 13 лет назад), в ней надо собирать проект, пример использования
можно посмотреть тут.
Хотелось разобраться с чем-то более DIY-like, например с замечательной средой
PlatformIO, которая на мой взгляд намного удобнее. Делать будем на базе универсальной
RTOS Zephyr. Но, так же как и со ST – примеры есть, но они плохо документированы, однобоки и перегружены часто. Ключевой находкой было
репо на Github – какая то реализация клавиатуры. Спасибо тебе большое, автор! Удалось найти внятный и короткий пример.
Собираем прототип, подключаем USB и JTAG (JTAG <-> Плата):
- GND <-> GND
- 3V3 <-> 3V3
- SWCK <-> SWCK
- SWIO <-> SWO
Клонируем
мой проект с GitHub и открываем в IDE (я когда начинал разбираться — сделал на базе из одно
HID примеров). И собираем:
platformio run --environment bluepill_f103c8
, VSCode автоматически скачает и поставит все зависимости.
Я наверное не буду тут расписывать подробности написания прошивки. Если вам интересно, можно почитать
пост у меня в блоге.
После сборки и заливки прошивки, подключаем устройство по USB и видим сообщения о том что оно определилось:
[12607.715775] usb 1-6.4.2: new full-speed USB device number 16 using xhci_hcd
[12607.865551] usb 1-6.4.2: New USB device found, idVendor=f109, idProduct=0001, bcdDevice= 3.05
[12607.865562] usb 1-6.4.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[12607.865567] usb 1-6.4.2: Product: LED indicator
[12607.865571] usb 1-6.4.2: Manufacturer: PWS
[12607.865575] usb 1-6.4.2: SerialNumber: 1
[12607.877078] input: PWS LED indicator as /devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6.4/1-6.4.2/1-6.4.2:1.0/0003:F109:0001.000B/input/input35
[12607.936300] hid-generic 0003:F109:0001.000B: input,hidraw4: USB HID v1.11 Keyboard [PWS LED indicator] on usb-0000:00:14.0-6.4.2/input0
[12607.937311] input: PWS LED indicator as /devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6.4/1-6.4.2/1-6.4.2:1.1/0003:F109:0001.000C/input/input36
[12607.937531] hid-generic 0003:F109:0001.000C: input,hidraw5: USB HID v1.11 Device [PWS LED indicator] on usb-0000:00:14.0-6.4.2/input1
Обратите внимание: появляется два устройства — клавиатура и generic-устройство, оно нужно что бы читать дополнительные команды для управления (об этом позже).
Подключаем светодиоды и убеждаемся что всё работает, на пинах A0, A1, A2 появляется статус CapsLock, NumLock и ScrollLock соответственно. На эти пины можно повесить индикаторные светодиоды напрямую, диодов у нас маловато для перегрузки.
Дополнительный канал HID
Как можно заметить, светофора у меня два, итого 4 сигнала, а лампочек на клаве только три :-) Я решил сделать так — один светофор (который маневровый) отображает состояние CapsLock (русская раскладка включена) и ScrollLock (рабочий стол заблокирован), а NumLock мне наверное не нужен. Второй светофор будет управляться отдельным каналом USB HID, где можно выводить любое состояние из ОС. Например — состояние мониторинга. Зелёный — всё хорошо, красный — надо посмотреть.
Для этого добавляем ещё один интерфейс HID, уже просто generic, дескриптор можно просто скопировать из примеров:
static const uint8_t hid_led_desc[] = {
HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP),
HID_USAGE(HID_USAGE_GEN_DESKTOP_UNDEFINED),
HID_COLLECTION(HID_COLLECTION_APPLICATION),
HID_LOGICAL_MIN8(0x00),
HID_LOGICAL_MAX8(0x01),
HID_REPORT_ID(0x01),
HID_REPORT_SIZE(8),
HID_REPORT_COUNT(1),
HID_OUTPUT(0x01),
HID_USAGE(HID_USAGE_GEN_DESKTOP_UNDEFINED),
HID_INPUT(0x02),
HID_END_COLLECTION,
};
И регистрируем интерфейс вторым. Из-за этого у нас теперь именно два виртуальных девайса в dmesg.
Теперь добавляем правило, которое разрешит запись туда:
SUBSYSTEMS=="usb", ENV{ID_USB_INTERFACE_NUM}="$attr{bInterfaceNumber}"
SUBSYSTEM=="hidraw", SUBSYSTEMS=="usb", ATTRS{idVendor}=="f109", ATTRS{idProduct}=="0001", ENV{ID_USB_INTERFACE_NUM}=="01", MODE="0666", SYMLINK+="hidraw-led-indicator"
С таким правилом, индикатор появится в системе как файл устройства
/dev/hidraw-led-indicator, в которое можно писать любым софтом,
скриптом или прямо из баша:
echo -ne '\x00\x01' > /dev/hidraw-led-indicator
Второй байт управляет состоянием, бит 0 зажигает красный, бит 1 зажигает зелёный. Дальше уже можно всё что угодно повесить для вывода какого-то статуса чего-то.
Весь код прошивки на Github:
github.com/petrows/keyboard-led-indicator
Собственно инсталляция
Итак, у нас уже почти всё готово, можно собирать воедино. Сразу предупрежу что я не претендую на создание чего-то реалистичного, у меня просто нет материалов для диорамы.
Для начала, надо сконвертировать мимишные семафорчики в светодиоды. Теплые лампочки — это прикольно, но рабочее напряжение аж 16 вольт, для питания надо делать транзисторные ключи и отдельный блок питания. Вы когда-нибудь видели клавиатуру с блоком питания? И я нет :-)
Разбираем семафорчик и вынимаем лампочки. Прошу не обвинять в вандализме, конверсия обратимая. При необходимости можно припаять площадку для ламп отдельно.
Мне повезло — 3мм светодиоды просто идеально подходят, ничего не надо дорабатывать. Только припаять катод к пружинке, которая прижимала лампочки, т.к. «минус» семафорчикка это весь корпус.
Теперь собираем всё — закрывается оригинальной крышечкой, включаем и проверяем.
Подобрал сопротивления, что бы при 3.3 В была примерно одинаковая яркость красного и зеленого диода, получилось 100 Ом красный, 60 Ом зеленый. Второй семафорчик оснастил белым и синим диодом, будет как бы маневровый семафор (так же установка маневрового семафора на мачте допускается, так что всё вроде верно). Синий и белый диоды существенно ярче, поэтому сопротивления 300 и 600 Ом соответственно.
Для основы взял кусок старого стола, полку 570х250 мм, к ней приклеил кусок из обрезков зеленого ковролина — сойдёт за траву :-) Примеряем рельсы и прикидываем где у нас будут семафорчики. Тут понимаем одну проблему — семафорчик видно хорошо только «в лицо», а сбоку намного хуже. Что бы компенсировать это, рельсы сделал чуть по диагонали, так же развернул семафорчики немного к себе.
Фрезеруем каналы для проводов, печатаем коробочку для платы, собираем всё вместе.
Втыкаем деревца, теперь выглядит намного живее! Так же в коробке с рельсами нашлась труба для заправки паравоза водой, поставил между путями.
Устанавливаем паравозики и любуемся :-) Я пока не решил, какой именно будет конфиг поездов, начала пока с такого.
Вот так вот получилось. Смотреть на статус раскладки и блокировки стало теперь немного приятнее :-)
Выводы
Данное поделие будет работать без драйверов в любой OS. Я думаю отнесу инсталляцию на работу, поставлю на стол, коллеги будут умиляться, а если кто-то будет гонять мой стол, пока меня в офисе нет, то клавиатуру тоже будет отображать. Семафорчики имеют весьма ограниченный угол обзора, возможно надо использовать какие-то другие, либо аккуратно выставлять положение.
Управление вторым каналом HID тоже должно без проблем работать в Windows или OSX, используя модули Python или файлы устройства.
Можно использовать более комплексные светофоры, где несколько сигналов или есть жёлтный, но на Авито такого не было, а за новый хотят 50€. Если попадётся и будет настроение, может доработаю.
Можно использовать электромеханический семафор
Можно использовать электромеханический семафор, у которого палка управляется электромагнитом и меняются светофильтры у лампы через рычаги. К сожалению в тот момент таких в продаже за малый прайс не было, а за новый хотят 50€. Ну и кроме того он может только взаимоисключающий сигнал отображать, хотелось оставить опцию отображения сигналов независимо (отображать ошибки там например).
Можно использовать ёлочку уже с гирляндой для создания новогоднего настроения
Всем хорошего настроения :-) Подписывайтесь на
мой канал в Телеграм, где я пощщу всякие свои поделки.
А через год-два родители купили мне PIKO и началась совсем другая история. ЧТо интресно, буквально месяц назад для детей коллеги на работе немого отпрофилактил два локомотива TTшного типоразмера. В основном шлифовка колёсных пар и выправление скользящих контактов.
Набор железной дороги был куплен либо в Ленинграде, либо в Киеве и привезён в Зап.Сибирь. Отец туда ездил в командировки, набор был куплен во второй половине 1970х годов. Производство Германии — либо ГДР, либо ФРГ.
Спасибо за пост. Очень интересно.
ну не все так там и страшно.
самый простой способ был квадратная батарейка (на 4.5 вольт) и подключаешь ее по разному. хотя к любой набор шел простой пульт на две квадратные батарейки.
для продвинутых и тем кому повезло покупался большей блок управления от puko (как помню в 70 годах он стоил аж 10 советских деревянных рублей). там уде был регулируемый выход + � 12 и отдельный на 16 переменки для всякой перифирии.
сейчас кому инТересно можно БУ найти и простые и продвинутый. А если с пояльником и ардуино в ладах модно спаять на основе ардуино и драйвера двигателя.
Автор просто адаптировал его к фактическому положению вещей :-)
совыпаровоза на глобус :) Не, я без стеба. Паровозики понравились и автор рукастый. Но цель позабавилаps: у меня ровно тоже самое, как у вас. Блокировка автоматом. Но подождать 7 секунд, пока проснется монитор никогда не было проблемой
Яростно плюсую!
Но как меня поправил друг — фанат жд, семафоров нет уже более 50 лет.
Это всё светофоры.
Но я подумал что механика уже наверное ту мач будет, кроме того у него сигналы взаимоисключающие, хотелось зарезервировать опцию что бы два сигнала могли независимо отображаться (показывать ошибки там например одновременно красный+зелёный или что-то такое)
По цветам уж как Вам задумалось можно делать.
Года 3 регулярно гонял по кругу.
Покупались различные домики для склейки.
Лет в 9 наконец купил в магазине Лейпциг 4 механических стрелки.
Потом еще вагоны разные, полувагон, рефрижератор, хопер… Это что помню. Все вагоны действительно произведение искусства. Просто ставь на полку под стекло.
Ну а дальше наступил период забвения. Учеба и т.д.
Но все это использовалось максимально бережно, даже маленький очень ценил и обращался максимально аккуратно
Примерно через 30 лет отдал это все своему 6 летнему сыну. Он уходил весь набор в хлам за 1.5 года…
Изобилие не воспитывает бережливости
Сейчас отношение сломалось — купим новое.
В свое время бывшая часто по командировкам моталась и избаловала. Из каждой поездки тащила игрушку
— У меня было тяжёлое детство -8 битные игрушки, а
я ему парирую
— Это у меня было тяжёлое детство, если бы мальчиком не родился — воопще бы играть нечем было, а у тебя Dendy была с клавиатурой, монитором и принтером ))))
Бейсик, текстовый редактор, пишущяя машинка, и, помоему, музык. Редактор, — всего 8 пунктов. ( Сорри, чтото фото не вставляется)
Что значит «была»? Мне всего 62 и я до сих пор играю. Ещё в далёких 80-х, в нашем маленьком городке было всего 1,5 млн населения и такие вещи не продавали, но я много ездил в командировки и в тч в столицы Мск, С.Ленинбург, Киев, Минск и там по немногу покупал- что попадется.
Потом играл со старшим сыном, затем с младшим… Но всегда раскладывали на полу. (((
Церковь ( кирха) 16 мм но смотрится величественно, особенно рядом с
Ну и конечно управлять с комп, с телеф, ардуинами — это не мой уровень, только в ручную… ( Сорри, пульты не нашёл ((((
Ну и конечно «почти мануал»
и ёлки… Можно наряжать на НГ.
ПыСы: ах да, вот тяга всего одна, тогда они стоили как крыло от боинга, при зарплате 135 р. нормальный паровозик с тендером стоил 80-90 р. Купил один тепловоз помоему за 35
В 82 был в DDR-овском Берлине, зашёл в магазин аж глаза разбежались, пустил слюну — обмена хватило только «на салфетки», промокнул скупую слезу…
но «Модели железных дорог» зачитывал до дыр,
так там все было вкусно расписано, про проектирование и изготовление, своими руками, всей модельной электрики и механики, состава и макета. Эти знания пригодились и в других увлечениях.
пс. Недавно, на юлито, прикупил почти всего Гюнтера Миля, перечитываю олду́,
надо бы и «Модели» тож приобрести)
Там детализация была похуже
(9 и 16 мм. от Китайского диагостини, купил по 1 вагону для примера)
и остановился на 12 мм. А детализация зависила от уровня — в относит. Дешёвых наборах было всё начального уровня ( стартовый набор) там всё по простому. А уже " колекционные" и продавались отдельно и стоили много дороже. К примеру выше у меня фото 2 х машинок, обе Татра для 12 мм. но автовоз стоил 1 р20 коп. А фура — 2р40коп.
И 2 одинаковые цистерны — одна стартовая вторая колекционная
.
Горячо рекомендую программульку. Ах да, название: EveryLang (у меня честно приобретённая Pro версия, но и обычной хватит). Статья на хабре с подробностями habr.com/ru/articles/424313/