Русский
Русский
English
Статистика
Реклама

Diy или сделай сам

Перевод Raspberry Pi и RetroPie делаем консоль для ретро-игр

23.11.2020 16:15:20 | Автор: admin
Для того чтобы создать собственную консоль для ретро-игр, которую можно будет подключить к любому телевизору или монитору, поддерживающему HDMI, понадобится примерно $50 и немного времени. В этом материале представлено полное пошаговое руководство по сборке и настройке игровой системы, основанной на одноплатном компьютере Raspberry Pi и на операционной системе RetroPie. RetroPie это замечательный проект, созданный специально для тех, кто хочет превратить Raspberry Pi или другие устройства в эмулятор для старых игр.


Подробности о RetroPie


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

В RetroPie используется EmulationStation система, поддерживающая все основные эмуляторы ретро-игр. Это позволяет играть на Raspberry Pi в игры, рассчитанные на платформы NES, SNES, Genesis, Atari и на многие другие. Меня всегда интересовал вопрос о том, почему проект RetroPie назван именно так, а не RetroPi, но я, похоже, отклоняюсь от основной темы. Поэтому продолжим разговор о нашей консоли.

Какой именно Raspberry Pi стоит использовать для запуска RetroPie?


RetroPie можно запустить на любом Raspberry Pi, но я порекомендовал бы использовать Raspberry Pi 4. Эта плата превосходит другие по быстродействию видеоядра, процессора, у неё больше памяти. А это расширяет диапазон игр, в которые можно будет комфортно играть. Рекомендую обратить внимание на Raspberry Pi 4 с 2 Гб оперативной памяти. Дело в том, что объём памяти, после достижения им определённого предела, не играет особой роли в деле эмуляции ретро-игр. Другими словами, если имеется достаточно памяти, возможности эмуляции ограничивают лишь мощность CPU и GPU.

Материалы и инструменты


Вот перечень материалов и инструментов, использованных в этом проекте.


1. Установка Raspberry Pi в корпус



Тут показан прозрачный корпус, а не корпус Flirc из перечня материалов

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

Если вы используете Raspberry Pi 3 или 4 советую выбрать корпус с радиатором. В частности, могу порекомендовать корпус Flirc. В нём есть пассивная система охлаждения для Raspberry Pi. В сущности, весь корпус это огромный радиатор, охлаждающий плату. Существуют версии этого корпуса для Raspberry Pi 3 и для Raspberry Pi 4.

Если вы планируете использовать корпус, не играющий ещё и роль пассивного радиатора, вам стоит подобрать такой корпус, в комплект которого входят радиаторы. А если вы создаёте игровую систему на базе Raspberry Pi Zero, то в качестве корпуса для платы можно использовать даже NES-картридж.

Обратите внимание на то, что ваша плата Raspberry Pi может выглядеть не так, как та, что показана на фотографиях. Тут, на самом деле, показан компьютер Raspberry Pi 3. А это руководство рассчитано на Raspberry Pi 4.

2. Загрузка образа RetroPie, предназначенного для записи на SD-карту



RetroPie

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

Мы собираемся установить RetroPie из образа, предназначенного для записи на SD-карту, то есть, фактически, даже не установить ОС, а воспользоваться снимком полностью работоспособной системы, не занимаясь её ручной установкой и настройкой.

В Raspberry Pi нет жёсткого диска. Для хранения данных используется microSD-карта. Там будут размещены файлы операционной системы и другие данные.

Для того чтобы приступить к процессу установки RetroPie, нужно скачать свежий образ. Существует три версии таких образов:

  • Для Raspberry Pi Zero, Zero W, A, B, A+ и B+
  • Для Raspberry Pi 2 и Raspberry Pi 3
  • Для Raspberry Pi 4

Вам нужно лишь выбрать образ, который подходит для вашего Raspberry Pi.

В Raspberry Pi A и B используются полноразмерные SD-карты. В Raspberry Pi B+, 2, 3 и Zero microSD-карты. Рекомендую использовать карту объёмом 32 Гб, что даст вам много места для ROM-файлов с играми, но подойдёт и карта меньшей ёмкости. Обратите внимание на то, что Raspberry Pi для работы требуется, как минимум, карта размером 4 Гб.

3. Подготовка SD-карты к работе с Raspberry Pi



Форматирование карты

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

Выбор формата карты


Если размер вашей карты 32 Гб или меньше её можно отформатировать с использованием файловой системы MS-DOS (FAT). Для карт размером от 64 Гб подойдёт файловая система ExFAT.

Форматирование в Windows


В Windows надо открыть Проводник, найти SD-карту, щёлкнуть по ней правой кнопкой мыши и выбрать в появившемся меню команду Форматировать. В появившемся окне нужно указать формат карты и запустить процесс форматирования.

Форматирование в macOS


Тем, кто пользуется macOS, нужно запустить Дисковую утилиту (Приложения > Утилиты > Дисковая утилита). В левой панели надо выбрать SD-карту, нажать на кнопку Стереть, выбрать желаемый формат карты, задать ей имя и запустить форматирование. В OS X Yosemite и в более старых версиях системы нужно сначала перейти на вкладку Стереть.

Обратите внимание на то, что при форматировании карты все данные, хранящиеся на ней, будут уничтожены.

4. Запись образа RetroPie на карту



Работа с Etcher

Для установки RetroPie мы будем пользоваться утилитой Etcher. Она работает и на Windows, и на Mac.

Загрузим её, установим, запустим, выберем SD-карту и загруженный образ, а после этого запишем образ на карту.

5. Подключение карты и периферии к Raspberry Pi



Подключение различных устройств к Raspberry Pi

Безопасно извлечём карту из кардридера и вставим её в Raspberry Pi.

Теперь подключим к Raspberry Pi игровой контроллер и телевизор или монитор. Подключим к плате питание. Рекомендуется всегда подключать к Raspberry Pi питание после подключения периферии. Благодаря этому плата сможет правильно распознать подключённые к ней устройства при загрузке.

Теперь Raspberry Pi готов к загрузке!

Если у вас есть USB-клавиатура можете подключить к плате и её. Ей можно пользоваться в процессе настройки системы (подробнее об этом ниже).

6. Подключение Raspberry Pi к интернету



Wi-Fi-меню RetroPie

Рекомендую подключить Raspberry Pi к интернету это облегчит добавление в систему игровых ROM-файлов и позволит узнавать дополнительные сведения об играх, вроде их рейтингов и описаний. Кроме того, подключение Raspberry Pi к домашней сети позволит удалённо работать с платой через SSH. Это пригодится для настройки системы без использования клавиатуры.

Если вы пользуетесь Raspberry Pi Zero W, 3 или 4, это значит, что в вашем распоряжении уже имеется Wi-Fi-адаптер, встроенный в плату.

Для подключения Raspberry Pi к сети достаточно войти в меню RetroPie и выбрать там пункт WIFI.

Потом можно подключиться к Raspberry Pi по SSH, открыв терминал (в Mac) или командную строку (в Windows) и выполнив следующую команду:

ssh pi@retropie# по умолчанию используется пароль raspberry

Если вы используете достаточно старый вариант Raspberry Pi, или если в вашей плате нет встроенного Wi-Fi-адаптера ROM-файлы можно переносить на устройство с использованием USB-диска. Но если вы хотите оснастить ваше устройство интернет-функционалом подключите его к сети по Ethernet или воспользуйтесь Wi-Fi-адаптером с интерфейсом USB.

7. Настройка SD-карты для использования всего доступного на ней объёма памяти



Настройка SD-карты на Raspberry Pi

Если размер вашей SD-карты превышает 4 ГБ, вы должны её особым образом настроить, иначе Raspberry Pi не сможет пользоваться всем её пространством. Для этого нужно запустить средство конфигурирования Raspberry Pi paspi-config.

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

Затем нужно выбрать пункт Expand Filesystem или expand_rootfs (то, как именно будет называться соответствующая команда, зависит от используемого дистрибутива RetroPie). После этого нужно перезагрузить Raspberry Pi. Тут вы можете обнаружить отсутствие на Raspberry Pi кнопки перезагрузки (если только вы не оснастили устройство такой кнопкой).

8. Подключение к Raspberry Pi


Теперь нам надо подключиться к Raspberry Pi с компьютера для того чтобы получить возможность загружать на устройство ROM-файлы с играми и редактировать конфигурационные файлы.

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

Есть разные способы подключения к Raspberry Pi с компьютера. Мне больше всего нравится подключение по SSH/SFTP с использованием FTP-клиента. Среди бесплатных FTP-клиентов я посоветовал бы FileZilla. Он отлично документирован, его хорошо поддерживают, есть его версии и для Mac, и для Windows.

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

Обратите внимание на то, что, так как в свежих версиях Raspbian Jessie SSH, по умолчанию, в целях повышения безопасности, отключён, вам, для подключения к Raspberry Pi по SSH, нужно будет SSH на плате включить. Но это очень просто.

Используйте следующие учётные данные для подключения к Raspberry Pi. По умолчанию используются имя pi и пароль raspberry.

Host: <IP-адрес платы> (смотрите ниже)Username: piPassword: raspberryPort: 22

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

Для того чтобы выяснить IP-адрес Raspberry Pi, выполните (в терминале на Mac-компьютере, или в командной строке в Windows) следующую команду:

ping retropie

Если вы используете не самую свежую версию RetroPie примените такую команду:

ping raspberrypi

Эта команда проверяет доступность устройства, попутно давая сведения о его IP-адресе. Опрос Raspberry Pi может занять некоторое время. Но если вы, в итоге, увидели сообщение Request timeout, это значит, что успешно выполнить команду вам не удалось. Если у вас под рукой есть USB-клавиатура можно подключить её к Raspberry Pi, загрузиться, нажать F4 для получения доступа к командной оболочке и выполнить следующую команду:

ifconfig

Эта команда немедленно выведет сведения об IP-адресе платы (inet addr: в разделе eth0).

9. Настройка игрового контроллера



Настройка игрового контроллера в RetroPie

Теперь пришло время настроить игровой контроллер. Рекомендую Buffalo Classic USB Gamepad. Это недорогое устройство, которое хорошо стыкуется с Raspberry Pi и продаётся в приятной упаковке.

На самом деле, вы можете воспользоваться самыми разными контроллерами, включая USB-контроллер для NES. Но при таком подходе играть можно будет в меньшее количество игр, чем при использовании более продвинутого контроллера, так как на контроллере для NES просто не хватит кнопок для некоторых игр.

Для того чтобы настроить контроллер так, чтобы им можно было бы пользоваться и в играх, и при работе с меню Raspberry Pi, достаточно загрузить систему при подключённом контроллере. Система предложит его настроить. Необязательно выполнять эти настройки сразу же к ним вполне можно вернуться и позже, нажав кнопку Start в меню RetroPie.

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

10. Поиск ROM-файлов с играми



Duke Nukem 3D

ROM-файлы содержат всё необходимое для запуска игр. В RetroPie установлена система EmulationStation, которая, с одной стороны, даёт пользовательский интерфейс нашей ретро-консоли, а с другой, помогает работать с ROM-файлами. В RetroPie имеется несколько предустановленных игр Quake, Duke Nukem 3D, Cave Story. Правда, в эти игры лучше играть, пользуясь клавиатурой, а не контроллером, так как у контроллера просто не хватает кнопок для игр, которые создавались для ПК. С помощью эмуляторов, встроенных в RetroPie, можно играть практически в любые консольные игры.

Правовое примечание


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

Хотя ROM-файлы для RetroPie можно найти на любом торрент-трекере, не стоит загружать файлы, размещённые там с нарушением авторских прав.

ROM-файлы, которыми можно пользоваться совершенно законно


К нашему счастью, в мире существуют и ROM-файлы с играми, которыми можно пользоваться, не нарушая чьих-либо прав. Например, множество таких файлов можно найти на MAMEdev.org. В следующих примерах мы будем пользоваться именно такими файлами. Это Gridlee и Super Tank.

11. Копирование игровых ROM-файлов



Копирование ROM-файлов через SFTP

Установить игровые ROM-файлы на нашу консоль можно через SSH/SFTP (то есть по сети), или воспользовавшись USB-диском. Есть и другие методы работы с такими файлами.

Вот моё руководство по работе с ROM-файлами с использованием USB-диска. Если ваш Raspberry Pi подключён к сети вы можете воспользоваться нижеприведёнными инструкциями.

Подключитесь к Raspberry Pi с помощью FileZilla и откройте папку /home/pi/RetroPie/roms.

Распакуйте ROM-файлы и скопируйте соответствующие папки в системные папки, предназначенные для игр с той платформы, на которую рассчитаны ваши ROM-файлы. Например, если вы хотите установить на консоль ROM-файл игры Super Mario Bros 3, то папку с игрой нужно поместить в директорию nes.

Игры Gridlee и Super Tank нужно скопировать в директорию mame, так как именно MAME поддерживает эмуляторы аркадных автоматов, которые не относятся к домашним игровым системам вроде NES, SNES или Atari.

После того, как копирование файлов завершено, Raspberry Pi надо перезагрузить.

12. Пришло время поиграть!



Игра Cave Story

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

13. Выход из игры


Для того чтобы выйти из игры, достаточно одновременно нажать на кнопки START и SELECT. После этого вы вернётесь в главное меню RetroPie.

14. Сохранение игр


Вот мой материал, посвящённый тому, как сохранять и загружать игры в RetroPie

15. Создание резервной копии SD-карты Raspberry Pi


Теперь, когда всё настроено и работает как надо, я посоветовал бы вам создать резервную копию образа, записанного на SD-карту. Так вы, если слишком далеко зайдёте в деле настройки RetroPie, всегда сможете вернуться к работоспособной конфигурации. Вот мой материал об этом.

Итоги


Надеюсь, это руководство помогло вам достичь цели и сделать именно такую консоль для ретро-игр, которая вам нужна.

В какие игры вы поиграли бы на ретро-консоли?



Подробнее..

Перевод Загрузка операционной системы с виниловой пластинки

25.11.2020 12:06:49 | Автор: admin
Большинство компьютеров загружаются с встроенного накопителя. Это может быть обычный жёсткий диск или SSD. Иногда они загружают ОС из сети, или, в крайнем случае, если загружаться больше неоткуда, с USB-флешки или с DVD. Как по мне так всё это скука смертная. Как насчёт загрузки ОС с виниловой пластинки?


10-дюймовая пластинка, время проигрывания которой составляет 6 минут 10 секунд при скорости 45 оборотов в минуту это загрузочный диск DOS размером 64512 байт

Для проведения этого необычного эксперимента персональный компьютер (а точнее IBM PC) подключён к проигрывателю виниловых пластинок через усилитель. Тут имеется маленький ROM-загрузчик, управляющий встроенным кассетным интерфейсом PC (который, пожалуй, никогда и никем не используется). Этот загрузчик вызывается BIOS в том случае, если все остальные способы загрузки не сработали (то есть загрузка с дискеты и с жёсткого диска). Проигрыватель воспроизводит аналоговую запись содержимого небольшого RAM-диска, предназначенную только для чтения, размер которой составляет 64 Кб. В этой записи имеется ядро FreeDOS, модифицированное мной так, чтобы его размер уложился бы в существующие ограничения. Здесь же есть компактный вариант COMMAND.COM и пропатченная версия INTERLNK, которая позволяет передавать файлы по принтерному кабелю и переделана так, чтобы она работала бы в FreeDOS. Загрузчик читает образ диска с пластинки через кассетный модем, записывает образ в память и загружает с его использованием ОС. Полагаю, не так уж всё это и сложно.


Виниловый загрузчик в ROM (он ещё может быть записан на жёсткий диск или на дискету, но это уже будет нечестно)

Если немного углубиться в технические детали, то окажется, что перед нами некий симбиоз BootLPT/86 и 5150CAXX без поддержки порта принтера. Он тоже хранится в ROM, в слоте расширения BIOS, но это необязательно. Для подключения усилителя к компьютеру используется кабель, аналогичный тому, что применяется в 5150CAXX, но тут не используется передача данных от компьютера к подключённому к нему устройству.

Кассетный интерфейс это всего лишь выход, представленный каналом 2 таймера динамика PC и вход, который представлен 4 каналом порта C 8255A-5 PPI (PC4, I/O-порт 62h, бит 4). Для программной (де)модуляции используются возможности BIOS INT 15h.

Загрузочный образ это тот же 64-килобайтный образ RAM-диска BOOTDISK.IMG, ссылку на загрузку которого можно найти здесь. Данные образа, с использованием 5150CAXX, преобразуются в вид, совместимый с протоколом IBM cassette tape, а получаемый аудиосигнал уходит прямо в систему записи виниловых пластинок.

Запись осуществляется с использованием кривой выравнивания RIAA, которую предварительный усилитель обычно обращает в процессе воспроизведения звука. Но делает он это не идеально. А значит на усилителе нужно выполнить коррекцию сигнала. Именно поэтому я и воспользовался усилителем, так как мне не удалось получить нужный сигнал, подав звук на компьютер сразу от предусилителя. В моём случае, используя винтажный усилитель Harman&Kardon 6300 и интегрированный предусилитель MM Phono, мне пришлось убавить высокие частоты (-10дБ/10кГц), поднять басы (+6дБ/50Гц) и уменьшить уровень громкости до получения пиков примерно в 0,7 вольта, что позволило предотвратить искажения звука. Всё это делалось, конечно, при отключённой коррекции фазы и громкости.

Безусловно, кассетному модему совершенно наплевать на то, откуда именно приходит сигнал. При этом, конечно, важно, чтобы запись была бы чистой, не содержала бы щелчков и треска (винил) или недостатков, связанных с модуляцией или частотой сигнала (магнитная лента). Всё это может прервать поток данных. Правда, звук вполне может немного плавать, скорость воспроизведения может варьироваться в пределах 2-3%. Это не мешает правильной передаче данных.


EPROM-модуль с загрузчиком

Итоги



Загрузка компьютера с проигрывателя виниловых пластинок

Вот и всё! Если кому-то нужен загрузчик, сделанный для чипа 2364 (через адаптер можно использовать и чипы 2764), то его код можно найти здесь. Он рассчитан на работу с IBM 5150 с монохромным дисплеем и с как минимум 512 Кб RAM, что (вот уж совпадение) напоминает компьютер, с которым экспериментирую я. Ссылку на образ загрузочного диска можно найти в этом материале. А вот тот же образ, но уже в звуковом виде.

Приходилось ли вам загружать компьютеры с использованием каких-нибудь необычных способов?



Подробнее..

Перевод Низкоуровневое программирование STM32 от включения питания до Hello, World

27.11.2020 16:12:57 | Автор: admin
В этом материале я хочу рассказать о том, как писать программы для микроконтроллеров (Microcontroller Unit, MCU) Cortex-M, вроде STM32, используя лишь набор инструментов ARM и документацию, подготовленную STMicroelectronics. У некоторых читателей может появиться вопрос о том, почему кому-то это может понадобиться. Если вам эта идея, на первый взгляд, не показалась очень уж страшной, то, возможно, вам будет интересно то, о чём пойдёт речь в этом материале. И, кстати, подумаем о том, кому и зачем это может пригодиться.

Конечно, разрабатывать программы для MCU STM32 можно с помощью существующих фреймворков. Это может быть ST HAL, обычный CMSIS, или даже что-то, более близкое к Arduino. Но что тут увлекательного? Ведь, в итоге, тот, кто пользуется каким-то фреймворком, полностью зависим от документации к нему и от его разработчиков. И, с другой стороны, если документация к STM32 кажется кому-то, работающему с этой платформой, так сказать, бредом сивой кобылы, то можно ли говорить о том, что этот человек по-настоящему понимает данную платформу?



Поэтому давайте поговорим о низкоуровневом программировании STM32 и доберёмся от включения питания STM32 до Hello, World.

STM32 очень похож на компьютер


На низком уровне микроконтроллер не особенно сильно отличается от полнофункционального компьютера, основанного на процессоре от Intel или AMD. Тут имеется как минимум одно процессорное ядро, инициализирующееся после подачи и стабилизации внешнего питания. В этот момент производится считывание загрузчика, код которого находится по адресу, заранее известному микроконтроллеру. А в обычных компьютерах подобную роль играет BIOS. В случае с MCU это код, находящийся по определённому смещению в (обычно) интегрированной памяти, предназначенной только для чтения. То, что происходит потом, полностью зависит от этого кода.

