Lyginarium

Lyginarium

Пикабушник
883 рейтинг 12 подписчиков 56 подписок 4 поста 3 в горячем
Награды:
5 лет на Пикабу
68

Установка Home Assistant в Debian 12

Всем привет. Данную инструкцию пишу, в первую очередь, для себя, чтобы в следующий раз не вспоминать мучительно, что и как. На момент написания поста в инете гайдов по установке ХА на Доебана 12 не нашел, так что эксклюзив. Итак:

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

Из категорий пакетов выбираем Debian desktop environment, GNOME, SSH server, standart system utilities.

После установки доебана и первой нормальной загрузки, топаем в консоль, локально или удаленно по SSH. // - это знаки комментов, их в консоль копировать не надо)

su - //стать нормальным рутом

usermod -aG sudo username //добавить пользователя username в группу sudo

logout, login //- это если подключен по ssh. Если локально через гуя, то проще перезагрузиться, я хз, как это работает.

sudo -i //получить нормальные рутовые привелегии через sudo

apt-get install curl systemd-journal-remote systemd-resolved -y //ставим зависимости

systemctl restart systemd-resolved // чиним DNS после установки systemd-resolved

curl -fsSL get.docker.com | sh //ставим докер

wget https://github.com/home-assistant/os-agent/releases/download... //качаем агента

dpkg -i os-agent_1.5.1_linux_x86_64.deb //ставим агента

wget https://github.com/home-assistant/supervised-installer/relea... //качаем ХА

dpkg -i homeassistant-supervised.deb// ставим ХА

reboot //тут он нужен, потому что на экране написано, что он нужен для чего-то хорошего и умного)

Создать локальный аккаунт HA или восстановиться из бэкапа.

Увидеть ругачку System is currently unhealthy because it does not have privileged access to the docker runtime. Use the link to learn more and how to fix this.

Перезагрузить хост. Именно из ОС, а не из ХА.

Показать полностью
27

Не кормите кошку луком или удаленный мониторинг температуры 24/7 за 3 $. Свиристелки и перделки включены

Всем доброго времени суток! Завелась у меня как-то жена. Нет, не так. Завелась у меня как-то девушка. Познакомились мы с ней в закрытом платном клубе для дам и господ прогрессивных мировоззрений и изысканных вкусов. И это не то, о чем вы подумали :). Девушка притащила с улицы котенка со словами "Я покормлю и отнесу обратно". "Я тебе витащю", подумал я. Полная версия анектдота про "я тебе витащю" будет в комментах, он неприличный, здесь я его процитировать не могу. То, что девушка была ведьмой, я тогда еще не знал, поэтому черному цвету котенка значения не придал. Потом девушка стала женой, а котенок - кошкой. Потом мы с женой развелись, она съехала, а кошка осталась со мной. Из цензурных кошкиных имен могу припомнить лишь Жоплин и Писюнцель и есть за что. А потом, несколько лет спустя, у меня в квартире завелся репчатый лук. Вот с этого момента и начинается наша история.


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


Как меня занесло на тематические каналы ютуба, где я узнал про гидропонику, микрозелень и витграсс, я уже не помню. Но я захотел выращивать пшеницу и именно на гидропонике, без земли. Потому что к тому времени, опыт выращивания пшеницы на подоконнике в земле у меня уже был. И таки шо ви думаете? Таки стал! Но было одно "но". Эта сука такая пшеница (точнее ее зерна) покрывалась плесенью. Стал искать причину и пути решения проблемы. Большинство людей в интернете говорили и писали про зараженность зерна, циркуляцию воздуха и температуру/влажность. Зерна я и так обеззараживал на этапе замачивания, вентилятор (точнее тепловентилятор без включенного ТЭНа) поставил, влажность мне на тот момент измерить было не чем, управлять ею - тоже нечем, поэтому на влажность я пока что забил. С температурой было еще сложнее.


Мало того, рекомендуемая (допустимая) температура варьировалась (в зависимости от рекомендаций) от 15 до 36 градусов Цельсия, так я еще и не знал, какая именно сейчас у меня температура на окне. Потому что в квартире термометра у меня не было по причине отсутствия в нем необходимости. Был заказан бюджетный термометр-гигрометр Xioami с Алиэкспресс. Но когда он придет, было не известно (на момент написания этого поста это все еще остается неизвестным), а хотелось вот прям сейчас.


