Оглавление:

Пипбой, построенный из металлолома: 26 шагов (с изображениями)
Пипбой, построенный из металлолома: 26 шагов (с изображениями)

Видео: Пипбой, построенный из металлолома: 26 шагов (с изображениями)

Видео: Пипбой, построенный из металлолома: 26 шагов (с изображениями)
Видео: 26 Вещей с AliExpress, От Которых ТЫ ОФИГЕЕШЬ / Безумные Вещи с Алиэкспресс + КОНКУРС 2024, Июль
Anonim
Image
Image
Создание сердца пипбоя
Создание сердца пипбоя

Это мой рабочий Pipboy, сделанный из случайного хлама из гаража и набега на склад моих электронных компонентов. Я нашел эту сборку сложной, и мне потребовалось несколько месяцев работы, поэтому я бы не стал классифицировать ее как полноценный проект для начинающих. Необходимые навыки включают работу с пластиком и деревом, электронику и программирование. Кузов построен из различных кусков пластикового лома, разрезанных и сваренных вместе. Я использовал Raspberry Pi 0 в качестве микроконтроллера с заголовком дисплея, прикрепленным к части контактов GPIO. Остальные контакты используются для управления светодиодами и подключения кнопок / элементов управления. Я написал пользовательский интерфейс в стиле «Pipboy» с некоторыми демонстрационными экранами на Python для завершения проекта.

Моими целями в проекте были:

  • Должен был работать, то есть действительно иметь дисплей, который что-то делал.
  • Я хотел, чтобы у него был «циферблат» для выбора разных экранов, поскольку он всегда выделялся для меня как знаковая часть пользовательского интерфейса в Fallout.
  • Вся сборка должна была быть завершена с использованием вещей, которые у меня уже были в гараже или в моем офисе (это не было полностью достигнуто, но я приблизился - более 90% из этого были найдены предметы или вещи, которые у меня уже лежали)
  • Должен быть пригодным для ношения

Одна цель, которой у меня не было, заключалась в том, чтобы сделать ее точной копией одной из игровых моделей - я предпочитаю создавать вещи «в стиле», поскольку это дает мне возможность адаптировать случайный мусор, который я нахожу, и позвольте мне быть немного более креативным. Наконец, да, я знаю, что вы можете купить их, но дело не в этом;)

Запасы

Запасы

  • Труба с широким отверстием (например, кусок сливной трубы)
  • Лом пластмассы (как для создания тела, так и в декоративных целях)
  • Маленький контейнер
  • Коврик из пенопласта
  • Raspberry Pi
  • 3,5-дюймовый дисплей
  • Поворотный энкодер KY040
  • 3x светодиода
  • 2x кнопки
  • Внешний аккумулятор
  • Проводка
  • Саморезы, клеи, краски, шпатлевка и т. Д.

Инструменты

  • Дреммель
  • Универсальный инструмент с фрезой и шлифовальной насадкой
  • Дрель
  • Файлы
  • Паяльник
  • Пистолет для горячего клея
  • Отвертка (и)
  • Острый нож
  • Пила

Шаг 1: создание сердца пипбоя

Создание сердца пипбоя
Создание сердца пипбоя

Первое, что мне нужно было сделать, это убедиться, что я могу получить дисплей и микроконтроллер в форм-факторе, с которым я могу работать. У меня был 3,5-дюймовый дисплей, который сидит как шляпа на контактах GPIO Raspberry PI, поэтому я решил использовать его. Я соединил его с Raspberry Pi 0 и убедился, что он работает нормально, есть несколько шагов, чтобы заставить Linux распознавать дисплей, через который вам нужно пройти.

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

Здесь также стоит отметить, что позже в сборке я столкнулся с проблемами производительности с этой настройкой - в основном с частотой обновления интерфейса между Pi и дисплеем, я расскажу об этом позже в сборке, но если я сделал это снова, я мог бы рассмотреть здесь другое оборудование.

Вот несколько полезных ссылок для этого:

