Zapojeni arduina do magnetickeho zamku dveri

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Zapojeni arduina do magnetickeho zamku dveri

Příspěvek od Kony » 21 říj 2021, 16:51

Ahoj, chtel bych umistnit a obsluhovat magneticky zamek u vchodovych dveri do bytovky

Chtel bych udelat nejaky mezikus, ktery zapojim pred zamek a mohl bych pomoci RFID odemykat dvere...

Ale ted otazky :
- jak udelat aby bylo nejaky ovladaci tlacitko, kterym bych mohl pridavat dalsi chipy
- kam by se ukladali cisla klicu ? Do EEPROM ?
- rad bych aby tam byla i ciselna klavesnice, kde by byl universalni kod(ktery by se dal zmenit)
- samozrejme bez moznosti pripojeni k PC. Jen pomoci klavesnice a displeye
- samozrejmost je i moznost otevirani dveri jak je do ted pomoci domovniho vratneho, ktery je nyni funkcni z bytu

Mate nekdo nejaky odkaz na neco podobneho ?

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Zapojeni arduina do magnetickeho zamku dveri

Příspěvek od Kony » 21 říj 2021, 17:41

Nasel jsem toto, to je asi presne co bych potreboval...
Jen nemuzu najit dokumentaci ..... navrh zapojeni a samotny kod

http://www.sselek-havirov.cz/erasmus_v_ ... ock_PL.pdf

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Zapojeni arduina do magnetickeho zamku dveri

Příspěvek od Kony » 21 říj 2021, 18:22

Jen doplnim ze pocitam s cca 100-120 RFID klici

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Zapojeni arduina do magnetickeho zamku dveri

Příspěvek od Kony » 21 říj 2021, 18:58

tak cely projekt jsem jiz nasel.....
jakmile budu mit neco hotoveho, tak poslu nejake info

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Zapojeni arduina do magnetickeho zamku dveri

Příspěvek od Kony » 21 říj 2021, 19:19

Nasel jsem tento kod :

Kód: Vybrat vše

//Viral Science www.youtube.com/c/viralscience  www.viralsciencecreativity.com
//RFID RC522 Master Card, Add and Remove multiple Cards 

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

#define RST_PIN 9
#define SS_PIN  10

#define STATE_STARTUP       0
#define STATE_STARTING      1
#define STATE_WAITING       2
#define STATE_SCAN_INVALID  3
#define STATE_SCAN_VALID    4
#define STATE_SCAN_MASTER   5
#define STATE_ADDED_CARD    6
#define STATE_REMOVED_CARD  7

#define REDPIN 7
#define GREENPIN 6
#define Relay 5

const int cardArrSize = 10;
const int cardSize    = 4;
byte cardArr[cardArrSize][cardSize];
byte masterCard[cardSize] = {131,35,56,187};   //Change Master Card ID
byte readCard[cardSize];
byte cardsStored = 0;

// Create MFRC522 instance
MFRC522 mfrc522(SS_PIN, RST_PIN);
// Set the LCD I2C address

byte currentState = STATE_STARTUP;
unsigned long LastStateChangeTime;
unsigned long StateWaitTime;

//------------------------------------------------------------------------------------
int readCardState()
{
  int index;

  Serial.print("Card Data - ");
  for(index = 0; index < 4; index++)
  {
    readCard[index] = mfrc522.uid.uidByte[index];

    
    Serial.print(readCard[index]);
    if (index < 3)
    {
      Serial.print(",");
    }
  }
  Serial.println(" ");

  //Check Master Card
  if ((memcmp(readCard, masterCard, 4)) == 0)
  {
    return STATE_SCAN_MASTER;
  }

  if (cardsStored == 0)
  {
    return STATE_SCAN_INVALID;
  }

  for(index = 0; index < cardsStored; index++)
  {
    if ((memcmp(readCard, cardArr[index], 4)) == 0)
    {
      return STATE_SCAN_VALID;
    }
  }

 return STATE_SCAN_INVALID;
}

//------------------------------------------------------------------------------------
void addReadCard()
{
  int cardIndex;
  int index;

  if (cardsStored <= 20)
  {
    cardsStored++;
    cardIndex = cardsStored;
    cardIndex--;
  }

  for(index = 0; index < 4; index++)
  {
    cardArr[cardIndex][index] = readCard[index];
  }
}

//------------------------------------------------------------------------------------
void removeReadCard() 
{     
  int cardIndex;
  int index;
  boolean found = false;
  
  for(cardIndex = 0; cardIndex < cardsStored; cardIndex++)
  {
    if (found == true)
    {
      for(index = 0; index < 4; index++)
      {
        cardArr[cardIndex-1][index] = cardArr[cardIndex][index];
        cardArr[cardIndex][index] = 0;
      }
    }
    
    if ((memcmp(readCard, cardArr[cardIndex], 4)) == 0)
    {
      found = true;
    }
  }

  if (found == true)
  {
    cardsStored--;
  }
}