Тогда я вспомнил, что с крайнего раза, когда меня накрывало волной энтузиазма и хотения по отношению к автоматизации жилища, интернету вещей и всему вот этому вот, у меня должна была остаться платка Wemos D1 Mini (а точнее, её клон, могу предположить) на базе микроконтроллера ESP 8266 и цифровой датчик температуры DS18B20 в герметичном корпусе на метровом проводе. Причем микроконтроллер у меня уже был прошит NodeMCU, скрипты на Луа залиты и настроены на отправку данных в народный мониторинг, датчик с резистором припаяны. В прошлый раз я хотел разместить датчик на улице и предоставить публичный доступ к его показаниям. И себе и людям, так сказать. Ибо термометра за окном у меня не было, в подъезд (там он был и есть, но неизвестно насколько точно он показывает) не набегаешься, да и хотелось "цифру", облако, графики и вот это вот всё. Тогда у меня дело уперлось в необходимость выводить на улицу из комнаты кабель с датчиком и изготавливать будку Стивенсона. Я не знал, как это правильно сделать и мне было ссыкотно. А без правильного размещения выводить датчик в публичный доступ не было смысла.


Но это было тогда, а сейчас-то это не нужно! А все, что нужно у меня почти что уже есть и сделано. Осталось вот просто взять и запустить проект. И шо ви думаете? Таки взял и запустил! На момент написания этих строк я уже знаю, что обдув подоконника тепловентилятором с выключенным ТЭНом повышает температуру на примерно 2 градуса. Как так? А вот хрен его знает! И теперь я знаю, что днем, на солнце, температура на окне может достигать 36,5 градусов Цельсия, что неожиданно много на мой взгляд, ибо май еще и на улице прохладно - 20 - 22 градуса. Датчик DS18B20 у меня врёт, но в пределах допустимого, сравнивал с показаниями поверенного ртутного лабораторного термометра TGL 1198.


А теперь несколько слов о том, как все это устроено и работает. Схема:

Не кормите кошку луком или удаленный мониторинг температуры 24/7 за 3 $. Свиристелки и перделки включены Esp8266, Своими руками, Nodemcu, Lua, Автоматизация, Длиннопост

Как видите, схема оочень простая. Резистор нужен номиналом 4,7 кОм. Устройству для работы необходимо питание 5 В/очень мало А, поэтому я использовал оочень старую зарядку от кнопочного телефона Sony Ericсson, доставшуюся мне по наследству от предшественника на работе. Спасибо тебе, Виталик! Общий вид:

Не кормите кошку луком или удаленный мониторинг температуры 24/7 за 3 $. Свиристелки и перделки включены Esp8266, Своими руками, Nodemcu, Lua, Автоматизация, Длиннопост

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

Кишки устройства:

Не кормите кошку луком или удаленный мониторинг температуры 24/7 за 3 $. Свиристелки и перделки включены Esp8266, Своими руками, Nodemcu, Lua, Автоматизация, Длиннопост

Сама прошивка и луа-скрипты брались отсюда, инструкции по прошивке и заливке скриптов, а также настройке устройства - там же. Общий алгоритм работы устройства следующий: 1 раз в 5 минут железка опрашивает датчики. Датчиков на 1 шину 1-wire (у меня это пин D1) можно повесить несколько штук параллельно. У меня 1 датчик потому что: а) мне пока больше не нужно б) у меня есть в наличии только 1 датчик) Далее, если все хорошо (датчики на шине нашлись, значения отдали, устройство подключено к wi-fi и имеет доступ в инет) устройство отправляет данные на сервер проекта "Народный Мониторинг". Данные отправляются парами "имя-значение". Для датчиков DS18B20 в качестве имени выступает его адрес (идентификатор) - это уникальное значение, в природе не существует двух таких датчиков с одинаковыми адресами. Таким образом, в самом простом случае, у нас будет отправляться две пары значений: адрес датчика - значение температуры и слово "heap" - значение heap. О том, что такое heap, будет чуть ниже. Итак, данные отправляются, осталось только научиться их забирать. Идем на сайт или сайт проекта "Народный Мониторинг" и создаем там аккаунт. Я реально х. з. зачем им два одинаковых сайта в разных доменных зонах. Дальнейшие действия я производил из андроид-приложения проекта. Ссылки на весь разработанный для проекта софт под разные платформы есть на сайте проекта.