В целом, этот код решает основные задачи по подготовке системы к работе. Например, задаёт таблицу векторов прерываний и записывает определённые данные в некие регистры. Очень важной задачей, кроме того, является инициализация указателя стека (Stack Pointer, SP). В начале работы системы некоторые данные из ROM копируются в RAM. В итоге вызывается функция main(), что похоже на запуск операционной системы обычного компьютера, выполняемый после завершения подготовки системы к работе средствами BIOS.

Пример Pushy


Возможно, аналогом Hello, World для STM32 можно назвать пример из моего фреймворка для STM32 Nodate, который я ласково называю Pushy. Он ещё проще, чем традиционный пример Blinky, так как он использует лишь регистры управления тактированием и сбросом (Reset & Clock Control, RCC) и базовые возможности интерфейса ввода/вывода общего назначения (General-Purpose Input/Output, GPIO). Код этого примера считывает входной регистр GPIO-пина и подстраивает значение на выходном пине в соответствии с входным. Благодаря этому можно, с помощью кнопки, включать и выключать светодиод. Вот код этого примера:

#include <gpio.h>int main () {//const uint8_t led_pin = 3; // Nucleo-f042k6: Port B, pin 3.//const GPIO_ports led_port = GPIO_PORT_B;//const uint8_t led_pin = 13; // STM32F4-Discovery: Port D, pin 13 (оранжевый)//const GPIO_ports led_port = GPIO_PORT_D;//const uint8_t led_pin = 7; // Nucleo-F746ZG: Port B, pin 7 (синий)//const GPIO_ports led_port = GPIO_PORT_B;const uint8_t led_pin = 13; // Blue Pill: Port C, pin 13.const GPIO_ports led_port = GPIO_PORT_C;//const uint8_t button_pin = 1; // Nucleo-f042k6 (PB1)//const GPIO_ports button_port = GPIO_PORT_B;//const uint8_t button_pin = 0; // STM32F4-Discovery (PA0)//const GPIO_ports button_port = GPIO_PORT_A;//const uint8_t button_pin = 13; // Nucleo-F746ZG (PC13)//const GPIO_ports button_port = GPIO_PORT_C;const uint8_t button_pin = 10; // Blue Pillconst GPIO_ports button_port = GPIO_PORT_B;// Установить режим вывода на пине, к которому подключён светодиодGPIO::set_output(led_port, led_pin, GPIO_PULL_UP);GPIO::write(led_port, led_pin, GPIO_LEVEL_LOW);// Установить режим ввода на пине, к которому подключена кнопкаGPIO::set_input(button_port, button_pin, GPIO_FLOATING);// Если кнопка нажата (переход от высокого состояния к низкому), то 'button_down' будет в низком состоянии в том случае, если кнопка будет нажата.// Если кнопка не нажата (переход от низкого состояния к высокому, к Vdd), то 'button_down' будет в высоком состоянии в том случае, если кнопка будет нажата.uint8_t button_down;while (1) {button_down = GPIO::read(button_port, button_pin);if (button_down == 1) {GPIO::write(led_port, led_pin, GPIO_LEVEL_HIGH);}else {GPIO::write(led_port, led_pin, GPIO_LEVEL_LOW);}}return 0;}

Тут можно сразу обратить внимание на два самых заметных элемента. Первый это функция main(), которую вызывает система. Второй это подключения модуля GPIO. Этот модуль содержит статический C++-класс, возможности которого используются для записи данных в GPIO-выход, к которому подключён светодиод. Его же возможности применяются и при чтении данных с входа, к которому подключена кнопка. Тут можно видеть ещё и упоминание имён пинов платы Blue Pill (STM32F103C8), но в примере имеются предустановки и для других плат, которые можно активировать, раскомментировав соответствующие строки.

Где именно в этом примере используются регистры группы RCC? В названии этих регистров содержится намёк на то, что они позволяют управлять тактовой частотой MCU. Их можно сравнить с переключателями, которые могут пребывать в двух состояниях включено или выключено, включая и отключая соответствующие возможности MCU. Если посмотреть, например, на описание регистра RCC_AHBENR в разделе 6.4 руководства по STM32F0xx, то мы увидим бит, маркированный как IOPAEN (Input/Output Port A ENable, включение порта ввода/вывода A), который управляет частотой для периферии, подключённой к GPIO A. То же касается и других портов.


Раздел 6.4.6 руководства по STM32F0xx, описание регистра RCC_AHBENR

Как можно видеть на вышеприведённой иллюстрации, RCC_AHBENR это регистр, отвечающий за включение AHB. Это одна из шин внутри MCU, к которой подключены процессорное ядро, SRAM, ROM и периферийные устройства.

Шины AHB (Advanced High-performance Bus) и APB (Advanced Peripheral Bus) описаны в спецификации AMBA фирмы Arm.


Раздел 2.1 руководства по STM32F0xx, архитектура STM32F0xx

В целом можно отметить, что AHB это более быстрая шина, соединяющая процессорное ядро со SRAM, ROM и с высокоскоростной периферией. Более медленная периферия подключается к более медленной шине APB. Между AHB и APB имеется мост, позволяющий устройствам, подключённым к ним, взаимодействовать друг с другом.

Низкоуровневое программирование


Как уже было сказано, первым при включении STM32 запускается код загрузчика. В случае с MCU STM32F042x6 универсальный код загрузчика, написанный на ассемблере Thumb, можно найти здесь. Это обычный код, предоставляемый STMicroelectronics (например, для STM32F0xx) вместе с CMSIS-пакетом. Он инициализирует MCU и вызывает функцию SystemInit(), объявленную в низкоуровневом C-коде CMSIS (вот пример для STM32F0xx).

Функция SystemInit() сбрасывает системные регистры, отвечающие за частоту, что приводит к использованию стандартной частоты HSI (High Speed Internal oscillator, высокоскоростной внутренний генератор). После выполнения процедур настройки libc (в данном случае используется Newlib вспомогательная C/C++-библиотека) она, наконец, вызывает функцию main() следующей командой:

bl main

Эта инструкция, название которой расшифровывается как Branch with Link (переход с сохранением адреса возврата), приводит к переходу к заданной метке. В этот момент мы оказываемся в функции main() нашего примера Pushy. После этого в дело вступают возможности класса GPIO.

Класс GPIO


Первый вызываемый нами метод класса это GPIO::set_output(). Он позволяет сделать указанный пин (с подключённым к нему повышающим резистором) выходным. Именно здесь мы встречаемся с первым различием между семействами MCU STM32. Дело в том, что более старые MCU, основанные на Cortex-M3 F1, имеют GPIO-периферию, очень сильно отличающуюся от той, которая используется в их более новых собратьях семейств F0, F4 и F7. Это выражается в том, что при работе с пинами STM32F1xx нужно записывать в единственный регистр множество опций:

// Управление вводом/выводом распределено между двумя комбинированными регистрами (CRL, CRH).if (pin < 8) {// Установим регистр CRL (CNF & MODE).uint8_t pinmode = pin * 4;uint8_t pincnf = pinmode + 2;if (speed == GPIO_LOW) {  instance.regs->CRL |= (0x2 << pinmode); }else if (speed == GPIO_MID) { instance.regs->CRL |= (0x1 << pinmode); }else if (speed == GPIO_HIGH) { instance.regs->CRL |= (0x3 << pinmode); }if (type == GPIO_PUSH_PULL) {  instance.regs->CRL &= ~(0x1 << pincnf); }else if (type == GPIO_OPEN_DRAIN) { instance.regs->CRL |= (0x1 << pincnf); }}else {// Установим регистр CRH.uint8_t pinmode = (pin - 8) * 4;uint8_t pincnf = pinmode + 2;if (speed == GPIO_LOW) {  instance.regs->CRH |= (0x2 << pinmode); }else if (speed == GPIO_MID) { instance.regs->CRH |= (0x1 << pinmode); }else if (speed == GPIO_HIGH) { instance.regs->CRH |= (0x3 << pinmode); }if (type == GPIO_PUSH_PULL) {  instance.regs->CRH &= ~(0x1 << pincnf); }else if (type == GPIO_OPEN_DRAIN) { instance.regs->CRH |= (0x1 << pincnf); }}

А в других упомянутых семействах MCU имеются отдельные регистры для каждой опции (режим, скорость, повышающий или понижающий резистор, тип):

uint8_t pin2 = pin * 2;instance.regs->MODER &= ~(0x3 << pin2);instance.regs->MODER |= (0x1 << pin2);instance.regs->PUPDR &= ~(0x3 << pin2);if (pupd == GPIO_PULL_UP) {instance.regs->PUPDR |= (0x1 << pin2);}else if (pupd == GPIO_PULL_DOWN) {instance.regs->PUPDR |= (0x2 << pin2);}if (type == GPIO_PUSH_PULL) {instance.regs->OTYPER &= ~(0x1 << pin);}else if (type == GPIO_OPEN_DRAIN) {instance.regs->OTYPER |= (0x1 << pin);}if (speed == GPIO_LOW) {instance.regs->OSPEEDR &= ~(0x3 << pin2);}else if (speed == GPIO_MID) {instance.regs->OSPEEDR &= ~(0x3 << pin2);instance.regs->OSPEEDR |= (0x1 << pin2);}else if (speed == GPIO_HIGH) {instance.regs->OSPEEDR &= ~(0x3 << pin2);instance.regs->OSPEEDR |= (0x3 << pin2);}

Запись опций в регистры выполняется с помощью побитовых операций, используемых для записи значений с применением битовых масок. Имена регистров обычно хорошо описывают их предназначение. Например PUPDR расшифровывается как Pull-Up Pull-Down Register регистр управления подтяжкой к плюсу питания или к земле.

То, в каком именно стиле работать, зависит от программиста. Однако, в случае с настройкой входных пинов, я предпочитаю более современный способ настройки GPIO. В результате получается компактный и аккуратный код, напоминающий следующий, а не тот ужас, который характерен для STM32F1xx:

uint8_t pin2 = pin * 2;instance.regs->MODER &= ~(0x3 << pin2);instance.regs->PUPDR &= ~(0x3 << pin2);if (pupd == GPIO_PULL_UP) {instance.regs->PUPDR |= (0x1 << pin2);}else {instance.regs->PUPDR |= (0x2 << pin2);}

Для чтения данных с входного пина мы пользуемся IDR (Input Data Register, регистр входных данных) для банка GPIO, с которым работаем:

uint32_t idr = instance.regs->IDR;out = (idr >> pin) & 1U; // Прочитать нужный бит.

Аналогично выглядит и использование ODR (Output Data Register, регистр выходных данных), с помощью которого осуществляется вывод данных на пин:

if (level == GPIO_LEVEL_LOW) {instance.regs->ODR &= ~(0x1 << pin);}else if (level == GPIO_LEVEL_HIGH) {instance.regs->ODR |= (0x1 << pin);}

И, наконец, в вышеприведённом коде имеется сущность instance, которая представляет собой ссылку на запись в структуре std::vector. Она была статически создана в ходе запуска MCU. В ней зарегистрированы свойства периферии:

