Включить реле по срабатыванию 6 RFID меток

pavelcdn
Offline
Зарегистрирован: 24.08.2019

есть 6 меток , вот таких

надо чтоб один ключ подходил к одному ридеру и при прикладывании 6 штук , срабатывало реле

 

pavelcdn
Offline
Зарегистрирован: 24.08.2019

upd

на плате arduino uno

renoshnik
Offline
Зарегистрирован: 11.04.2013

pavelcdn пишет:

есть 6 меток , вот таких

надо чтоб один ключ подходил к одному ридеру и при прикладывании 6 штук , срабатывало реле

 

 

На картинке у тебя НЕ метка, а ридер ,,,

Прикладывать 6 штук одновременно или поочередно ?

pavelcdn
Offline
Зарегистрирован: 24.08.2019

надо чтоб только когда все 6 приложены , только тогда работает реле , другой ключ к другой метке нельзя 

b707
Онлайн
Зарегистрирован: 26.05.2017

pavelcdn пишет:

надо чтоб только когда все 6 приложены , только тогда работает реле , другой ключ к другой метке нельзя 

Павел, на одной ардуине с теми модулями. что на картинке - с вероятностью близкой к 100% задача не решаемая

pavelcdn
Offline
Зарегистрирован: 24.08.2019

а какие подойдут? Жаль эти уже есть , но если надо другие купить , как их найти?

b707
Онлайн
Зарегистрирован: 26.05.2017

pavelcdn пишет:

а какие подойдут? Жаль эти уже есть , но если надо другие купить , как их найти?

Можно оставить эти, а ардуин взять шесть... Да, в плане выполнения задачи значительно проще взять шесть отдельных контроллеров, что-нибудь дешевое, типа Атмега8

Ну или три платы с двумя СПИ на каждой типа STM32F103

fridgetester
fridgetester аватар
Offline
Зарегистрирован: 09.02.2019

Сделаю на одной ардуино, fridgetester@mail.ru

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

Павел, на одной ардуине с теми модулями. что на картинке - с вероятностью близкой к 100% задача не решаемая

Она CS не отпускает что ли?

b707
Онлайн
Зарегистрирован: 26.05.2017

sadman41 пишет:

Она CS не отпускает что ли?

да, народ жалуется на это.

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

Вон Фридгетестер не сомневается.

sadman41
Offline
Зарегистрирован: 19.10.2016

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

b707
Онлайн
Зарегистрирован: 26.05.2017

sadman41 пишет:

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

ну, моя идея была "экстенсивной" - на пять из шести ридеров по своей ардуине, самой простенькой. что-то типа ПроМини168,шестую арудину нормальную типо Нано, на нее шестой ридер и сигналы с остальных пяти. Если платы относительно близко - можно просто GPIO на GPIO завести, без всяких протоколов :)

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

rst
Offline
Зарегистрирован: 25.06.2018

b707 пишет:
Она CS не отпускает что ли?

Как такое может быть?? Ведь оно вроде - SPI-слэйв, соответственно - не должно вообще управлять CS.

Может "народ" просто забыл выбрать пинами нужный интерфейс и вместо SPI получает I2C?  ;)

b707
Онлайн
Зарегистрирован: 26.05.2017

rst пишет:

b707 пишет:
Она CS не отпускает что ли?

Как такое может быть?? Ведь оно вроде - SPI-слэйв, соответственно - не должно вообще управлять CS.

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

rst
Offline
Зарегистрирован: 25.06.2018

b707 пишет:
Неизящно конечно, зато просто :) немного потратится на железо, зато ПО напишет любой школьник - там можно взять библиотечный пример и чуть подправить :)

......и цепь управления реле от всех плат - пропустить последовательно через все платы? Чтобы реле включалось только когда все платы замкнули свои контакты.

Но тогда всё равно потребуются по 2 провода между каждыми 2-мя соседними платами. Так что - по количеству проводов выигрыш будет небольшой по сравнению с тем вариантом, чтобы иметь один контроллер и 6 считывателей. Провода всё равно тянуть надо между считывателями.

rst
Offline
Зарегистрирован: 25.06.2018

b707 пишет:
где-то на амперке была тема, поищите. В итоге сошлись на том. что надо ключики ставить на MISO MOSI и тупо отрубать шину от незадействованных в данный момент модулей

Тогда это - баг самого чипа. Может просто партия глючных чипов попалась?

 

PS: В таком разе может проще не ключ на каждый, а проще - RESET-ы на все завести. И отпускать только нужный в данный момент.

pavelcdn
Offline
Зарегистрирован: 24.08.2019

а как же код примера из библиотеки MFRC522? 