Логинимся в приложении. Переходим в раздел "Мои датчики" нажимаем на "+", вводим MAC-адрес своего устройства. Если вы все сделали правильно, то через некоторое время в приложении вы увидите что-то вроде этого: 

Не кормите кошку луком или удаленный мониторинг температуры 24/7 за 3 $. Свиристелки и перделки включены Esp8266, Своими руками, Nodemcu, Lua, Автоматизация, Длиннопост

У вас вместо понятного имени датчика будет букво-цифренный набор. Это адрес датчика DS18B20 на шине 1-wire. В приложении можете переименовать датчики на свой вкус и цвет.


Параметр "Heap" - это, скажем так, размер оперативной памяти, доступный для исполнения Луа-скриптов. От версии к версии прошивка NodeMCU содержала в себе разные баги. И порой получалось так, что размер heap становился меньше, меньше, вплоть до полного исчерпания и тогда устройство или самопроизвольно перезагружалось (плохой, но не самый худший вариант) или впадало в упячку. В наши дни такое (вроде бы) редкость. Но, судя по всему, автор скриптов - старый опытный джедай и реализовал отправку размера heap для собственного спокойствия. На нормально функционирующем устройстве график размера heap должен иметь примерно такой вид:

Не кормите кошку луком или удаленный мониторинг температуры 24/7 за 3 $. Свиристелки и перделки включены Esp8266, Своими руками, Nodemcu, Lua, Автоматизация, Длиннопост

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

Не кормите кошку луком или удаленный мониторинг температуры 24/7 за 3 $. Свиристелки и перделки включены Esp8266, Своими руками, Nodemcu, Lua, Автоматизация, Длиннопост

А вот ради этого, собственно, проект и затевался:

Не кормите кошку луком или удаленный мониторинг температуры 24/7 за 3 $. Свиристелки и перделки включены Esp8266, Своими руками, Nodemcu, Lua, Автоматизация, Длиннопост

Технические замечания.


Ограничения бесплатного аккаунта народного мониторинга:

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

2) Срок хранения подробных показаний датчиков составляет 30 дней, среднечасовых значений - 1 год, среднесуточных - вечность.

Лично меня эти ограничения (пока что) не ограничивают. Если вам нужно больше, то вы можете сделать ребятам из проекта хорошо. И это не то, о чем вы подумали. А может быть и то, я х. з., там тоже живые люди работают. Другой путь - вывести какое-либо общественно полезное устройство (метеостанцию, камеру наружного видеонаблюдения) в публичный доступ. Но там жесткие требования к качеству и достоверности передаваемых данных. Подробности - смотрите на сайте проекта.


Мои замечания по сборке и прошивке устройства:

1) Если у вас плата типа Wemos, NodeMCU и иже с ними, т. е. со встроенным конвертером интерфейсов USB<->Serial типа CH340, то никакой переходник USB-UART отдельно вам не нужен, подключается и шьется напрямую через USB порт.

2) Для непосредственно прошивки я использовал ESP8266Flasher, брать тут  (нажать на кнопку "Clone or download", выбрать "Download ZIP"), инструкция как прошить, например, здесь.

3) В файле "NarodMonFinal.lua номер пина соответствует номеру пина у Wemos D1 Mini, т. е. если желтый (Data) провод датчика припаян к пину D1, то соответсвующая строчка скрипта должна выглядеть как: local pin = 1

4) Скрипты Lua заливать через софтину ESPlorer, брать здесь

5) Лично я не понял, зачем автор скриптов подменяет MAC-адрес своего устройства на "MAC адрес от балды". Я использовал реальный MAC своего устройства. Узнать можно в ESPlorer. Его же и подставил в строчку local MACaddr = "#12-34-56-78-90-AB\n" в файле NarodMonFinal.lua.

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


По цене устройства. На момент подготовки поста (25.05.2020 г. от Р. Х.): Wemos D1 Mini - 143 рубля, DS18B20 - 90 рублей. Итого - 233 рубля = примерно $3,24. Так что те, кто хотел закидать меня тапками за кликбейт, могут оставить свои тапки себе.


За сим откланиваюсь, всем бобра, вкусных печенюгов и нескрипучих половиц :)