std::vector<GPIO_instance>* GPIO_instances() {GPIO_instance instance;static std::vector<GPIO_instance>* instancesStatic = new std::vector<GPIO_instance>(12, instance);#if defined RCC_AHBENR_GPIOAEN || defined RCC_AHB1ENR_GPIOAEN || defined RCC_APB2ENR_IOPAEN((*instancesStatic))[GPIO_PORT_A].regs = GPIOA;#endif#if defined RCC_AHBENR_GPIOBEN || defined RCC_AHB1ENR_GPIOBEN || defined RCC_APB2ENR_IOPBEN((*instancesStatic))[GPIO_PORT_B].regs = GPIOB;#endif[..]return instancesStatic;}static std::vector<GPIO_instance>* instancesStatic = GPIO_instances();

Если периферийное устройство существует (то есть имеется в CMSIS-заголовке для конкретного MCU, например, для STM32F042), то в структуре GPIO_instance создаётся запись, указывающая на память, соответствующую регистрам этого устройства (regs). К этим записям, равно как и к мета-информации, содержащейся в них, потом можно обращаться. Например, можно узнать о состоянии устройства:

GPIO_instance &instance = (*instancesStatic)[port];// Проверяем, является ли порт активным. Если это не так - активируем его.if (!instance.active) {if (Rcc::enablePort((RccPort) port)) {instance.active = true;}else {return false;}}

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

Класс RCC


Класс RCC тоже интересуется тем, существует ли то или иное периферийное устройство. Делается это для того чтобы избежать разного рода сюрпризов. При этом используются те же определения препроцессора CMSIS. После проверки существования устройства включить его довольно просто:

bool Rcc::enable(RccPeripheral peripheral) {uint8_t perNum = (uint8_t) peripheral;RccPeripheralHandle &ph = (*perHandlesStatic)[perNum];if (ph.exists == false) {return false;}// Проверка состояния текущего периферийного устройства.if (ph.count > 0) {if (ph.count >= handle_max) {return false;}// Увеличение количества обработчиков на 1.ph.count++;}else {// Активация периферийного устройства.ph.count = 1;*(ph.enr) |= (1 << ph.enable);}return true;}

В дополнение к изменению значения соответствующего бита (ph.enable) мы подсчитываем ссылки. Это делается для того чтобы случайно не выключить периферийное устройство, которое используется в другом месте кода.

Запуск примера


После того, как мы разобрались с вышеприведённым материалом, у нас должно появиться некоторое понимание того, как пример Pushy работает на низком уровне. Теперь мы можем его собрать и запустить. Для этого нам понадобится, как уже было сказано, набор инструментов ARM и фреймворк Nodate. Первый можно установить с помощью используемого вами менеджера пакетов (речь идёт о пакете arm-none-eabi-gcc) или загрузив его с сайта Arm. Фреймворк Nodate можно установить с GitHub. После этого путь к корневой папке фреймворка нужно записать в глобальную системную переменную NODATE_HOME.

После того, как эти задачи решены, нужно перейти в папку Nodate, а потом в подпапку examples/stm32/pushy. В ней надо открыть файл Makefile и указать предустановки, рассчитанные на используемую плату (там сейчас есть предустановки для Blue Pill, Nucleo-F042K6, STM32F4-Discovery, Nucleo-746ZG). Далее, надо открыть файл src/pushy.cpp и раскомментировать строки, имеющие отношение к целевой плате.

Далее, в папке, в которой находится Makefile, нужно собрать проект командой make. Целевая плата должна быть подключена к компьютеру с использованием ST-Link, на компьютере должна быть установлена программа OpenOCD. Если это так MCU можно прошить командой make flash. После этого соответствующий образ будет записан в память устройства.

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

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

Надеюсь, я смогла показать то, что низкоуровневое программирование STM32 это совсем несложно.

Какие инструменты вы используете при написании программ для STM32?



Подробнее..

Перевод Стартап в Y Combinator сверхзвуковой самолет будущего

19.11.2020 18:06:36 | Автор: admin
image

Сверхзвуковой демонстратор XB-1, впервые выехал из ангара 7 октября 2020 года.

Основатель и гендиректор компании Boom Supersonic Блейк Шолль собирается создать аналог SpaceX для авиационной промышленности и со временем сократить среднее время межконтинентальных перелетов в два раза. Если предприниматель добьется успеха, время перелета из Токио в Сиэтл составит всего 4,5 часа, а стоимость будет сопоставима с современным бизнес-классом.

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

После презентации XB-1 7 октября 2020 года основатель и генеральный директор Boom Блейк Шолль провел ознакомительный тур по самолету, чтобы выделить ключевые компоненты конструкции XB-1.



Фюзеляж


Одна из самых явных сверхзвуковых особенностей XB-1 это его корпус. Протяженностью 71 фут, фюзеляж XB-1 рассчитан на скорость, снижающую лобовое сопротивление при полёте на сверхзвуковых скоростях, сказал Шолль.

image

Фюзеляж, выполненный в виде длинной тонкой трубы, отличается высоким коэффициентом тонкости (соотношение между длиной и шириной самолета) для максимальной эффективности. Инженеры Boom спроектировали фюзеляж, используя как физические, так и цифровые инструменты, такие как масштабированные модели ветра и вычислительный анализ, чтобы обеспечить быстрое воссоздание идеальной формы.

Корпус


На сверхзвуковой скорости на наружной поверхности самолета температура может достигать до 260 F. Каркас XB-1 из углеродного композита выдерживает этот нагрев и сохраняет форму в самых экстремальных условиях полета.

image

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

Дельтовидная конструкция крыла


Треугольная конструкция крыла XB-1 заметно отличается от дозвуковых самолетов, известных нам сегодня. Шолль объяснил: треугольное крыло XB-1 уравновешивает низкоскоростные характеристики при взлете и посадке с высокой скоростью.

image

Столь же прочная сколько и эффективная, уникальная конструкция крыла XB-1 была протестирована на безопасность при максимальной нагрузке в 60 000 фунтов силы.

Силовая установка


В кормовой части фюзеляжа XB-1 расположены три двигателя J8515, обеспечивающих максимальную тягу в 12 300 фунтов силы (фунт-сила). Эти три двигателя J85, разработанные General Electric, позволяют развивать сверхзвуковые скорости, добавил Шолль

image

Кабина экипажа


Одноместная кабина экипажа XB-1, расположенная на уровне линии видимости пилота, обеспечивает обзор во время взлета и посадки. Система переднего обзора, установленная в передней стойке шасси, добавляет второй вид взлетно-посадочной полосы во время посадки.

image

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

Носовая часть


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

image

Носовая часть создает точный вихревой поток для обеспечения стабильности в широком диапазоне скоростей полета, заключил Шолль.

Заглядывая в будущее


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

Когда демонстратор успешно пройдет серию тестов и испытаний, команда инженеров приступит к сборке полноразмерного судна Overture все чертежи для этого уже готовы. Overture это самолет нового поколения, рассчитанный на 100 пассажиров с уровнем комфорта бизнес-класс. По словам Шолля, разработка Overture обойдется в $6 млрд это примерно в 5,3 раза дешевле, чем создание лайнера Boeing 787 Dreamliner.




От каноэ до собранных самолетов: XB-1 приближается к рулежной дорожке

(оригинал From canoe to assembled aircraft: XB-1 approaches the taxiway)

image

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

Руководитель группы и инженер-технолог Руслан Пшиченко возглавил задачу, которую можно считать главной головоломкой: аккуратно разместить 725-фунтовую (328,854 КГ) конструкцию крыла в идеальном положении.

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

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

image

Члены команды, расположенные вокруг самолета, аккуратно устанавливают конструкцию крыла на место в рамках начальной подготовки.

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

image

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

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

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

image

Успешное завершение этого этапа открыло доступ к ключевым системам и позволило команде продолжить сборку.

Хотя COVID-19 представляет собой неоспоримые повседневные проблемы, команда доказала впечатляющую способность преодолевать невзгоды, балансировать в условиях ограниченных ресурсов и разрабатывать творческие решения.

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




Печатаем самолет будущего на 3д-принтере

(3D Printing the Future of Flight)

image

Компания Boom установила более 300 напечатанных на 3D-принтере деталей на свой сверхзвуковой демонстратор XB-1.

Мощные двигатели. Крепкие металлы. Прочное шасси.

Когда мы задумываемся о частях самолета, мы представляем практически неразрушимые материалы и узлы. На ум не приходят детали, напечатанные на 3D-принтере. Но достижения в области материалов и 3D-принтеров ускоряют процесс изменения, благодаря которым 3D-печать идеально подходит для создания прототипов, инструментов и летного оборудования, не говоря уже о запасных частях, интерьерах и даже элементов сантехники.

3D-печать меняет то, как мы проектируем и производим самолеты.

Для команды, создавшей XB-1, сверхзвуковой демонстратор Boom, 3D-печать оказалась неоценимой на каждом этапе сборки. На самолет установлено более 300 уникальных деталей. Но 3D-печать внесла в XB-1 больше, чем просто производство деталей.

Три 3D-принтера, три потребности


В начале сборки XB-1 команда Boom в партнерстве со Stratasys исследовала возможности 3D-печати, также известной как аддитивное производство. Программа ориентировалась на 3D-печать для удовлетворения трех различных потребностей: функционального прототипирования, поддержки инструментов и производства летного оборудования по запросу. Три принтера соответствовали потребностям сборки: Stratasys F900, 450mc и F370.

image

Stratasys F900, 450mc и F370

Рабочая лошадка, Stratasys F900 занимает центральное место в ангаре Boom. F900 печатает на нескольких материалах, включая ULTEM 9085 и ULTEM 9085 CG. Оба являются огнестойкими, высокоэффективными термопластами на основе смолы с высоким показателем прочности к весу, отличной термостойкостью и высокой ударной вязкостью. Команда использовала 9085 для печати сверлильных блоков и 9085 CG для сотен деталей, которые уже установлены на XB-1. 9085 CG поставляется с сертификатами соответствия, а также имеет лучшую прослеживаемость и контроль процесса, чем стандартный материал, что делает его идеальным для производства деталей самолетов.

Stratasys Fortus 450mc также может печатать на самых разных материалах. Команда разработала его для печати сверлильных блоков из FDM Nylon 12 CF, невероятно прочного материала. FDM Nylon 12 CF пропитан углеродным волокном, что делает его идеальным для печати жестких сверлильных блоков. Во время сборки титановой кормовой части фюзеляжа XB-1 команда использовала сотни сверлильных блоков, напечатав их за ночь. Это не только ускорило сборку, но и сократило время простоя команды.

Stratasys F370 обычно печатает из ASA, экономичного и менее прочного материала, который идеально подходит для быстрого создания прототипов и тестирования компонентов фитингов. Команда напечатала прототипы с F370, чтобы сжечь риск любых неожиданных столкновений (столкновение деталей или несовпадающие области, где детали соединяются или соприкасаются), а также для установки на существующее летное оборудование. Тестовая примерка с использованием деталей, напечатанных на 3D-принтере, позволила улучшить конструкцию, поэтому, когда команда в конечном итоге произвела детали, каждая из них подошла как перчатка.

Загляните внутрь Stratasys F900, поскольку он печатает летное оборудование XB-1. Более короткие компоненты слева представляют собой линейные блоки, удерживающие трубы для гидравлической системы. Большие воздуховоды справа являются частью ECS (Environmental Control System).



Функциональное прототипирование: создание идеальной примерки


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

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

image

Stratasys F900 это рабочая лошадка всего производства, способная печатать несколько деталей на своей массивной печатной платформе размером 3x2x3 дюйма.

Все принтеры были задействованы в создании прототипов от топливного коллектора до опор двигателя. Команда 3D напечатала передние узлы крепления двигателя, например, чтобы проверить совместимость с левым и правым двигателями. После нескольких итераций они успешно утвердили дизайн во время проверки на соответствие.

image

Несколько напечатанных на 3D-принтере итераций этой опоры двигателя подтвердили успешную проверку примерки.

image

Команда напечатала на 3D-принтере этот прототип механизма защелки для капота, чтобы кинематика соответствовала ожиданиям.

Инструменты: повышение точности и снижение возможный ущерб


В ходе сборки XB-1 команда использовала возможности F900 и 450mc для печати более 550 сверлильных блоков. Блоки поддерживали тщательную сборку титанового фюзеляжа вместе с другими печатными шаблонами, в том числе для переборки кабины.

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

image

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

Без 3D-печати сроки изготовления сверлильных блоков составила бы несколько недель, не говоря уже о десятках тысяч долларов, которые потребовались бы при изготовлении из алюминия. Благодаря собственной 3D-печати те же блоки можно было распечатать за несколько дней с меньшими затратами.

image

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

Металлические материалы: детали, напечатанные на 3D-принтере из титана, выдерживающие тепло


Благодаря значительным достижениям в отрасли теперь возможна 3D-печать практически из любых материалов. Для 3D-печати можно применять серебро, фотополимеры, материалы для стереолитографии (эпоксидные смолы) и даже титан.

Компания Boom заключила партнерство с VELO3D для производства металлических деталей, на изготовление которых в противном случае потребовались бы недели, если не месяцы. В общей сложности компания напечатала на 3D-принтере 21 деталь для XB-1, в том числе некоторые из самых сложных титановых деталей XB-1: коллекторы для регулируемых дренажных клапанов (VBV), которая удаляет избыточный воздух из компрессора двигателя.

В случае коллекторов VBV использование традиционных методов производства, таких как механическая обработка, сварка или литье, было бы непрактичным. Они смогли добиться желаемой геометрии детали только с помощью 3D-печати.

image

В результате партнерства Boom с VELO3D на XB-1 была установлена 21 металлическая деталь, напечатанная на 3D-принтере.

Легкие детали, напечатанные на 3D-принтере: кардинальное изменение для аэрокосмических инженеров


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

Детали, напечатанные на 3D-принтере, в зависимости от выбора материалов, могут быть значительно легче, чем их традиционные аналоги, изготовленные из стали и алюминия. На XB-1, который имеет более 340 уникальных деталей, напечатанных на 3D-принтере, общий вес имел существенное значение.

Теперь, когда производственная группа передала XB-1 группе наземных и летных испытаний, они обращают внимание на дизайн и конструкцию будущего сверхзвукового авиалайнера Boom.

А для Overture возможности 3D-печати кажутся безграничными, с возможностью 3D-печати деталей интерьера кабины, панели контроля полета и камбуза в дополнение к прототипированию, заправке топливом и летному оборудованию.

Достижения в области 3D-печати, подпитывающие эти возможности, откроют новые возможности для снижения производственных затрат, ускорения сроков производства и сокращения выбросов за счет создания более легких самолетов.




Запчасти, напечатанные на 3д-принтере

(Booms 3D Printed Aircraft Parts Reveal the Future of Manufacturing)

Технология 3D-печати штурмом захватывает мир производства. От дизайна потребительских товаров до медицинского моделирования все большее число компаний осознают ценность 3D-печати для быстрого прототипирования и производства.

Возможно, ни одна отрасль не видела такого серьезного влияния, как авиакосмическая промышленность. Согласно прогнозам, Boeing сэкономит до 3 миллионов долларов на каждом самолете за счет 3D-печати титановых деталей на 787 Dreamliner. Компания Honeywell сэкономила более семи месяцев на редизайне за счет аддитивного производства. Airbus удалось создать проставочные панели для верхних багажных отсеках на 15 процентов легче, чем это было возможно ранее.

image

Boom начал использовать 3D-печать более двух лет назад в рамках партнерства с мировым лидером Stratasys. С тех пор компания изготовила сотни деталей, инструментов и прототипов, напечатанных на 3D-принтере, и сэкономила тысячи часов рабочего времени. Stratasys и Boom недавно объявили о семилетнем продлении партнерства до 2026 года и продолжат реализацию творческих решений сложных проблем.

Выгода для Boom и многих аналогичных компаний огромны. Три наиболее заметных преимущества включают экономию времени, денег и веса. Многие детали самолетов по своей природе обладают сложной геометрией, отчасти из-за нехватки места и веса. До 3D-печати сложные детали фрезеровались из цельного блока материала, что часто становилось чрезвычайно дорогостоящим, кропотливым и трудоемким делом.

Насколько эффективна 3D-печать для Boom? Мы делимся пятью уникальными печатными компонентами, которые проливают свет на будущее авиастроения:

Регулятор тормозного давления


image

Регулятор тормозного давления используется для крепления компонентов, регулирующих давление подпорки в гидравлике отсека передней стойки шасси. Если бы эта деталь была сделана из алюминия, как это делается традиционно, на это потребовалось бы более 6 недель и 2 000 долларов. Этот летный образец распечатывался всего 9,5 часов и стоило 70 долларов за материалы.

Крепление для подключения телеметрии


image

Эта деталь служила креплением для оборудования при проверке телеметрического соединения. В рамках испытаний команда инженеров установила оборудование на Пайкс-Пик, 14000 (футов) в Колорадо, и подтвердила, что надежное телеметрическое соединение между самолетом и наземной станцией может поддерживаться на расстоянии до 200 миль.

Испытательная оснастка для системы управления полётом


image

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

Воздуховод для отбора воздуха из компрессора


image

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

Традиционная алюминиевая деталь была бы значительно более сложной в проектировании и затраты были бы примерно 4 недели и 4000 долларов. Для Boom на эту деталь потребовалось всего 14 часов и 150 долларов.

Поддон с полетным оборудованием


image

Это 94-часовое задание на печать, состоящее из более чем 70 деталей, было выполнено на машине Stratasys F900 Поддон с полетным оборудованием для различных систем самолета. Благодаря преимуществам электрической части, крыла, органов управления полетом, гидравлики и фюзеляжа, одна эта единственная работа сэкономила тысячи долларов и недели времени выполнения заказа по сравнению с традиционными методами производства.

Благодарим Дмитрия Кудрявцева и Варю Шеремет за помощь с переводом.

9 ноября 2020 стартовала бесплатная Школа стартапов для будущих основателей (Startup School for Future Founders от Y Combinator) от лучшего в мире акселератора и мы будем публиковать полезные переводы для тех, кто планирует стать основателем стартапа международного уровня.

Следите за новостями YC Startup Library на русском в телеграм-канале или в фейсбуке.

Полезные материалы


Подробнее..

Солнечная станция. Тепловизионное и электролюминесцентное тестирование своими руками

19.11.2020 20:15:16 | Автор: admin

Обзор типичных проблем, возникающих с солнечными станциями, и на что стоит обратить внимание, пока не стало слишком поздно. Основано на анализе 50+ домашних солнечных станций различного возраста.

Вступление

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

К количественным измерениям можно отнести измерение вольт амперной характеристики панели (IV Curve), но про это в другой раз.

Этой весной, наконец, все работы были завершены, мои http://personeltest.ru/aways/habr.com/ru/post/465133/ станции достроены и пришло понимание, что было бы неплохо проверить, всё что нажито непосильным трудом построенное.

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

Тепловизионное обследование солнечных станций

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

http://personeltest.ru/aways/habr.com/ru/post/457808/

http://personeltest.ru/aways/habr.com/ru/company/lamptest/blog/402071/

мой выбор пал на FLIR ONE Pro Gen3 (Тепловое разрешение 160 120, Оптическое разрешение 1440 1080), которого оказалось более чем достаточно для моих целей. Покупал слегка в б/у состоянии, за 400$.

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

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

Сфинкса видно издалекаСфинкса видно издалека

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

Халява объема не имеет Тестирование чужих станций переросло в хобби, и я проверил уже более 50 чужих станций, старшим из которых исполнилось более 5-ти лет, и в целом статистика накопилась довольно занимательная.

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

Основные проблемы, которые присутствовали на станциях - это пробитые диоды Шоттки

пробитые диоды Шотткипробитые диоды Шотткипробитые диоды Шотткипробитые диоды Шотткипробитые диоды Шотткипробитые диоды Шоттки

и конечно же плохие контакты.

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

И если плохой контакт устранить обычно довольно просто, то замена диода в современной панели выглядит совсем не тривиально. Гуглятся очень простые инструкции, по замене сгоревших диодов, да и сами диоды продаются в различных магазинах. Только вот вскрытие диодных коробок (junction box), на современных панелях, меня крайне огорчило.

современная диодная коробкасовременная диодная коробка

Всё залито компаундом и заменить диоды Шоттки совсем не так просто как раньше.

вскрытие показало, что пациент умер от вскрытиявскрытие показало, что пациент умер от вскрытия

Если диод не заменить, то он меняет характеристики панели (минус 1/3), и она потянет за собой весь стринг. В дальнейшем, диод рискует окончательно сгореть, что может привести и к пожару. Падение мощности панели на 33% является гарантийным случаем, и лучше всего обращаться сразу к поставщику. Самостоятельно вмешательство будет расценено как не гарантийный случай.

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

Нужно понимать, что из-за дефектов у Вас будут потери в генерации, которые Вам никто и никогда не компенсирует.

Ряд проблем с панелями возникал уже сразу после инсталляции, ввиду небрежного обращения с панелями, неаккуратной транспортировки или заводского брака.

каждое пятно - это повреждение панели, затенения нет, станции менее 6 месяцевкаждое пятно - это повреждение панели, затенения нет, станции менее 6 месяцевте же панели, крупный планте же панели, крупный планстанции исполнился месяцстанции исполнился месяц

Кто желает бесплатное обследование и для себя - может писать в личку или комментарии, но есть определенные ограничения по ГЕО фактору (Западная Украина), по крайней мере на данный момент. Последовательные отчеты об исследовании каждой станции выложены на форуме, внимание, Украинский язык.

По мере накопления и опубликования результатов тестирования, в меня начали лететь тапки начали поступать замечания, по поводу точности и корректности тепловизионной съемки. Теперь глаз уже наметан, и проблемы я нахожу намного быстрее. Но главный вопрос, а насколько всё было реально плохо и отвечало ли реальности - оставался открытым.

Частично найти на него ответ помогает следующий тип тестирования.

Электролюминесцентное тестирование солнечных панелей

В теории, этот метод тестирования может четко показать повреждения солнечной панели, оставалось проверить это на практике.

Электролюминесценция солнечных панелей (EL imaging solar cells), для краткости EL-тестирование, один из основных современных методов диагностики и тестирования солнечных панелей.

Метод основан на том, что кремниевые элементы начинают излучать в близком инфракрасном диапазоне (Near Infrared), при подключении их к блоку питания.

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

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

Первая - это необходимость подать нужный ток/напряжение на панель или стринг. Панель потребляет ровно столько, сколько должна генерировать. Для тестов единичных панелей можно использовать лабораторные блоки питания, или заказать собственный, цена вопроса в моем случае - напряжения до 80V и ток до 10A, составила ~80$.

2 пробитых диода2 пробитых диода

Для тестирования стринга одним махом, нужны качественно иные блоки питания, до 1000В, и цена их в разы выше. Для начальных задач, вполне хватает моего блока питания, но я уже присматриваюсь к чему то более мощному.

Вторая - но отнюдь не менее важная, это фотоаппарат или камера, способная снимать в ближнем инфракрасном диапазоне (NIR).

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

Основным рабочим инструментом рекомендуют фотоаппарат с CCD матрицей. Данная матрица неплохо регистрирует волны длиной ~950 нм. Всё что нужно - это удалить инфракрасный фильтр, стоящий перед матрицей и снимать в темное время суток.

Предложенные решения не удовлетворяли меня либо по качеству картинки, либо цене, либо функционалу.

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

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

CCD матрица - почти не встречается в современных фотоаппаратах, а если встречается, то ее размеры оставляют желать лучшего, как и фотоаппарата, в который ее запихнули. Можно купить профессиональный фотоаппарат из прошлого, за вполне разумные деньги, но время выдержки исчисляется 10-ками секунд, поддержки современных технологий нет от слова совсем (WIFI, pc live view, древние форматы карт и т.д.)

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

Осталось найти подходящего кандидата и рискнуть.

Но если ранее, любая новая матрица довольно подробно описывалась на многих технических ресурсах и каталогах товаров, то теперь почти во всех каталогах фильтр по матрицам убрали. Частично мне помог ресурс https://www.dpreview.com/products/search/cameras#!

После выбора сенсора, я смог выбрать то, что удовлетворяло по функционалу и присутствовало на вторичном рынке по разумной цене. Звезды сошлись на Samsung NX mini, с рулеткой и блекджеком BSI CMOS 1, Wi-Fi, RAW, которую удалось приобрести за символические 110$ в почти новом состоянии. Благодаря Wi-Fi я могу видеть и снимать панели дистанционно, что очень удобно в полевых условиях. По нужным параметрам находилось больше 10 камер, так что Вы сможете подобрать что то и на свой вкус и кошелек.

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

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

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

Теперь можно наглядно получить полное представление о повреждениях, полученных панелью.

испытание в домашних условияхиспытание в домашних условияхтак выглядят пробитые диодытак выглядят пробитые диодытак выглядят пробитые диодытак выглядят пробитые диоды

Фото в полевых условиях выходят не настолько качественные, но это временное явление.

повреждение ячеекповреждение ячеектак этот же участок видит тепловизортак этот же участок видит тепловизортут всё октут всё октут всё октут всё ок

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

"snail trails" "snail trails" отслоение подложкиотслоение подложкидо пожара оставался один шагдо пожара оставался один шаг

Для постройки домашней солнечной станции не нужны разрешения, и фантазия нарушений выходит далеко за рамки ПУЭ - построить без заземления, закопать СИП в землю, не верно подобранные сечения кабелей, построить домик Наф-Нафа и многое, многое другое.

Следующий этап развития проверок - это более глубокий анализ параметров панели, с помощью анализатора Вольт-Амперной кривой (IV Curve). Профессиональные приборы стоят от 1000$, но я нашел вариант намного бюджетнее, и не уступающее им по точности - https://www.instructables.com/IV-Swinger-2-a-50-IV-Curve-Tracer/, разработал очень адекватный и крутой инженер. Но про это будет уже в следующей части, платы пока только в пути.

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

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

Тем, кто хочет самостоятельно погрузиться в изучение своих станций тепловизором и/или электролюминесценцию, рекомендую начать со следующих документов

https://iea-pvps.org/wp-content/uploads/2020/01/IEA-PVPST13-012014ReviewofFailuresofPhotovoltaicModulesFinal.pdf

https://iea-pvps.org/wp-content/uploads/2020/01/ReviewonIRandELImagingforPVFieldApplicationsbyTask_13.pdf

Подробнее..

Из песочницы Как я собирал голограмму

20.11.2020 12:14:59 | Автор: admin
Решил собрать голограмму своими руками, но в итоге вместо картинки я получил разочарование. Стоило ли вообще в это лезть?

image

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

Маленькое уточнение!


Голограмма объёмное изображение, полученное голографическим методом, именно так написано в толковом словаре Ожегова. В современном толковом словаре русского языка Т.Ф. Ефремовой говорится, что голограмма это объемное изображение предмета на фотопластинке, полученное методом голографии. Выходит, голограмма это нечто плоское, но имитирующая объём.



К чему я это? А к тому, что сегодня в этой сфере огромная путаница с терминами! Сегодня многообразие объёмных и аэрозольных дисплеев, различного рода проекций обычно называют голограммами для того чтобы обыватели быстро вникали о чём пойдёт речь. Поэтому когда в новостях говорят про то, как голограмма известного человека появилась на сцене, то обычно, речь идёт о самой банальной проекции.



Бывают более продвинутые проекции, это уже аэрозольные экраны.



Речь в статье пойдёт об объёмных дисплеях, которые могут показывать объёмную картинку со всех ракурсов. Объёмные дисплеи условно делят на 2 типа:

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



Swept volume тип дисплеев с подвижным экраном, который работает за счёт персистенции. Такой тип я и пытался собрать.

Принцип работы


Персистенция, она же инерция зрения это способность глаза, соединять быстро сменяющиеся изображения в одно неподвижное. Представьте себе 2 картинки. Если они будут быстро сменять друг друга, то они сольются в одну. Наглядный пример это тауматроп:



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



Создание


Самый доступный для меня вид подвижного экрана вращающийся. Для этого разобрался старый вентилятор.



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



Когда я начал проецировать тестовые картинки, то я увидел радугу.



Дело в том, что уcтройство DLP проектора с одной матрицей основано на использовании вращающегося диска, выполняющего роль светофильтра. Он размещен между лампой и матрицей и поделен на три равных сектора: красного, синего и зеленого цветов. Проходя через окрашенный сектор, свет попадает на матрицу, отражается от микрозеркал, проходит через объектив и формирует на экране изображение соответствующего цвета. Затем свет проходит через следующий сектор фильтра и т. д. Изображение на экране воспринимается цветным за счет эффекта инерции зрения (персистенция). Если цвет изображения обновляется менее чем за 30 мс, человеческий глаз воспринимает его как равномерно окрашенное. Теперь мне стало понятнее почему рабочие образцы дисплеев так бедны на цвета.



Далее отказался от двух цветов RGB, начал проецировать и тут мои полномочия всё.



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



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



Затем я попробовал сделать развёртку мерцающей, но из-за несовпадения частоты вращения и мерцанием, картинка всегда проецировалась в разных местах:



Тогда я взял лист бумаги, поднёс его к вращающемуся экрану и записал количество ударов по нему во время вращения. Каждый щелчок это пик на аудиозаписи. Каждый щелчок, это один оборот. Затащил в программу для видеомонтажа и сделал мерцание сответственно оборотам. На деле же, сделать штык в штык не получилось. В итоге никакой разницы. Далее я пошёл на крайний шаг. Залепил зеркало бумагой, оставив тонкую полоску.



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



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

Чистая схемотехника

21.11.2020 12:09:13 | Автор: admin
1 минута на чтение. На написание: 14 часов.

Программисты постоянно ломают копья об оформлении кода, а мы что, хуже?

Цифровые схемы в большинстве своём скучны и неинтересны, так что оформлять будем аналоговые.
Ламповые приборы всегда гудели сочнее кремниевых, поэтому попробуем придать теплоту и ламповость современным схемам.

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

Кодекс это просто свод указаний, а не жёстких законов


Итак, цели:
Развлечься так с пользой;
Вернуть схемам теплоту старых добрых ламповых времён;
Придать удобочитаемость;
Добавить мемности;

Основное правило здравый смысл.

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

Обычное направление: вход слева, выход справа, но если по логике схемы они должны быть наоборот, значит, так и будет.

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

Если сделать всё ярким и разноцветным, то можно выставить на витрину и наверно продать подороже, но пользоваться будет невозможно. Поэтому будем искать компромисс.

Сейчас в тренде всё плоское, поэтому без объёмных, имитирующих вид реальных компонентов символов.

Хотим ламповости, поэтому поменьше углов. Редакторы схем всё же не Photoshop, так что в меру.

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

Результат


LED Driver


Voltage Regulator


Fully Differential Input Buffer


Differential Input Buffer


Заключение


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

В игру для Sega VR впервые удалось поиграть в HTC Vive VR спустя 25 лет после ее создания

22.11.2020 02:06:11 | Автор: admin

3D-видеоочки идея далеко не нового века, их неоднократно изобретали, реанимировали идею и снова изобретали. Sega была одной из технологических компаний 20-го века, которая собиралась ввести виртуальную реальность в массы.

В сентябре 1993 года она представила Sega Genesis VR 3D-шлем, который позволял играть в объемные игры. Очки были очень похожи по принципу работы на современные два ЖК-дисплея вместо линз, подключение к источнику картинки, трехмерность. Все это обещало революцию в мире видеоигр еще в 1993 году. Но, к сожалению, она не состоялась выпуск Sega VR отменили, и уже через полгода об устройстве никто не вспомнил. Но, как оказалось, тогда была разработана игра для 3D-очков от Sega, о которой стало известно только сейчас, четверть века спустя. И да, в нее удалось поиграть!

А еще удалось отыскать видео с презентации Sega VR прямо из 1993 года.


Что представляли собой очки Sega VR?


Впервые о них стало известно в 1991 году. Компания заявила о том, что за $200 геймеры со всего мира смогут получить устройство для воспроизведения объемного контента. Разрешение ЖК-экранов линз составляло 300*200 точек, у девайса были также наушники для стереозвука и система отслеживания движений головы. Эту технологию, кстати, разработала компания Ono-Sendai, здесь можно изучить патент.


Датчики обновляли информацию о положении головы 100 раз в секунду, так что трекинг был точным. Дизайн видеоочков был разработан в соответствии с идеей из фильма 1951 года День, когда Земля остановилась, устройствами из Звездного Пути и Робокопа.

Тогда компания пообещала выпустить сразу четыре игры на старте, и даже показала геймплей. Но потом что-то пошло не так. После анонса на CES-1993 устройство так и не было выпущено. Насколько известно, девайс мало кого впечатлил, а 40% тестировщиков укачивало из-за трехмерности к ней был никто не готов. В итоге, оценив риски, Sega решила закрыть проект.

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


Ну а теперь о главной находке игре, которой больше 25 лет


Один из цифровых археологов, Дилан Мэнсфилд, узнал от экс-разработчика из команды Sega VR о существовании игры под названием Nuclear Rush (спойлер действие происходит в 2032 году, электричество дефицит, горючих полезных ископаемых почти не осталось. Вы пилот и ваша миссия получить атомное топливо).

Исходный код игры оказался на 26-летнем CD вместе с инструментами разработчиков из команды Sega. Эти инструменты использовались для создания игр, так что эта находка здорово облегчила задачу восстановления Nuclear Rush.


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

Главная проблема компиляция исходного кода. Когда вы впервые получаете неизвестный исходный код, вы должны понять, как его создатели компилировали разработку. У вас далеко не всегда есть необходимые инструменты, заявил Рич Уайтхаус (Rich Whitehouse), автор проекта по восстановлению игры.

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

Авторам проекта повезло еще и в том, что на упомянутом CD содержался код другой игры, Monster Hunter (это не Capcom), с подробными комментариями о работе с видеоочками. Оттуда тоже удалось почерпнуть немало полезной информации. Все эти данные вместе с инструментами разработчиков 1993 года позволили восстановить игру и адаптировать ее к современным устройствам а именно к HTC Vive VR. Кстати, fps для игры от Sega около 15 кадров в секунду. Для современных игр этот показатель составляет 100 fps.

Немного технических подробностей


Большая часть кода Nuclear Rush написана на С. Компилируется все это при помощи компилятора Sierra 68000 C.

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


В ходе первой попытке сборки оказалось, что один из инструментов, DUMP.EXE, отсутствует. После изучения проблемы оказалось, что эта программа открывала файл и отправляла текст в стандартный вывод для каждого байта, чтобы двоичный файл мог быть принят ассемблером. Автор проекта смог написать аналогичную программу в Borland C++ 3.0 и все успешно скомпилировалось.

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

Игру удалось запустить, и автор увидел вот что:


Понятно, что игра не видела 3D-устройство и не могла его увидеть. Поэтому пришлось добавить пару строк для того, чтобы пропустить проверку:

wptr++; /* Skip number of sprites in frame */
wptr++; /* Skip hotspot offset */

wptr++;
wptr++;


Как только все это было проделано, автор проекта, наконец, увидел саму игру.


Ну а дальше автор провел немало времени за дебаггингом, решением крупных и мелких проблем, кроме того, ему пришлось научить игру обнаруживать современные 3D-очки взамен отсутствующего аксессуара Sega VR. Эти увлекательные подробности автор раскрывает здесь.

Как поиграть


Самое главное, да. Поиграть могут все желающие, для этого нужны:
Эмулятор Sega VR:
Репозиторий
Готовый эмулятор (Windows)

А потом игра:
Репозиторий
Сама игра (ROM для загрузки в эмулятор).

Подробнее..

Как сделать из планшетного USB-сканера сетевой с памятью, используя Raspberry Pi. Видеолекция с демонстрацией

23.11.2020 18:14:08 | Автор: admin
Раз уж сегодня посыпались публикации про Raspberry Pi, вставлю свои пять копеек. Выложил на днях на Youtube лекцию с демонстрацией, как из Raspberry Pi и USB-сканера сделать девайс для сканирования с сетевым диском, используя SANE, Samba и WiringPi, владея немного электрикой и bash-ем. Всё продемонстрированное эксплуатируется в реале, хоть и в несколько адаптированном виде. Интересующихся приглашаю посмотреть ну и покритиковать тут в комментах и карме. :)


Лекция получилась почти на 2 часа, так что, наверное, лучше смотреть прямо на Youtube; в описании к ролику есть оглавление. Возможно, при наличии времени дополню здесь текстом.
Приятного просмотра. :)
Подробнее..