/**
 * --------------------------------------------------------------------------------------------------------------------
 * Example sketch/program showing how to read data from more than one PICC to serial.
 * --------------------------------------------------------------------------------------------------------------------
 * This is a MFRC522 library example; for further details and other examples see: https://github.com/miguelbalboa/rfid
 *
 * Example sketch/program showing how to read data from more than one PICC (that is: a RFID Tag or Card) using a
 * MFRC522 based RFID Reader on the Arduino SPI interface.
 *
 * Warning: This may not work! Multiple devices at one SPI are difficult and cause many trouble!! Engineering skill
 *          and knowledge are required!
 *
 * @license Released into the public domain.
 *
 * Typical pin layout used:
 * -----------------------------------------------------------------------------------------
 *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
 *             Reader/PCD   Uno/101       Mega      Nano v3    Leonardo/Micro   Pro Micro
 * Signal      Pin          Pin           Pin       Pin        Pin              Pin
 * -----------------------------------------------------------------------------------------
 * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
 * SPI SS 1    SDA(SS)      ** custom, take a unused pin, only HIGH/LOW required **
 * SPI SS 2    SDA(SS)      ** custom, take a unused pin, only HIGH/LOW required **
 * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
 * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
 * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
 *
 */

#include <SPI.h>
#include <MFRC522.h>

#define RST_PIN         9          // Configurable, see typical pin layout above
#define SS_1_PIN        10         // Configurable, take a unused pin, only HIGH/LOW required, must be diffrent to SS 2
#define SS_2_PIN        8          // Configurable, take a unused pin, only HIGH/LOW required, must be diffrent to SS 1

#define NR_OF_READERS   2

byte ssPins[] = {SS_1_PIN, SS_2_PIN};

MFRC522 mfrc522[NR_OF_READERS];   // Create MFRC522 instance.

/**
 * Initialize.
 */
void setup() {

  Serial.begin(9600); // Initialize serial communications with the PC
  while (!Serial);    // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)

  SPI.begin();        // Init SPI bus

  for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {
    mfrc522[reader].PCD_Init(ssPins[reader], RST_PIN); // Init each MFRC522 card
    Serial.print(F("Reader "));
    Serial.print(reader);
    Serial.print(F(": "));
    mfrc522[reader].PCD_DumpVersionToSerial();
  }
}

/**
 * Main loop.
 */
void loop() {

  for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {
    // Look for new cards

    if (mfrc522[reader].PICC_IsNewCardPresent() && mfrc522[reader].PICC_ReadCardSerial()) {
      Serial.print(F("Reader "));
      Serial.print(reader);
      // Show some details of the PICC (that is: the tag/card)
      Serial.print(F(": Card UID:"));
      dump_byte_array(mfrc522[reader].uid.uidByte, mfrc522[reader].uid.size);
      Serial.println();
      Serial.print(F("PICC type: "));
      MFRC522::PICC_Type piccType = mfrc522[reader].PICC_GetType(mfrc522[reader].uid.sak);
      Serial.println(mfrc522[reader].PICC_GetTypeName(piccType));

      // Halt PICC
      mfrc522[reader].PICC_HaltA();
      // Stop encryption on PCD
      mfrc522[reader].PCD_StopCrypto1();
    } //if (mfrc522[reader].PICC_IsNewC
  } //for(uint8_t reader
}

/**
 * Helper routine to dump a byte array as hex values to Serial.
 */
void dump_byte_array(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX);
  }
}

 

b707
Онлайн
Зарегистрирован: 26.05.2017

rst пишет:

......и цепь управления реле от всех плат - пропустить последовательно через все платы?

зачем? - реле управляет только одна ардуина - та, на которую заведены сигналы с остальных пяти

rst
Offline
Зарегистрирован: 25.06.2018

b707 пишет:
зачем? - реле управляет только одна ардуина - та, на которую заведены сигналы с остальных пяти

Затем чтобы:

b707 пишет:
ПО напишет любой школьник

b707
Онлайн
Зарегистрирован: 26.05.2017

ИМХО, тут надо просто попробовать. Может и с обычным библиотечным примером заработает. К тоже Павел не определил, насколько "одновременно" должны срабатывать шесть карточек

 

rst
Offline
Зарегистрирован: 25.06.2018

b707 пишет:
К тоже Павел не определил, насколько "одновременно" должны срабатывать шесть карточек

Самое главное он не определил - насколько далеко расположены эти считыватели. Если они рядом друг с другом, то проще сделать на одном контроллере.

man9913
man9913 аватар
Offline
Зарегистрирован: 19.03.2016

ТС, если ты думаешь что всё так просто и местные старожилы зря возбудились, то советую тебе обратить внимание на 10 строку из тобой же приведенного стандартного примера:

 Warning: This may not work! Multiple devices at one SPI are difficult and cause many trouble!!

 

pavelcdn
Offline
Зарегистрирован: 24.08.2019

