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

Rfid

Биохакер-энтузиаст вживляет карту Тройку прямо в руку

12.12.2020 12:17:16 | Автор: admin

Недавно на нашем ютуб-канале выступил Влад Зайцев aka vvzvlad энтузиаст биохакерских имплантов.

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

Делимся записью эфира и расшифровкой.

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

Все, что мы делаем это некая максимальная адаптация существующей технологии до простого, самого базового уровня. Например, когда лет 80 назад появились первые компьютеры, это было очень круто. Но это были очень большие и сложные машины; они были не персональными, ими нельзя было пользоваться дома. Как в классической цитате нужно 150 квадратных метров, 3 МВт электричества и 50 литров спирта на протирку контактов.
И все, что сейчас мы видим из того, что можно называть биохакингом это вот такой же уровень больших компьютеров. Он может находить какие-то медицинские, исследовательские применения; есть какие-то крутые чуваки, которые делают импланты для помощи слепым, которые цепляются на кору мозга. Но эта технология очень-очень далека от массового производства. Эти самые импланты ставятся больным в чисто исследовательских целях и, несмотря на то, что они показывают хорошие результаты больные начинают видеть их через пару лет убирают, потому что технология неисследованная, неотлаженная, никто не знает, что будет с мозгом, если человека отпустить на 10 лет. Увидели какие-то неправильные вещи все, снимаем, закрываем, мы данные получили.



Очень развит рынок медицинских имплантов например, водителей ритма, приборов для электростимуляции мозга. Но это чисто медицинские штуки, которые в 90% случаев существуют потому, что они покрываются медицинской страховкой. Такой имплант крутой, но стоит, например, 50 тысяч долларов, и без страховки был бы большинству людей не по карману. За счет распределения затрат с помощью страховки этот имплант можно поставить практически любому человеку, но это лишь скрывает огромную цену импланта. Система построена на том, что таких больных не очень много например, один человек в ста тысячах. Если бы что-то подобное нужно было поставить каждому второму человеку, то у нас просто не хватило бы денег. Надо что-то придумывать, разрабатывать другие методы лечения, удешевлять импланты.
Все существующие импланты это уровень неперсональных больших компьютеров. То, чем мы занимаемся это попытка вытащить из всей индустрии, из того, что сейчас есть на рынке и что можно сделать, пользовательский уровень. То есть, взять ограниченный набор функционала пусть он будет заведомо ограниченным, пусть он не будет делать ничего из того, что мы видели в трейлерах Cyberpunk 2077. Мы берем то, что можно адаптировать к большому рынку и поставить у себя на условной кухне, то, что принесет плюсы в жизни здесь и сейчас чтобы любой человек смог что-то делать с помощью этого импланта. Разблокировать телефон, хранить пароли в неотчуждаемом от тела хранилище, открывать домофонную дверь, открывать замок на работе то есть, мелкие штуки. Это должен быть доступный, пользовательский уровень. Пользовательские компьютеры появились не тогда, когда стало возможно ужать всю мощь мейнфрейма в маленькую коробочку, а тогда, когда появились персональные процессоры. Они были заведомо гораздо менее функциональны, чем мейнфреймы, но для них можно было писать игры и другие программы, которые можно использовать дома. То, что мы делаем сейчас, должно быть Спектрумом из мира имплантов очень маленький, простой, ограниченный, но доступный для пользователей.
У меня просто немного побомбило от комментариев на Хабре по этому поводу, и я решил высказаться.

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

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

Амаль начинал как раз с таких имплантов не только серийных номеров, но и, например, микроскопических термометров. Так как такой термометр всегда находятся под кожей, он всегда показывает текущую температуру тела; измерять температуру, проводить всякие манипуляции с градусником не нужно нужно просто поднести считыватель. Затем Амаль перешел на импланты такого же рода та же стеклянная капсула и антенна но уже совместимые с человеческими стандартами. Стандарт для животных это 134 или 140 КГц (для измерителей температуры другой), а стандарт для человека такой же, как, например, для СКУД 125 КГц. Это уже штука, которую человек может использовать в повседневности; когда он перешел на эти импланты это уже не игрушка для гиков, это штука, которую можно использовать. Мы берем эту штуку, устанавливаем человеку, записываем туда серийный номер пропуска и человек может открывать дверь на работе, дома, на складе и так далее, с помощью руки.
В этот момент я на него наткнулся, посмотрел стоимость наборов набор был по 50 долларов. Доллар тогда был по 30, но я был бедным студентом, и мне стало жалко денег. Но мне понравилась идея, и я написал статью об этом на Хабре. Там был большой срач, конечно, но ни к чему это особо не привело. Тема висела у меня на краю сознания следующие года четыре. После этого я познакомился с Максимом Ямпольским бодимодификатором, который занимался, например, установкой имплантов из биосовместимого силикона под кожу. Довольно забавно, но это просто создание определенного рельефа под кожей например, символов. Я сказал: у меня есть идея по поводу банковской карточки, я понимаю, как она работает и что с ней сделать, но не понимаю, как запаковать её в силикон так, чтобы она не отторгалась телом. Он сказал: да ничего сложного, давай сделаем. Мы сначала сделали и поставили Тройку это еще на той работе, когда я работал в Madrobots. Сняли ролик, он был секунд в 20 или 30, состоял из трех планов: я открываю двери, я просто показываю руку. И получилась какая-то странная хрень: этот ролик расползся по куче новостных ресурсов, с телеканалов и радио мне звонили, приглашали на интервью. Почему-то получилось очень хайпово, хотя я, в принципе, на это не рассчитывал. До сих пор строго два раза в год у них почему-то начинается гон, и мне начинают звонить телекомпании; говорят: смотрите, сюжет про чипирование, Маск что-то заявил, еще кто-то что-то заявил, вы у нас эксперт, давайте вас снимем еще раз, очень хочется. Забавная ситуация.


Пример RFID-метки.

Насчет технологий. Существует два грубых класса всего, что RFID. В комментариях опять кто-то писал: вы имеете в виду RFID или NFC? так вот, RFID это вся радиочастотная идентификация. Она включает в себя и 125 КГц в пропусках, и 134 КГц в идентификаторах животных, и 13 МГц в бесконтактных банковских карточках, и 13 МГц в NFC, и 940 МГц в метках для идентификации товаров. Поэтому, если мы говорим об имплантах, можно разделить их на две грубых категории: 125 КГц стандарт для пропусков, а также 13 МГц. Для 13 МГц есть пачка различных стандартов: разные карточки и пропуска, Тройка, банковские карточки, метки для чтения телефоном очень много. У меня это было в каком-то докладе; если нужно, можете спросить в комментариях.