Самодельный гироскутер

23.11.2020 20:22:46 | Автор: admin

Насмотревшись роликов на Youtube и на своих детей, пускающих слюни, на арендуемые гироскутеры решил попробовать свои силы в самостоятельной сборке данного устройства. Рассуждая о целесообразности сделать самому или купить, убедил себя, что это игрушка, причем сезонная, причем для моих детей погодок одним устройством не обойтись. Также в самоубеждении сыграл роль опыт сборки домашнего ЧПУшного станка, ну и собственно популярность самого тренда гироскутеров и вау эффект на окружающих меня обывателей.

Опыт сборки гироскутера собственными силами

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

Первая версия (сигвэй)

С механической точки зрения вариант сигвэя казался более простым (отсутствует нагруженный средний поворотный узел), кроме того все, что нашел на youtube это самоделки именно сигвэев.

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

В итоге выбор пал на работу Ovaltines Segway Clone (исходники есть на GitHub). Данный проект мне показался наиболее зрелым и поддерживающим железо, которое у меня есть (Arduino, MPU-6050, драйвера моторов с 2-мя и 3-мя управляющими сигналами на канал). Проект исчерпывающе прокомментирован, что позволяет не углубляться в анализ нюансов и как результат не догадываться о недочетах.

Недолго оттягивая, была сляпана платформа для испытаний:

  1. Алюминиевая пластина толщина 12мм

  2. Ось диаметром 14мм направляющая от матричного принтера

  3. Скобы строительные диаметр 14мм

  4. Колеса передние от инвалидной коляски (диаметр 8 дюймов, подшипники встроены).

  5. Моторы и планетарные редукторы от шуруповертов на 18В

  6. Шестерни передачи на колеса от электромясорубок

  7. Аккумулятор 12В 5Ач Li-pol (остался после спада тренда квадракоптеростроения)

  8. Драйвера vhn3sp30

  9. Arduino Nano

  10. Датчик 10DOF MPU-6050 (остались после спада тренда квадракоптеростроения)

  11. Уголки, болты и гайки

По доступности можно отметить, что п.1,3,4,5,6,11 были куплены на местном рынке.

Отдельно следует отметить, что моторы с редукторами мне продали, разобрав на моих изумленных глазах, рабочий шуруповерт (450р мотор, 500р редуктор с ограничителем момента). На мой вопрос это окупается? Мне продавец ответил, что половину закупочной цены данного шуруповерта уже отбил на продаже аккумулятора.

Были затруднения с приобретением драйверов моторов (до 30А). Был заказан двухканальный драйвер vnh2SP30 на eBay за 600р, но так как ждать не хотелось, уже через неделю были куплены два одноканальных драйвера vnh3SP30 в Чип и Дип в разных городах (Краснодар, Волгоград) благодаря поездке на море.

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

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

Следует отметить, что передача вал редуктора колесо имеет высокие требования к выдерживаемому моменту. Передаточное число здесь составило всего 5:1. Планетарный редуктор шуруповерта имел число 1:25. При напряжении 12В скорость передвижения на 8 дюймовом колесе была безопасной (от 5-8км/ч). Также остался запас по напряжению.

Важно! Драйверы vnh2 до 14В.

Управление поворотами было сделано вынесением потенциометра в руку.

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

Вторая версия (гироскутер)

Усложнение конструкции до гироскутера неизбежно ведет к добавлению силовых узлов, привносящих вес, чего хотелось избежать, чтобы не таскать велосипед на себе. Анализ весов комплектующих привел к выводу, что уменьшить вес можно только несущей пластины. И действительно пластина алюминия в 6мм (взамен 12мм) оказалась в полной мере удовлетворяющей ощущениям твердой основы под ногами (вес нагрузки около 80кг).

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

Анализ доступных подшипников с наименьшей высотой привел к выбору игольчатых подшипников (цилиндрических с внутренним диаметром 17мм и внешним 23мм). Здесь стало ясно, что ось среднего узла будет по диаметру больше чем полуоси колес. Мне не посчастливилось найти ось точно под подшипник. Пришлось обратиться к токарю с целью проточить строительный болт до нужного диаметра и сделать проточки для стопорных колец (вместо колец, впоследствии, была использована вязальная проволока для арматуры). Стопорные кольца понадобились, т.к. у данного подшипника отсутствует внутренняя оправа и цилиндры катаются по поверхности оси (т.е. он не напрессовывается).

Далее осталось только придумать узлы крепления, обеспечивающие соосность трех осей (две полуоси колес и толстая ось среднего узла). Это требование необходимо выполнить, чтобы не было неприятного ощущения на стопах, что их поворачивают туда, куда не требуется.

Решение пришло само: зачем искать специфичные крепления, если можно сделать их самому. Была куплена пластина алюминия толщиной 16 мм, порезана торцовочной пилой (диском с отрицательным углом) на одинаковые прямоугольники и которые были просверлены ступенчатым сверлом до нужных диаметров. Требования к точности сверления высокие только для двух оправ с подшипниками. Остальные (6 шт.) могут иметь разумные допуски, тем более, что фиксация неподвижных осей в оправах выполняется расклиниванием оправ.

Силовые провода были взяты из гибкого провода для проводки 2х2,5мм. Часть проводки удалось выполнить без пайки на пружинных и винтовых клеммах, но полностью от пайки отказаться не удалось.

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

только самы зоркие найдут потенциометр с тягой только самы зоркие найдут потенциометр с тягой

Очередное испытание показало, что одна полуплатформа оснащенная гироскопом, а вторая связана с первой через потенциометр дают ассиметричную реакцию при повороте вправо и в лево. Грубо прикинув в уме, это стало вполне объяснимо. К примеру,

Поворот направо (Левая наклонена \; Правая ровно __)

Угол левой платформы с гироскопом +5 значит скорость на колесах: Л=5 П=5. Угол правой платформы с потенциометром -5 от первой (т.е. нога горизонтально ожидается поворот направо) скорость на колеса Л=5-(-5)=10; П=5+(-5)=0. Итог - поворот вокруг правого колеса.

Поворот налево (Левая __; Правая )

Угол левой платформы с гироскопом 0 (горизонатльно) значит скорость на колесах: Л=0 П=0. Угол правой платформы с потенциометром +5 от первой (ожидается поворот налево) скорость на колеса Л=0+(-5)=-5; П=5-(-5)=5. Итог поворот на месте вокруг себя.

Версия три (два контроллера)

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

Таким образом, каждый Arduino реально управляет только одним колесом по показаниям своего гироскопа. Потенциометры заменились в ПО обнулением переменной после нормирования результатов вызова analogRead (с контакта потенциометра), т.к. руль больше не нужен.

Также потребовалось немного упокоить ПИД регулятор уменьшением Кп.

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

Данная версия работает наиболее адекватно, но включение активности, которое происходит после выравнивания полуплатформ (захват горизонта после 3 секунд), происходит независимо. Т.е. если первая полуплатформа после включения была выравнена раньше, то и активизируется балансер раньше. Это практически не заметно, но вытекает логически из ПО.

Искренняя радость... фотографа.Искренняя радость... фотографа.

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

Лучше всего для корпуса подошел плоский ПВХ (204мм) воздуховод. Белый цвет выглядел не кошерно, в итоге транспортное средство было обклеено пленкой черного цвета под углеволокно. Вес всего устройства, благодаря пластиковым ободам колес, составил около 5 кг. В таком виде и было передано в пользование.

Фотки с корпусом, к сожалению, не осталось.

Собственные наблюдения, не стоит гнаться за скоростью реакции следования гиро за отклонением тела. Для человека это не свойственно, он сам регулирует равновесие. Чем медленнее реакция гиро (разгон 1,5-3 сек до максимальной скорости - оптимально) тем комфортнее наезднику. Для хорошей работы регулятору важнее не столько вес, а сколько рост пассажира (по сути это перевернутый маятник). Для моей конфигурации дети оказались по разные стороны критической границы роста - 135см125см.

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

Статья написана 5 лет назад. Теперь уже гироскутерами никого не удивишь.

Вот что осталось на текущий момент от поделки...

... и бесценный опыт мотивации "встать с дивана"!

На этом всё. Всем добра!

Подробнее..

Быстрый старт OpenPNP

24.11.2020 14:17:12 | Автор: admin

Быстрый старт OpenPNP


Введение


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

image

Установка


Скачать

Посетите openpnp.org/downloads, и узнайте где скачать последнюю версию OpenPnP.

Установить и запустить


Если вы используете один из бинарных установщиков с веб-сайта, просто запустите установщик и следуйте инструкциям. Не забудьте перед этим поставить Java. После установки вы можете запустить OpenPnP из списка приложений операционной системы, то есть из меню Пуск, из папки Приложения и т. l.

Быстрый тур


Пользовательский интерфейс


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

image

Передвижения


OpenPnP настроен из коробки, так что можно использовать его сразу же; даже не нужно подключать ваш установщик компонентов (он работает с виртуальной машиной)!

Когда запускаете OpenPnP в первый раз, вы увидите смоделированную таблицу выбора и размещения в поле обзора камеры. Попробуйте выполнить следующие действия, чтобы понять, как работает OpenPnP:

  1. Нажмите зеленую кнопку питания, чтобы запустить виртуальную машину.
  2. Используйте кнопки управления(стрелки) для перемещения камеры. Можно изменить расстояние, на которое перемещается камера, изменив значение ползунка Расстояние.
  3. Просмотрите каждую из вкладок в верхней части окна, чтобы увидеть, как настроены задания, детали, пакеты, питатели и настройки установщика компонентов. Сейчас лучше пока ничего не менять.

О демо


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

image

Станок содержит в 8 досок с разной ориентацией, 9 устройств подачи лент с маркировкой Верхняя полоса 14 и Нижняя полоса 14, а также красный прямоугольник, показывающий расположение смоделированной нижней камеры обзора.

Ваша первая работа


Теперь, когда мы немного познакомились с пользовательским интерфейсом, пришло время попробовать выполнить задание по выбору и размещению. Следуйте инструкциям ниже:

  1. Выберите вкладку Job в верхней части главного окна OpenPnP.
  2. В меню Файл выберите Открыть задание.
  3. Используя диалоговое окно с файлами на вашем компьютере, найдите директорию samples, которая в. Windows находится в каталоге Documents\OpenPnP. На Mac и Unix он находится в том же каталоге, в который вы установили OpenPnP.
  4. В каталоге samples найдите каталог pnp-test и откройте pnp-test.job.xml файл внутри него.
  5. Вы увидите, что работа загружена, и теперь в списке указаны платы и места размещения. Вы можете просматривать платы и места размещения, чтобы увидеть, что будет делать ваша ранее проделанная работа.
  6. Нажмите зеленую кнопку питания, чтобы включить станок.
  7. Далее зеленую кнопку воспроизведения, чтобы начать работу, камера начнет двигаться.

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

Работа завершена, мы вас поздравляем! Вы выполнили первое задание в OpenPnP!

Что дальше


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

Если у вас еще нет своего установщика, посетите openpnp.org/hardware, чтобы узнать о вариантах самостоятельной сборки или покупки станка.

Для разработчиков имеется руководство разработчика.

Чтобы получить помощь или просто поговорить, присоединяйтесь к группе обсуждения или поговорите с нами в Freenode IRC по адресу #openpnp. Если у вас нет клиента IRC, вы можете использовать этот веб- клиент.

P.S.


Данный перевод сделан с целью самостоятельного изучения OpenPnP. Постараюсь полностью передать структуру wiki с сайта программы
github.com/openpnp/openpnp/wiki/Quick-Start.
Подробнее..

На карманную консоль Nintendo Game amp Watch установили Doom

25.11.2020 20:07:40 | Автор: admin

Около недели назад на Хабре публиковалась новость о взломе карманной консоли Nintendo Game & Watch за день до ее официального релиза. Тогда пользователь с ником stacksmashing смог загрузить ROM Super Mario Bros. в оперативную память устройства.

Итак, в конечном итоге удалось обойти шифрование ROM Game & Watch за день до официального релиза. В ближайшие несколько дней постараюсь выпустить видео с подробностями о том, как это работает!, написал stacksmashing.

В сентябре сообщалось, что устройство будет стоить $50, а его релиз состоялся вчера. Эти консоли разобрали так быстро, что их сейчас нет в наличии в большинстве точек продаж и на сайтах реселлеров. Достоинство девайса цветной экран и три загруженные игры, включая Super Mario Bros, Super Mario Bros: The Lost Levels и Game & Watch: Ball. Но сегодня стало известно о том, что тот же пользователь, о котором говорилось, смог не только обойти систему шифрования, но и поставить на консоль Doom.

Кстати, пользователя зовут Thomas Roth, он специалист по информационной безопасности.

На данный момент играть не так, чтобы очень комфортно. Ради демонстрации процесса из игры убрали текстуры, аудио, а также снизили разрешение экрана. Это proof of concept, но все равно, сам факт такого взлома говорит о многом например, о том, что в приставку можно будет загружать дополнительные игры.

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


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

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


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

Подробнее..

Быстрая сеть в домашней лаборатории или как я связался с InfiniBand

25.11.2020 20:07:40 | Автор: admin

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

tl;dr Если кому интересно, то сейчас такая ситуация, что пару десктопов можно связать 56Gb сеткой за <$100+доставка из штатов. Если хочется больше компьютеров, то это <$100 за 12 портовый свитч 40Gb и ~$60 за десктоп, плюс доставка. Но это всё б/у и ноль гарантий.

Заранее извиняюсь, но аббревиатур будет много. И это не реклама - всему этому оборудованию уже лет как много, оно уже не поддерживается производителем и легко ищется б/у на eBay за очень недорого, по сравнению с ценами на новое от производителя. Но должен сказать, что новое (анонсировано в конце 2020) - уже почти на порядок быстрее. Так что это всё про домашние эксперименты и самообучение.

Медный век