rst пишет:

b707 пишет:
К тоже Павел не определил, насколько "одновременно" должны срабатывать шесть карточек

Самое главное он не определил - насколько далеко расположены эти считыватели. Если они рядом друг с другом, то проще сделать на одном контроллере.

ну допустим в пределах двух метров все 6 штук , между ридером и ардуино около метра провода максимум

срабатывание ~1-2 секунды 

pavelcdn
Offline
Зарегистрирован: 24.08.2019

man9913 пишет:

ТС, если ты думаешь что всё так просто и местные старожилы зря возбудились, то советую тебе обратить внимание на 10 строку из тобой же приведенного стандартного примера:

 Warning: This may not work! Multiple devices at one SPI are difficult and cause many trouble!!

 

так у меня в этом и вопрос состоит , зачем эта хрень в официальном примере если она не работает?

rst
Offline
Зарегистрирован: 25.06.2018

pavelcdn пишет:
так у меня в этом и вопрос состоит , зачем эта хрень в официальном примере если она не работает?

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

b707
Онлайн
Зарегистрирован: 26.05.2017

pavelcdn пишет:

так у меня в этом и вопрос состоит , зачем эта хрень в официальном примере если она не работает?

Павел, чем больше ридеров. тем труднее задача. Не думаю, что составители примера реально испытывали шесть ридеров одновременно, как вы :)

pavelcdn
Offline
Зарегистрирован: 24.08.2019

ну сделаю тогда скорее всего на отдельных ардуинках , наверно взять проще nano или мини 

rst
Offline
Зарегистрирован: 25.06.2018

pavelcdn пишет:
ну допустим в пределах двух метров все 6 штук

Тогда - лучше отдельный МК на каждый ридер. Можно конечно понизить SCLK и протащить все сигналы витыми парами, но всё-равно скорость получится низкой.

b707
Онлайн
Зарегистрирован: 26.05.2017

Павел, по деньгам Вам точно будет выгоднее взять шесть ардуин :) Они обойдутся рублей в 700, а код для сведения шести сигналов вы и сами сможете написать, если чуть подумаете. Ну или закажете за 500 рублей какому-нить студенту. А собрать шесть ридеров на одной шине - тут за один код на порядок больше заплатить придется.

pavelcdn
Offline
Зарегистрирован: 24.08.2019

а кто может подсказать какая ардуино подойдет (подешевле)? Можно даже с рефф ссылкой

rst
Offline
Зарегистрирован: 25.06.2018

b707 пишет:
а код для сведения шести сигналов вы и сами сможете написать, если чуть подумаете.

А что там думать? Если каждая замыкает свою пару контактов - то просто последовательно все соединить и в эту же цепь включить катушку реле. Если от каждой идёт отдельный сигнал - то соединить их в МОНТАЖНОЕ ИЛИ с активным уровнем = лог."1".

b707
Онлайн
Зарегистрирован: 26.05.2017

pavelcdn пишет:

а кто может подсказать какая ардуино подойдет (подешевле)? Можно даже с рефф ссылкой

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

Пример (первый попавшийся - ищите дешевле)

https://ru.aliexpress.com/item/32293707392.html

rst
Offline
Зарегистрирован: 25.06.2018

b707 пишет:
берите промини с контроллером атмега168 - они где-то по 85 рублей

Так STM8 - дешевле будет. Правда не абдурина. Но такую элементарную задачу и на STM8 - как 2 пальца об асфальт.  ;)

b707
Онлайн
Зарегистрирован: 26.05.2017

rst пишет:

b707 пишет:
а код для сведения шести сигналов вы и сами сможете написать, если чуть подумаете.

А что там думать? Если каждая замыкает свою пару контактов

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

Не знаю, зачем так делать, когда можно обойтись обычными логическими сигнала от платы к плате... но это пусть ТС сам решает.

b707
Онлайн
Зарегистрирован: 26.05.2017

rst пишет:

Так STM8 - дешевле будет. Правда не абдурина. Но такую элементарную задачу и на STM8 - как 2 пальца об асфальт.  ;)

библиотеку для MFRC522 вы на СТМ портировать будете? :)

pavelcdn
Offline
Зарегистрирован: 24.08.2019

b707 пишет:

rst пишет:

b707 пишет:
а код для сведения шести сигналов вы и сами сможете написать, если чуть подумаете.

А что там думать? Если каждая замыкает свою пару контактов

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

Не знаю, зачем так делать, когда можно обойтись обычными логическими сигнала от платы к плате... но это пусть ТС сам решает.

я изначально так и подумал

if(digitalWrite(10, HIGH)){

включаем реле

}

верно?

rst
Offline
Зарегистрирован: 25.06.2018