Показать полностью 7
48

О латентности при эмулировании ретроконсолей и не только

Приветствую вас, дорогие пикабушники!

Момент, когда мне захотелось переиграть в то что я играл на NES, доиграть в то, во что не доиграл на Sega Mega Drive, и поиграть в то, во что никогда не играл (а очень хотелось) на SNES, я точно не помню. Обстоятельства, при которых это произошло - тоже. Возможно, в числе прочего, свою роль сыграли несколько постов из этого сообщества). Но помню свои первые ощущения, когда начал играть в несовские Contra и Silk Worm на эмуляторах. Если коротко, то это были разочарования и досада. Я не смог поймать те кайф, кураж и увлеченность, которые я точно помню испытывал в девяностые, когда играл в практически любую игру на Денди. Теперь же я чувствовал себя как корова на льду.

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

Шли годы, смеркалось. Я поднабравшись знаний и опыта, научился где, чего и как в ретроарче "подкрутить", чтобы играть было более-менее сносно. "Неправильная физика" стала более правильной. Не торт конечно, но за неимением лучшего пойдет. Далее, бороздя просторы пикабу, я наткнулся вот на этот пост. Сам пост вполне себе интересный, довольно грамотный и уж точно имеет право на существование. Но самая мякотка была в комментах. Там люди, услышав краем уха про "богоподобную" и относительно новую фишку ретроарча "Run-Ahead", абсолютно на серьёзных щах утверждали, что теперь, дескать, ретроарч имеет "более низкий инпут лаг, чем оригинальные консоли". И новодельные коллекционные консоли типа NE Mini, SNES Mini, SMD Mini - тоже отстой, потому что там внутри эмулятор, но не ретроарч и опции "Run-Ahead" там нету. Короче, нет бога, кроме RetroAch и Rasberry Pi - пророк его. А остальное от лукавого и маст дай. При этом никаких вменяемых аргументов эти люди привести не могли, с результатами тестов ознакамливаться не желали, а уж проводить тесты самим - так это уже вообще "чур меня, чур". И тут меня, что называется, накрыло.

Адекватных результатов тестирования инпут лага эмуляторов в рунете я не нашел, поэтому решил провести тесты самостоятельно. Когда работа уже была в самом разгаре, я наткнулся на пост чувака с reddit, который провел сравнительное тестирование инпут лага NES Mini и ретроарча. Причем последний тестировался как с включенной опцией "Run-Ahead", так и без нее. Но меня уже было не остановить))).


Почему меня не устроили результаты тестов, которые я нашел в рунете

С самого начала, когда я ознакомился с теми тестами инпут лага, которые уже были в рунете, я знатно охренел от небрежности методологии их проведения. За точку отсчета при замере инпут лага брался момент нажатия пальца на кнопку геймпада, который определялся визуально. Здесь, наверное, стоит пояснить чуть подробнее. Визуально мы может отследить момент, когда палец касается кнопки. Визуально мы можем отследить, когда кнопка нажимается пальцем полностью, т. е. переводится из одного крайнего положения (отжата) в другое (нажата). Чего мы не можем отследить визуально, так это когда именно нажимаемая кнопка замыкает 2 контакта геймпада. Точно можно сказать, что где-то между этими двумя крайними положениями, но в какой именно момент - сказать нельзя. А теперь немного математики. Предположим, я буду снимать на камеру с 120 кадров в секунду (а на нее я снимать и буду), тогда 1000 мс разделить на 120 кадров = 8,(3) мс. Один кадр длится 8,(3) мс - это предел точности наших измерений (пока что). Теперь, предположим, я могу нажать-отпустить кнопку геймада 5 раз в секунду, если не буду убирать с нее палец. Пять раз в секунду - это очень быстро, не так ли? В таком случае один цикл нажать/отпустить у нас займет 1000 мс разделить на 5 раз = 200 мс. Положим, что длительность нажатия у нас равна длительности отпускания, тогда нажатие кнопки у нас происходит 200 мс / 2 = 100 мс. Сто миллисекунд нам нужно для того, чтобы перевести кнопку из состояния "не нажата" в состояние "нажата". Причем, когда именно она замкнет контакты геймпада: в начале нажатия, в середине или в конце - мы не знаем. Таким образом, мы получаем погрешность измерения равной 100 мс. С учетом того, что инпут лаг оригинальной NES равен примерно 35 мс, а SNES и SMD - 50 - 70 мс, я считаю такую погрешность абсолютно не приемлемой. А если, предположим, мы нажимаем на кнопку не 5, а 3 раза в секунду (что тоже, я считаю, немало), то погрешность измерений вырастает до (1000/3)/2 = 167 мс. Поэтому, нам нужно точно знать момент, когда кнопка замкнула контакты геймпада, но как это сделать? 

