ARDUINO UNO RFIS RIDER SERVO. DOOR LOCK OPEN SISTEM

machitoo
Offline
Зарегистрирован: 24.08.2017

sdrastvite. druzia mne nada pomash. pajalusta pamagite.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

machitoo пишет:

sdrastvite. druzia mne nada pomash. pajalusta pamagite.

оставайте на месте - бригада спасателей уже выехала.

machitoo
Offline
Зарегистрирован: 24.08.2017

interesna budit :)

machitoo
Offline
Зарегистрирован: 24.08.2017

machitoo
Offline
Зарегистрирован: 24.08.2017

xachu dobite.avit dva sveda dioda. krasni i zelioni. a takje knopku (button) shtob dver iz nutri otkrit. pamag

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

machitoo пишет:

xachu dobite.avit dva sveda dioda. krasni i zelioni. a takje knopku (button) shtob dver iz nutri otkrit. pamag

я не запрещал хотеть добавлять светодиоды.

machitoo
Offline
Зарегистрирован: 24.08.2017

:D  iumor otlichni. no kak eta pravilna sdelat. diod skolka omav nada na led i na button?

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

machitoo пишет:

:D  iumor otlichni. no kak eta pravilna sdelat. diod skolka omav nada na led i na button?

Ищу исполнителя

Alexandsvoi
Offline
Зарегистрирован: 11.07.2017

machitoo пишет:

sdrastvite. druzia mne nada pomash. pajalusta pamagite.

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

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Если без MFRC522 :) то так

/**/
unsigned long mill;//переменная millis()
//-------Cl_Lock---------------------------------------
// класс Cl_Lock дверной замок - серво,геркон в дверях,светодиод индикация
#include <Servo.h>
const int servo_OFF = 0; // серва закрыта
const int servo_ON = 90; // серва открыта
class Cl_Lock {
    const byte servoPin;
    const byte gerconPin;
    const byte ledPin;
    unsigned long time, past;
    Servo myservo;
    bool doorOpen;// 1 дверь открыта
  public:
    /*конструктор Cl_Lock
      описание    создать объект
      ввод        _servoPin: нога на серве
                  _gerconPin: нога на герконе
      вывод       нет
    */
    Cl_Lock(byte _servoPin, byte _gerconPin, byte _ledPin, unsigned long _time)
      : servoPin(_servoPin), gerconPin(_gerconPin), ledPin(_ledPin), time(_time) {}
    /*функция     setup
      описание    иницилизация
      ввод        нет
      вывод       нет
    */
    void setup() {
      pinMode(ledPin, OUTPUT);
      digitalWrite(ledPin, 0);
      myservo.attach(servoPin);
      pinMode(gerconPin, INPUT_PULLUP);
      if (!digitalRead(gerconPin))myservo.write(servo_OFF);
      doorOpen = 1;
    }
    /*функция     loop
      описание    для нормальной работы вставить в тело loop()
      ввод        нет
      вывод       нет
    */
    void loop() {
      if (doorOpen && mill - past >= time && !digitalRead(gerconPin)) { // убеждаемся что дверь закрыта и подошло время закрывать на замок
        doorOpen = 0;
        digitalWrite(ledPin, 1);
        myservo.write(servo_OFF);  // закрываем
      }
    }
    /*функция     open
      описание    открыть дверь
      ввод        нет
      вывод       нет
    */
    void open() {
      doorOpen = 1;
      past = mill;
      digitalWrite(ledPin, 0);
      myservo.write(servo_ON);
    }
};
//---------Cl_Btn-------------------------------------------------
// класс кнопка
class Cl_Btn {
    const byte pin;
    void (*Do)();
    bool btn, oldBtn = 1;
    bool bounce = 0;
    unsigned long past;
  public:
    /*конструктор Cl_Btn
      описание    создать объект
      ввод        _pin: нога
                  _inv: инверсия выхода
      вывод       нет
    */
    Cl_Btn(byte _pin, void (_Do)()): pin(_pin), Do(_Do) {}
    /*функция     setup
      описание    иницилизация
      ввод        нет
      вывод       нет
    */
    void setup() {
      pinMode(pin, INPUT);
      btn = digitalRead(pin);
    }
    /*функция     loop
      описание    для нормальной работы вставить в тело loop()
      ввод        нет
      вывод       нет
    */
    void loop() {
      bool newBtn = digitalRead(pin);
      if (bounce && newBtn != btn) {
        bounce = 1;
      }
      if (!bounce && mill - past >= 10) {
        past = mill;
        bounce = 0;
        oldBtn = btn;
        btn = newBtn;
        if (!btn && oldBtn) (*Do)();
      }
    }
};
//-----Компоновка-----------------------------------------
const unsigned time_2s = 2000;
Cl_Lock Lock(/*пин на серво*/5,/*пин на герконе*/3,/*пин индик*/13,/*врямя*/time_2s);
void Do_Btn() {
  Lock.open();
}
Cl_Btn Btn(/*пин*/2,/*обработчик*/Do_Btn);
//-----main()-----------------------------------------
void setup() {
  Lock.setup();
  Btn.setup();
}