У нас сейчас есть два вида имплантов: стеклянные капсулы и различные кастомные опыты например, с банковскими карточками. Про кастомные я пока не буду рассказывать, но стеклянные уже активно используются людьми. Мы прочипировали за все это время, наверно, человек 500; из них 2/3 из Москвы. Эти люди ходят и пользуются своими имплантами, все замечательно, они работают поэтому уже можно сказать, что данная технология используется.
Вот эта черная точечка, которую, я думаю, плохо видно это сам имплант. Он чуть меньше ширины ногтя указательного пальца. Ставится обычно в ладонь, в область между большим и указательным пальцем, с помощью большого шприца с толстой иглой, в которую он входит полностью. Можно ставить без анестезии, но я ставлю только с анестезией (сам боюсь боли и по умолчанию предполагаю, что другие тоже боятся). Это занимает минут 10, после чего человек встает, наклеивает пластырь и уже может открывать домофон рукой.



Сам имплант состоит из стеклянной капсулы, внутри которой есть антенка, намотанная на ферритовый стержень. Нельзя говорит, что это антенна, как в радиопередатчике; тут не радиопередача даже несмотря на 13 МГц, которые вроде бы определяют радиочастоту. Это передача с помощью магнитного поля. Представьте себе трансформатор; все знают, как он работает получает 220, отдает 127, например, а на остальные гудит. Трансформатор работает за счет того, что он передает энергию с одной обмотки на другую, причем они никак не связаны между собой это гальванически-разрядная система. Одна обмотка создает магнитное поле, вторая забирает его (если упрощать), и за счет этого происходит передача энергии. Имплант образует вместе с ридером своеобразный трансформатор с воздушным сердечником: обычно в трансформаторе есть магнитопровод металлическая штука, которую он намагничивает одной обмоткой и размагничивает второй. Тут магнитопровода нет, есть воздушный зазор. В трансформаторе использование магнитопровода обусловлено тем, что нужна большая мощность, но тут нужно передать только чуть-чуть энергии. Получается трансформатор, в котором одна обмотка накачивает переменное магнитное поле, а другая которая внутри импланта собирает магнитное поле, может питаться от него, и что самое прикольное через него передает данные.

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

Теперь добавим этому дросселю вторую катушку. Получится трансформатор, который работает в холостом режиме, потому что вторая катушка никуда не подключена. На первой есть какое-то напряжение, через нее идет ток, ток создает магнитное поле но оно никуда не девается, потому что вторая катушка никуда не подключена. Если вторую катушку замкнуть, например, на лампочку, то она начнет потреблять это поле, потому что она замкнута; она не подпитывает это поле, она может его только тратить. Конечно, это упрощение: на самом деле, поле возбуждает во второй катушке ток, и, как только мы ее замыкаем, он начинает куда-то идти вместо того, чтобы просто тратиться на ее нагрев. Таким образом, когда мы замкнем вторую катушку, ток в первой обмотке также начнет расти: раньше он просто шел через трансформатор и, так как там поле создано, он никуда не тратился проходил, и все. Мы можем не только влиять на вторую катушку, создавая и убирая магнитное поле: вторая катушка также влияет на первую.
Именно так происходит передача данных с помощью RFID. У нас тут контроллер, который умеет либо потреблять чуть-чуть тока от магнитного поля, либо, накопив энергию, замыкать катушку полностью. Это можно отследить, мониторя потребление тока, которое создается антенной ридера. То есть, у нас ридер создает переменное магнитное поле в виде сложной фигуры, зависящей от размера антенны, условно на 10 см вокруг него. Мы вносим туда любое RFID-устройство (имплант), и оно начинает получать энергию от этого поля. В нем запускается контроллер; в нем нет батареек только антенна и контроллер с небольшим конденсатором. Контроллер начинает получать энергию от поля, просыпается, думает, делает какие-то свои дела. В случае с банковской картой запускается настоящая ОС, которая может выполнять сокращенный набор java-команд. И он можно передать данные обратно, замыкая антенну полностью; вся энергия, которая пришла в антенну, тратится на нагрев контроллера энергии там мало, нагрев тоже небольшой, но это видит ридер. Если представить график потребления антенной RFID энергии, то мы увидим провал это значит, что на том конце RFID-устройство замкнуло антенну, и магнитное поле вокруг передающей антенны просело. Таким образом, у нас есть два канала: мы можем передавать что-то с помощью поля, пропуская такты и варьируя мощность, и обратно замыкать антенну и передавать что-то ридеру. В этом двустороннем канале оба устройства могут обмениваться сколь угодно сложными данными. Можно передавать пароли и серийные номера, можно что-то с шифрованием делать. Скорость не очень большая, порядка 100 КБ/сек зависит от дистанции, частоты и т.д. Конечно, видео там не передать; когда вы касаетесь телефонами и передаете файл, NFC используется только для установления сеанса связи: передает ключи шифрования, параметры канала, запрашивает передачу файла основная передача проходит все равно по wi-fi.



Скорость небольшая, но метод отлично работает на расстоянии 10 сантиметров и не требует батареек.
Вот такой небольшой вводный курс в теорию RFID. Для тех, кто заинтересовался, есть замечательная книга: RFID технологии. Справочное пособие. Достаточно большая, но в ней очень хорошо все это объяснено, рассказано, как строятся такие системы, что они умеют, и есть более плотный ликбез по технологиям. PDF где-то должен быть.
Еще интересная штука, не имеющая каких-либо контроллеров, но при этом достаточно прикольная и даже поразительная это магнитные импланты. Это магнит, который заворачивается в какую-то биосовместимую оболочку; мы покрывали их силиконом, кто-то занимался родированием, кто-то покрывал золотом или пластиком. Смысл в том, что магнит в биосовместимой оболочке имплантируется в палец. Почему в палец потому, что там большое количество нервных окончаний, отвечающих за тактильную чувствительность; это рецепторы, которая позволяют ощущать даже очень слабое давление. Имплантируя в эту область, ближе к этим рецепторам, магнит, мы получаем новое чувство чувство магнитного поля. То есть, если где-то есть переменное или постоянное магнитное поле, а мы подносим к нему руку, то магнит притягивается или отталкивается. Этого микроскопического движения (источник поля далеко, сам магнит достаточно слабый и заперт в тканях, двигается лишь чуть-чуть) достаточно, чтобы ощутить присутствие поля пальцем. Это очень прикольно, потому что вы получаете новое чувство мира и это не романтическое преувеличение, это действительно новое чувство.

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

Соответственно, наш мозг пластичен. Если человеку дать такой способ зрения, то он через некоторое время научится с помощью него видеть мир. Это будет работать даже без участия сознания: для него это будут не просто импульсы на языке или звуки в ушах, а реальное зрение. Он не будет декодировать эту картинку и думать: ага, тут писк большой, значит, скорее всего, там яркий объект. У него в сознании будет возникать ощущение: впереди яркий объект, надо остановиться. Это очень крутое свойство нашего мозга, которое позволяет делать, в том числе, и штуки с магнитными имплантами.