Когда появился в домашней лаборатории второй компьютер, а это год 2013, то в какой-то момент стало понятно, что скорости Ethernet в 1Gb - маловато будет, а хочется экспериментов. Стал выяснять, что же есть в природе на тот момент. 10GbE было ужасно дорого, и нашлись карточки производства Mellanox. Кроме Ethernet, они умеют и InfiniBand (это важно в дальнейшем). Можно почитать на Wiki, чем они отличается, но кроме всего прочего - IB умеет и IP over IB, а это ровно то, что нужно для нормальной жизни. Большим плюсом было то, что б/у адаптеры на eBay продавали чуть-ли не за копейки ($20-30). Поэтому было куплено сразу три (одна про запас) Mellanox-овские карточки MHEH28-XTC, которые умеют и InfiniBand SDR и Ethernet 10GbE, но имели странный разъем CX4. Также за пиво были найдены 3 кабеля (длиной всего 0.5м, но для лабы - самое то).

Дальше пошли всякие эксперименты, скорость передачи файлов по сети 600-700MB/s была получена. На RAM диске конечно, мои SSD в то время больше 250-300MB/s не умели.

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

Как известно, аппетит растет во время еды, поэтому апгрейд. Нашлись MHGH28-XTC, которые уже умеют InfiniBand DDR, а это уже 16Gbps. Выяснилось, что не все кабели одинаково полезны, скорость не выросла, пришлось искать новые. Нашлись медные, но аж 8 метров длины, и ощутимо тяжелые, это вам не Cat 5/6. С ними измерения показали до 1600MB/s, и до более тонкого тюнинга руки не дошли. Диски и рейды, что были - всё равно медленнее.

Следующий апгрейд, самый бестолковый, MHJH29-XTC, умеют аж QDR - 32Gbps. Только выяснилось, что Firmware для этих новинок - есть только очень старая. Такая, что под Win ничего работать даже не собирается. Хорошо хоть, что Linux выручил. Но ничего не работает на скорости QDR на старых кабелях, а кабели для скорости QDR найти - нереально.

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

Оптический век

С первых опытов уже прошло пять лет, и год стал 2018. Насколько я понимаю ситуацию, и почему так произошло - штатовские дата центры начали (и закончили) апгрейды своих сетей, и на eBay появилась куча новых интересных б/у железок за гуманную цены. А именно карточки ConnectX-3, свитчи, и оптические кабели. Это уже не предания старины глубокой, а относительно новое железо.

SIDENOTE: как я понимаю, это из-за перехода с 10/40GbE на 25/50/100+GbE. И у них есть вопросы совместимости, поэтому старое просто утилизировали.

Что тут можно рассказать, сначала были куплены карточки и кабели. Причем они уже были настолько распространены, что искать не обязательно Mellanox'ы, есть тоже самое под именами HP/Dell/IBM, и они дешевле. Драйвера встроенные есть и в Win, и в Linux, работает всё почти само. Это всё железо умеет QDR/FDR10/FDR14, то есть по сути 40/56Gbps. Реальную скорость при правильной настройке можно 4700+MB/sec увидеть. Хоть диски и стали NVMe (PCI 3 все-таки), но сеть всё равно оказалась быстрее.

А самое хорошее - есть свитчи за разумные деньги (<$100 за 8/12 портов 32/40Gb). Например старенький IS5022, из недостатков - умеет только QDR, и кому-то может быть важно, что только 8 портов, из плюсов - можно держать дома и даже спать рядом, если доработать.

Вообще не шумит, если вентилятор Noctua, дует холодным воздухом, но совершенно не продакшен решение, конечно. Зато по ГОСТ 26074-84 и ГОСТ 8486-86.

WARNING: если кто-то захочет повторить - надо перепаивать провода у вентилятора, там другая распиновка. При попытке просто воткнуть обычный вентилятор - он не вертится, а начинает дымиться!

Или SX6005 - эти уже умеют FDR10 на 12 портов, но главный чип у них снизу, и просто бросить кулер сверху я пока не решился. Но собираюсь этот свитч раскурочить и попробовать. DIY, всё-же.

Есть ещё много разных вариантов, но все их расписывать - я не настолько разбираюсь в ситуации (Brocade ICX серию можно посмотреть).

У всего этого благолепия есть один важный недостаток - те два примера железок, что я выше привёл - это InfiniBand свитчи. Они не умеют Ethernet, и получается только IPoIB. Что из этого следует - Win/Linux машины прекрасно видят друг друга, общаются и всё работает отлично. Главная проблема для меня была - если вам нужны виртуальные машины и чтобы они видели друг друга по быстрой сети - просто так не получится, IB не маршрутизируется на level 3 (поправьте, кто умнее, если я тут чушь написал). Точнее сделать это с виртуальными машинами можно, но не на домашнем железе (SR-IOV нужен и проброс VF внутрь виртуалки), с муторным процессом настройки, плюс с миграцией отдельные заморочки.

К сожалению, пока на eBay нет дешевых 40/56GbE Ethernet свитчей (можете поискать SX1012, если интересно), с которыми можно было-бы поэкспериментировать. Придётся ещё несколько лет подождать. А там, глядишь, и до 25/100GbE можно будет в домашней лабе подобраться.

PS: С IB есть ещё всякие нюансы типа необходимости OpenSM где-то, если switch non-managed, но это всё-же не про настройку IB статья.

Подробнее..

Как перестать бояться и полюбить 1-wire

25.11.2020 22:06:19 | Автор: admin
Мне очень нравится протокол 1-wire своей простотой и удобством для применения в системах умный дом. Недавно я писал программную эмуляцию одной микросхемы и погрузился во внутренности этого протокола. Чтобы накопленные знания могли принести пользу не только мне, я решил написать данную статью. Но в статье я хочу рассказать не про абстрактные диаграммы сигналов и кодирование данных перепечаток такого материала есть достаточно, а хочу рассказать про более практические вещи. А именно: рассмотрю проверенные лично схемы адаптеров, собранные из простых и доступных деталей, и расскажу, как из Linux получить доступ к устройствам 1-wire. Попутно расскажу про сам протокол, будет и пример низкоуровневой работы, и пример доступа из JavaScript, а также рекомендации владельцам Raspberry Pi. Эта статья в первую очередь для тех, кто хочет разобраться с протоколом практически с нуля, чтобы начать его использовать в своих проектах. Возможно те, кто уже хорошо знаком с протоколом, также найдут что-то новое для себя.

Протокол 1-wire является проводным протоколом (в отличие от беспроводного), для кого-то это преимущество, а для кого-то недостаток. Сеть 1-wire состоит из шины, к которой подключаются устройства 1-wire. На шине может присутствовать множество подчиненных устройств и только один мастер. Подчиненные устройства могут общаться только с мастером и только по его запросу. Шина 1-wire состоит только из одной линии данных (отсюда и название однопроводный), но для работы также необходима линия земля, а для питания устройств еще и линия питания. При небольшом количестве подчиненных и их небольшом энергопотреблении возможно также так называемое паразитное питание от линии данных. Таким образом, для подключения устройства по 1-wire Вам понадобится 3 (или 2) провода и мастер сети. Мастером сети может быть, например, микроконтроллер или ПК + адаптер 1-wire.

Физический уровень


Как же по одной линии происходит взаимодействие с множеством устройств? На физическом уровне линия устроена по принципу монтажного И, это значит, что линия будет в состоянии логической 1 (уровень около 5V), если все устройства на линии перевели ее в состояние логической 1, а в состоянии логического 0 (около 0V), если хотя бы одно из устройств перевело ее в состояение логического 0. На практике это реализовывается подключением линии через резистор (называется резистором подтяжки) к напряжению питания, а каждое из устройств может только замыкать линию с землей при помощи встроенного транзистора. Такой тип выхода устройств называется открытый коллектор или открытый сток, англ. open-drain. Резистор подтяжки обычно расположен в мастере сети (адаптере).
image

Очевидно, что при паразитном питании ток поступает через резистор подтяжки, и чем больше ток потребления устройств, тем ниже будет проседать напряжение линии. Стандартом регламентировано напряжение лиии 4.5-5.5V, хотя многие устройства и могут работать при значительно более низких напряжениях, но не все. Для снижения проседания напряжения можно уменьшить сопротивление резистора подтяжки, но согласно стандарту, сопротивление не должно быть менее 500 Ом. На практике сопротивление резистора подтяжки можно взять 1кОм, если будет использоваться паразитное питание, и, например, 4.7кОм, если питание будет по отдельной линии.

GPIO адаптер


Простейший адаптер 1-wire можно построить с помощью GPIO:

По такой схеме устроен адаптер при использовании GPIO микроконтроллера, работающего от напряжения 5V, соответсвенно на его портах допустимо напряжение до 5V. Но на портах Raspberry Pi допустимо напряжение до 3.3V, поэтому резистор подтяжки можно подключать только к 3.3V. Такой адаптер будет работать с некоторыми устройствами, но, как уже говорилось, не все устройства могут работать с пониженным напряжением. Эту проблему легко решить с помощью двунаправленого преобразователя логических уровней:

Диод между истоком и стоком на схемах иногда не обозначают, но он всегда есть в реальных транзисторах.

Схема адаптера с использованием GPIO для Raspberry Pi будет выглядеть следующим образом:

В этой схеме убран резистор подтяжки, подключенный к истоку, с этим хаком схема продолжит работать. Т.к. напряжение на GPIO (и на истоке) станет меньше чем 3.3V (напряжение на затворе) на величину напряжения затвор-исток, при которой открывается транзистор. Напряжения на GPIO будет достаточно, чтобы GPIO его воспринимал как логическую 1.

Канальный уровень


Для понимания принципа работы следующего типа адаптера, разберемся, как работает мастер 1-wire на канальном уровне. В 1-wire есть всего четыре примитива канального уровня: отправка ресет, чтение присутствия, отправка бита 0, отправка бита 1 и она же по совместительству чтение бита. Для понимания принципа будет достаточно рассмотреть только два последних: отправка бита 0 реализуется путем установки на линии логического 0 в течение 60-120мкс, отправка бита 1 путем установки 0 в течение около 8мкс, чтение бита путем последующего чтения состояния линии, если линия вернулась в 1, значит подчиненное устройство передало бит 1, если задержалась в 0 не менее, чем на 15мкс значит подчиненное таким способом передало бит 0.

Пассивный адаптер


Следующий типа адаптера построен на использовании UART. Если по UART на скорости 115200 BAUD передать байт FFh, то на TX появится логический 0 только во время передачи стартового бита, это около 8мкс, подчиненные устройства это воспримут как отправку бита 1, а если передать байт 00h появится логический 0 примерно на 78мкс, подчиненные устройства это воспримут как отправку бита 0. А что если TX соединить с RX? Мы будем получать из UART ровно то, что передали: передали FFh получили FFh. А если эту линию принудительно задержать в логическом 0 чуть дольше, то получим уже не FFh, а, например, FEh, FCh, F8h, F0h и т.д. Таким простым способом реализуется чтение бита. Схема адаптера, построенного на использовании UART, он еще называется пассивным адаптером, будет такой:

По такой схеме также часто строится адаптер для микроконтроллера, имеющего аппаратный UART. В схеме необходимо использовать только диод Шоттки, т.к. важно малое падение напряжение на диоде. Диод в этой схеме это хак для преобразования выхода пуш-пулл (англ. push-pull) в подобие выхода открытый коллектор. В выходе пуш-пулл к выходу коммутируется транзисторами либо земля, либо напряжение питания, а в выходе открытый коллектор коммутируется только земля, а для обозначения логической 1, выход переводится в высокоимпедансное состояние, в этом состоянии выход можно подтянуть резистором к любому напряжению и он беспрепятственно приобретает это напряжение.

Здесь стоит упомянуть адаптер для RS232, хоть этот интерфейс уже практически и не встречается. На канальном уровне UART и RS232 это один и тот же протокол, но на физическом они отличаются: в UART используется напряжение 0V и 5V (или 3.3V, такой адаптер будет немного позже), а в RS232 +12V и -12V соответственно. Вот схема адаптера 1-wire для RS232, взятая из Dallas Application Note 74:


Как мы помним, в Raspberry Pi на всех портах допустимо напряжение до 3.3V, поэтому нужен вот такой пассивный адаптер для UART 3.3V:

В этой схеме также необходимо использовать только диод Шоттки.

Аппаратные адаптеры


Существует еще и третий тип адаптеров аппаратные, это микросхемы-конвертеры в 1-wire, выпускаются они для трех протоколов: USB, UART, i2c. У них есть преимущества по сравнению с предыдущими типами, например, в пассивном адаптере используется прием/передача целого байта для приема/передачи одного бита, а в аппаратном на этом получаем выигрыш в 8 раз (на самом деле аппаратно реализованы и другие функции: ресет, алгоритм поиска), кроме скорости это и упрощение, и сокращение кода, что очень актуально для микроконтроллеров.

Но главное преимущество аппаратных адаптеров это активная подтяжка. Разберемся с этим подробнее, для наглядности рассмотрим случай с паразитным питанием. При кратковременном нахождении линии в логическом 0, устройства питаются от своих встроенных конденсаторов, разряжая их, а при возвращении линии в логическую 1, конденсаторы начинают заряжаться, потребляя повышенный ток от линии. Как мы помним, ток идет через резистор подтяжки, имеем RC-цепь с переходным процессом с постоянной времени t=R*C, что проявляется в медленном нарастании напряжения на линии. Очевидным выходом в этой ситуации является кратковременное уменьшение сопротивления резистора подтяжки для сокращения постоянной времени переходного процесса. Эта техника и называется активной подтяжкой, реализовывается путем коммутации линии с напряжением питания на несколько микросекунд (вспоминаем тип выхода пуш-пулл). Это очень помогает на длинных или не очень качественных линиях, т.к. сами проводники также имеют сопротивление.

Конверторы из USB и i2c мне не доводилось использовать, а вот схему с применением микросхемы-конвертера из UART (DS2480B) я приведу, но позже и в чуть более продвинутом исполнении.

Гальваническая развязка


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

Развязывать необходимо две вещи: питание (и вместе с ним землю) и сигналы. Питание адаптера можно обеспечить от отдельного БП или использовав DC-DC преобразователь с гальванической развязкой (например B0505S). Сигналы можно развязать с помощью оптронов, это пара светодиод-фототранзистор в закрытом общем корпусе. Оптрон позволяет передавать сигнал только в одном направлении, а линия 1-wire является двунаправленной и, к сожалению, нет простых схем сделать двунаправленную гальваническую развязку. Это же касается GPIO, USB и i2c. А вот в UART обе линии RX и TX являются однонаправленными, поэтому получится сделать адаптер как пассивный, так и на аппаратном 1-wire-UART конвертере. Необходимо учесть, что в пассивном адаптере используется скорость UART 115200 BAUD, а аппаратный производит обмен данными на скорости 9600 BAUD. При выборе оптронов необходимо обращать внимание на параметры tON, tOFF, они должны быть существенно меньше 1/BAUD.

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

Полевой транзистор в этой схеме использован для создания большого входного сопротивления приемной части. Бонусом гальванической развязки является то, что схема одинаково будет работать и при напряжении UART 5V, и при 3.3V.

И, как было обещано, схема адаптера с применением 1-wire-UART конвертера (микросхема DS2480B) с гальванической развязкой:

Это самый совершенный из всех перечисленных адаптеров.

Приведу также свой вариант его реализации на макетной плате:

Две перемычки используются для подачи GND и +5V на DC-DC в случае UART 5V, а при подключении к UART 3.3V одна убирается и контакт подключается к +5V, второй перемычкой землю также можно сделать отдельной от земли UART.

Эмуляторы адаптеров


За неимением микросхемы DS2480B можно воспользоваться ее программной эмуляцией на любом микроконтроллере AVR, который имеет аппаратный UART. Такой МК установлен практически во всех Arduino. Здесь приведу схему, как из популярного программатора USBasp на микроконтроллере ATmega8A сделать 1-wire адаптер:

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

Сетевой уровень


На сетевом уровне мастер при общении с подчиненными устройствами уже может оперировать байтами. Как мы помним, на канальном уровне при отправке бита 1 происходит и одновременное чтение, и в ответ можно получить бит 0. Таким образом при отправке байта, на его основе формируется байт ответа, в котором некоторые биты могут быть обнулены.

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

Существует всего четыре команды сетевого уровня, которые понимают все без исключения подчиненные: CCh (SKIPROM), 33h (READROM), 55h (MATCHROM), F0h (SEARCHROM). Но есть и некоторые другие, например, ECh (ALARM), A5h (RESUME) и Overdrive-варианты предыдущих команд, которые понимают не все устройства. На самом деле две первые команды адресуют не одно а все устройства, первая (SKIPROM) используется для широковещательной рассылки команд, например запустить на всех устройствах измерение температуры, а сама температура будет прочитана позже по отдельности с каждого устройства. Вторая (READROM) используется только когда известно, что устройство на шине может быть только одно. Но для проверки на сетевом уровне есть еще контрольная сумма адреса, так что, если ответят несколько устройств, контрольная сумма это позволит выявить.

Адреса 1-wire, их еще называют идентификаторами, имеются только у подчиненных устройств. Адреса имеют длину 8 байт, из которых независымые только 7, а восьмой байт содержит контрольную сумму этих семи байтов адреса. Адреса всех устройств уникальны, они прошиваются при изготовлении и изменить их уже нельзя. Первый байт адреса всегда одинаков для одного типа микросхем, т.е. по нему можно однозначно определить название микросхемы. Этот байт носит название адрес семейства.

После процедуры адресации подчиненного последующий обмен данными уже относится к сеансовому и более высоким уровням модели ISO OSI и может отличаться для разных семейств устройств.

Низкоуровневая работа


Продемонстрирую, насколько просто происходит работа с DS2480B. Для этого в одном терминале из командной строки bash запускаем:
while IFS= read -rd "" -n1 c;do printf "%02x\n" "'$c";done </dev/ttyAMA0

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

Первым делом отпрявляем RESET для сброса DS2480B, для этого снижаем скорость UART ниже 9600 BAUD и предаем 00h, DS2480B при чтении в стоп-бите обнаружит логический 0, воспримет это как команду сброса и приведет свое состояние в исходное (окажется в режиме команд):
stty -F /dev/ttyAMA0 raw pass8 4800echo -ne '\x00' > /dev/ttyAMA0

После чего возвращаем скорость на 9600 BAUD:
stty -F /dev/ttyAMA0 9600

Отправляем любую команду (в данном случае это команды DS2480B) для калибровки скорости DS2480B, на которую DS2480B никак не отреагирует, например, безобидную команду чтения параметра конфигурации 01h:
echo -ne '\x01' > /dev/ttyAMA0

Отправляем команду C1h, которая генерирует отправку ресет на шине 1-wire, в ответ получим CDh если на 1-wire последовал импульс присутствия, или EDh если присутствия не последовало (ответ наблюдаем в другом терминале):
echo -ne '\xc1' > /dev/ttyAMA0

Переключаем DS2480B в режим данных, в ответ ничего не получаем:
echo -ne '\xe1' > /dev/ttyAMA0

В режиме данных все байты, которые передаются в UART транслируются конвертером побитно в 1-wire и при передаче битов 1 автоматически происходит чтение бита, которое может обнулять биты в исходном байте. Модифицированный таким образом байт конвертер отправляет обратно в UART. Отправляем команду 33h, теперь это уже команда READROM сетевого уровня протокола 1-wire, в ответ получим 33h без изменений:
echo -ne '\x33' > /dev/ttyAMA0

В ответ на READROM устройство (для простоты подключаем на шину только одно устройство) отправит свой ID, для этого ему необходимо послать 64 единичных бита (идентификаторы состоят из 8 байт), которые в ответе будут модифицированы:
echo -ne '\xff\xff\xff\xff\xff\xff\xff\xff' > /dev/ttyAMA0


Вот что будет в другом терминале после выполнения всех вышеперечисленых команд:
cd33288df444020000a6

Идентификатор подчиненного устройства здесь будет 288df444020000a6, где 28 адрес семейства (датчики температуры DS18B20), a6 контрольная сумма адреса, проверять ее должны мы, а не DS2480B.

Естественно, в Linux так никто не работает с 1-wire. Но при программировании микроконтроллеров или драйверов, все происходит именно подобным образом.

Высокоуровневая работа


В ОС Linux есть два подхода к высокоуровневой работе с устройствами 1-wire:
  • с помощью приложений в пространстве пользователя,
  • с помощью драйверов ядра.

Первый способ исторически появился раньше и на сегодняшний день все еще является более предпочтительным. Самой полной реализацией является пакет owfs, в котором есть поддержка большого числа адаптеров и подчиненных устройств. Приложение, как правило, получает доступ к адаптеру через файл устройства в /dev/ и всю низкоуровневую работу с ним выполняет самостоятельно.

При работе с драйверами ядра, вся низкоуровневая работа с устройствами выполняется в ядре, которое предоставляет доступ приложениям к 1-wire через интерфейс netlink и дополнительно через специальную файловую систему /sys/.