Что сделал я

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


Методология тестирования

На целевой платформе (во всех случаях это были ПК, в большинстве случаев - под Windows) запускался RetroArch версии 1.8.4 stable. К ПК подключался геймпад Defender Vortex с присобаченным к кнопке R1 красным светодиодом. Почему именно R1? Просто к ней мне было удобней всего подпаяться. Светодиод был вынесен из корпуса геймпада на красном проводе, длиной примерно 30 см. Провод со светодиодом располагался так, чтобы светодиод находился внизу монитора и при съемке попадал в кадр. Съемка велась на смартфон Motorola, который умеет в slow motion. т. е. он снимает видео в 120 fps, затем отснятое сохраняет в файл с уже 30 fps, таким образом получая замедление в 4 раза. Длительность одного кадра видео будет 1000 мс разделить на 120 кадров в секунду = 8,(3) мс. Эмулируемая платформа - NES. Используемый ROM - Super Mario Bros (World). Ядра (они же эмуляторы, они же cores) использовались все, способные работать с опцией run-ahead из доступных в каждом конкретном порте RetroArch. Да, ретроарч одной и той же версии, но собранный под разные ОС имеет разный список поддерживаемых ядер. Кнопке R1 в ретроарче было переназначено действие кнопки A, в Super Mario Bros - это прыжок.

Итак, запускался ром, запускалась игра, запускалась видеосъемка. Затем кнопка R1 нажималась, Марио подпрыгивал вверх и приземлялся обратно, кнопка отпускалась. Так повторялось 10 раз, иногда больше. Затем видео отсматривалось покадрово и велся подсчет кадров с момента зажигания светодиода до момента начала движения спрайта персонажа. Это и есть инпут лаг. Для каждой серии экспериментов приводится задержка минимальная/максимальная/средняя в кадрах/миллисекундах.


Платформы, на которых проводилось тестирование

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


Результаты тестирования

1) Железо: ноутбук Toshiba Sattelite L30-113. ЦП: Intel Core2Duo T2450 2,0 ГГц; ОЗУ: 2 Гбайт; Видео: ATI Radeon XPress 200M.

ОС: Windows 7 Ultimate SP 1 32 bit. Результаты (минимальный/максимальный/средний инпутлаг, кадров/миллисекунд):


Nestopia (UE): 4 кадра/33 мс / 9 кадров/75 мс / 7 кадров/56 мс.

FCEUmm: 6 кадров/50 мс / 12 кадров/100 мс / 10 кадров/80 мс.

QuickNES: 5 кадров/42 мс / 10 кадров/83 мс / 8 кадров/65 мс.

Emux NES: нет поддержки run-ahead, инпут лаг не замерялся.

Mesen: при включении run-ahead начались жуткие тормоза изображения и звука, fps просел до 30 с копейками, инпут лаг не замерялся.


2) Железо: Монитор Acer AL1717F, LCD, 17 дюймов, 4:3, 1280х1024, время реакции (заявленное) 5 мм, VGA.

ЦП: Intel Pentium CPU G4560 3,5 ГГц; ОЗУ: 4 Гбайт; Видео: Intel HD Graphics 610; НЖМД: Toshiba DT01ACA050.

ОС: Win 10 Professional 1809, 17763.1039 64 bit. Результаты (минимальный/максимальный/средний инпутлаг, кадров/миллисекунд):

Nestopia (UE): 9 кадров/75 мс / 20 кадров/167 мс / 12 кадров/99 мс.

FCEUmm: 9 кадров/75 мс / 13 кадров/108 мс / 11 кадров/91 мс.

Emux NES: нет поддержки run-ahead, инпут лаг не замерялся.

Mesen: ром запустился, изображение и звук были в норме, fps близко к 60, игра работала нормально, но я накосячил с видеозаписью) Переснимать не стал.