После того, как мы имплантируем магнит в палец, он сначала находится на уровне сознания. Я с таким имплантом проходил месяц или два. Сначала было так: я рукой хватаюсь за поручень в автобусе, у меня чуть-чуть примагничивается палец, потому что поручень металлический, и я думаю: ага, палец у меня примагнитился, значит поручень магнитный. Через некоторое время происходит забавная штука: ты перестаешь замечать подобные штуки с примагничиванием пальца, потому что это происходит достаточно часто. Ты хватаешь, что-то там дергает; невозможно обращать столько внимания на эту штуку. А потом у тебя понимание того, магнитный ты предмет схватил или нет, начинает появляться в сознании, минуя логическую обработку. Едешь в автобусе и думаешь: забавно, вчера поручень был магнитный, а сегодня нет; может, это автобус другой, какой у него год выпуска? А потом я понимаю, что только что произошло: я схватился за поручень, и у меня в мозгу сразу появилось понимание того, магнитный этот поручень или нет. Более того: оно не просто появилось; это можно сравнить в ощущением, допустим, тепла. Если вы год ездили в метро и каждый раз хватались за холодный поручень, то, как только он станет теплым, вы удивитесь: что такое, может быть, они обогрев в поручнях сделали? У меня было такое же ощущение. Нормальное старое состояние магнитного поручня было по умолчанию, и я его не замечал но, когда он стал немагнитным, я заметил разницу. И это произошло не на уровне у меня палец не примагнитился, а на уровне поручень другой. В мозгу теперь уже за осознанием того, что поручень другой, следует осознание того, почему этот поручень другой: потому что у меня палец не примагнитился.
Это очень странный и интересный опыт, который меняет восприятие своего мозга. Вы понимаете, что, в каком-то смысле, не мозг владеет вами, а вы владеете мозгом и вы можете научить его новым трюкам. Вы можете дать ему ощущение того, чего раньше у вас не было.
Тут речь не идет о том, что в магнитах нет контроллеров, это не настоящий биохакинг и все такое. Первоначально мне очень нравится именно ощущение того, что мы взяли и что-то поменяли в своем сознании.

Q: не будут ли магниты способствовать постепенному образованию тромбов в близлежащих сосудах? Ведь в крови содержится много железа


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

Q: какие интересные идеи приходили в связи с такими возможностями?


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

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

Q: это, конечно, прикольно, но какой практический смысл во всем этом?



Потому, что это....! Это круто!

У меня сейчас нет подготовленной презентации, но есть нравящийся мне комикс. В нем у инженера, или у ученого, спрашивают: для чего вы создали устройство? И два варианта ответа: то, как мы думаем, что он ответит (ну, во-первых, эта штука позволит продлить жизнь...), и то, как он на самом деле ответит (да потому что это круто!!!). В этом не надо искать практический смысл. Для меня это расширение горизонта возможного, удовлетворение моего интереса. Есть еще такой стишок: Меня спросила строго мама / Зачем в какашку тыкнул зонт / Как объяснить: я расширяю / Мировоззрения горизонт. Это абсолютно точно описывает то, чем для меня являются такие штуки. Мне просто интересно. У меня нет магнитного чувства, но я хочу, чтобы было.

Традиционный вопрос на телевидении: Зачем ты поставил себе в руку банковскую карточку? Ты ее забываешь дома, или ее лень вытаскивать? Что ты потом делаешь с сэкономленными 6 секундами на доставание и убирание кошелька? Да ничего не делаю, я их потрачу в соцсетях, скорее всего. Дело не в 6 секундах; дело в том, что некоторый опыт можно получить, только попробовав его. Вы можете сколько угодно читать описание того, как люди прыгают с парашютом, но, пока вы не прыгнете с парашютом, вы не поймете, как это. То же самое с карточкой. Дело осложняется тем, что, когда я это делал, в мире просто не было людей, у которых была бы банковская карточка в руке; мне было не у кого спросить, что такое иметь банковскую карточку в руке. И мне пришлось самому это делать.

Q: а как потом делать МРТ?


Это тоже частый вопрос. Третий или четвертый по частоте; второй как проходить рамки в аэропортах и в метро, потом рентген и МРТ. Отвечу на все сразу.
Рамки в аэропортах реагируют только на массы металла начиная с 10-15 грамм, обычно не реагируют даже на ключи (только если большая связка). Вес импланта 0.1 грамма, а металла в нем еще меньше.
Рентген делать можно, но на снимке кисти будет видно затемнение в форме импланта там даже можно будет различить антенну. И любой врач при описании снимка напишет инородное тело в кисти. То есть, это тоже никому не мешает вы просто говорите: да, я знаю, это имплант.


Рентгеновский снимок кисти с имплантами.

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

Q: не мешают ли карточки в руке, особенно при физических нагрузках?


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

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

Q: как вступить в вашу имплантскую секту?


Да, нам очень нужны неофиты, чтобы чипировать им в мозг 5G. У нас есть чат в Telegram, на который есть ссылка в оригинальной статье. Туда можно зайти, поспрашивать; там есть FAQ, контакты людей, которые вас с удовольствием прочипируют в Москве (и не в Москве), продадут вам импланты и так далее. Эту же ссылку я оставлю в комментариях на YouTube. Название книги про RFID я там тоже оставлю.

Традиционный раздел смешные истории, но их у меня очень мало. Несмешных тоже. Из несмешных меня один раз позвали на какое-то радио, еще до пандемии. Мы собрались в студии, в прямом эфире; они позвали туда какую-то православную тетеньку, и она в процессе эфира на меня кинулась через стол, с визгом: ты антихрист, надо от тебя спасти мир. Тетенька была довольно грузная, стол довольно широкий; она до меня не дотянулась, была похожа на собаку на поводке, которая очень громкая, хочет вцепиться, но не может.
Историй про то, как меня пытались побить кассирши, догнать, сказать, что я их ограбил их нет. За все время, пока я ходил с действующим имплантом-карточкой, это замечали только два раза. Один раз заметила тетенька в метро, и только из-за того, что мы в этом же месте снимали сюжет за день до этого, со мной в главной роли. Второй раз заметила кассирша из Ашана: ты рукой оплатил, что ли? А так можно? Ну, хорошо.

Еще одна несмешная история то, что произошло с карточкой Рокетбанка. Мы с ними подружились, они сказали: да, прикольно, давай мы снабдим тебя карточками, компенсируем немного расходов на разработку, а ты потом скажешь, что у тебя в руке наша карточка. Ну, замечательно; карточку мне поставили, я с ней походил несколько месяцев, после чего у Интеркоммерца, на базе которого работал тогда Рокетбанк, отозвали лицензию. Рокетбанк это никак не затронуло, они просто перевыпустили свои карточки и бесплатно разослали их. Мне тоже прислали карточку, но проблема в том, что все могут просто выбросить старую и положить в кошелек новую, а у меня карточка в руке. Она пока до сих пор там; я очень ленивый человек.

Q: насколько быстро можно перезаписать код в капсуле, не вынимая из руки?


Очень быстро. Есть такой копир, на котором есть две кнопки: копировать и записать. Вы берете его, прикладываете к карточек-пропуску, нажимаете кнопку копирования. Потом прикладываете копир к руке, нажимаете кнопку записи. Это занимает 2-3 минуты, из которых примерно 1:40 уходит на то, чтобы подобрать взаимное положение метки и копира, потому что она маленькая, перемещается немного под кожей, а антенна у нее тоже маленькая. Не всегда понятно, куда точно приложить копир, чтобы запись прошла.