www.raspberrypi.org/forums/viewtopic.php?t…

www.raspberrypi.org/forums/viewtopic.php?t…

www.raspberrypi.org/forums/viewtopic.php?f…

learn.sparkfun.com/tutorials/serial-periph…

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

Шаг 2: Картонный прототип

Картонный прототип
Картонный прототип
Картонный прототип
Картонный прототип
Картонный прототип
Картонный прототип

Я нашел несколько старых водосточных желобов / труб, которые можно было бы использовать для тела, но мне нужно было придумать дизайн фактической области экрана и панели управления. Для этого я просто сделал макеты из картона и приклеил их к трубе малярным скотчем. Первым был простой «ящик», но он казался слишком простым, поэтому я изменил его, чтобы сделать область экрана более интересной, и добавил отдельную область панели управления. Это более или менее стало окончательным дизайном (как вы увидите, было несколько настроек, но все близко).

Шаг 3: от прототипа к шаблону

От прототипа к шаблону
От прототипа к шаблону
От прототипа к шаблону
От прототипа к шаблону
От прототипа к шаблону
От прототипа к шаблону

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

Шаг 4: Добавьте чехол для экрана и Pi

Добавить чехол для экрана и Pi
Добавить чехол для экрана и Pi
Добавить чехол для экрана и Pi
Добавить чехол для экрана и Pi

Я хотел, чтобы углы области экрана были изогнутыми, и мне нужно было что-то, что действительно удерживало бы Pi и отображало внутри - моим решением было использовать небольшой пластиковый контейнер, который у меня был. Я вырезал отверстие в верхней части корпуса и приклеил через него емкость. Затем я склеил все стороны вместе. Я использовал суперклей с большим количеством пищевой соды, чтобы укрепить сварные швы. Позже я заполнил и отпилил / отшлифовал все, чтобы привести все в порядок и придать ему более «отформованный» вид.

Шаг 5: повторите для панели управления

Повторите для панели управления
Повторите для панели управления
Повторите для панели управления
Повторите для панели управления
Повторите для панели управления
Повторите для панели управления

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

Шаг 6: вырежьте трубу

Вырезать трубу
Вырезать трубу

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

Шаг 7: лицевая панель

Безель
Безель
Безель
Безель

Одна из проблем, которую я случайно поставил перед собой, заключалась в попытке придумать лицевую панель, которая заполняла бы область вокруг дисплея до краев контейнера. К сожалению, способ изготовления дисплея также не имеет ничего полезного в его конструкции (например, отверстий или чего-то еще), чтобы помочь установить его, поэтому лицевая панель также должна была удерживать дисплей на месте. Моя первая попытка (здесь) была смесью пластика и пены. В конце концов, я повторил это несколько раз, и это стало одной из самых сложных частей сборки. Ухудшается небольшими допусками и хрупким характером как самой лицевой панели, так и дисплея.

Шаг 8: Тест батареи

Тест батареи
Тест батареи
Тест батареи
Тест батареи
Тест батареи
Тест батареи

На этом этапе я задумался о том, как сделать это независимо от сетевого USB. Я протестировал различные батареи и обнаружил, что дисплей Raspberry Pi + на самом деле не потреблял столько энергии, и он был совершенно счастлив, работая даже на одном из моих небольших аккумуляторных блоков (халява с торговой выставки). Это было действительно удачно, так как пакет идеально поместился в щель внутри сборки (фото позже). Теперь мы можем временно связать основные компоненты корпуса вместе и запустить наш первый тестовый запуск на моей руке!

Шаг 9: Проверка пригодности

Тестирование пригодности
Тестирование пригодности
Тестирование пригодности
Тестирование пригодности
Тестирование пригодности
Тестирование пригодности

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

Шаг 10: Добавьте элементы управления и детализацию

Добавить элементы управления и детализацию
Добавить элементы управления и детализацию
Добавить элементы управления и детализацию
Добавить элементы управления и детализацию
Добавить элементы управления и детализацию
Добавить элементы управления и детализацию