void loop() {
  mill = millis();
  Lock.loop();
  Btn.loop();
}
/*Скетч использует 2572 байт (7%) памяти устройства. Всего доступно 32256 байт.
  Глобальные переменные используют 76 байт (3%) динамической памяти, оставляя 1972 байт для локальных переменных. Максимум: 2048 байт.
*/

 

machitoo
Offline
Зарегистрирован: 24.08.2017

xarasho ia sivodnia vsio xarasho sdelai na fotkax abisniu i pakaju. spasiba za ranie

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
/*
  светодиод -> 8 (Led_pin) 0 горит/ 1 нет
       GND ->  GND
  серва  -> 5
  геркон -> 3  0 дверь закрыта / 1 нет
  кнопка -> 2  0 нажата/ 1 нет
       GND ->  GND

  RFID_RC522 RST -> 9 (RST_pin)
        SDA(SS)-> 10 (SDA_pin)
        MOSI   -> 11 (MOSI_pin)
        MISO   -> 12 (MISO_pin)
        SCK    -> 13 (SCK_pin)
        3,3В   -> 3,3В
        GND    -> GND
*/
unsigned long mill;//переменная millis()
//-------Cl_Lock---------------------------------------
// класс Cl_Lock дверной замок - серво,геркон в дверях,светодиод индикация
#include <Servo.h>
const int servo_OFF = 0; // серва закрыта
const int servo_ON = 90; // серва открыта
class Cl_Lock {
    const byte servoPin;
    const byte gerconPin;
    const byte ledPin;
    unsigned long time, past;
    Servo myservo;
    bool doorOpen;// 1 дверь открыта
  public:
    /*конструктор Cl_Lock
      описание    создать объект
      ввод        _servoPin: нога на серве
                  _gerconPin: нога на герконе
      вывод       нет
    */
    Cl_Lock(byte _servoPin, byte _gerconPin, byte _ledPin, unsigned long _time)
      : servoPin(_servoPin), gerconPin(_gerconPin), ledPin(_ledPin), time(_time) {}
    /*функция     setup
      описание    иницилизация
      ввод        нет
      вывод       нет
    */
    void setup() {
      pinMode(ledPin, OUTPUT);
      digitalWrite(ledPin, 0);
      myservo.attach(servoPin);
      pinMode(gerconPin, INPUT_PULLUP);
      if (!digitalRead(gerconPin))myservo.write(servo_OFF);
      doorOpen = 1;
    }
    /*функция     loop
      описание    для нормальной работы вставить в тело loop()
      ввод        нет
      вывод       нет
    */
    void loop() {
      if (doorOpen && mill - past >= time && !digitalRead(gerconPin)) { // убеждаемся что дверь закрыта и подошло время закрывать на замок
        doorOpen = 0;
        digitalWrite(ledPin, 1);
        myservo.write(servo_OFF);  // закрываем
      }
    }
    /*функция     open
      описание    открыть дверь
      ввод        нет
      вывод       нет
    */
    void open() {
      doorOpen = 1;
      past = mill;
      digitalWrite(ledPin, 0);
      myservo.write(servo_ON);
    }
};
//---------Cl_Btn-------------------------------------------------
// класс кнопка
class Cl_Btn {
    const byte pin;
    void (*Do)();
    bool btn, oldBtn = 1;
    bool bounce = 0;
    unsigned long past;
  public:
    /*конструктор Cl_Btn
      описание    создать объект
      ввод        _pin: нога кнопки
                  _Do: обработчик кнопки
      вывод       нет
    */
    Cl_Btn(byte _pin, void (_Do)()): pin(_pin), Do(_Do) {}
    /*функция     setup
      описание    иницилизация
      ввод        нет
      вывод       нет
    */
    void setup() {
      pinMode(pin, INPUT);
      btn = digitalRead(pin);
    }
    /*функция     loop
      описание    для нормальной работы вставить в тело loop()
      ввод        нет
      вывод       нет
    */
    void loop() {
      bool newBtn = digitalRead(pin);
      if (bounce && newBtn != btn) {
        bounce = 1;
      }
      if (!bounce && mill - past >= 10) {
        past = mill;
        bounce = 0;
        oldBtn = btn;
        btn = newBtn;
        if (!btn && oldBtn) (*Do)();
      }
    }
};
//---------Cl_MFRC522-------------------------------------------------
// класс MFRC522 кнопка на RFID
#include <SPI.h>
#include <MFRC522.h>
struct sCard {
  struct sCard *next;
  unsigned long Card;
};
class Cl_MFRC522 {
    MFRC522 rfid;
    void (*Do)(); // обработчик кнопки
    unsigned long past;
    struct sCard *start = NULL;
  public:
    /*конструктор Cl_Btn
      описание    создать объект
      ввод        sdaPin: нога SDA
                  rstPin: нога RST
                  _Do: обработчик кнопки RFID
      вывод       нет
    */
    Cl_MFRC522(byte sdaPin, byte rstPin, void (_Do)())
      : rfid(sdaPin, rstPin), Do(_Do) {}
    /*функция     setup
      описание    иницилизация
      ввод        нет
      вывод       нет
    */
    void setup() {
      SPI.begin();
      rfid.PCD_Init();
    }
    /*функция     loop
      описание    для нормальной работы вставить в тело loop()
      ввод        нет
      вывод       нет
    */
    void loop() {
      if (mill - past >= 1000) {
        past = mill;
        if ( rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
          uint32_t Card = ((rfid.uid.uidByte[0] * 0x100 + rfid.uid.uidByte[1]) * 0x100 + rfid.uid.uidByte[2]) * 0x100 + rfid.uid.uidByte[3];
          Serial.println(Card);
          for (struct sCard *ii = start; ii != NULL; ii = ii->next) {
            if (Card == ii->Card) (*Do)();
          }
        }
      }
    }
    /*функция     AddCard
      описание    добавить новую карту
      ввод        _Card:код новой карты
      вывод       нет
    */
    void AddCard(uint32_t _Card) {
      struct sCard *newCard = new struct sCard;
      newCard->next = start;
      newCard->Card = _Card;
      start = newCard;
    }
};
//-----Компоновка-----------------------------------------
const unsigned time_3s = 3000;
Cl_Lock Lock(/*пин на серво*/5,/*пин на герконе*/3,/*пин индик*/8,/*врямя*/time_3s);
void Do_Btn() {
  Lock.open();
}
Cl_Btn Btn(/*пин*/2,/*обработчик*/Do_Btn);
Cl_MFRC522 MFRC522(/*пин SDA*/10,/*пин RST*/9,/*обработчик*/Do_Btn);
//-----main()-----------------------------------------
void setup() {
  Serial.begin(9600);
  Lock.setup();
  Btn.setup();
  MFRC522.setup();
  MFRC522.AddCard(4294966803);// добавить карту 4294966803
  MFRC522.AddCard(14805)     ;// добавить карту 14805
}

void loop() {
  mill = millis();
  Lock.loop();
  Btn.loop();
  MFRC522.loop();
}
/*Скетч использует 7062 байт (21%) памяти устройства. Всего доступно 32256 байт.
  Глобальные переменные используют 298 байт (14%) динамической памяти, оставляя 1750 байт для локальных переменных. Максимум: 2048 байт.
*/

У меня это работает. Вот только вставлять надо код карточки , который программа кидает в Serial