Что было ранее


  1. Илона Папава, Senior Software Engineer в Facebook как попасть на стажировку, получить оффер и все о работе в компании
  2. Борис Янгель, ML-инженер Яндекса как не пополнить ряды стремных специалистов, если ты Data Scientist
  3. Александр Калошин, СEO LastBackend как запустить стартап, выйти на рынок Китая и получить 15 млн инвестиций.
  4. Наталья Теплухина, Vue.js core team member, GoogleDevExpret как пройти собеседование в GitLab, попасть в команду разработчиков Vue и стать Staff-engineer.
  5. Ашот Оганесян, основатель и технический директор компании DeviceLock кто ворует и зарабатывает на ваших персональных данных.
  6. Сания Галимова, маркетолог RUVDS как жить и работать с психиатрическим диагнозом. Часть 1. Часть 2.
  7. Илья Кашлаков, руководитель фронтенд-отдела Яндекс.Денег как стать тимлидом фронтендеров и как жить после этого.
  8. Влада Рау, Senior Digital Analyst в McKinsey Digital Labs как попасть на стажировку в Google, уйти в консалтинг и переехать в Лондон.
  9. Ричард Левелорд Грей, создатель игр Duke Nukem 3D, SiN, Blood про личную жизнь, любимые игры и о Москве.
  10. Вячеслав Дреер, гейм-дизайнер и продюсер игр с 12-летним стажем про игры, их жизненный цикл и монетизацию
  11. Андрей, технический директор GameAcademy как видеоигры помогают прокачивать реальные навыки и найти работу мечты.
  12. Александр Высоцкий, ведущий PHP-разработчик Badoo как создаются Highload проекты на PHP в Badoo.
  13. Андрей Евсюков, заместитель CTO в Delivery Club про найм 50 синьоров за 43 дня и о том, как оптимизировать фреймворк найма
  14. Джон Ромеро, создатель игр Doom, Quake и Wolfenstein 3D байки о том, как создавался DOOM
  15. Паша Жовнер, создатель тамагочи для хакеров Flipper Zero о своем проекте и другой деятельности
  16. Татьяна Ландо, лингвист-аналитик в Google как научить Google-ассистента человеческому поведению
  17. Путь от джуна до исполнительного директора в Сбербанке. Интервью с Алексеем Левановым
  18. Как Data Science продает вам рекламу? Интервью с инженером Unity
  19. Как я переехал в Лондон c Revolut
  20. Завтрак с легендарным геймдизайнером Американом МакГи: о новой Алисе, России и депрессии
  21. Как организовать IT-конференцию и не сойти с ума
  22. Чем биоинформатика отличается от вычислительной биологии краткое введение
  23. Профессия системный аналитик: развитие сообществ, популяризация профессии и подготовка
  24. Три задачи из геномики, которые решают биоинформатики в СПбГУ
  25. Как писать статьи в IT-журналы и блоги




Подробнее..

Эмулятор RFID на Arduino

17.12.2020 12:23:08 | Автор: admin


Многие читали мой пост "Эмулятор RFID", где я в деталях рассказывал об устройстве EM Marine, о том как намотать антенну, и как сделать RFID-эмулятор из трёх деталей. Но, будем честны, несмотря на гениальную простоту того устройства, оно достаточно сложно для повторения. Не каждый имеет дома осциллограф, для того чтобы поймать резонанс, да и для прошивки ATtiny85 требуется отдельный программатор.

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

Аппаратное обеспечение


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


У нас есть колебательный контур, который мы будем замыкать в определённое время транзистором и таким образом в считывателе будет изменяться ток, и он будет получать передаваемые данные.
Самым сложным для нас в этой связке остаётся настроенные на частоту 125 кГц колебательный контур. И есть очень простое решение, откуда его можно взять. В продаже существует считыватель RFID-меток для Arduino RDM6300. Считыватель стоит сущие копейки, а у него в комплекте уже идёт антенна, а резонансный конденсатор уже распаян на плате.


Считыватель RDM6300 и расположение резонансного конденсатора.

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


Схема в сборе.

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



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


Заводской считыватель.

Взводим таймер


Наиболее полно всю физику процесса и принцип работы я рассказал в своей предыдущей статье, поэтому настоятельно рекомендую с ней ознакомиться. Однако для понимания того, что я делаю немного освежу некоторые моменты.
Напомню, что у EM4102 используется схема Манчестерского кодирования. ри модуляции для EM4102 протокола время передачи одного бита может составлять 64, 32 или 16 периодов несущей частоты (125 кГц).



Проще говоря, при передаче одного бита, у нас меняется значение либо единицы на нуль (примередаче нуля), либо с нуля на единицу (при передаче единицы). Соответственно, если мы выбираем для передаче одного бита информации 64 периода несущей частоты, то для передачи полубита нам нужно будет 32 периода несущей частоты. Таким образом каждый полубит должен меняться с частотой:

f=125000/32 = 3906,25 Гц

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



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