3) Железо: ноутбук Lenovo B590. ЦП: Intel Core i3-2348M 2,3 ГГц; ОЗУ: 8 Гбайт; Видео: NVidia GeForce 610M; НЖМД: WDC WD5000LPVT-08G33T1.

ОС: Windows 7 Prof SP1 64 bit. Результаты (минимальный/максимальный/средний инпутлаг, кадров/миллисекунд):

FCEUmm: 8 кадров/67 мс / 14 кадров/117 мс / 10 кадров/86 мс

Mesen: 10 кадров/83 мс / 13 кадров/108 мс / 12 кадров/98 мс

Nestopia UE: 7 кадров/58 мс / 14 кадров/117 мс / 10 кадров/82 мс

QuickNES: 9 кадров/75 мс / 14 кадров/117 мс / 11 кадров/89 мс


4) Железо: полноутбука IRU Bravo-4315 (отсутствует крышка с матрицей); ЦП: Intel Pentium 4 (Prescott) 2,8 ГГц; ОЗУ: 768 Мбайт; Видео: дискретное, какой-то Radeon 9x; НЖМД: какой-то IDE; Монитор: Samsung SyncMaster 757MB (ЭЛТ). ОС: Linux Xubuntu 18.04 LTS. Результаты (минимальный/максимальный/средний инпутлаг, кадров/миллисекунд):

FCEUmm: 5 кадров/42 мс/ 13 кадров/108 мс / 9 кадров/77 мс

Nestopia UE: 5 кадров/42 мс / 11 кадров/92 мс / 9 кадров/74 мс

QuickNES: 4 кадров/33 мс / 12 кадров/100 мс / 8 кадров/65 мс


Выводы

Изначально это тестирование задумывалось мной как сравнение инпут лага ретроарча с включенной опцией "run-ahead" с ретроарчем же, но без использования этой фичи. Но, как в последствии я понял что, в таком подходе не очень много смысла. Ибо run-ahead убирает встроенный инпут лаг самой игры (рома), а не эмулируемой консоли. Для подавляющего большинства ромов для NES - это 1 кадр = 17 мс при 60 fps. Это немало и это действительно то, что доступно ретроарчу и недоступно оригинальным консолям. Но, даже при всем этом, по величине инпут лага эмуляторы NES никак не могут тягаться на равных с оригинальными 8-битными консолями от Nintendo. Поэтому тестирование превратилось в попытку выяснить, насколько максимально малым может быть инпут лаг при использовании ретроарча, на что способен ретроарч хотя бы "в прыжке и из последних сил".

Можно ли запускать ромы от NES/Famicom и комфортно в них играть, используя эмуляторы, входящие в состав Retroarch? Да, можно. Вполне достижимо снижение инпут лага до уровня, характерного для реальных игровых консолей четвертого поколения (Sega Mega Drive/Genesis, SNES) - 50 - 70 мс. Если боги будут на вашей стороне.

Правда ли что при эмуляции NES/Famicom посредством RetroArch возможно добиться инпут лага даже меньшего, чем на оригинальных консолях? Мне этого не удалось. Я не встречал какие-либо подтвержденные данные, свидетельствующие о том, что это кому-то удалось.


Послесловие

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



Показать полностью
639

Дверной mp3 звонок на Arduino и MP3-TF-16P с датчиком открытия двери и робобабой

Приветствую, дорогие пикабушники!


Дело было не очень давно, буквально месяц тому назад.

У меня была ардуинка, модуль MP3-TF-16P, динамик от магнитолы "Витек", пара пустых коробок от зубного порошка, зарядка от смартфона и еще немного всякой разной мелочевки. Плюс к этому, базовые навыки программирования и знание основ электроники и схемотехники. Еще немного свободного времени и желание научиться чему-нибудь новому и создать что-нибудь полезное. А дверного звонка у меня не было. Вот я его и создал.


Схема выглядит как-то так:

Дверной mp3 звонок на Arduino и MP3-TF-16P с датчиком открытия двери и робобабой Arduino, Электроника, Своими руками, Я сделяль, Длиннопост

Платка MP3-TF-16P является недорогим китайским клоном DFPlayer Mini от китайской конторы DFRobot. Может работать как в standalone режиме, управляясь кнопками, подключаемыми непосредственно к ней, так и управляться по последовательному порту. Первый вариант мне не подошел, поэтому я и использовал ее в связке Arduino Nano V. 3. Платка вообще мне показалась за свои полтора бакса очень интересной.