//------------------------------------------------------------------------------------
void updateState(byte aState)
{
  if (aState == currentState)
  {
    return;
  }

  // do state change
  switch (aState)
  {
    case STATE_STARTING:
      StateWaitTime = 1000;
      digitalWrite(REDPIN, HIGH);
      digitalWrite(GREENPIN, LOW);
      break;
    case STATE_WAITING:
      StateWaitTime = 0;
      digitalWrite(REDPIN, LOW);
      digitalWrite(GREENPIN, LOW);
      break;
    case STATE_SCAN_INVALID:
      if (currentState == STATE_SCAN_MASTER)
      {
        addReadCard();
        aState = STATE_ADDED_CARD;
        StateWaitTime = 2000;
        digitalWrite(REDPIN, LOW);
        digitalWrite(GREENPIN, HIGH);
      }
      else if (currentState == STATE_REMOVED_CARD)
      {
        return;
      }
      else
      {
        StateWaitTime = 2000;
        digitalWrite(REDPIN, HIGH);
        digitalWrite(GREENPIN, LOW);
      }
      break;
    case STATE_SCAN_VALID:
      if (currentState == STATE_SCAN_MASTER)
      {
        removeReadCard();
        aState = STATE_REMOVED_CARD;
        StateWaitTime = 2000;
        digitalWrite(REDPIN, LOW);
        digitalWrite(GREENPIN, HIGH);
      }
      else if (currentState == STATE_ADDED_CARD)
      {
        return;
      }
      else
      {
        StateWaitTime = 2000;
        digitalWrite(REDPIN, LOW);
        digitalWrite(GREENPIN, HIGH);
        digitalWrite(Relay,LOW);
        delay(3000);
        digitalWrite(Relay,HIGH);
      }
      break;
    case STATE_SCAN_MASTER:
      StateWaitTime = 5000;
      digitalWrite(REDPIN, LOW);
      digitalWrite(GREENPIN, HIGH);
      break;
  }

  currentState = aState;
  LastStateChangeTime = millis();
}

void setup() 
{
  SPI.begin();         // Init SPI Bus
  mfrc522.PCD_Init();  // Init MFRC522

  LastStateChangeTime = millis();
  updateState(STATE_STARTING);

  pinMode(REDPIN, OUTPUT);
  pinMode(GREENPIN, OUTPUT);
  pinMode(Relay, OUTPUT);
  digitalWrite(Relay,HIGH);

  Serial.begin(9600);
}

void loop() 
{
  byte cardState;

  if ((currentState != STATE_WAITING) &&
      (StateWaitTime > 0) &&
      (LastStateChangeTime + StateWaitTime < millis()))
  {
    updateState(STATE_WAITING);
  }

  // Look for new cards 
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  { 
    return; 
  } 
  
  // Select one of the cards 
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  { 
    return; 
  }

  cardState = readCardState();
  updateState(cardState);
}
ale nejak nechapu kam se ukladaji ID tech karet....

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: Zapojeni arduina do magnetickeho zamku dveri

Příspěvek od peterple » 21 říj 2021, 20:24

To je ľahké. No predsa do poľa cardArr

Kód: Vybrat vše

byte cardArr[cardArrSize][cardSize];
Pole je dvojrozmerné. Jedna karta zaberá 4 byte a kariet môže byť 10.

Kód: Vybrat vše

const int cardArrSize = 10;
const int cardSize    = 4;
Pole je definované ako globálne, takže sa nachádza v SRAM. (Vypneš a je to v dyme)

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Zapojeni arduina do magnetickeho zamku dveri

Příspěvek od Kony » 21 říj 2021, 20:35

a to je pruser...
a to potrebuji aby to bylo na porad :)

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: Zapojeni arduina do magnetickeho zamku dveri

Příspěvek od peterple » 21 říj 2021, 20:38

tak si to daj do EEPROM a máš to nastálo

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Zapojeni arduina do magnetickeho zamku dveri

Příspěvek od Kony » 21 říj 2021, 20:42

jenze to ale prece musim urcit bunku a pak ta bunku je dle tohoto plovouci.... takze uplne mimo me chapani v arduino

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: Zapojeni arduina do magnetickeho zamku dveri

Příspěvek od peterple » 21 říj 2021, 20:48

vôbec nerozumiem ako to myslíš.
Prešiel si si príklady s EEPROM dostupné v samotnom prostedí?

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 20 hostů