void setupTimer1() {  noInterrupts();  // Clear registers  TCCR1A = 0;  TCCR1B = 0;  TCNT1 = 0;  // 3906.25 Hz (16000000/((4095+1)*1))  OCR1A = 4095;  // Prescaler 1  TCCR1B |= (1 << CS10);  // Output Compare Match A Interrupt Enable  TIMSK1 |= (1 << OCIE1A);  interrupts();}

Гениально, просто, лаконично.

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

ISR(TIMER1_COMPA_vect) {        TCNT1=0;if (((data[byte_counter] << bit_counter)&0x80)==0x00) {    if (half==0) digitalWrite(ANTENNA, LOW);    if (half==1) digitalWrite(ANTENNA, HIGH);}else {    if (half==0) digitalWrite(ANTENNA, HIGH);    if (half==1) digitalWrite(ANTENNA, LOW);}    half++;if (half==2) {    half=0;    bit_counter++;    if (bit_counter==8) {        bit_counter=0;        byte_counter=(byte_counter+1)%8;}}}


Перевод данных для передачи


Тут тоже следует освежить в памяти форматы данных, хранимые на карте. То, в каком виде они записаны. Давайте на живом примере.
Предположим у нас есть карта, но нет ридера. На карте написан номер 010,48351.


Реальная карта с номером 010, 48351.

Как этот номер нам перевести в тот серийный номер, который записан на карте? Достаточно просто. Вспоминаем формулу: переводим две части числа отдельно:

010d = 0xA48351d = 0xBCDF

Итого, серийный номер у нас получается: 0xABCDF. Проверим его, считываем карточку считывателем (он читает в десятичном формате), получаем число:

0000703711

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



Проговорю словами:

  1. Вначале идут девять единиц заголовка.
  2. Младшие пол байта ID клиента.
  3. В конце бит чётности.
  4. Вторые пол байта ID клиента.
  5. Бит чётности.
  6. Младшие пол байта нулевого байта серийного номера.
  7. Бит чётности
  8. Старшие пол байта данных байта нулевого байта серийного номера.
  9. Точно так же все остальные данные, передаются ниблами и оканчиваются битом чётности
  10. Самое сложное. Теперь все эти 10 нибблов по вертикали точно так же вычисляется бит чётности (прямо как в таблице).
  11. Завершает всё это безобразие стоп бит, который равен всегда нулю.

Итого у нас получается 64 бита данных (это из пяти байт!). В качестве ремарки, мой считыватель не читает ID-клиента, и я его принимаю равным нулю.
Что такое бит чётности? Это количество единиц в посылке: если оно чётное, то бит чётности равен нулю, если нет, то единице. Проще всего рассчитать его, просто обычным XOR.
На самом деле я долго думал, как элегантнее сделать пересчёт серийного номера в посылку, да так чтобы это занимало меньше места в микроконтроллере. Поэтому набросал небольшую програмку, которая это делает. Программу можно посмотреть под спойлером.

Тестовая программа перевода серийника в данные
#include <stdio.h>#include <stdlib.h>#include <stdint.h>#define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c"#define BYTE_TO_BINARY(byte)  \  (byte & 0x80 ? '1' : '0'), \  (byte & 0x40 ? '1' : '0'), \  (byte & 0x20 ? '1' : '0'), \  (byte & 0x10 ? '1' : '0'), \  (byte & 0x08 ? '1' : '0'), \  (byte & 0x04 ? '1' : '0'), \  (byte & 0x02 ? '1' : '0'), \  (byte & 0x01 ? '1' : '0') #define NYBBLE_TO_BINARY_PATTERN "%c%c%c%c"#define NYBBLE_TO_BINARY(byte)  \(byte & 0x08 ? '1' : '0'), \(byte & 0x04 ? '1' : '0'), \(byte & 0x02 ? '1' : '0'), \(byte & 0x01 ? '1' : '0') int main() {//unsigned long long card_id = 0x00000ABCDF;//uint64_t card_id = 0x00000ABCDF;uint64_t card_id = (uint64_t)3604000;uint64_t data_card_ul = 0x1FFF; //first 9 bit as 1int32_t i;uint8_t tmp_nybble;uint8_t column_parity_bits = 0;printf("card_id = 0x%lX\n", card_id);for (i = 9; i >= 0; i--) { //5 bytes = 10 nybblestmp_nybble = (uint8_t) (0x0f & (card_id >> i*4));data_card_ul = (data_card_ul << 4) | tmp_nybble;printf("0x%02X", (int) tmp_nybble);printf("\t"NYBBLE_TO_BINARY_PATTERN, NYBBLE_TO_BINARY(tmp_nybble));printf("\t %d\n", (tmp_nybble >> 3 & 0x01) ^ (tmp_nybble >> 2 & 0x01) ^\(tmp_nybble >> 1 & 0x01) ^ (tmp_nybble  & 0x01));data_card_ul = (data_card_ul << 1) | ((tmp_nybble >> 3 & 0x01) ^ (tmp_nybble >> 2 & 0x01) ^\(tmp_nybble >> 1 & 0x01) ^ (tmp_nybble  & 0x01));column_parity_bits ^= tmp_nybble;}data_card_ul = (data_card_ul << 4) | column_parity_bits;data_card_ul = (data_card_ul << 1); //1 stop bit = 0printf("\t"NYBBLE_TO_BINARY_PATTERN"\n", NYBBLE_TO_BINARY(column_parity_bits));printf("data_card_ul = 0x%lX\n", data_card_ul);for (i = 7; i >= 0; i--) {printf("0x%02X,", (int) (0xFF & (data_card_ul >> i * 8)));}printf("\n");return 0;}

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



card_id это серийный номер карты (о котором мы говорили выше).
Первый столбец это ниблы, второй их битовое представление, третий это бит чётности. Третья строка снизу это биты чётности всех ниблов. Как я уже сказал, они рассчитываются просто операцией XOR.
Протестировав рассчёты, сверив из визуально, я проверил получившиеся данные в программе на Arduino (последняя строка специально для вставки в код). Всё отработало отлично. В результате наброска этой программы, я получил готовую функцию пересчёта. Раньше, расчёты битов были чужими программами на компе и мне не нравилась их монструозная реализация. Таким образом функция пересчёта серийного номера в формат передачи выглядит так:

#define CARD_ID 0xABCDFuint8_t data[8];void data_card_ul() {  uint64_t card_id = (uint64_t)CARD_ID;  uint64_t data_card_ul = (uint64_t)0x1FFF; //first 9 bit as 1  int32_t i;  uint8_t tmp_nybble;  uint8_t column_parity_bits = 0;  for (i = 9; i >= 0; i--) { //5 bytes = 10 nybbles    tmp_nybble = (uint8_t) (0x0f & (card_id >> i*4));    data_card_ul = (data_card_ul << 4) | tmp_nybble;    data_card_ul = (data_card_ul << 1) | ((tmp_nybble >> 3 & 0x01) ^ (tmp_nybble >> 2 & 0x01) ^\      (tmp_nybble >> 1 & 0x01) ^ (tmp_nybble  & 0x01));    column_parity_bits ^= tmp_nybble;  }  data_card_ul = (data_card_ul << 4) | column_parity_bits;  data_card_ul = (data_card_ul << 1); //1 stop bit = 0  for (i = 0; i < 8; i++) {    data[i] = (uint8_t)(0xFF & (data_card_ul >> (7 - i) * 8));  }}

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

Испытания


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


Выводы


Очень надеюсь, что подобные статьи подстегнуть изучать новичков программирование и электронику. А так же они поспособствуют уходу с рынка такого типа карт, как самых незащищённых и небезопасных, поскольку теперь их может скопировать и эмулировать даже ребёнок.
Выражаю благодарность Michal Krumnikl за его терпение много-много лет назад, когда он мне по icq разъяснял работу подобного эмулятора, а так же помощь с разработкой кода. В некотором смысле это его идеи и наработки 13-ти летней давности.

Ссылки





Подробнее..

Фриланс-разработка электроники. Что, Как и Зачем?

27.05.2021 12:14:32 | Автор: admin

Как все начиналось


Начну немного издалека, чтобы было понятно с чего все изначально началось.
Электронику я люблю с детства, родители военные и они же инженеры привили любовь не только к морзянке, но и к электронике. За что им отдельное спасибо.
После окончания ВУЗа, работаю по сей день ведущим инженером на одной из атомных станций. Работа веселая и ответственная, но дома надо чем-то занять вечера, не пиво же пить и лежать у телевизора. Для поддержания на должном уровне своей квалификации освоил Ардуино, Attiny, STM, ESP32. Вспомнил давно забытую Java и C++. Освоил заново Easyeda, Altium, Eagle. Свободно работаю во многих программах CAD моделирования. Теоретически я подготовлен хорошо, но нужна была практика в электронике и желательно по очень высоким стандартам.

Практика в разработке электроники


А где её ПРАКТИКУ искать если не во фрилансе?

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

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

Свой первый заказ на разработку электроники я получил из США, нужно было разработать максимально возможную миниатюрную плату клавиатуры 3*4. Работа была приятная и полезная, т.к. заказчик очень доброжелателен и готов объяснить, что ему нужно хоть сто раз подряд, даже если вы говорите заикаясь и только с Гугл переводчиком.
При заказе печатных плат со сборкой на Jlcpcb.com у заказчика возникли проблемы, т.к. элементы оказались очень маленькими. Заказчик быстро сориентировался и нашел того изготовителя которых смог сделать печатную плату со сборкой. Имея положительный опыт первой выполненной работы, последовали и другие работы. Очень быстро мы с моим первым Заказчиком нашли общий язык и понимали уже друг друга с полуслова.

Вот какие клавиатуры получились в конечном варианте:


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

Работа по срокам длительная, более 6 месяцев.

Задача: с нуля создать специфическое устройство под требования заказчика. Устройство батарейного типа (литиевый аккумулятор), с зарядкой и стабилизатором на борту. Микроконтроллер желательно с WiFi, Bluetooth и BLE. Управление светодиодами и вибромотором. Плюс к этому устройство должно уметь считывать RFID метки по стандарту ISO 15693 на частоте соответственно 13,56 МГц.

И все это нужно расположить на плате размерами не более 70 на 30 мм. По высоте ограничение 10 мм вместе с аккумулятором. По токовым нагрузкам, устройство должно работать минимум 10 часов без подзарядки, т.е. все лишнее должно быть выключено. И, пожалуй, самое главное и сложное условие Заказчика устройство должно пройти процедуру сертификации FCC Федеральная комиссия по связи США, т.к. устройство предполагается распространять в США, у них с этим очень строго.
Процедура не дешевая, поэтому все компоненты нужно максимально совместить не только в различных диапазонах, но и при необходимости провести экранирование слишком шумящих элементов.
Скурив множество манов на множество чипов со встроенным и отдельными элементами для данного устройства, по контроллеру выбор пал на ESP32-WROOM умеет работать с блютузом в режиме экономии (BLE), 2 ядра, портирован на FREERTOS, SPI, I2C и много чего еще в наличии и на борту плюс ко всему сертифицирован FCC. RFID читалка PN5180 от NXP, неприхотливая, рабочая лошадка, при наличии векторного анализатора вполне успешно настраивается под любую антенну, достаточно полное описание внутренностей, портирован на С, много примеров на сайте NXP (правда под LPC контроллеры) и самое главное пришлось Заказчику покупать их в США, т.к. с последней прошивкой PN5180 в Россию не поставляются, от слова совсем.

Программирование велось под MS Visual Studio с плагинами VMicro под ESP32, операционка FREERTOS (т.к. работает в многозадачной режиме). Чтение RFID, управление светодиодами и вибромотором предполагало передачу данных по блютузу на Android и Iphone нужна была среда для разработки приложения выбор пал на x.thunkable.com что полностью себя оправдало.

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


и рисовал начальный вариант схемы в Easyeda.com


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

Для прошивки и отладки был использован мост USB-to-UART CP2104 маленький, шустрый, полностью покрывающий потребности.


Корпус QFN EP-24 Паяется отлично, главное все правильно сделать.

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

А не развести ли нам печатную плату?


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

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


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

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


Вот так Easyeda показывает 3D модель печатной платы.

Заказ печатных плат для устройства 4 слойные с повышенной точностью совместимости по слоям за счет применения материала стеклотекстолита FR-4 TG-155.



Компонентная база наше всё


Отдельно скажу о компонентах, в манах приводятся компоненты которые рекомендует производитель, лучше придерживаться рекомендаций или брать лучше.
Мне повезло, я долгое время работаю по компонентам с Electronshik.ru/
База огромная, цены адекватные если не ниже. 95 процентов всех элементов, доступно немедленно, т.е. после оплаты заказа, отправка сегодня-завтра. Доставка DHL до двери 280 рублей (До моей двери именно так). Меня это очень поразило в первые разы. Приятно работать с такой компанией, это вам не чипдип.

Так же некоторые элементы заказывались у партнера Easyeda Lcsc.com при заказе плат, можно прикрепить к заказу и элементы, купленные у партнера. Экономия на доставке.

Пайка, всякая и разная


На эту тему написано и снято видео столько что можно библиотеку создать. Корпуса элементов маленькие от 0402 до 0805. Плата тестовая была зафлюсована, залужена, потом сама пайка. Нюансы пайки на ютьюбе. И да, я паяю под микроскопом.



Первое включение или порядок сборки


Порядок пайки у меня такой:

  1. USB разъем
  2. микропереключатель
  3. CP2104 с обвязкой
  4. Подача питания от блока питания
  5. определение компьютером нового USB устройства
  6. Пайка чипа зарядки литиевой батареи и стабилизатора с обвязкой
  7. Проверка в связке CP2104, зарядки и стабилизатора


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

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

Остается самое сложное по железу, пайка PN5180 и его обвязки под радиочастотную часть. Частота небольшая 13.56МГц, но требования к аккуратности пайки еще никто не отменял. Все должно быть красиво и радовать глаз.

До пайки PN5180 сделал дополнительные расчеты в RFSim99, а также в фирменной программе NXP NFC Antenna Tool, чтобы точнее попасть по параметрам согласования антенны и радиочастотной части PN5180.

Программы помогли, но настраивать под реальные условия все равно пришлось с помощью векторного анализатора OSA-103 (Заказчик закупил на этап настройки). КСВ антенны получил 1.17. Оса-103 отечественная разработка, отличного качества, целая лаборатория в одном приборе. Дополнительные конденсаторы и резисторы Электронщик доставил очень быстро, так что никаких задержек с дальнейшей пайкой не было.

Все запаяно, несколько раз проверено, включение микропереключателя, определение как USB устройства, компиляция теста для проверки PN5180 попытка заливки прошивки. Заливка прошивки. Чтение данных с RFID NFC карточки. Ура с железом закончили, все работает, как и планировалось.

Программная часть, последняя


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

В заключении, своего повествования хочу сказать, что разработка электроники даже на фрилансе это реальность. Это возможно и это нужно. Ведь в мире столько нового и интересного. И заметьте мне всего 47 лет :) Жизнь движение.