b707 пишет:
rst. я не знаю, о чем вы пишете - но вообще ардуина не умеет "замыкать пару контактов", для этого еще понадобится по реле на каждую плату.

Естественно.

b707 пишет:
Не знаю, зачем так делать, когда можно обойтись обычными логическими сигнала от платы к плате... но это пусть ТС сам решает.

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

Обычными логическими сигналами при таком расстоянии (2 м) уже лучше не обходиться. Лучше хотя-бы транзисторы добавить на выход каждого контроллера, скоммутировать в общую цепь и сопротивление подтяжки поменьше.

b707
Онлайн
Зарегистрирован: 26.05.2017

rst пишет:

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

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

rst
Offline
Зарегистрирован: 25.06.2018

b707 пишет:
я все равно не понимаю. зачем сигналы "коммутировать в общую цепь"? Я бы сигнал с каждого "слейва" завел на отдельный вход мастера.

А зачем "отдельный вход для каждого" (5 входов, каждый - с защитой (TVS-диодам), подтяжками и пр.) если можно сделать один общий? И завести его на мастера.

Оптопары - тоже не помешают. Ведь никто не знает как выполнена разводка 220V в том месте где автор будет ставить девайсы. Может он их от разных розеток запитает?  ;)

b707
Онлайн
Зарегистрирован: 26.05.2017

rst пишет:

 

А зачем "отдельный вход для каждого" если можно сделать один общий? И завести его на мастера.

хм.... схему нарисуете?

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

man9913 пишет:

ТС, если ты думаешь что всё так просто и местные старожилы зря возбудились, то советую тебе обратить внимание на 10 строку из тобой же приведенного стандартного примера:

 Warning: This may not work! Multiple devices at one SPI are difficult and cause many trouble!!

Я ему уже это советовал в другой теме. Результат - 0. Совет проигнорирован.

pavelcdn
Offline
Зарегистрирован: 24.08.2019

ЕвгенийП пишет:

man9913 пишет:

ТС, если ты думаешь что всё так просто и местные старожилы зря возбудились, то советую тебе обратить внимание на 10 строку из тобой же приведенного стандартного примера:

 Warning: This may not work! Multiple devices at one SPI are difficult and cause many trouble!!

Я ему уже это советовал в другой теме. Результат - 0. Совет проигнорирован.

совет не проигнорирован , совет принят но я не возьмусь утверждать что иной выход невозможен 

rst
Offline
Зарегистрирован: 25.06.2018

b707 пишет:
хм.... схему нарисуете?

Типа так:

На каждом контроллере поставить такое. Левую часть подключить к пинам слэйва. Правую - 2 провода на мастер. RL - установить один на мастере. Все транзисторы всех слэйвов скоммутировать параллельно (на мастере).

Пока карта не поднесена, каждый слэйв держит лог."1" на ноге "IF", когда поднесена - ставит лог."0". Когда на всех будет поднесена - на мастере будет лог."1" образуемая подтяжкой RL.

Да - ещё на мастере с VCE на GND нужно кондёр добавить.

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

Green
Offline
Зарегистрирован: 01.10.2015

2м, помехоустойчивость, опторазвязка, TVS - диоды... Я просто фигею.(

rst
Offline
Зарегистрирован: 25.06.2018

Green пишет:
2м, помехоустойчивость, опторазвязка, TVS - диоды... Я просто фигею.(

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

b707
Онлайн
Зарегистрирован: 26.05.2017

rst

Да, в принципе с такой логикой будет работать, согласен. Только надо еще предусмотреть по диоду от IF каждого слейва. а то лог "1" с одной платы потечет на лог "0" другой

rst
Offline
Зарегистрирован: 25.06.2018

b707 пишет:
Да, в принципе с такой логикой будет работать, согласен. Только надо еще предусмотреть по диоду от IF каждого слейва. а то лог "1" с одной платы потечет на лог "0" другой

Кто потечёт?? Там опторазвязка. Платы друг с другом гальванически не будут связаны.

Gas311
Gas311 аватар
Offline
Зарегистрирован: 06.12.2018

Так он хочет 

pavelcdn
Offline
Зарегистрирован: 24.08.2019

что то вы меня напугали знаниями )) 

неужели нельзя просто подать 5V от одной ардуино к другой и там "смотреть" подан ли сигнал или нет?

Green
Offline
Зарегистрирован: 01.10.2015

rst пишет:

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

К чему тут вообще розетки? Ещё и с бестрансформаторным БП. От одного источника всё берётся и через UTP ведётся. 2 пары - питание, 1 - сигнальная, 1 - резервная.

b707
Онлайн
Зарегистрирован: 26.05.2017

Green пишет:

 Я просто фигею.(

а чего грустно? Надо так - "Я фигею!!! :))))))))"

Скучно, почему не поболтать, пока "взрослые" ушли :)