Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Poprzednia rewizja po obu stronach Poprzednia wersja
Nowa wersja
Poprzednia wersja
kontrola_dostepu_rfid_do_warsztatu [2017/11/29 13:51]
yazjack [Kod]
— (aktualna)
Linia 1: Linia 1:
-====== 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 === 
-Wersja prototypowa kodu, na razie tagi są obsługiwane z poziomu programowania,​ docelowo będą porównywane z bazą danych na serwerze. 
- 
-<code cpp> 
- 
-#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 
- 
-</​code>​ 
- 
-=== Czytnik MFRC522 === 
-Kod na ten czytnik był o tyle fajny, że ma adresowalny mikrokontroler co pozwalało na wykrywanie obecności karty samym czytnikiem. Niestety ta częstotliwość nie będzie miała u nas zastosowania. 
- 
-<code cpp> 
- 
-#include <​SPI.h>​ 
-#include <​MFRC522.h>​ 
- 
-#define RST_PIN 9 
-#define SW 8 
-MFRC522 mfrc522(10);​ 
- 
-void setup() { 
-  Serial.begin(9600);​ 
-  SPI.begin();​ 
-  mfrc522.PCD_Init();​ 
-  pinMode(SW, OUTPUT); 
-  digitalWrite(SW,​ HIGH); 
-} 
- 
-void loop() { 
-  if ( !mfrc522.PICC_IsNewCardPresent()) { 
-    delay(100); 
-    if (mfrc522.PICC_IsNewCardPresent()) { 
-      digitalWrite(SW,​ HIGH); 
-      //​Serial.println("​on"​);​ 
-    } else { 
-      digitalWrite(SW,​ LOW); 
-      //​Serial.println("​off"​);​ 
-    } 
-  } 
-} 
- 
- 
-</​code>​ 
  • kontrola_dostepu_rfid_do_warsztatu.1511959912.txt.gz
  • ostatnio zmienione: 2020/09/24 20:27
  • (edycja zewnętrzna)