P.S. Если у кого-то возникли вопросы пишите в комментариях.


Подробнее..

Делаем копию карты-пропуска по фото

11.08.2020 00:10:13 | Автор: admin

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



С чем мы имеем дело


Итак, человек с пропуском находится далеко, считывателя для бесконтактных карт у него с собой конечно же нет, но есть телефон, на который можно сделать фотографию карты.
По фото карта была опознана как EM-Marin, она же EM4100. Эти бесконтактные карты работают на частоте 125 КГц и содержат номер (далее ID) размером 40 бит или 5 байт, который записывается на карту еще на заводе и не может быть изменен. Какой-либо защиты от чтения или копирования в них нет. Для создания дубликатов этих карт используются заготовки T5577 и EM4305, которые свободно продаются.
Перезаписываемые карты-болванки выглядят как обычная пустая пластиковая карта в форм-факторе кредитки, а не перезаписываемые (с прошитым на заводе серийным номером) чуть толще и на лицевой стороне у них нанесен текст, состоящий из нескольких групп десятичных цифр. Встречаются и карты в виде брелков.
Для записи таких карт потребуется соответствующий копировщик. Я использую Proxmark3, но можно взять любой другой, который может работать с T5577 и позволяет ввести ID карты вручную. Или же вовсе использовать эмулятор, тогда можно обойтись без болванок.


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