Я хотел, чтобы серия красных / желтых / зеленых светодиодов образовывала индикатор, а также поворотный переключатель и как минимум 2 кнопки. Все они были прикреплены к секции панели управления - просто просверлить все нужные отверстия. Я также начал добавлять небольшие кусочки лома пластмассовых компонентов (в основном обломки комплектов), чтобы добавить деталей и больше интереса к корпусу и панели управления.

Шаг 11: восстановление лицевой панели № 3

Восстановление лицевой панели № 3
Восстановление лицевой панели № 3
Восстановление лицевой панели № 3
Восстановление лицевой панели № 3
Восстановление лицевой панели № 3
Восстановление лицевой панели № 3

Как я упоминал ранее, я боролся с лицевой панелью для этой сборки и несколько раз перестраивал ее. Это третья итерация, на которой я остановился. Мой подход здесь заключается в том, чтобы использовать оргалит и вырезать 2 разные формы, один мыслитель, а другой, а затем склеить (и скрепить) их вместе, чтобы сформировать средний рисунок. Эти формы позволили квадратному дисплею располагаться внутри него, а затем удерживали дисплей на месте внутри контейнера (как на рисунке 3). Это дало мне достаточно материала, чтобы использовать 4 очень маленьких винта в качестве приспособлений, которые я использовал, чтобы надежно закрепить его внутри корпуса, и это, в свою очередь, обеспечило бы устойчивость и безопасность экрана. Оглядываясь назад, я бы нашел дисплей, который поставлялся с некоторыми приличными вариантами крепления (или использовал 3D-принтер, которого у меня не было в то время).

Шаг 12: создание прототипа электроники

Создание прототипа электроники
Создание прототипа электроники
Создание прототипа электроники
Создание прототипа электроники

Я использую макетную плату для такой разметки своих простых схем, и, поскольку я часто делаю эту часть проекта в пространстве, отличном от конструкции основного корпуса, я также соединил ее с другим Raspberry PI. Здесь я использовал модель 3, которая дала мне немного больше возможностей для прямого подключения к ней и запуска встроенной IDE. Это просто облегчило мне быстрое прототипирование кода. Есть много других способов удаленного подключения / кодирования / отладки, это просто то, что я предпочел сделать здесь.

Дизайн здесь довольно простой, у нас есть;

  1. Поворотный энкодер - он использует землю и несколько контактов GPIO для управления направлением щелчка и кнопкой.
  2. Пара кнопок, они просто используют по одному контакту GPIO и общей земле
  3. 3 светодиода, каждый из которых имеет встроенный резистор, чтобы они не выскакивали, все идут к общей земле, но с отдельным выводом GPIO каждый, так что каждый может обрабатываться индивидуально.

Это дало мне 3 светодиода для моего датчика, поворотный энкодер для вращения через экраны на pipboy и 3 кнопки для управления действиями (один на поворотном энкодере и 2 отдельно подключенных). Это было почти все, что я мог уместить, и, учитывая, что дисплей занимает кучу контактов, в значительной степени потребляет то, что у вас есть на стандартном макете Pi GPIO. Однако для моих целей это было хорошо.

Второе изображение в значительной степени показывает окончательную внутреннюю компоновку, которую я использовал. Я провел здесь некоторое время, тестируя способы управления компонентами и проверяя, все ли это работает, прежде чем перенести это в основную часть сборки. Весь код находится на гитхабе.

Замечание о поворотных энкодерах. Я потратил кучу времени на написание своего собственного конечного автомата Rotary Encoder, чтобы отслеживать изменения высокого / низкого уровня GPIO и отображать их в положения вращения. У меня был смешанный успех здесь, я заставил его работать "в большинстве" случаев, но всегда есть крайние случаи и (де) подпрыгивание и т. Д., С которыми нужно иметь дело. Гораздо проще использовать готовую библиотеку, и есть отличная библиотека, которую можно установить для Python. Я использовал это в конце, так как это позволило мне сосредоточиться на интересной части сборки, а не тратить много времени на отладку. Все подробности для этого включены в исходный код.