Драйверы ядра


Драйверы ядра делятся на драйверы для адаптеров и драйвры для подчиненных устройств. Драйверы адаптеров создают уровень абстракции W1, объединяя шины 1-wire от всех доступных адаптеров. Далее есть два варианта использования уровня абстракции W1: использование его в приложениях, например, в owfs как еще один вид адаптера, или использование поверх него драйверов подчиненных устройств (тоже в ядре).

Для работы с 1-wire с помощью драйверов ядра достаточно загрузить драйвер адаптера. Например, для DS2490 (это аппаратный 1-wire-USB конвертер):
sudo modprobe ds2490

Для DS2482 (это аппаратный 1-wire-i2c конвертер) предварительно необходимо загрузить драйвер для конкретного i2c контроллера и затем сообщить ему адрес адаптера на шине i2c:
sudo modprobe i2c-<контроллер>sudo modprobe ds2482sudo echo 'ds2482 0x18' > /sys/bus/i2c/devices/i2c-0/new_device

Для GPIO:
sudo modprobe w1-gpio

В случае Raspberry Pi в файле /boot/config.txt добавить строку, или можно даже несколько:
dtoverlay=w1-gpio,gpiopin=4dtoverlay=w1-gpio,gpiopin=17dtoverlay=w1-gpio,gpiopin=27

Тогда при загрузке ядра модуль w1-gpio загрузится автоматически. К сожалению, в ядре (на момент написания статьи это linux-rpi-5.4.y) драйверы для DS2480B и пассивного адаптера не реализованы.

При загрузке любого драйвера адаптера автоматически загрузится модуль wire, который запустит периодический поиск подчиненных устройств на шине адаптера и автоматически загрузит модули для найденных подчиненных устройств. В каталоге /sys/bus/w1/devices/ появятся подкаталоги с именами, равными идентификаторам найденных устройств, в подкаталогах единственным полезным является файл w1_slave.

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

OWFS


Центральной частью пакета owfs является демон owserver, который работает с адаптерами через файлы устройств в /dev/ или через другие интерфейсы ядра и предоставляет доступ ко всем устройствам 1-wire для других приложений по собственному протоколу поверх TCP, мультиплексируя запросы от клиентов и кешируя ответы от устройств.

Для установки owfs необходимо выполнить аналоги следующих команд для своего дистрибутива:
sudo apt-get update -ysudo apt-get install -y owfs ow-shell

Или скомпилировать из исходных кодов отсюда: github.com/owfs/owfs/releases

Следующим шагом необходимо добавить адаптеры в файл конфигурации. Пример файла конфигурации /etc/owfs.conf:
## USB адаптер на микросхеме DS2490#server: usb## i2c адаптер на микросхеме DS2482#server: device /dev/i2c-0## UART адаптер на микросхеме DS2480Bserver: device /dev/ttyAMA0## Пассивный адаптерserver: passive /dev/ttyUSB0## доступ к адаптерам через драйверы ядра#server: w1## [адрес:]порт, на котором owserver принимает соединения от клиентовserver: port localhost:4304## [адрес:]порт, на котором owhttpd принимает соединения от клиентовhttp: port localhost:2121

В owfs нет поддержки адаптера, использующего GPIO, поэтому единственным способом получить доступ к GPIO из owfs является использование драйвера ядра w1-gpio и получение к нему доступа через уровень абстракции W1. Такой способ потребует запуска owserver от имени root. В любом случае, я не рекомендую адаптер на GPIO для серьезного использования, т.к. он реализован программно (техника bitbang) и грузит процессор.

После запуска owserver, к нему можно обращаться командами, например:
owdir /owwrite /1d.40420f484e59/pages/page.6 'Электроэнергия кв.1'

Как можно заметить, контрольная сумма адреса не указывается, owserver сам ее вычисляет. К owserver также можно обращаться и с другого хоста:
owget -s 10.0.0.1:4304 /1d.40420f484e59/counter.A

Естественно, для этого в /etc/owfs.conf должно быть:
server: port 10.0.0.1:4304

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

Для языков программирования C, python, perl, php есть библиотеки, из которых тем же способом через TCP можно получить доступ к owserver. Протокол у owserver очень простой, поэтому можно легко написать реализацию для любого другого языка.

Доступ из JavaScript


Еще один демон из пакета owfs, который может быть полезен owhttpd, он также обращается к owserver по TCP, а с другой стороны предоставляет доступ на порту 2121 по http. Но самое полезное находится в нем по адресу http://сервер:2121/json/, что открывает возможности для обращения к устройствам 1-wire из веб-страницы на JavaScript с помощью XMLHttpRequest.

var r = new XMLHttpRequest();r.open("GET", "http://127.0.0.1:2121/json/uncached/", true);r.responseType = "json";r.onload = function () {  var i, h = "";  if (this.status == 200 && typeof this.response === "object")    for (i in this.response)      h += i + "<br>";  document.getElementById("owlist").innerHTML = h;};r.send();

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

Полезные советы


Т.к. owserver обращается к адаптерам через файлы устройств в /dev/, то можно с помощью udev передать права на устройства другому пользователю, например, создать пользователя owfs и от его имени запускать owserver. Для этого в файле /etc/udev/rules.d/85-onewire.rules добавить строки примерно с таким содержимым:
KERNEL=="ttyAMA0", SUBSYSTEM=="tty", SYMLINK+="owbus0", OWNER="owfs"KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb",  ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTVNG262", SYMLINK+="owbus1", OWNER="owfs"

Если необходимо организовать несколько 1-wire шин, то потребуется несколько UART интерфейсов. Для этого можно восопользоваться несколькими USB-UART конвертерами. А в Raspberry Pi 4 можно активировать до пяти аппаратных UART, для этого в /boot/config.txt нужно добавить:
dtoverlay=disable-btdtoverlay=uart2dtoverlay=uart3dtoverlay=uart4dtoverlay=uart5

Файлы устройств после перезагрузки будут называться /dev/ttyAMA[0..4], эти UARTы будут работать на выводах:
AMA0 TX=GPIO14(пин  8) RX=GPIO15(пин 10)AMA1 TX=GPIO0 (пин 27) RX=GPIO1 (пин 28)AMA2 TX=GPIO4 (пин  7) RX=GPIO5 (пин 29)AMA3 TX=GPIO8 (пин 24) RX=GPIO9 (пин 21)AMA4 TX=GPIO12(пин 32) RX=GPIO13(пин 33)

Напомню, что так же, как и в случае с GPIO, если мы используем встроенный UART на Raspberry Pi, необходимо применение преобразователя логических уровней или гальванической развязки, т.к. все GPIO на Raspberry Pi работают с напряжением до 3.3V.

Сравнение с ModBus


Для понимания, какое положение занимает 1-wire в сравнении с другими подобными протоколами для автоматизации, я провел сравнение с популярным протоколом ModBus. ModBus также использует модель мастер-подчиненные и в связке с RS485 также может работать используя всего два провода.

+-----------------------+------------------+--------------------------+|                       | 1-wire           | ModBus                   |+-----------------------+------------------+--------------------------+| Проприетарный         | Да               | Нет                      || Документация          | Открыта          | Открыта                  || Физический уровень    | 1-wire           | RS485, RS232, TCP/IP,... || Канальный уровень     | 1-wire           | UART                     || Сетевой уровень       | 1-wire           | ModBus                   || Уровень приложения    | 1-wire           | ModBus                   || Только два провода    | да               | возможно в RS485         || Паразитное питание    | да               | нет                      || Напряжения            | 0..5 V           | до +/-12V в RS485        || Дифференциальный сигн.| нет              | да, в RS485              || Скорость обмена       | фикс. ~15 kbit/s | выбирается, до 10 Mbit/s || Фронты сигналов       | < 8 us           | < 1/BAUD                 || Точность тактирования | +/-50%           | +/-5%                    || Длина линии           | до 300м          | до 1200м (10^8/BAUD)     || Размер пакета         | не ограничен     | до 253 байт              || Размер адреса         | 56 бит           | 8 бит                    || Контрольная сумма     | 16 бит           | 16 бит                   |+-----------------------+------------------+--------------------------+

Как можно заметить, 1-wire более медленный, не такой гибкий и не такой помехозащищенный, что не дает ему права называться промышленным. Но его характеристик более чем достаточно для домашней автоматизации в системах умный дом. А используемые напряжения и простота адаптера для микроконтроллера делают его идеальным для разработки собственных устройств на МК.

Выводы


Протокол 1-wire на самом деле является очень легким в освоении. Я надеюсь, что статья поможет пролить свет на многие ранее не понятные моменты, которые могли быть препятствием на пути к использованию данного протокола.

Для знакомства с протоколом владельцам Raspberry Pi я рекомендую начать со сборки адаптера на GPIO. В файле /boot/config.txt добавить:
dtoverlay=w1-gpio,gpiopin=4

Установить owfs и записать в /etc/owfs.conf всего три строки:
server: w1server: port localhost:4304http: port localhost:2121

Владельцам ПК или ноутбука рекомендую приобрести USB-UART конвертер (он Вам еще не раз пригодится, они бывают на микросхемах FT232, PL2303, CP210X и др. подойдет любой) и собрать пассивный адаптер. Установить owfs и записать в /etc/owfs.conf тоже всего три строки:
server: passive /dev/ttyUSB0server: port localhost:4304http: port localhost:2121

И в том и в другом случае после перезагрузки выполнить:
owdir /

Следующим шагом рекомендую сборку адаптера на DS2480B с гальванической развязкой.

Приведу несколько полезных 1-wire подчиненных устройств, которые стоит попробовать:
  • DS18B20 самый популярный датчик температуры, диапазон измеряемых температур: -55C +125C, точность 0.5C, возвращает температуру уже в градусах цельсия: 8 бит на целую часть и 4 бит на дробную;
  • DS2450 четырехканальный АЦП, можно использовать для аналоговых датчиков, выводы также могут работать на выход, тип выхода открытый коллектор, можно использовать для управления реле;
  • DS2423 двухканальный счетчик импульсов (уже не производится, но есть программные эмуляторы), можно использовать, например, для дистанционного снятия показаний с бытовых приборов учета;
  • DS2438 контроллер аккумулятора, он идеально подходит для подключния датчиков влажности, имеет АЦП и датчик температуры, еще два вывода можно использовать для датчика освещенности, т.е. почти мини-метеостанция.


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

Подставка для ноутбука и ленивых

26.11.2020 22:04:35 | Автор: admin
С давних времен (с 2003г.), еще, когда у меня не было своего собственного угла, я подсел на ноутбуки в качестве рабочего инструмента вместо стационарного ПК. Кроме того, в тот период я очень часто ездил по командировкам, и иметь мобильное рабочее место было не только полезно, но имиджево необходимо. Рост объема времени, проводимого за ноутбуком в домашних условиях, требовал решать вопрос о повышении эргономичности размещения ноутбука для использования в удобных положениях тела.
image

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

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

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

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

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

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

Время не стояло на месте, и я в очередной раз сменил ноутбук. Новый стал еще легче и меньше на 0,5% и ярче практически на 1%. Ну в общем, вы поняли какой. У старой подставки габариты и вес уже стали тяготить (а сердца остыли). Кроме того, старую подставку требовалось дооснащать поперечиной, так как, новый, потерявший в талии, ноутбук не мог использовать старую концепцию крепления за бока.
Параллельно, рос мой скил DIY, и я уже собрал 3D принтер. Было решено, непременно сделать изящную конструкцию с применением 3D печати. Так я создал модели в Thinkercad, и распечатал.
image
Новая конструкция казалась настолько простой, что в ней просто нечему идти не по плану
Но нет же Плотная посадка трубочек в petg пластик из-за постоянных нагрузок на скручивание постепенно стала неплотной. Я попытался подставить костыль и вкрутил шурупы в невидимых местах. Часть шурупов разболтала свое посадочное место в пластике, а часть просто расколола пластик.
image
Ну, никогда такого не было ! И вот опять все болтается в сочленениях!

Между тем, моя жизнь не состояла только из борьбы с подставками под ноутбуки, и параллельно рос мой скил в холодной ковке (я сделал себе вензеля на ворота) и соответственно оброс соответствующим инструментом и приспособлениями. Тут мне пришла в голову абсолютно свежая идея отказаться вообще от каких-либо сочленений в конструкции.
Таким образом, перед миром предстала версия Чудо-подставки Х.0. В которой несущий каркас выполнен из единого куска трубки 10х1 длиной 2м стоимостью 162 р, купленной в сети зеленых строительных магазинов. Перекладина из Н-профиля у меня была в обрезках, но её стоимость около 100р/м. Перекладина изначально фиксировалась на обжим вокруг трубки, но в итоге я её пришурупил с тыла.
image
Переносится двумя пальцами в сборе с ноутбуком.
image
image
Для изгибания трубок из цветных металлов в сетевых строительных магазинах продаются ручные трубогибы, что то около 650р. Гнуть трубку желательно с заполнением внутренней полости чем-то сыпучим, к примеру, песком или солью. В противном случае из-за тонкостенности может получиться излом с внутренней стороны.

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

Борьба за тишину, или домашняя лаборатория не должна напоминать о взлётах истребителей

27.11.2020 10:16:55 | Автор: admin

В какой-то момент постоянный шум от компьютеров начинает надоедать, особенно если их четыре, а каждый вечер всё выключать, а утром включать - надоедает. Это история о том, как можно спокойно сосуществовать в одном помещении с кучей компьютеров, которых не слышно в Idle/легкой работе.

Если вы нонстоп майните на топовой игровой видеокарте, или что-то рендерите на 100% загрузке, то мой рассказ не для вас.

tl;dr Если хочется тишины, то рецепт - вентиляторы Noctua везде, с адаптерами понижения скорости, где надо, бесшумные блоки питания, ну и конечно-же SSD - и главным источником шума становится холодильник на кухне.

Сразу хочу оговориться, все марки и модели железок, которые будут названы - это не реклама, а мой личный выбор на основании чтения статей, обзоров и отзывов. Выбор далеко не самый оптимальный по стоимости, тут я откровенно гнался за качеством. Если кто-то знает похожие по свойствам устройства - делитесь опытом, очень интересно, что ещё существует. Особенно вентиляторы.

В целом, в нормально работающем компьютере в ~2010, источника шума было два. Это вентиляторы и жесткие диски. Floppy/ZIP/CD/DVD к тому моменту уже кто стал легендой, кого только закопали. Нет, есть еще конечно звуковая карта с колонками, но это не считается, и бывает писк от дросселей, но это уже ненормально. И вот в какой-то момент появились SSD, то есть появились они раньше, но на них цена стала адекватной, и когда стала спокойно влезать OS, нужный для работы софт, и оставалось сколько-то места для хлама в папке Downloads, то выбор стал очевиден. И источник шума стал один. Вентиляторы. А они в десктопах есть много где - блок питания, кулер процессора, корпусные.

Ж-ж-ж-ж-ж-ж-ж-ж-ж!Ж-ж-ж-ж-ж-ж-ж-ж-ж!

В поисках тишины было прочитано много всего, в том числе был найден сайт silentpcreview. Был уютный форум и хорошие обзоры, а сейчас там стало что-то невнятно-коммерческое, не советую. Но в тот момент там присутствовали отличные обзоры и рекомендации тихого железа. Для меня стало открытием две компании - Noctua, которая делает вентиляторы, и SeaSonic со своими блоками питания без вентиляторов. Почти антагонисты.

У меня тогда было два компьютера - игровой и для экспериментов (процы с TDP 95 ватт). В игровом была ещё и здоровая трёх кулерная трёх слотовая умевшая шуметь видеокарта, поэтому этот зверь на ночь однозначно выключался. А вот для экспериментального были закуплены правильные вентиляторы, и возникла проблема уже с БП. Ситуацию спас fanless SeaSonic на 450Вт, и свершилось - с расстояния даже полметра открытый системник стал бесшумным.

Через некоторое время один из компьютеров для финансирования апгрейда был благополучно продан вместе с игровой видяхой, следующий набор железа уже был куплен с прицелом на бесшумность. БП уже c КПД 80 Plus Titanium 600W - чтобы меньше грелся, он и игровую видяху на 300Вт тянет. А из корпуса и кулера для процессора штатные вентиляторы сразу все выкидывались, и частично ставились правильные Noctua. Тут конечно я несколько ошибся - у меня очень часто корпуса открыты, поэтому при тестах охлаждаются ощутимо лучше, чем под столом. Нельзя забывать, что корпусные вентиляторы нужны, если корпус закрыт. Всё очень нездорово грелось. Вентиляторов пришлось докупать. Но 140мм - уже не такие паиньки, как 120мм, пришлось их сажать на понижатель оборотов aka резистор. Хорошо, что в комплекте были переходники.

Про Noctua хочется сказать, что у них есть две комплектации. Одна lite - там только вентилятор и винтики. Другая - кроме как "подарочная" не назвать, там запросто может быть ещё пластиковые антивибрационные крепления, штуки 3-4 удлинителя/переходника-резистора/адаптера распиновки. Тут уж от необходимости. Из интересного - у них есть например 40x20mm fans, которых может быть не слышно, особенно с переходником. Это вот те мелкие штуки, что орут в 1U серверах, а тут - тишина. Я даже не ожидал, что такое может быть.

Из ошибок, что были совершены, и которые сейчас легко избежать и хорошо сэкономить - необязательно покупать fanless блоки питания. Современные БП умеют не крутить вентилятор до определенной нагрузки, и если её правильно рассчитать aka взять БП с каким-то запасом, то он шуметь в простое не будет, но если надо - начнёт. И видеокарты, если иногда хочется поиграть - даже топовые, без нагрузки, умеют останавливать свои вентиляторы.

Всем тишины.

Подробнее..

Купил значит, твое вендоров бытовой техники в ЕС обязали поставлять запчасти для ремонта и помогать сервисам

28.11.2020 12:19:52 | Автор: admin

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

Все это делается для того, чтобы увеличивать объемы потребления товаров покупателями. Сломался холодильник? Выбрасывай на свалку и иди за новым. Ремонт? Ну нет, во-первых, его могут осуществлять только авторизованные сервисные центры за сумму, близкую к стоимости нового холодильника. Во-вторых, запчастей нет, извините. Но с 2021 года ситуация меняется, причем не только для бытовой техники, но и для электроники.

Что там с бытовой техникой?


Об этом на Хабре уже писали. С 2021 года производителям бытовой техники придется поставлять запчасти для своих устройств в течение 10 лет после продажи. Новые правила актуальны для стиральных машин, посудомоек, холодильников и осветительных приборов.

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


А еще производителям придется проектировать бытовую технику таким образом, чтобы ее можно было чинить без специализированных инструментов, которые предоставляет вендор. Это еще одна хитрость, которую используют компании, продавать инструменты по цене чугунного моста (кстати, а сколько все-таки стоит чугунный мост?), получая, таким образом, дополнительный источник прибыли.

Немалую роль в отстаивании права на ремонт в Европе сыграла организация Schraube locker!? из Германии. Ее активисты собрали 100 тысяч подписей и добились голосования в Брюсселе по поводу изменения законодательства, имеющего отношение к ремонту бытовой техники.

А вот электроника, что с ней?


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

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


Компания заявляет, что квалифицированный ремонт ее устройств могут проводить лишь ее же специалисты. Возможно, это и так, но замена треснувшего стекла iPhone в фирменном центре стоит $329, аккумулятора около $69. Цены высокие и для большинства других сервисных и ремонтных услуг компании.

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

Пару лет назад на Хабре публиковалась новость о том, что сопроцессор Т2 может блокировать DIY-ремонт новых MacBook и MacMini. Пока что случаев блокирования вроде бы не было, но вероятность есть, в любой момент компания может задействовать механизм блокировки.

Не только электроника



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

А сервисные центры John Deere есть далеко не в каждом населенном пункте и тем более не рядом с каждой фермой. Поэтому сломавшийся трактор приходится везти в сервисный центр на осмотр. Программное обеспечение трактора так и вовсе защищено производителем: если попробовать его взломать, можно получить штраф в $500 тысяч или даже сесть в тюрьму. Рисковать фермеры не хотят, поэтому и мучаются с доставкой тракторов.