Как именно передаются данные с карты: сперва идет преамбула из 9 бит 1, затем передается 1 байт Version Number, 2 байта Facility Code и 2 байта уникального номера карты, периодически следуют биты контроля четности. Взято по ссылке, там кстати еще неплохое описание протокола (на английском).


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


Эксперимент


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


Цифры на карте: 0013396136 204.26792ID: 4A00CC68A8

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


Размышляя над тем, что еще оно может значить, я вспомнил, что Proxmark помимо ID карты показывает еще кое-какие данные:


lf search
proxmark3> lf searchNOTE: some demods output possible binary  if it finds something that looks like a tagFalse Positives ARE possibleChecking for known tags:EM410x pattern found:EM TAG ID      : 4A00CC68A8Possible de-scramble patternsUnique TAG ID  : 5200331615HoneyWell IdentKey {DEZ 8          : 13396136DEZ 10         : 0013396136DEZ 5.5        : 00204.26792DEZ 3.5A       : 074.26792DEZ 3.5B       : 000.26792DEZ 3.5C       : 204.26792DEZ 14/IK2     : 00317840976040DEZ 15/IK3     : 000352190666261DEZ 20/ZK      : 05020000030301060105}Other          : 26792_204_13396136Pattern Paxton : 1256236712 [0x4AE0A6A8]Pattern 1      : 10853441 [0xA59C41]Pattern Sebury : 26792 76 5007528  [0x68A8 0x4C 0x4C68A8]Valid EM410x ID Found!proxmark3>

Ага, 0013396136 и 204.26792 это именно то, что написано на карте!
Но ведь на ней хранится всего лишь 5 байт, значит эти числа должны вычисляться из ID по некому алгоритму ридером или его клиентом. К счастью, Proxmark open-source проект, его исходные коды доступны на гитхабе . Я сделал поиск в репозитории по строке DEZ 10 и нашел функцию cmdlfem4x.c.


Часть кода cmdlfem4x.c:
...    //output 88 bit em id            PrintAndLog("\nEM TAG ID      : %06X%016" PRIX64, hi, id);        } else{            //output 40 bit em id            PrintAndLog("\nEM TAG ID      : %010" PRIX64, id);            PrintAndLog("\nPossible de-scramble patterns");            PrintAndLog("Unique TAG ID  : %010" PRIX64,  id2lo);            PrintAndLog("HoneyWell IdentKey {");            PrintAndLog("DEZ 8          : %08" PRIu64,id & 0xFFFFFF);            PrintAndLog("DEZ 10         : %010" PRIu64,id & 0xFFFFFFFF);            PrintAndLog("DEZ 10         : %010" PRIu64,id & 0xFFFFFFFF);            PrintAndLog("DEZ 5.5        : %05lld.%05" PRIu64,(id>>16LL) & 0xFFFF,(id & 0xFFFF));            PrintAndLog("DEZ 3.5A       : %03lld.%05" PRIu64,(id>>32ll),(id & 0xFFFF));            PrintAndLog("DEZ 3.5B       : %03lld.%05" PRIu64,(id & 0xFF000000) >> 24,(id & 0xFFFF));            PrintAndLog("DEZ 3.5C       : %03lld.%05" PRIu64,(id & 0xFF0000) >> 16,(id & 0xFFFF));...

Из кода выше становится ясно, что эти числа части ID карты:
0013396136 (DEZ 10) первые 4 байта, если считать от младшего к старшему.
204.26792 (DEZ 3.5C) третий байт отдельно (он же Facility Code) и непосредственно 2 байта серийного номера карты.
Таким образом, по цифрам на карте можно восстановить часть ее ID. Но как быть, если известны 4 байта, а требуется 5? И если четвертый байт имел значение 0 на всех считанных мной картах, то пятый байт всегда ненулевой. Перебирать этот байт в конкретном случае не вариант не хочется вызывать подозрения у охраны.


Тут я вспомнил, что СКУД в этом бизнес-центре установлен достаточно давно, поэтому я предположил, что там может использоваться для передачи данных популярный, но устаревший Wiegand-26. Этот протокол предназначен для связи считывателя с контроллером, и позволяет передавать за одну посылку 24 бита данных и 2 бита четности, итого 3 байта. Это означает, что ID карты не передается полностью и неизвестный пятый байт никак в идентификации не участвует и может быть рандомным.
Стоит отметить, что некоторые современные считыватели все же читают и сравнивают старший байт карты, в таком случае придется перебирать 255 комбинаций, но это можно сделать за приемлемое время, особенно если использовать эмулятор.


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


Запись карты
proxmark3> lf em 410xwrite 0100CC68A8 1Writing T55x7 tag with UID 0x0100cc68a8 (clock rate: 64)#db# Started writing T55x7 tag ...#db# Clock rate: 64#db# Tag T55x7 written with 0xff80600630c8d23aproxmark3>

Получилась почти полная копия карты с фото, отличается только старший байт. Для уверенности можно еще раз ввести команду lf search и проверить, совпадают ли DEZ 10 и DEZ 3.5C с цифрами на оригинальной карте.


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


Пост-скриптум


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

Подробнее..

Из песочницы Облачный СКУД ЗА и ПРОТИВ из первых рук

06.07.2020 02:17:13 | Автор: admin
Пандемия жёстко заставила каждого из нас, без исключения, если не воспользоваться, то признать до сих пор преимущественно информационную среду интернет ещё и системой жизнеобеспечения. Ведь многих сегодня интернет буквально кормит, одевает и обучает. Интернет проникает в наши дома поселяясь в чайниках, пылесосах и холодильниках. IoT internet of things это любое оборудование, бытовые приборы например, в которые встроены крошечные электронные модули для обмена данными в сети Интернет через наш домашний WiFi.

Даже дверные замки многие производители начали делать с управлением через смартфон. Очередь за системами контроля доступа и эксплуатацией зданий и сооружений. И тут я хочу обсудить известные мне ЗА и ПРОТИВ облачных СКУД, поскольку работаю в коллективе, который одну из таких систем и разрабатывает.

Обсудить, пока что в независимости от профиля объекта, будь то жильё, промышленное предприятие, склад, ТРЦ, БЦ или образовательное учреждение.

Перечислю очевидные ЗА и ПРОТИВ облачных СКУД



