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

Тема в разделе "Arduino & Shields", создана пользователем Disabled, 26 июн 2017.

  1. Disabled

    Disabled Нуб

    Добрый день уважаемые Гуру. На днях задался целью внедрить у себя на работе следующюю функцию :) .

    Включение аппарата примитивной мойки для машин, для наших работников.

    Есть АВД, есть клапана пены воска и воздуха. Подключил модуль, вывел провода на реле. Нашел код для RFID модуля. Все как бы ничего, работает 5 минут потом отключается ( стоит задержка на новое считываение карты ).

    Карту использовал тройка ( проезд метро )

    Но это несовсем то чего хотелось бы. Хотелось бы другого. Комплект следующий :

    1. SD карта ( для хранения номера карты и остатка минут, на карте )

    2. SD карта ( при каждом считывании той или иной карты, ардуино опрашивает список UID, сверяет есть ли такая, сколько на ней осталось минут ) Если человек, допустим пользовался ей 10 минут а на балансе было 40 минут, то остаток 30. Если человек израсходовал минуты, карта удаляется из базы.

    Теперь по порядку :

    1. Заносим карту в базу ( можно в ручную ). Номер карты, Количество минут. Остаток минут.

    2. При одном прикосновении карты к считывателю включаются скажем реле 2-4. При повторном прикосновении включаются реле 3-4. При третьем прикосновении включается реле 2-4. При четвертом прикосновении реле выключаются и с карты перестают списываться минуты. При прикосновениях можно было бы через динамик выводит голосовое сопровождение. Включен ржим Вода и пена, включен режим Вода и воск, включен режим Вода. Сеанс завершен, На карте недостаточно минут. Далее остаток минут сохраняется на SD карте, до следующего использвания.

    3. Если это возможно то заблокировать из вне редактирование минут третьими лицами. Ну что бы не борзели.

    Код (C++):
    #include <SPI.h>
    #include <MFRC522.h> // библиотека "RFID".
    #define SS_PIN 10
    #define RST_PIN 9
    #define PIN_TONE 3 // TONE
    MFRC522 mfrc522(SS_PIN, RST_PIN);
    unsigned long uidDec, uidDecTemp; // для храниения номера метки в десятичном формате
    int Relay = 7;
    int Relay2 = 9;
    void setup() {
    Serial.begin(9600);
    Serial.println("Waiting for card...");
    SPI.begin(); // инициализация SPI / Init SPI bus.
    mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card.
    pinMode(Relay, OUTPUT); // устанавливаем реле в открытое сосотояние
    pinMode(Relay2, OUTPUT);
    digitalWrite(Relay, HIGH); // отключаем реле
    digitalWrite(Relay2, HIGH); // отключаем реле
    }
    void squeaker(byte count, unsigned int Hz, unsigned int duration, unsigned int sleep = 0)
    {
    for(int i=0; i<count; i++) {
    tone(PIN_TONE, Hz, duration);
    if(sleep > 0) delay(sleep);
    }
    }
    void loop() {// Поиск новой метки
    if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
    }
    // Выбор метки
    if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
    }
    uidDec = 0;
    // Выдача серийного номера метки.
    for (byte i = 0; i < mfrc522.uid.size; i++)
    {
    uidDecTemp = mfrc522.uid.uidByte[i];
    uidDec = uidDec * 256 + uidDecTemp;
    }
    Serial.println("Card UID: ");
    Serial.println(uidDec); // Выводим UID метки в консоль.
    if (uidDec == 3796650624 or uidDec == 3796650624) // Сравниваем Uid метки, если он равен заданому то реле срабатывает.
    {

    digitalWrite(Relay, LOW);//реле включено
    }
    delay(1000); // пауза 0,7 сек и реле переключается.
    digitalWrite(Relay, HIGH);//реле выключено
    }
    Скажите, это реально ?. Если реально то как это воплотить в реальность. Бюджету меня честно говоря ограничен. Зарплаты невысокие. Но думаю можем договориться.

    Спасибо.
     
  2. rkit

    rkit Гуру

    Реально. Оборудование все есть в продаже. Садитесь и программируете.
    Если не умеете, то придется учиться, и немало.
     
  3. sanik

    sanik Гик

    Можно при записи карты в коде привязать к ней количество минут и при каждом совпадении запускать счетчик в минус если время вышло поставить флаг запрета включения на эту карту