По схеме. Зеленый светодиод (LED1) - индикатор питания, горит, когда устройство включено в электрическую сеть. Синий (LED2) - индикатор активности плеера, зажигается микроконтроллером когда идет воспроизведение трека. Кнопка (S1) - непосредственно кнопка дверного звонка, располагается за пределами квартиры на лестничной клетке. У меня старая, советская, старше меня, вот такая:

Дверной mp3 звонок на Arduino и MP3-TF-16P с датчиком открытия двери и робобабой Arduino, Электроника, Своими руками, Я сделяль, Длиннопост

Я ее снял, разобрал помыл, почистил полувековые окислы на медных площадках. Работает. Изначально, кнопка подтягивалась к земле резистором R7 на 10 кОм. Пошли ложные срабатывания. Сначала думал, что сосед балуется, на кнопку жмет - не подтвердилось. ОК, переделал схему, подтянул пин D2, на котором висит кнопка уже к + 5 В, подправил код - то же самое, ложные срабатывания. Психанул, повесил параллельно кнопке поближе к плате конденсатор, первый, какой под руку попался. Под руку попался керамический, на 33 нФ. Полет нормальный. Вот, собственно, потрАшка, ардуина снизу, плеер с микросд картой - сверху:

Дверной mp3 звонок на Arduino и MP3-TF-16P с датчиком открытия двери и робобабой Arduino, Электроника, Своими руками, Я сделяль, Длиннопост

Плеер подключен к ардуинке по последовательному интерфейсу, резисторы R2 и R3 нужны для согласования уровней. У ардуины "родное" напряжение 5 вольт, у MP3-TF-16P 3,3 В. На ардуине для этого задействованы 10 и 11 порты и программная эмуляция последовательного интерфейса. Встроенный аппаратный оставлен для подключения ноутбука, в случае необходимости отладки и обновления ПО.


S2 - геркон. У меня это ИО-102-2. Вот такой:

Дверной mp3 звонок на Arduino и MP3-TF-16P с датчиком открытия двери и робобабой Arduino, Электроника, Своими руками, Я сделяль, Длиннопост

Для чего он в проекте? Ну, во первых, он у меня уже больше года лежал без дела. Во вторых, после нажатие на кнопку звонка, трек с карты памяти начинает проигрываться. И останавливается по двум условиям: прошло 90 секунд или открыли дверь. Вот именно открытие двери геркон и отслеживает. У меня две входных двери. Соответственно, если я открыл внутреннюю (на которой установлен геркон), то звонок услышал и звонок мелодию можно выключать.


Пины ардуины D3, D4 соединены с пином плеера "BUSY" и герконом, соответственно и подтянуты к земле резисторами R4, R6 по 10 кОм. Так это выглядит в сборе:

Дверной mp3 звонок на Arduino и MP3-TF-16P с датчиком открытия двери и робобабой Arduino, Электроника, Своими руками, Я сделяль, Длиннопост

По коду. У плеера есть прикольная (на мой взгляд) фишка - проигрывание "рекламных" вставок. Т. е., играет основной файл, через некоторое время (или по другому условию) трек ставится на паузу, проигрывается голосовая вставка (например: "Хозяин, кто-то теребонькает нашу кнопоньку снаружи"), трек снимается с паузы, воспроизведение продолжается. Можно использовать в магазинах (музыка/реклама/музыка) и т. п. сфера применения ограничена лишь фантазией разработчика. Лично мне эта фишка нужна чтобы повысить шансы того, что я обращу на звонок внимание. Более подробно, если кому интересно, можете посмотреть в коде, там я старался все подробно комментировать.


Вид устройства в темноте. Нужно было снимать с большей выдержкой, но у меня выдержки не хватило ).

Дверной mp3 звонок на Arduino и MP3-TF-16P с датчиком открытия двери и робобабой Arduino, Электроника, Своими руками, Я сделяль, Длиннопост

Ссылка на гитхаб: https://github.com/Lyginarium/MP3DoorBell

Там код для ардуины (ino) и схема устройства (fzz).


У меня все, спасибо за прочтение.

Показать полностью 6
Отличная работа, все прочитано!