Даже такая современная и открытая корпорация, как Tesla Inc ближе по убеждениям к Apple, чем к праву на ремонт. Представители компании рассказывают о необходимости профессионального ремонта, специалистами, которые знают, что делать, чтобы не допустить дальнейших проблем с эксплуатацией транспортного средства, которое выходит на дороги общего пользования. Ну а умельцам, которые ремонтируют авто от Tesla, оказывается противодействие. В целом, компания действительно может хотеть предотвратить случаи неквалифицированного ремонта своих электромобилей. До сих пор каждое авто от Tesla, попавшее в аварию, потом обсуждается в СМИ, что негативно влияет на репутацию бренда. И чем больше таких аварий, тем больше проблем у компании.

Хватит это терпеть


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

25 ноября законодатели проголосовали, голос за отдали 395 человек. Только 94 высказались против.


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

Законодатели из Европы решили раз и навсегда запретить производителям намеренно сокращать время жизни своих продуктов, включая отсутствие запчастей, запланированное устаревание, программные тормоза (как в случае с замедлением старых смартфонов Apple) и прочие прелести. А еще вендорам теперь придется и снизить негативное влияние на окружающую среду.

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

Представитель iFixit Europe заявил после принятия закона о ремонте: Это огромная победа для потребителей всей Европы. Это голосование стимулирует развитие дружественного к праву на ремонт законодательства, а также даст возможность появиться рейтингу ремонтопригодности продукции и прогнозу продолжительности работы.

Подробнее..

ESP32 в окружении VSCode

30.11.2020 20:13:26 | Автор: admin

В нескольких следующих статьях я хотел бы детально рассмотреть настройку окружения VSCode для работы с фреймворком ESP-IDF. Не совсем популярная комбинация ПО обладает как преимуществами, так и недостатками, которые при детальном рассмотрении мы попытаемся исправить, обойти или превратить в достоинства.

Изыскания проводятся в рамках разработки программно-аппаратного комплекса полетного контроллера на чистых кватернионах, без применения углов Эйлера.

Поскольку предполагается многопользовательская удаленная разработка, то мы решили вначале отработать выбор и настройку самой среды разработки. После нескольких экспериментов с Eclipse, Visual Studio и QT Creator выбор пал на кроссплатформенный VSCode и плагин от разработчика Espressif IDF для работы с фреймворком ESP-IDF.

В качестве сердца контроллера рассмотрим двухъядерный микроконтроллер ESP32, который обладает рядом преимуществ, которые планируется использовать и раскрыть в проекте, а именно:

  1. ESP32 это не MCU, а SoC*, имеющий на борту:

    1. Wi-Fi: 802.11 b/g/n/e/i (802.11n @ 2.4 GHz up to 150 Mbit/s)

    2. Bluetooth: v4.2 BR/EDR and Bluetooth Low Energy (BLE)

      * Все эти интерфейсы мы планируем использовать для коммуникации с изделием. А вот аналоговый радиоканал и FPV использовать по возможности не планируем.

  2. 2 Cores 240 MHz up to 600 DMIPS

  3. ULP co-processor

В качестве ядра ESP32 использует Tensilica Xtensa 32-bit LX6, у которого есть свои недостатки, главным из который, на мой взгляд, пока является слабая производительность с операциями с плавающей точкой в реальных приложениях. Возможно, это связано с текущей версией ядра LX6 или с компилятором GCC 8 toolchain, пока нет точного понимания. Пока это создает некоторые теоретические проблемы со скоростью работы фильтра Калмана и похожих алгоритмов (реализация Madgwick и Mahony).

Есть информация, что новое ядро LX7 уже имеет большую производительность, но оно пока используется только в одноядерной версии ESP32-S2.

Также мы надеемся, что производительность с float может возрасти с выпуском нового toolchain.

Более детальное сравнение ядер Xtensa vs ARM можно посмотреть здесь.

Начиная с версии фреймворка ESP-IDF v4.0 Espressif существенно улучшила техническую поддержку и дальнейшую разработку фреймворка. Качественно улучшилась техническая документация и поддержка разработчиков на форуме компании и GitHub. Кардинально улучшилась оперативность обработки сообщений об ошибках в фреймворке и их устранение. Ускорился выпуск новых версий базового фреймворка ESP-IDF, и дополнительных на нем основанных, например Arduino-ESP32.

НАСТРОЙКА ОКРУЖЕНИЯ

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

В силу некоторых причин я работаю в стеке Windows. Но все последующие рекомендации, скорее всего, будут подходить и для Linux систем. Поэтому буду признателен за комментарии владельцев Linux, если они обнаружат принципиальные отличия в настройках или поведении системы и приложений. Вопрос скорости компиляции в Win и Linux поднимать не стоит, мы прекрасно знаем, что скорость компилирования в Linux в 2-4 раза выше.

В состав окружения будут входить, в порядке очередности установки:

  1. Git

  2. Python

  3. CMake

  4. VSCode ESP-IDF (далее фреймворк)

  5. ESP-IDF Tools (далее Toolchain)

Я рекомендую все утилиты ставить в отдельную папку в корень диска, например в C:\dev , за исключением VSCode.

А проекты сохранять в папку C:\dev\esp32 .

В дальнейшем это сделает настройку фреймворка более удобной, с визуальной точки зрения, поскольку существенно сократит длину путей к утилитам Toolchain.

Git

Сначала поставим Git

Download URL: https://git-scm.com/

Installation path: C:\dev\Git

Python

Затем поставим Python

Download URL: https://www.python.org/downloads/

Installation path: C:\dev\Python39

Перед установкой убедитесь, что в папке C:\Users\UserName\AppData\Roaming\Python\Python39 не осталось скриптов от предыдущих установок. Почему скрипты для Python из Toolchain попадают в C:\Users\UserName\AppData\Roaming\Python\Python39 (внутри есть еще две папки \Scripts и \site-packages) для меня загадка. Правда скрипты попадают в эту папку только если производить установку ESP-IDF Toolchain из дистрибутива esp-idf-tools-setup-2.3.exe или более ранних версий. Буду признателен, если кто-то подскажет ответ.

(Q1) Вопрос 1: Почему скрипты для Python из дистрибутива ESP-IDF Tools попадают в папку C:\Users\UserName\AppData\Roaming\Python\Python39 (\Scripts и \site-packages), а не в папку с Python? Можно ли изменить этот путь на пользовательский?

Вообще буду признателен за комментарии и ответы на заданные по ходу статьи вопросы. В случае ответа на вопросы прошу начинать их в комментариях с префикса (Q1), где цифра после Q номер вопроса, так их будет легче обрабатывать по тексту.

CMake

Теперь поставим CMake

Download URL: https://cmake.org/download/

Installation path: C:\dev\CMake

На текущий момент Toolchain ESP-IDF использует для сборки проекта только свою версию CMake v3.13.4, которая идет в комплекте, и категорически не хочет использовать другие, в отличии от Python. Это выглядит странно, поскольку на сколько мне известно, у версий 3.13-19 нет явных проблем с обратной совместимостью.

(Q2) Вопрос 2: Какие проблемы с обратной совместимостью есть у CMake версий 3.13-19? Почему Toolchain ESP-IDF не позволяет использовать альтернативные версии CMake?

VSCode

Теперь можно установить VSCode

Download URL: https://code.visualstudio.com/

Installation path: в папку по умолчанию

VSCode plugins

Далее необходимо поставить в VSCode два плагина:

  • Espressif IDF (espressif.esp-idf-extension)

  • C/C++ IntelliSense (ms-vscode.cpptools)

Настраивать плагины пока не обязательно, они будут частично настроены после работы мастера настройки Espressif IDF.

Default Terminal Shell

Перед тем как продолжить, я настоятельно рекомендую установить CMD как оболочку терминала VSCode по умолчанию. Дело в том, что по умолчанию после установки в VSCode в качестве терминала используется MS PowerShell, но не все скрипты, которые используются в плагине Espressif IDF для работы с фреймворком корректно выполняются в powershell. А в новой версии оболочки PowerShell, которую предлагается скачать и установить, эти скрипты выполняются еще хуже. К тому же далее мы будем использовать в настройках ESP-IDF некоторый лайфхак, который в PowerShell вообще не выполняется.

Для установки оболочки терминала по умолчанию запустите терминал Terminal ==> New Terminal и выберете окне терминала в выпадающем списке опцию Select Default Shell. Далее выберите в списке Command Prompt cmd.exe

Окно терминала теперь можно закрыть.

Установка ESP-IDF

Если вы еще не убирали опцию Show Onboarding on Visual Studio Code start в настройках Espressif IDF, то после перезагрузки VSCode и выбора в правой части экрана иконки с логотипом Espressif автоматически запустится мастер настройки ESP-IDF (далее просто Мастер).

ESSPRESSIF

Данный Мастер можно также вызвать командой ESP-IDF: Configure ESP-IDF extension (onboarding.start)

Теперь можно приступить непосредственно к установке и базовой конфигурации фреймворка и Toolchain.

Для начала выберем, где хранить настройки фреймворка.

Для первого раза я рекомендую сохранить настройки непосредственно в пустой папке нового проекта, которую мы предварительно создадим, например здесь: C:\dev\esp32\device01 , и откроем в VSCode. Это немного облегчит понимание, какие настройки, когда и для чего создает данный Мастер, и какие настройки понадобятся еще.

Для сохранения настроек в нашу папку выберем опцию Workspace folder settings и укажем путь C:\dev\esp32\device01.

Нажимаем START

_ User & Workplace

Небольшое отступление.

VSCode оперирует двумя типами настроек глобальными, которые обозначаются как User и локальными, которые обозначаются как Workspace и действуют для конкретного проекта. Есть некоторое несоответствие английских названий смыслу, поскольку User ассоциируется с пользовательскими настройками, но так сложилось исторически, и этот момент нужно просто запомнить, как есть. Мы будем далее называть настройки из раздела User Глобальными, а из Workspace Локальными. Если кто-то знает более подходящую терминологию, милости прошу поделиться в комментариях.

Локальные настройки применяются после Глобальных и имеют над ними приоритет, т.е. при дублировании настроек применяются Локальные.

Настройки в VSCode можно просматривать как просто текстовые файлы JSON, так и в форме графического интерфейса VSCode. Полезной фитчей последнего является то, что в разделе измененные значения параметров относительно значений по умолчанию подкрашиваются синей полосой. Это упрощает навигацию по параметрам и также позволяет в два клика вернуться к дефолтным значениям.

Таким образом, те настройки, которые мы получим в результате работы Мастера и сохраним в папке проекта будут для нас Локальными (Workspace), а в дальнейшем мы перенесем их и в Глобальные (User).

Select Python version to use

На данном экране необходимо указать путь к вашей версии Python. Его можно выбрать из выпадающего списка. Иногда скрипты Мастера дают сбой, и после выбора версии Python из списка предлагается снова ввести путь к исполняемому файлу python.exe вручную. Тут ничего нельзя поделать, придется повторить путь вручную.

Также на экране показана определившаяся в нашей системе версия Git, которую мы поставили ранее.

Проверяем путь к Python и нажимаем Configure ESP-IDF

Configure ESP-IDF

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

Можно также выбрать опцию Find ESP-IDF in your system и указать папку с ранее скаченным фреймворком. Именно этой опцией, скорее всего, вы будете пользоваться в дальнейшей повседневной работе.

Если вы хотите дополнительно использовать в своих разработках класс Arduino, как компоненту проекта, то необходимо выбрать версию ESP-IDF - release/v4.0 (release branch) или v4.0.2 (release version), т.к. фреймворк Arduino-ESP32 доступен сейчас только для версии v3.3, v4.0 и v4.2.

Однако, v3.3 уже морально устарела, а v.4.2, на мой взгляд, пока еще слишком сырая и не имеет окончательного релиза, хотя к моменту окончания нашей установки она может уже и стабилизироваться.

Использование более ранних версий фреймворков ESP-IDF и Arduino-ESP32 чем v.4.0 настоятельно не рекомендуется. Чтобы убедиться в этом можно просто ознакомиться с количеством изменений для базового фреймворка v4.0 по сравнению с версиями v3.x https://github.com/espressif/esp-idf/releases/tag/v4.0 , а фреймворк Arduino-ESP32 основывается как раз на базовой версии фреймворка ESP-IDF. Версии ниже v4.0 также плохо поддерживают, или вообще не поддерживают CMake, а все наши дальнейшие изыскания будут связаны именно с этой популярной системой сборки проектов.

Примечательно, что для Arduino IDE доступен только фреймворк Arduino-ESP32 на версии v.3.3 ESP-IDF, поэтому разработка в нашем окружении VSCode дает несомненное преимущество при работе с классом Arduino, как с компонентой проекта. Правда в этой связке тоже не все так гладко, о чем мы позднее поговорим более подробно.

Если вы хотите на этапе разработки проекта получать поменьше обновлений для вашего фреймворка, то необходимо выбирать версию (release version), а не (release branch).

А мы тем временем, выбираем release/v4.0 (release branch), а в качестве пути к фреймворку ESP-IDF укажем папку C:\dev , к которой автоматически добавится адрес \esp-idf .

Нажимаем Check here to download, после чего начинается процесс загрузки с GitHub.

Ждем несколько минут и после окончания загрузки внезапно видим ошибку:

Дело в том, что в плагине Espressif IDF версии 0.5.1 вот уже много месяцев присутствует ошибка для выбора release/v4.0 (release branch) после загрузки репозитария v4.0 система пытается найти архив для версии 4.0.2

Будем надеяться, что в будущих версиях эту ошибку исправят. Соответствующую проблему я зарегистрировал на GitHub https://github.com/espressif/vscode-esp-idf-extension/issues/223

А нам остается только выбрать v4.0.2 (release version) и повторить загрузку.

После успешной загрузки и распаковки фреймворка Мастер предложит перейти к настройке утилит Toolchain.

Нажимаем Go to ESP-IDF Tools setup

ESP-IDF Tools Configuration

На данном экране выбираем Download ESP-IDF Tools

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

Теперь необходимо указать папку, в которую будет загружен Toolchain ESP-IDF Tools. Укажем C:\dev\.espressif .

Обратите внимание, ниже перечислены версии всех утилит, входящих в комплект Toolchain для ESP-IDF v4.0.2 именно с ними будет гарантироваться работа (компиляция) как самого фреймворка ESP-IDF, так и компоненты Arduino-ESP32 v4.0.

Tool: xtensa-esp32-elf Version: esp-2020r3-8.4.0

Tool: esp32ulp-elf Version: 2.28.51.20170517

Tool: cmake Version: 3.13.4

Tool: openocd-esp32 Version: v0.10.0-esp32-20200709

Tool: mconf Version: v4.6.0.0-idf-20190628

Tool: ninja Version: 1.9.0

Tool: idf-exe Version: 1.0.1

Tool: ccache Version: 3.7

Нажимаем Download

Ждем несколько минут и в самом конце установки получаем в консоли ошибку:


ERROR: Failed building wheel for psutil

ERROR: Command errored out with exit status 1:

VisualStudio is not installed; get it from http://www.visualstudio.com/en-au/news/vs2015-preview-vs

error: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studio": https://visualstudio.microsoft.com/downloads/

...

WARNING: You are using pip version 20.2.3; however, version 20.2.4 is available.

You should consider upgrading via the 'C:\dev\.espressif\python_env\idf4.0_py3.9_env\Scripts\python.exe -m pip install --upgrade pip' command.


Оказывается, для установки одной из компонент wheel for psutil требуется ее предварительно скомпилировать с участием MS С++14 и именно из состава Visual Studio! Ну кто бы мог подумать?!

Я не стал пока искать альтернативных решений, а просто перешел по предложенной ссылке https://visualstudio.microsoft.com/downloads/ , скачал и установил VisualStudio.

После чего вернулся в окно VSCode и снова нажал Download.

Забегая вперед, скажу, что в этот раз установка ESP-IDF Tools закончилась успешно, все компоненты скомпилировались и установились. Однако мне осталось не ясным, нужен ли для успешной установки именно компилятор С++14 и состава Visual Studio, или подойдет любой другой компилятор С++14, установленный в системе?

Если у вас не было данной ошибки, значит в вашей системе стояли необходимые компиляторы. Буду признателен, если вы поделитесь описанием вашей конфигурации. С какими компиляторами установка ESP-IDF Tools завершилась у вас удачно?

(Q3) Вопрос 3: С какими компиляторами С++14, помимо штатного из состава Visual Studio, может успешно завершиться установка ESP-IDF Tools? Нужно ли обязательно при этом иметь в системе установленную программу Visual Studio, или достаточно только компилятора?

_ PIP

Перед тем, как вы тоже повторите действия выше с установкой Visual Studio и нажмете Download обратите внимание на последние строчки сообщения об ошибки. Там сказано, что в системе используется устаревшая версия pip в то время, как доступна более новая.

PIP это система управления пакетами, которая используется для установки и управления программными пакетами, написанными на Python. На сколько я помню, pip попадает в систему автоматически при установке Python версии > 3.4.

Я рекомендую перед повторной попыткой установки ESP-IDF Tools устранить это замечание, чтобы данные строки больше не появлялись в консоли и не мешали восприятию сообщений.

Для этого запустим командную стоку CMD из меню Пуск и введем сначала команду C:\dev\.espressif\python_env\idf4.0_py3.9_env\Scripts\python.exe -m pip install --upgrade pip , а затем python -m pip install --upgrade pip

Дело в том, что первая команда обновит pip в локальной копии idf4.0_py3.9_env, а вторая команда обновит pip уже в основной системной версии Python.

_ PIP cache

Еще один нюанс кроется в кэше pip. Если после всех установок и настроек ESP-IDF вы вдруг решите удалить Visual Studio со всеми дистрибутивами C++, а потом решите повторно запустить мастер настройки ESP-IDF, то процесс установки ESP-IDF Tools пройдет успешно, как ни в чем не бывало. Дело в том, что в процессе предыдущей установки pip сохранил в кэш результаты всех успешных компиляций. Кэш находится по адресу C:\Users\UserName\AppData\Local\pip\cache , и далее, при повторных установках, если в кэше находится файл для утилиты подходящей версии, то он берется именно из кэша. Новые файлы будут компилироваться только для новых версий утилит из Toolchain.

Для того чтобы провести полную переустановку Toolchain для ESP-IDF, без использования кэша pip, достаточно просто удалить папку C:\Users\UserName\AppData\Local\pip\cache\wheels , это вернет в консоль сообщение о недостающем дистрибутиве С++14, если таковой отсутствует в вашей системе.

Теперь скачиваем Visual Studio https://visualstudio.microsoft.com/downloads/ , устанавливаем его с одной единственной опцией Разработка классических приложений на C++, возвращаемся в окно VSCode и

Примечание: не стоит пока выбирать опцию Разработка на Python, поскольку это установит в систему еще одну копию Python более низкой версии, что может создать трудности для дальнейшей настройки и работы фреймворка ESP-IDF.

Возвращаемся на шаг назад, нажав на стрелку влево над надписью ESP-IDF Tools, нажимаем Download ESP-IDF Tools и снова нажимаем Download.

В случае успешной установки Toolchain станет доступна кнопка Go to next step.

В логе ниже мы увидим снова предупреждение, что используется устаревшая версия pip. Да как так-то?..

Дело в том, что если мы отмотаем лог наверх, то найдем сообщение:

Creating a new Python environment in C:\dev\.espressif\python_env\idf4.0_py3.9_env ...

Да, Мастер создал новую версию локального окружения Python, в которую поместил версию pip, идущую в комплекте с Toolchain, а не ту, которая установлена и обновлена в системном Python. Почему Мастер не взял системную версию pip неизвестно. Будем надеяться, что в будущих версиях Матера это поправят.

Чтобы снова обновить локальную версию pip снова выполняем в командной строке команду C:\dev\.espressif\python_env\idf4.0_py3.9_env\Scripts\python.exe -m pip install --upgrade pip

Нажимаем Go to next step

Verify ESP-IDF Tools

Теперь мастер предлагает нам проверить все абсолютные пути для утилит из Toolchain.

Обратите внимание, мастер сделал локальную копию нашего Python39 со всеми скриптами и окружением - idf4.0_py3.9_env, и менять этот путь не стоит.

Также учтите, что несмотря на установленный в системе CMake v3.19 ESP-IDF использует свой CMake v3.13.4, и это доставит нам в дальнейшем некоторые сложности. Заменить путь к CMake более новой версии на данном этапе пока не удастся, т. к. на следующем шаге проверки Мастер укажет на несоответствие версий и не даст завершить настройку. Поэтому оставляем все как есть.

Нажимаем Click here to check tools exist

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

Если все соответствует везде появятся положительные галочки и сообщения are satisfied.

Нажимаем Go to next step

ESP-IDF Tools have been configured

И вот она, заветная надпись об успешном окончании установки.

Настройки проекта

