Присоединить один RFID считыватель к двум контроллерам.

Тема в разделе "Arduino & Shields", создана пользователем ampedr, 18 фев 2016.

  1. ampedr

    ampedr Нерд

    Столкнулся с непростой задачей.
    В наличии есть низкочастотный RFID считыватель 125KHz: СP-Z2L
    Он может работать с протоколами: ibutton,Wiegand26,OneWire(он же dallas), все они поддерживаются ардуиной, и считыватель прекрасно работает с каждым из них.

    Но задача заключается вот в чем, данный считыватель СP-Z2L уже присоединен к действующему контроллеру "Z-5R" и мне очень желательно, чтобы информация со считывателя СP-Z2L передавалась параллельно на оба контроллера, если это вообще возможно.
    Что было перепробовано:
    Сначала был протестирован стандартный протокол OneWire(он же dallas) на котором собственно работает контроллер Z-5R.
    Я взял библиотеку OneWire под Arduino(Uno), подключил к ардуине СP-Z2L как положено в нужные пины, загрузил скетч. Всё работает прекрасно, данные ключей высвечиваются в COM консоли через Serial как надо.
    Но стоило мне СP-Z2L подключить параллельно к ардуине, и к Z-5R, как происходит следующее. Контроллер Z-5R работает корректно, когда я прикладываю к нему RFID ключи, но в это же время в ардуине вместо айдишников ключей я вижу рандомные байты которые к ID ключа никакого отношения не имеют.
    То есть, запаралелив считыватель СP-Z2L между двумя разными контроллерами, только один контроллер (это Z-5R) работает корректно(получает правильные айдишники ключей, о чем сообщает звуковым сигналом), а ардуина в этот момент вместо айдишников ловит рандомный мусор.

    Хорошо, тогда я попробовал протокол Wiegand26, всё как и в предыдущем случае, сначала протестировал работоспособность считывателя СP-Z2L с ардуиной. Работает протокол немножко иначе, там айдишники ключей в другом виде, но в остальном всё аналогично.
    Так же следом подключил к нему контроллер Z-5R параллельно, и при подаче питания происходит следующее, считывать информацию может лишь один контроллер, он выбирается рандомно при включении питания, другой контроллер не получает вообще никакой информации.

    Ещё есть ibutton протокол, его я не пробовал, но если не ошибаюсь, он вроде как и есть OneWire...
    Да, подключение было правильным, и ардуина и Z-5R с СP-Z2L запитывались от одного источника питания, и у всех трех устройств общая земля.
    И да, я понимаю, что если вместо контроллера Z-5R использовать ещё одну ардуину, то там вариантов выкрутиться будет достаточно, но в моем случае контроллер Z-5R менять нельзя, и в тоже время я хочу получить параллельно айдишники ключей со считывателя в ардуину.


    Возможно ли вообще реализовать эту задумку, и пустить работу считывателя СP-Z2L сразу на два контроллера? На контроллере Z-5R этот считыватель работает исключительно по протоколу OneWire он же dallas, а вот на ардуине я могу выбрать любой протокол обмена информацией, какой он будет, это не принципиально, главное чтобы работало.
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    как вариант - ардуино сделать посредником - т.е. принимать ID ключа от считывателя и по другим пинам передавать его на другой контроллер Z-5R.
    Ищите "arduino iButton emulation".
     
  3. ampedr

    ampedr Нерд

    К сожалению в моем случае это тоже не вариант.

    А чем сможет помочь arduino iButton emulation? Как я понимаю, протокол iButton может параллельно считывать информацию не искажая её?
     
  4. Tomasina

    Tomasina Сушитель лампочек Модератор

    обмен по шине OneWire (а она используется в iButton) идет по стандарту Master-Slave. Подключая второй контроллер параллельно, ты в этой шине устраиваешь кашу, потому что получается два Master, чего быть не должно. Теоретически можно сидеть параллельно и просто слушать что передают в линии, но тут надо досконально знать протокол OneWire, т.е. разбираться с регистрами и таймингами, описанными в даташите.

    Чем не подходит последовательное включение Arduino? Да, придется физически перетыкать провода. но несложно с кодом: просто принять ID по стандартному протоколу и передать его же без изменений.
     
  5. ampedr

    ampedr Нерд

    В моем случае очень рискованно. Мне нужно подключиться уже к существующей системе СКУД, сделать так сказать врезку. И если я сделаю основным контроллером Arduino, вместо текущего z-5r, то в случае непредвиденных ситуаций с ардуиной, вся система встанет, и повлечет очень серьёзные последствия.
    Я не хочу брать такой риск, так как контроллер z-5r проверен десятилетиями в надежности, а вот в китайской копии arduino UNO с алиэкспресса за 200 рублей я совсем не уверен.
    Соответственно я хотел бы сделать врезку без рисков, чтобы паралельно со считывателя информацию заимствовать без риска обрушить существующую систему.
     
  6. Vad33

    Vad33 Капитан-оригинал

    СКУД вскрываем? Хакер? Технический шпионаж ? :D

    [​IMG]
    ----------------------------------------------------------------
    УК РФ
    Статья 272.
    Неправомерный доступ к компьютерной информации
    ...до 2-х лет...

    Статья 274.
    Нарушение правил эксплуатации средств хранения, обработки или передачи компьютерной информации и информационно-телекоммуникационных сетей
    ...до 2-х лет...
     
    Последнее редактирование: 19 фев 2016
  7. ampedr

    ampedr Нерд

    Кто сказал, то СКУД чужая? Я хочу подключиться к текущей работающей СКУД, которая нашей же компании и принадлежит, просто в силу технических особенностей контроллер z-5r я на ардуину заменять не могу.
    А задача стоит, логировать ключи в базу, и иметь спец ключи которые при открытии двери выполняют ещё и другие действия в момент открытия.
     
  8. Tomasina

    Tomasina Сушитель лампочек Модератор

    а откуда логи-то? 300-рублевый контроллер Z-5R логов не ведет, к сети не подключается, построен на ATMEGA-168, то есть младший брат Arduino и даже не как врезка, а полностью и безо всяких последствий (кроме прошивки адресов карточек по-новой) может быть заменен на самодельную Arduino-платку на ATMEGA-328. Поэтому и разговоры о "повышенной надежности" весьма странно смотрятся.
     
  9. Vad33

    Vad33 Капитан-оригинал

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

    Но даже не в этом дело. Ясно же, что чел пытается к нему нелегально подключиться, иначе чего огород городить?!
     
  10. ampedr

    ampedr Нерд

    Как вы знаете, специфика ардуино гласит, что это формально платы для отладки, и не рекомендуется их использовать в боевых условиях, именно по этой причине крайне не желательно менять надежный контроллер на ардуину, или как в предложенном варианте делать из ардуины посредника для обмена информацией, в этом случае всё равно всё будет упираться в ардуину, и если она подведет, то будут последствия в виде невозможности открыть дверь.
    По этому, мне проще отказаться от идеи заменять z-5r на ардуину, чем подвергаться такому риску, хотя возможно я заблуждаюсь насчет стабильности ардуины, но не протестировав её в своих других проектах, и не убедившись, что это действительно надежная штука, я не могу её ставить на критически важные объекты.
    А задумка была очень простая, подключив ардуину паралельно текущему контроллеру z-5r, я снимал все риски связанные с возможным сбоем ардуины, и если ардуина вышла бы из строя, то ничего бы не случилось, контроллер z-5r продолжал бы работать в штатном режиме.
     
  11. Unixon

    Unixon Оракул Модератор

    В таком случае ардуина должна работать в режиме сниффера, а не ведущего устройства. Т.е. просто прослушивать шину 1-wire, а не пытаться самой на ней что-то сделать.
     
  12. ampedr

    ampedr Нерд

    Вот это я и хочу уточнить, как это реализовать? На ардуине загружен скетч просто считывать ID прикладываемого ключа и всё, обратно он никаких данных не отправляет. Как раз по протоколу 1-wire, я к ардуине подключаю всего 1 контакт по которому передаются данные, контакт на чтение, записи в него не ведется.
    Вот пример скетча:
    Код (C++):
    #include <OneWire.h>

    OneWire ds(7); // выход считывателя на 7 пин
    byte addr[8];// буфер приема

    void setup() {// стартовая инициализация

      Serial.begin(9600);

      delay(100);

      Serial.println("Start...");

    }

    void loop() {

      if(ds.reset()){ // если обнаружено устройство
        ds.write(0x33); // отправляем команду "считать ROM"
        delay(50); // на всякий случай ждем
        for(int i=0;i<8;i++){
          addr[i] = ds.read(); // считываем
        }

        Serial.print("ROM ="); // выводим
     
      for(int i = 0; i < 8; i++) {
        Serial.write(' ');
        Serial.print(addr[i], HEX);
      }

      Serial.println();
        delay(500);
      }

    }
    И тут всё упирается в момент который описан выше, код работает, но если параллельно подключить этот data порт к z-5r, то вместо айдишников ключей уже получаем мусор. И как исправить код, чтобы он работал как сниффер, получая правильные айдишники ключей, и при этом не нарушая работу считывателя с z-5r, это вопрос...
    Ардуина не может выступать посредником между считывателем и z-5r контроллером по указанным выше причинам, можно попытаться только "вклиниться", если это хоть как то возможно.
     
  13. Tomasina

    Tomasina Сушитель лампочек Модератор

    Сомнения по поводу надежности - это лишь ваши сомнения. Если сделать на втыкающихся проводочках, то, конечно - это не слишком надежно. Но что мешает сделать нормально - на пайке и винтовых клеммах? Именно так и сделано в Z-5R. И в Arduino и в Z-5R используется один и тот же контроллер Atmega x8, отличие только в количестве памяти (у Arduino больше в два раза).
     
  14. Onkel

    Onkel Гуру

    1wire он потому и 1wire, что там все по одному проводу и по одному пину - и чтение, и запись. И инициацией запроса ардуино говорит сети "вот я мастер", а другой контроллер этого не понимает.
    Вам подсказали правильное слово "сниффер", гуглите по 1 wire sniffer arduino.
     
    ampedr нравится это.
  15. Limoney

    Limoney Гик

    Устройство – считается надёжным, если соответствует своему
    предназначению в любых условиях включая как ПО так и аппаратных компонентов.
    Не зря же руководство компании выбрало сертифицированный контроллер z-5r

     
  16. Tomasina

    Tomasina Сушитель лампочек Модератор

    Случаем не тот, что зовется РОСС RU.ME83.B00374? Во-первых, он не на конкретный контроллер, а на всю ввозимую партию электроники из Китая (что уже есть бумажка ни о чем). Во-вторых, поинтересуйтесь что на самом деле означает такая сертификация (к слову, стоимость такой сертификации составляет 6500 р. и делается за 2 дня, причем сам продукт предоставлять на экспертизу не требуется - какова ценность такого сертификата?)
    P.S. любая официально ввезенная Arduino имеет точно такой же сертификат, коим можно ткнуть в заказчика.
     
  17. Limoney

    Limoney Гик

    С Вами согласен
    Говорил про контроллер z-5r, который не в китае произведен, а разработан самой компанией. Соответственно должен быть сертификат на продукцию, который на сайте
    компании непреложен.
     
  18. Tomasina

    Tomasina Сушитель лампочек Модератор

    номер выше и есть этот сертификат, но он не на контроллер, а на всю продукцию, смотри другие товары ironlogic, там тот же номер.
    А плату наверняка делали в Китае, это сильно дешевле. К тому же у нас редко так косячат с шелкографией.
     
    Limoney нравится это.
  19. Limoney

    Limoney Гик

    Извиняюсь!
    Не доглядел номер на товары ironlogic