Если вы новичок в Raspberry Pi, GPIO и электронике, я настоятельно рекомендую следующие руководства, которые проведут вас через все, что вам нужно для выполнения вышеуказанного макета;

projects.raspberrypi.org/en/projects/physi…

thepihut.com/blogs/raspberry-pi-tutorials/…

Шаг 13: перенос электроники в тело

Размещение электроники в теле
Размещение электроники в теле
Размещение электроники в теле
Размещение электроники в теле
Размещение электроники в теле
Размещение электроники в теле

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

Для кнопок я припаял некоторые удлинительные провода и использовал проволочную обертку для изоляции концов, это позволило мне собирать и разбирать их с корпуса (например, для тестирования, затем покраски и т. Д.). У Rotary Encoder уже были контакты, которые могли подключаться к разъемам Dupont, поэтому мне просто нужно было сделать несколько проводов нужной длины.

Над светодиодами потребовалось немного больше работы - для этого я решил использовать кусок пластика, который у меня был (обрезанный по размеру), чтобы сделать съемную панель для установки светодиодов. Затем я приклеил их горячим способом и припаял резисторы и провода. Это сделало съемный блок, который я мог устанавливать и снимать, и облегчал покраску и отделку.

Обратите внимание, что моя пайка ужасна, поэтому я оставил это простым и избегал слишком подробных / тонких деталей. На последнем изображении вы можете видеть, что у меня также было несколько очень крошечных широкополосных плат (5x5), я использовал один из них, установленный внутри, чтобы обеспечить панель для подключения всего к / от GPIO. В частности, это было полезно для создания общей шины заземления, которую я мог бы использовать и избежать большого количества заземляющих проводов, возвращающихся к Pi.

Затем я вырезал различные отверстия в контейнере, чтобы пропустить провода к Pi и подключить к GPIO. Этот дизайн позволил мне полностью избавиться от всего, если мне нужно (что я делал несколько раз, пока завершал сборку).

Шаг 14: Точная настройка посадки

Точная настройка посадки
Точная настройка посадки
Точная настройка посадки
Точная настройка посадки

На этом этапе я столкнулся с некоторыми проблемами "соответствия". Во-первых, использование разъемов dupont для проводки означало, что было трудно установить их на контакты с установленной крышкой дисплея, так как не было достаточного зазора по высоте. Я решил это, купив (это одна из немногих вещей, которые я действительно купил для этого проекта) небольшой удлинитель контактов GPIO, чтобы я мог поставить шляпу дисплея выше и оставить место для доступа к оставшимся контактам GPIO с помощью разъемов dupont.

Я также разрезал несколько небольших кусочков напольного коврика из пенопласта, чтобы сделать боковую прокладку внутри контейнера, это помогло установить дисплей Pi + в нужном месте и остановить его перемещение.

Шаг 15: модернизируйте поворотный энкодер

Модернизация поворотного энкодера
Модернизация поворотного энкодера

Поворотные энкодеры часто бывают (как и мои) с красивой блестящей современной ручкой в стиле Hi Fi. Это было совершенно не в характере сборки, поэтому мне пришлось придумать что-то еще. В своём случайном ящике деталей я наткнулся на старую шестеренку от дрели, которую я давно сломал. Это выглядело хорошо, но не подходило для поворотного энкодера. Мое решение здесь заключалось в том, чтобы опробовать различные дюбели, пока я не нашел тот, который подходит для поворотного диска, а затем вырезал его по форме, чтобы я мог использовать его в качестве «внутреннего кольца», чтобы установить зубчатый венец на поворотный энкодер, как более подходящую тему. контроль.

Шаг 16: внутренняя подкладка

Внутренняя подкладка
Внутренняя подкладка
Внутренняя подкладка
Внутренняя подкладка