Однако не спешите пока открывать примеры кода. Давайте посмотрим вначале, что же записал мастер настройки ESP-IDF в нашу папу, которую мы указали в самом начале как C:\dev\esp32\device01

В данной папке появилась папка .vscode с единственным файлом settings.json который содержит всего пять строк:

{

"idf.espIdfPathWin": "C:\\dev\\esp-idf",

"idf.toolsPathWin": "C:\\dev\\.espressif",

"idf.customExtraPaths": "C:\\dev\\.espressif\\python_env ",

"idf.customExtraVars": "{\"OPENOCD_SCRIPTS ",

"idf.pythonBinPathWin": "C:\\dev\\.espressif\\python_env "

}

Это пять основных переменных, которые определяют какой именно фреймворк ESP-IDF и Toolchain будут применяться для компилирования и работы с проектом.

Но это еще не все настройки, которые нам необходимы.

Теперь давайте создадим еще одну папку, например C:\dev\esp32\device02 , откроем ее в VSCode и выполним команду ESP-IDF: Add vscode configuration folder, далее будем для краткости называть ее ESP:Avcf. Для выполнения команды нажмите F1 и начните набирать ESP, далее уже можно выбрать команду из списка.

Теперь в папке .vscode появилось уже 4 файла. Причем в фале settings.json нет переменных, которые мы получили после мастера настройки ESP-IDF. А в фале c_cpp_properties.json как раз есть ссылки на эти переменные с путями к фреймворку и Toolchain.

Более того, если бы мы выполнили команду ESP:Avcf в нашей первой папке device01, то наши настройки были бы перезаписаны новым файлом settings.json .

Все дело в том, что, к сожалению, эти две команды работают не совсем взаимосвязано. Мастер настройки ESP-IDF запоминает в переменных среды idf пути к фреймворку и toolchain и сохраняет их, в нашем случае, Локально. А команда ESP:Avcf создает конфигурационные файлы ВСЕГДА используя Глобальные переменные.

Теперь получается, для того чтобы корректно заработали настройки в c_cpp_properties.json, нам необходимо сохранить наши переменные Глобально? И да, и нет.

Дело в том, что, как мы уже говорили ранее, параметры Workspace (Локальные) применяются после параметров User (Глобальных), и если и там и там есть одни и те же параметры, то Workspace имеет преимущество перед User и перезаписывает их. Таким образом, мы может как внести наши переменные в User, так и добавить их в наш Workspace, после параметров, созданных командой ESP:Avcf, в низ файла settings.json, непосредственно в папку .vscode в нашей папке проекта . И то и другое будет работоспособно.

Однако, если вы ведете совместную разработку проекта, например на GitHub, то вам я рекомендую обязательно внести все настройки в файл settings.json в самом проекте, чтобы гарантировать себе, что проект будет собираться в одном и том же фреймворке и Toolchain у всех участников разработки.

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

Внести настройки переменных idf в User можно как вручную, так и еще раз запустив Мастер, выбрав в самом начале опцию User settings и далее указав папку уже со скаченным фреймворком ESP-IDF.

Но в начале давайте откроем один из примеров кода и попробуем скомпилировать его с Локальными настройками.

ПРИМЕР КОДА и КОМПИЛЯЦИЯ

Чтобы открыть библиотеку примеров кодов ESP-IDF выполним команду ESP-IDF: Show ESP-IDF Examples Projects.

В открывшемся списке выберем проект get-started\blink и нажмем кнопку Crate project using example blink. Разместим проект в папке esp32.

Теперь откроем файл .vscode\settings.json и добавим в конец файла наши настройки из папки device01. Будьте внимательны с синтаксисом JSON, не забудьте про запятые и фигурные скобки.

Теперь перейдем на фаqл с кодом проекта main\blink.c .

Обратите внимание, после открытия проект содержит две проблемы - BLINK_GPIO и portTICK_PERIOD_MS подкрашены красным системой проверки синтаксиса C/C++ IntelliSense. Мы разберем этот момент чуть позже, следующей статье про тонкие настройки окружения VSCode.

А сейчас выполним команду ESP-IDF: Build your project.

Первый процесс компиляции занимает несколько минут, поскольку создается папка build, последующие будут происходить значительно быстрее. В конце компиляции появится сообщение Build Successfully. Это значит, наши Локальные настройки применились успешно.

К сожалению, в случае компиляции проекта командой ESP-IDF: Build your project не происходит отображения лога компиляции в окне терминала. Но можно выполнить эту команду другим способом, из меню Terminal => Run Task => Build Build project или Terminal => Run Build Task

Если окно терминала не было открыто, оно откроется автоматически и в конце компиляции в терминале появится сообщение Project build complete. To flash, run this command:..

Выполнение команд из меню Terminal обеспечивается скриптами в файле .vscode\task.json , но их ход выполнения немного отличается от аналогичных команд через меню F1, например ESP-IDF: Build your project.

На этом мы пока прервемся мы смогли сделать базовую настройку плагина Espressif IDF для работы с VSCode и успешно скомпилировали один из примеров кода из библиотеки фреймворка.

В следующей статье мы займемся более тонкой настройкой окружения VSCode и самого фреймворка рассмотрим утилиту menuconfig, новые скрипты для task.json и решим проблему с не всегда корректной подсветкой синтаксиса IntelliSense, также рассмотрим выполнение команд фреймворка из командной строки.

Подробнее..

Удобное DIY управление светом

01.12.2020 10:20:26 | Автор: admin
Как и многих гаджетоманов, меня не обошел тренд домашней автоматизации. Будучи автоматчиком по образованию и призванию, я постоянно возвращаюсь к работе с микроконтроллерами в качестве хобби.
Проживая в трехкомнатной квартире, со временем все больше и больше места стали занимать члены моей семьи, и все меньше нетронутых заповедных уголков оставалось мне для просмотра телевизора или работы на ноутбуке. Каждый член семьи непременно должен был что-то поискать в комнате при свете, и независимо от исхода поисков, уйти не погасив свет. Социальная инженерия не помогала, и было принято волевое решение свой досуг потратить на данную задачу. А конкретно, было решено сделать дистанционное отключение света.
Уважая время читателей Хабра, сообщу, что содержание поста для узкой аудитории тех, у кого чешутся DIY руки, и он не содержит познавательного контента в других областях.
image


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

Путем анализа возможных комплектующих и выбора доступной номенклатуры, были выбраны дешевые микроконтроллеры NRF24le1 со встроенным проприетарным радиоинтерфейсом. Несмотря на частоту 2.4.ГГц, они были несовместимы ни с WiFi ни с Bluetooth.

Первые же эксперименты показали, что потребление контроллера превышает токи утечки через нагрузку типа лампы накаливания и тем более светодиодной лампы. Лампы загорались.
Я ходил в раздумьях о решении данной задачи пару недель, как М.Фарадей, носивший моток проволоки и магнит в кармане, пока не открыл явление электромагнитной индукции.
Одновременно решался вопрос способа питания от 220В. Так как контролер однозначно располагался в чашке люстры, то емкостной параметрический источник питания был признан достаточно простым и безопасным для применения. Вчитываясь в даташит на NRF24le1 была подмечена возможность котроллера работать в большом диапазоне напряжений при этом с шагом 0,2В определять текущее напряжение питания, а также ФОРМИРОВАТЬ прерывание по программному порогу при изменении напряжения на входе. Это сейчас, по прошествии значительного времени, мне кажется, что 2+2 сложились, а тогда мне пришлось еще ночь переспать, пока решение мне не приснилось.
Как водиться, утром мне пришла идея: что если дернуть напряжением на входе контроллера, чтобы сообщить ему активность на выключателе в стене. При этом параметрический емкостной делить спокойно транслировал изменение напряжения на своем входе на выход к контролеру, Стабилитрон обрезал только то, что превышало допустимое значение по даташиту контроллера, а в снижение не вмешивался.
Проведя дополнительные эксперименты, было определено, что уверенное и достаточное изменение напряжения на выходе делителя происходит при удвоении емкости. Далее тут же было решено питание на контроллер подавать непрерывно, выключатель должен быть в состоянии нормально замкнут, а кратковременное размыкание направляло ток через дополнительную к делителю емкость, тем самым снижая напряжение на время размыкания выключателя.
На КДПВ приведена итоговая схема работы для проводки с одним некоммутируемым проводом питания на люстре.
Под качель выключателя была подложена пружинка из шариковой ручки, возвращающая выключатель в положение включено. По непонятной причине кнопки отсутствовали в продаже, а заказные были неадекватно дороги.
Все, что описано выше, само по себе еще ни привело, ни к какому удобству, но открыло путь к автоматизации света. Так как контроллер теперь был постоянно запитан, а управление по месту сохранено.
Далее, в микроконтроллер была залита программа, которая обучала его кнопке с ИК-пульта телевизора. Мне понравилась зеленая кнопка телетекста спокойный цвет, легко ищется в темноте на ощупь, и не используется в большинстве режимов работы ТВ.
На базе примера протокола производителя описанного в nan-18 был разработан свой расширенный протокол.
nAN-18 Application Note.fm Nordic Infocenter
Расширенный протокол предоставлял возможность построения домашней сети с выделенным концентратором и шлюзом в сеть WiFi (связка NRF-ESP). Доработанное ПО снабдило контроллер в люстре следующими функциями:
обновление прошивки по воздуху;
Plug&Play новых клиентов в сети, а также восстановление работоспособности клиентов при нештатном отключении питания и последующем включении;
инвертирование состояния нагрузки с выключателя (удержание до 3 с) и кнопки ИК-пульта;
обучение кнопке ИК-пульта;
ввод идентификационной строки в конфиг клиента по воздуху (типа свет в зале, свет в спальне и т.д.). Потребовалось из-за специфики работы P&P, построенного на выделении динамических адресов новым клиентам. Поэтому клиент впоследствии должен был сам представляться где он/что он;
вход в режим обучение с кнопки пульта по удержанию выключателя от 3-6 с
вход в режим программирования по воздуху по удержанию выключателя от 6-9 с);
перезагрузка с выключателя при удержании более 9 с;
Индикация реакций на срабатывание служебных режимов выполняется путем моргания люстрой.
Также была разработана служебная программа на Csharp для отладки и ввода наименований клиентов по мере их установки в разных комнатах.
Была успешная попытка управлять голосом через Siri посредством проекта HAP-NodeJS.
Все работало. Система в эксплуатации семьи уже более 5 лет. Но, управление с компьютера или Siri сошло на нет, практически, после первых показательных выступление перед домочадцами и друзьями. После пусконаладки под нагрузкой, в течении недели, перепрошивка по воздуху также перестала быть востребованной. Работоспособность клиента от выключателя и пульта ИК не зависит от наличия концентратора в сети и вхождения клиента в сеть.

Следует отметить, что решение на ESP перенести не удалось, т.к. емкостной параметрический делитель не тянет пиковые токи ESP (до 300мА).
ПО не выкладываю в массы, так как оно не содержит ничего интересного, перегружено избыточной функциональность, которая на практике используется только на 20%. По требованию, могу индивидуально передать по принципу как есть, а также дополнительные фотоматериалы по компоновке элементов на плате с контроллером (придется разобрать люстру).
Основной презентацией статьи можно считать принцип интерфейса между выключателем и контроллером NRF по линии питания.

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

На этом всё! Всем добра!
Подробнее..

Бизиборд? Power bank? Супернажималка

01.12.2020 16:10:27 | Автор: admin

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

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

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

О мелкой моторике и лишней кнопке

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

Мы дожили до скучных времен: сейчас есть девайсы на все случаи жизни. И для детей в том числе. Игрушек некуда девать. Вот и для развития мелкой моторики придумали бизиборды (только не придумали, как водится, русского названия).

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

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

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

Дерево и чугун

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

Мастер-любитель всегда рад поводу для покупки нового инструмента. Вот и я решил, что тут без фрезерного станка не обойтись. Сейчас мода на гравировально-фрезерные станки с ЧПУ, типа CNC-3018Pro. Недавно я купил такой и, надо признаться, так и не понял, как на нем в коробочной комплектации можно выполнять что-то мощнее гравировки. Но на тот момент я сделал выбор в пользу ручного, но добротного чугунного фрезерного станка.

Корпус почти готов! А фрезерный станок - он на дальнем плане.Корпус почти готов! А фрезерный станок - он на дальнем плане.

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

К сожалению, дуб легко пригорает. Поэтому фаски оставляют желать лучшего. Но лицевая поверхность прекрасна)К сожалению, дуб легко пригорает. Поэтому фаски оставляют желать лучшего. Но лицевая поверхность прекрасна)

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

А еще, как оказалось, при работе на ручном фрезере важно удобно сидеть. Фрезерование процесс неторопливый, и, в общем, трудоёмкий: стоя работать неудобно, быстро устаешь. Рекомендую для мастерской стул-седло.

Если вы сидели на стуле и в седле, но не на стуле-седле

Лет десять назад, когда стали проявляться первые симптомы от сидячей работы, я пробовал разные альтернативы традиционным методам сидения. И купил стул-седло. Но на работе он так и не прижился: надо было приподнимать стол, да и сидеть на нем можно было только одним способом: верхом с ровной спиной. На обычном стуле, мы же сидим по-разному, время от времени меняя позу: то облокотившись на спинку, то на локти, то с прямой свободной спиной, то вытянув ноги, полулежа.

Однако, стул-седло оказался незаменимым в мастерской: верстак и станки как раз на соответствующем уровне. А еще на стуле-седле ты полу-стоишь, а значит, жестче упираешься ногами, что позволяет рукам выполнять более силовую работу.

Любимый стул-седлоЛюбимый стул-седло

Пластмасса и творчество

Генеральной идеей была разместить в заданном небольшом объеме максимум разнообразных элементов управления. Сейчас доступно так много всего, на любой вкус, цвет и, главное, тактильный отклик: кнопки с фиксацией и без, с подсветкой и без нее, квадратные и круглые, вытяжные переключатели, тумблеры, поворотные переключатели (при выборе элементов единственно важно, чтобы усилие нажатия-переключения было небольшое, чтобы ребенок справлялся). Хотелось, чтобы и сверху, и спереди, и с боков устройства что-то да было.

Но в процессе рисования макета и обдумывания логики работы аппетиты пришлось умерить и дизайн упростить. И в итоге стало так:

Вид сверхуВид сверхуВид сзадиВид сзади

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

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

Вы же обратили внимание, насколько прямоуголен окружающий нас мир? Не зря Стив Джобс называл прямоугольник (с закругленными углами) базовым элементом: оглянитесь, подавляющее количество окружающих нас вещей и предметов это прямоугольники! Может быть, прямоугольная парадигма и наше мышление делает прямоугольным, более стереотипным? ) Творя в гексагоне, приходится напрягать мозг, воспринимать пространство под новым углом. Наверное, поэтому шестиугольная мозаика для детей выпускалась еще в СССР.

Очень хотелось разместить на приборе поворотный переключатель галетник. Тактильные ощущения от его переключения не сравнишь ни с чем. Когда-то галетные переключатели были в каждом телевизоре, а сейчас в быту их почти не встретишь. Но нужен какой-то функционал! Галетник у меня был на 12 положений, поэтому естественно пришла мысль на каждое положение показывать на основном экране цифру от 0 до 9, ну и еще пару символов. Как отображать цифры? Сохранять попиксельный набор на каждую цифру или делить на сегменты и сохранять наборы сегментов? Решил, что сегментами интереснее, хотя сегментов конечно многовато получилось 12.

Гексагональные двенадцатисегментные цифры. Несколько облегчило задачу то, что один из сегментов включен всегдаГексагональные двенадцатисегментные цифры. Несколько облегчило задачу то, что один из сегментов включен всегда

Для классического семисегментного индикатора есть много микросхем-дешифраторов, а здесь пришлось паять дешифратор самому, на основе диодов. Диодов понадобилось много, около 140: для дешифратора и еще по одному на каждую кнопку, чтобы лампа на кнопке загоралась или от нажатия, или от дешифратора.

Второе, что я обязательно хотел реализовать это синтезатор цвета. Сейчас и дети знают, что все цвета могут быть получены от смешения трех основных. Но знать одно, а попробовать сделать это самостоятельно другое. Гораздо интереснее и познавательнее, когда сам включаешь синий, зеленый и-или красный, и тут же видишь результат их смешения. Изначально планировал поставить три переменных резистора, чтобы можно было плавно регулировать яркость каждого цвета. Но в итоге сделал дискретно: включение-выключение цвета кнопкой и регулировка яркости трехпозиционным тумблером.

В общем, получилось более-менее: обычный трехцветный светодиод для такой цели оказался не самым лучшим вариантом. Видны отдельные цвета, и световой поток направленный, слишком яркий. Наверное, надо было использовать какой-нибудь небольшой жк-дисплей.

Когда цвета значительно больше

Другая крайность, когда площадь рассеивателя очень большая. В этом убедился, когда собрал световой стол для рисования песком. Цвет воспринимается глазом как-то совсем по-особенному. Наверное, глаз пытается адаптироваться. И фоткать такой стол непросто.

Изначально он управлялся только пультом из комплекта RGB-ленты. Но кнопками оказалось удобнееИзначально он управлялся только пультом из комплекта RGB-ленты. Но кнопками оказалось удобнее

Звук, логика и немного нержавейки

Ок, цвет есть. Чего еще не хватает? Правильно звука. Благо, недорогих плат mp3-плейеров в том же Алиэкспрессе пруд пруди. Такой и поставил, а под него две кнопки переключения треков / регулировки громкости и кнопка play/pause. На microSD записал детские песенки и классику так у устройства появилась еще одна полезная функция.

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

Что бы еще добавить в прибор? Для того, чтобы было с чем сравнивать мои двенадцатисегментные цифры, неплохо бы поставить обычный семисегментный индикатор. А еще под рукой была микросхема К176ИД3 дешифратор четырехбитного двоичного кода в десятичный семисегментный символ. Пяти-шестилетку уже можно попробовать озадачить: Видишь цифры? Видишь четыре кнопки? Видишь, от их нажатия цифры меняются? Давай, думай, по какому принципу!

Оставалось еще пару бесхозных кнопок. К одной просто подключил вибромоторчик от старого мобильника. А ко второй зуммер (обычное пятивольтовое реле, которое включено последовательно со своими же нормально замкнутыми контактами). Надо сказать, этот зуммер оказался неплохим таким генератором помех: при его включении mp3-плейер сходил с ума и перезапускался. Решил проблему стандартно: обратный диод параллельно обмотке реле и конденсатор 0,1 мкФ в цепь питания, максимально близко к реле.

Электропитание

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

По нынешним временам самая удобная вещь это пауэрбанки. Там и аккумулятор, и вся электроника для его контролируемого заряда и разряда. Поэтому китайский noname был разобран на составляющие, а его разъемы и индикаторы были демонтированы их пришлось заменить. Дольше всего пришлось повозится с гнездом micro-USB, через которое пауэрбанк заряжается. Разъемчик маленький, хлипенький погиб при демонтаже. Да и как закрепить такую малютку в дубовой стенке корпуса? Думал найти какое-то готовое micro-USB гнездо для любительского монтажа, но не обнаружил таких в природе. Выручил переходник Apple Lightning micro-USB в алюминиевом корпусе. В результате микрохирургической операции штеккер Apple был удален, открыв доступ к маленькой плате, к которой можно было подпаяться, а алюминиевый корпус развальцован так, что стало возможным закрепить его к стенке шурупами.

ВнутрянкаВнутрянка

Всё, доделал

В итоге у меня всё же остались незадействованными два тумблера. Хотел добавить радио и генератор случайных чисел от 1 до 6 на основной экран. Генератор чтобы можно было использовать его для настольных игр, вместо кубика. Радио потому что да, были подозрения, что как детская игрушка прибор долго не продержится, и надо ему подарить какие-то способности для взрослого применения.

Всё, доделал, показываю восьмилетней дочуре.

Ух ты, папа, что это? спросила она.
Ну, вот: смотри, изучай. Можно нажимать всё что угодно и смотреть, что получается.
Круто, папа, значит это супернажималка!
В общем, на десять минут игры с супернажималкой дочери хватило.
Здорово, папа, ты молодец! сказала дочь и ушла играть в другую, любимую, игрушку. Маленькие пальчики привычно стали нажимать и гладить жесткое, безответное стекло смартфона.

PS: Впрочем, еще несколько раз супернажималка пригодилась нам в качестве пульта управления инопланетного космического корабля. Ну и как пауэрбанк тоже работает исправно.

Подробнее..

Категории

Последние комментарии

© 2006-2020, personeltest.ru