PRO


  • Заявки на пропуск оформляются онлайн, без необходимости заполнять бумажки и собирать подписи согласования.
  • Пропуск доступен для редактирования и управляющему, и принимающему, и СБ, причём, с онлайн уведомлением владельца пропуска в удобном ему мессенджере, СМС или эл. почте об внесённых изменениях.
  • Удобный доступ к данным СКУД для руководителя администрации, начальников охраны, отдела кадров, особенно на предприятиях с филиальной сетью, в любое время, с любого ПК с веб браузером, на мобильном устройстве. Отпуск, командировка, больничный не препятствие справится о текущих делах, глянуть статистику.
  • Внедрение на объекте без сложного проектирования. Поскольку топология веб-сервисов позволяет легко менять тех. процессы и логику, возможные ошибки первоначальной схемы легко поправить уже в процессе эксплуатации и выбрать оптимальную структуру КПП, проходных и уточнить режим объекта.
  • Для настройки и тем более для управления не требуется специальной квалификации и подготовки. Современные инструменты программирования настолько нацелены на создания программных продуктов интуитивных в использовании, что создаваемые облачные сервисы обречены быть просто управляемыми и удобными в эксплуатации.
  • Дешевизна оборудования обусловлена его практическим отсутствием. Высокопроизводительные микро-ПК Ардуино, Расберри, Оранж заменяют специализированные контроллеры. Вся логика уходит на серверную часть и в оперативную память мобильных устройств, смартфонов. Смартфоны заменяют собой привычные RFID карточки и брелки, обеспечивая экономию на расходных материалах. Открывающее воздействие на замок, турникет оказывает тот самый крохотный элемент IoT интернета вещей. Дешёвый в силу своей простоты и тиражей производства.

image

пример структуры СКУД как облачного сервиса

Как вы догадались это были аргументы в пользу веб-сервисов СКУД. Буду честен и без утайки перечислю все аргументы против применения СКУД как облачного решения.

CONTRA


  • Хранение данных пользователя в облаке. Риски утраты информации по техническим причинам, утечки третьим лицам. Снизить эти риски можно распределением микро-сервисов по большему числу ЦОД (центр обработки данных) и выбору надёжных поставщиков этой услуги с классом TIER 3 или выше.
  • Отсутствие у части пользователей смартфонов. Нежелание использовать личный смартфон для служебных целей. Для решения этой проблемы у управляющий компании есть опция печати QR пропуска на чековом принтере, что под чертой выгоднее чем выдавать брелок или карту.
  • Наличие на объекте СКУД установленной годами ранее, но исправно работающей хоть и устаревшей. В этом случае есть опция применить для интеграции штатный в веб-сервисах API (application program interface) и расширить функционал до желаемого. Тем более что к большинству известных систем контроля доступа как правило уже написаны интеграции.
  • Традиционное нежелание наёмных сотрудников отказываться от знакомых систем и технологий, неважно что в пользу более эффективных и выгодных технологических аналогов. Саботаж среднего звена на этапах согласования может и часто вынуждает руководство, собственников сдаться и отказаться от модернизации.

Но лидером контраргументов, какие я только слышал, остается классическое " а что если пропадёт интернет...". Тут у меня нет слов, и в голову приходит старый анекдот:

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

И так, приглашаю подебатировать на тему ЗА и ПРОТИВ Интернета в охранных системах, в частности СКУД. Пожалуйста, смело комментируйте с чем не согласны, буду рад услышать критику, возразить или честно согласиться. Стесняетесь высказаться публично пишите в личку.

Спасибо
Илья
Подробнее..

Умные кассы для ВкусВилла

10.11.2020 14:15:42 | Автор: admin
С точки зрения пользователя процесс онлайн-покупки продуктов у ВкусВилла выглядит просто открыл приложение (самого ВкусВилла или партнеров доставки и агрегаторов), выбрал нужные товары, оплатил, дождался, получил. В этом посте мы немного расскажем о том, как работают кассы ВкусВилла изнутри, как они участвуют в процессе онлайн-заказа и как они связаны со всей остальной экосистемой магазина.

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



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

Для начала расскажем про архитектуру нашего кассового решения. С точки зрения взаимодействия решение имеет клиент-серверную архитектуру. С точки зрения развертывания оно ближе к десктопному, т.к. обе части (и клиент, и сервер) располагаются локально, на каждой отдельно взятой кассовой машине. Ядро написано на Java, а фронт на JavaScript (React). Для хранения данных используется PostgreSQL. Если говорить про обвязку, то всё, что касается оборудования, написано на Go, API на Python.

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

image

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

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

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

Адаптация кассы для работы с заказами


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

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

Вот как это выглядит на схеме:



1. Оформление заказа покупателем

Содержимое заказа попадает на отдельный сервер ВкусВилла, в котором под запрос доставки была изменена структура БД. Когда заказ оформлен, после попадания на сервер его данные аккуратно раскладывается в БД.

2. Отображение заказов на кассе

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

3. Печать сборочного чека

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

4. Регистрация собранных товаров
После сборки корзины кассир-сборщик возвращается к кассе и сканирует штрих-код со сборочного чека. После этого корректирует позиции заказа в соответствии с собранными товарами и согласует это с покупателем. Затем прикладывает к сканеру уже свой собственный бейджик это решает сразу несколько задач. Во-первых, мы знаем, кто какой заказ собирал. Помните, как раньше на некоторых видах пищевой продукции можно было встретить штамп ОТК и пометку Сборщик Иванов П.В.. Здесь что-то подобное, только видим это лишь мы в системе, и можем повлиять на качество сборки конкретного сотрудника, в случае появления большого количества рекламаций на обработанные им заказы. Во-вторых, на качество каждой сборки подвязана система мотивации сотрудников это обеспечивает добавочный контроль качества.

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

5. Выдача заказа

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

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

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

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

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

Умные тележки


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

image

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

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

  1. Покупатель подходит к кассе и нажимает Сгенерировать код.
  2. Касса отправляет запрос на центральный сервер ВкусВилла и сообщает свой уникальный номер и запрос на регистрацию нового QR-кода.
  3. На сервере регистрируется этот код, в таблице БД создается соответствующая запись, что в таком-то магазине создан такой-то QR-код.
  4. Покупатель видит сгенерированный QR-код на мониторе кассы, сканирует его с помощью мобильного приложения.
  5. Приложение (в котором пользователь уже залогинен) распознает зашитый в QR-код номер и посылает запрос на сервер.
  6. На сервере запись с распознанным QR-кодом дополняется данными о покупателе из приложения.
  7. Касса всё это время мониторит эту таблицу на предмет изменений и появления новых данных. Как только замечает их выдает оповещение на мониторе об успешной авторизации.
  8. При этом, если за 30 секунд касса так и не обнаружила информацию о покупателе в таблице, то выводит сообщение об ошибке авторизации.

Так вот, авторизация тележек на кассах работает примерно так же, но со своими особенностями.

Теперь расскажем непосредственно о тех вариантах интеграции тележек с кассами, которые мы реализовали.

1 попытка. QR-коды


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

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

Поэтому решили попробовать вариант с RFID-метками.

2 попытка. RFID-метки


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

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

3 попытка. Авторизация с ручным вводом номера телеги


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

Поэтому, когда тележка передает данные о списке товаров на сервер, она передает еще и этот номер например, тележка номер 33782 из такого-то магазина и список просканированных товаров.

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

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

О сложностях


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

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

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

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

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

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

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

Планы развития


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

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

Буду рад ответить на ваши вопросы.
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru