To jest stara wersja strony!


Kontrola dostępu rfid do warsztatu

Założenia ogólne

Potrzebujemy systemu kontroli dostępu do pomieszczenia coowork i warsztatu opartego na kartach RFID. Wybór standardu 125khz podyktowany jest kompatybilnością z istniejącym systemem alarmowym/kontroli dostępu Satel. System musi być możliwie dyskretny, nie możemy ingerować w drzwi ani ściany pomieszczeń. W założeniu jest użycie przekaźników WiFi z rodziny ESP, co pozwoli na weryfikację dostępu do poszczególnych stref z poziomu bazy danych serwera oraz potencjalną możliwość szyfrowania lub wymiany certyfikatów zapisywanych w pamięci karty w celu poprawienia bezpieczeństwa. Dla zabawy, i tak mamy szklane drzwi.

Okoliczności działania

W HS są drzwi i ościeżnice, w które nie możemy za bardzo ingerować. Ogranicza to znacznie wybór rozwiązań technicznych, możliwych do zastosowania w naszym przypadku. Możemy albo

  • ograniczyć się do gotowych rozwiązań
  • zmodyfikować gotowy system
  • "wyrzucić" cały system kontroli dostępu na zewnątrz
  • zaprojektować coś, co pozwoli nam ukryć ingerencję.

Opcja 4 jest najlepsza bo pozwala nam na pełną kontrolę i nie bije po oczach ani portfelu.

Proponowanie rozwiązanie

Między futryną a otworem w ścianie jest sporo miejsca, co daje nam możliwość ukrycia systemu korzystając z dostępu przez powiększone światło frezowań ukrytych za blachą czołową na futrynie. Takie podejście pozwala na całkowite ukrycie mechaniki i elektroniki. Problemem było odryglowywanie drzwi, z racji docelowej obecności gałki, nie za bardzo dało się operować elementami mechanicznymi po stronie skrzydła. Rozwiązanie, przynajmniej w teorii przyniosła wkładka magnetyczna, której położenie może zmieniać się pod wpływem pola magnetycznego a nie dużej siły mechanicznej. Jeśli po stronie futryny udałoby się umieścić elektromagnes ze możliwością zmiennej polaryzacji, to dałoby nam to możliwość odryglowywania drzwi.

Teoria vs. praktyka

Jak się okazało po montażu, zapadka nie poddaje się wyłącznie działaniu magnesu po stronie futryny, ale również metalowej płyty czołowej. Skutkuje to zatrzaśnięciem zapadki "by default". Oddziaływanie elektromagnesu od strony futryny nie jest wystarczające do przeciwstawienia się przyciąganiu pomiędzy zapadką a płytą czołową. Oczywistym rozwiązaniem byłoby zastosowanie silniejszego magnesu, nie ma niestety takiej możliwości z uwagi na ograniczone miejsce. Nawet gdyby było, takie rozwiązanie nastręcza problemów związanych z nagrzewaniem cewki w niewielkiej przestrzeni z płyty HDF (i potencjalne spontaniczne ognisko) i konieczności doprowadzenia źródła zasilania (do zrobienia, ale to sporo roboty).

Worklog

* 09.11.2017 - prototyp uruchamiania przekaźnika za pomocą karty RFID 13.56MHz na Atmelu. Mieliśmy akurat te czytniki, robota w sumie na stracenie a oprogramowanie tego nie było łatwe * 10.11.2017 - zamówienie prawilnych czytników 125kHz od majfrendów. Pomiary wkładki. * 15.11.2017 - zamówienie wkładki magnetycznej do drzwi * 17.11.2017 - montaż wkładki i dostosowanie ościeżnicy, przy okazji okazało się, że wcale nie potrzebujemy magnesu od strony ościeżnicy. I że pomysł z solenoidem nie wypali. * 21.11.2017 - zmiana planów na mechanizm wypychający zapadkę servomotorem. Pierwsza iteracja drukowanej ramki na servo i ręczne poprawki. * 22.11.2017 - druga iteracja ramki i oprogramowanie nowego układu RFID wraz z servo. * 25.11.2017 - trzecia iteracja ramki.

Kod

Czytnik 7941e
#include <Servo.h>
#include <SoftwareSerial.h>
 
SoftwareSerial RFID(10, 11); // RX and TX
Servo myservo;
 
//#define CHECKID
 
int i;
int pos = 0;
 
#ifdef CHECKID
void setup()
{
  RFID.begin(9600);    // start serial to RFID reader
  Serial.begin(9600);  // start serial to PC
}
 
void loop()
{
  if (RFID.available() > 0)
  {
    i = RFID.read();
    Serial.print(i, DEC);
    Serial.print(" ");
  }
}
#endif
 
#ifndef CHECKID
int data1 = 0;
int ok = -1;
int yes = 13;
int no = 12;
 
int tag1[10] = {2, 10, 2, 113, 0, 126, 243, 46, 218, 3};
int tag2[10] = {2, 10, 2, 109, 0, 9, 224, 126, 242, 3};
int tag3[10] = {2, 10, 2, 30, 0, 43, 119, 231, 173, 3};
int tag4[10] = {2, 10, 2, 30, 0, 43, 120, 91, 30, 3};
int newtag[14] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // used for read comparisons
 
void setup() {
  myservo.attach(9);
  RFID.begin(9600);    // start serial to RFID reader
  Serial.begin(9600);  // start serial to PC
  pinMode(yes, OUTPUT); // for status LEDs
  pinMode(no, OUTPUT);
}
 
boolean comparetag(int aa[10], int bb[10]) {
  boolean ff = false;
  int fg = 0;
  for (int cc = 0 ; cc < 10 ; cc++) {
    if (aa[cc] == bb[cc]) {
      fg++;
    }
  }
  if (fg == 10) {
    ff = true;
  }
  return ff;
}
 
void checkmytags() { // compares each tag against the tag just read
  ok = 0; // this variable helps decision-making,
  // if it is 1 we have a match, zero is a read but no match,
  // -1 is no read attempt made
  if (comparetag(newtag, tag1) == true) {
    ok++;
  }
  if (comparetag(newtag, tag2) == true) {
    ok++;
  }
  if (comparetag(newtag, tag3) == true) {
    ok++;
  }
  if (comparetag(newtag, tag4) == true) {
    ok++;
  }
}
 
void readTags() {
  ok = -1;
  if (RFID.available() > 0) {
    // read tag numbers
    delay(100); // needed to allow time for the data to come in from the serial buffer.
    for (int z = 0 ; z < 10 ; z++) { // read the rest of the tag
      data1 = RFID.read();
      newtag[z] = data1;
    }
    RFID.flush(); // stops multiple reads
    // do the tags match up?
    checkmytags();
  }
  // now do something based on tag type
  if (ok > 0) { // if we had a match
    Serial.println("Accepted");
    ok = -1;
    for (pos = 0; pos <= 180; pos += 1) {
      myservo.write(pos);
      delay(2);
    }
    delay(2000);
    for (pos = 180; pos >= 50; pos -= 1) {
      myservo.write(pos);
      delay(2);
    }
  } else if (ok == 0) { // if we didn't have a match
    Serial.println("Rejected");
    digitalWrite(no, HIGH);
    delay(1000);
    digitalWrite(no, LOW);
    ok = -1;
  }
}
 
void loop() {
  readTags();
}
#endif
  • kontrola_dostepu_rfid_do_warsztatu.1511959459.txt.gz
  • ostatnio zmienione: 2020/09/24 20:27
  • (edycja zewnętrzna)