Больше напольной плитки из пенопласта! На этот раз я использовал их для создания мягкой подкладки, чтобы сделать ее более удобной (но не слишком свободной). Вырезав отверстие в пенопласте, я смог поглотить часть «комка», который образует контейнер для Pi. В целом это сделало его более удобным для ношения. Не показано на этих фотографиях, но я сделал его немного больше, чем основной корпус, чтобы он был виден на концах, которые я позже нарисовал, и все это помогло добавить немного контраста и интереса к готовому элементу.

Шаг 17: добавление деталей

Добавление деталей
Добавление деталей
Добавление деталей
Добавление деталей

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

Шаг 18: Покраска и завершение сборки кузова

Покраска и отделка кузова
Покраска и отделка кузова
Покраска и отделка кузова
Покраска и отделка кузова
Покраска и отделка кузова
Покраска и отделка кузова

Меня не слишком заботила безупречная отделка - так как в любом случае предполагается, что она старая и хорошо использованная (на самом деле, я могу вернуться и в какой-то момент нанести на нее еще больше погодных условий). Но я действительно хотел, чтобы он выглядел как целостный и законченный объект, не скованный из случайного мусора (хотя это именно то, чем он был). Я прошел через множество итераций шлифовки, шпатлевки (мой любимый наполнитель для пластика - миллипут) и повторения. Затем несколько слоев грунтовки и краски, чтобы еще больше разгладить все стыки. Потом еще шлифовка, еще шпатлевка и еще покраска.

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

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

Шаг 19: кодирование

Кодирование
Кодирование

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

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

Мой дизайн кода пользовательского интерфейса достаточно прост, есть основной сценарий Python, который настраивает отображение, настраивает GPIO, загружает экраны и входит в бесконечный цикл обновления, ожидая пользовательских событий и обновляя отображение по мере необходимости. Кроме того, существуют различные сценарии поддержки, которые помогают заранее создавать экраны пользовательского интерфейса.

Основные используемые библиотеки:

  • pygame: я использую его в качестве движка для запуска пользовательского интерфейса, поскольку он позволяет мне рисовать произвольную графику, манипулировать изображениями, шрифтами, переходить в полноэкранный режим и т. д.
  • pyky040: Это обеспечивает управление поворотным переключателем и сэкономило мне много времени (большое спасибо Рафаэлю Янси за его выпуск.
  • RPi.
  • noise: для генерации шума Перлина, чтобы я мог создать случайную форму волны для экрана радио, которая выглядит более естественной.
  • очередь: я столкнулся с неприятной ошибкой с синхронизацией событий от поворотного энкодера и (очень) низкой частотой обновления ЖК-дисплея. В конце концов, я решил эту проблему, поставив в очередь входящие события от поворотного энкодера и снимая их по одному по мере обновления экрана.
  • os, sys, threading, time: все используется для стандартных функций Python

Замечание о дизайне обработки экрана. Экраны определяются как список имен в коде. Каждая запись в списке может иметь связанный с ним файл-p.webp

Содержимое этих файлов создается в другом месте (вручную или с помощью других сценариев), вывод которых сохраняется в виде файлов-p.webp

Есть странные исключения, когда кодируется несколько вещей - например, форма волны для случайного радиоэкрана, которая вычисляется в реальном времени и анимируется.

Если аналогия помогает, подумайте о дизайне пользовательского интерфейса как о чрезвычайно примитивном и простом веб-браузере - каждый «экран» похож на действительно простую веб-страницу, которая может состоять только из одного png, одного файла txt или их комбинации. Их содержимое не зависит и просто отрисовывается пользовательским интерфейсом, как браузер отрисовывает веб-страницу.

Вот ссылки на основные библиотеки, которые я здесь использовал:

www.pygame.org/news

pypi.org/project/pyky040/

pypi.org/project/noise/

Шаг 20: экран статистики

Экран статистики
Экран статистики

Ни один pipboy не был бы полным без классического экрана статистики силуэтов pipboy. Для этого мой друг создал статический PNG, который я просто показываю как заполнитель. Когда-нибудь в будущем я могу вернуться и сделать это более динамичным с каким-нибудь случайным представлением повреждений или чем-то подобным, но пока это статический экран.

Шаг 21: Экран инвентаря

Экран инвентаря
Экран инвентаря

Что-то, что всегда полезно в проектах Pi, - это возможность отображать основную информацию, такую как IP-адрес, его DHCP-адрес и т. Д. Я решил перегрузить экран инвентаризации как отображение «инвентаря» Pi - какой процессор, память, IP-адрес и т. Д. Я написал небольшой сценарий Linux, чтобы собрать эту информацию и просто перенаправить ее в текстовый файл с соответствующим именем (.txt), который затем система пользовательского интерфейса берет и отображает. Таким образом, если я когда-нибудь окажусь в другом месте, я могу запустить скрипт и взять новый файл.txt с обновленным IP-адресом и т. Д.

Шаг 22: Экран карты

Экран карты
Экран карты

Этот экран был одним из самых сложных для работы. Raspberry Pi 0 не поставляется с модулем GPS, но я хотел, чтобы карта имела некоторую достоверность того, где был Pi. Мое решение - отдельный скрипт, который извлекает IP-адрес Pi и использует https://ipinfo.io для поиска приблизительного местоположения. Ответ JSON фиксируется, а затем я конвертирую координаты, чтобы я мог вытащить плитку openstreetmap.org для приблизительного местоположения.

Плитки имеют несколько цветов, но я хотел, чтобы изображение в зеленом масштабе соответствовало внешнему виду и ощущениям Pipboy, и я не смог найти ни одного точно такого же, поэтому я написал фильтр зеленого масштаба на Python, чтобы переназначить цвета. плитки openstreetmap, а затем кэшировать новое изображение в файл png.

Во время описанного выше процесса создается текстовый файл с приблизительным местоположением и координатами, а фрагмент карты создается как png. Пользовательский интерфейс pipboy извлекает оба этих файла и накладывает их содержимое для создания работающего экрана карты (с точностью до разрешения IP-адреса для местоположения).

Шаг 23: Экран данных

Экран данных
Экран данных

Это просто тестовая карточка (сгенерированная другим скриптом Python и вывод в файл png), которая отображается, чтобы помочь проверить размер / макет. Я оставил это, потому что это все еще полезно для проверки того, сколько недвижимости мне нужно играть при создании макетов экранов.

Шаг 24: Экран радио

Радио Экран
Радио Экран

Наряду с экраном карты, это еще один экран, который действительно вызвал у меня много работы. Это единственный экран, на котором я играл с анимацией - и он в основном работает так, как задумано, но производительность по-прежнему остается проблемой с частотой обновления ЖК-экрана. Структура экрана представляет собой текстовый файл, содержащий некоторые случайно выбранные имена радио (это просто произвольные строки и не делают ничего, кроме отображения списка на экране), файл png, который содержит ось области графика (I написал другой сценарий для их генерации и создания png, чтобы я мог изменять шаги и т. д., если я хотел изменить внешний вид) и, наконец, наложил на это динамическую область, где я создаю "живую" форму волны с использованием шума Перлина. Использование шума Перлина помогает сделать сигнал более естественным, а не хаотически зашумленным, как это может быть при полностью случайной числовой последовательности. Здесь я использую 2D шума Перлина, 1D, чтобы генерировать пики и впадины вдоль линии, а затем 2-е измерение, чтобы изменять их во временной последовательности, чтобы пики и впадины поднимались вниз с приятным плавным ощущением, как будто частоты настроен.

Это единственный экран, на котором цикл pygame выполняет какую-либо реальную работу, поскольку в каждом цикле он должен вычислять новую форму волны, стирать часть экрана в этом живом и перерисовывать.

Шаг 25: Заключительные мысли

Image
Image
Последние мысли
Последние мысли

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

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

Шаг 26: открытие кода на Github

Код открыт на Github
Код открыт на Github

Наконец-то я нашел время открыть код на Github. Его можно найти по этой ссылке:

Рекомендуемые: