RFID systém so správou on-line

Tvoříte zajímavý projekt? Pochlubte se s ním.
Pravidla fóra
Vkládejte prosím jen HOTOVÉ projekty, které chcete představit ostatním.
Odpovědět
martinius96
Příspěvky: 403
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

RFID systém so správou on-line

Příspěvek od martinius96 » 26 led 2019, 10:56

Vyhotovil som RFID systém na otváranie elektronických dverí. Systém je postavený na komponentoch pre Arduino, teda čítačka kariet a kľúčeniek na 13.56MHz RC522, kompatibilné karty a kľúčenky. Čítačka dokáže prečítať karty štandardu ISO/IEC 14443 A.

Tento štandard funguje i na ISIC kartách, bankomatových kartách, či autobosových, zamestnaneckých a je ich možné taktiež prečítať a využiť pre takýto projekt. Nie je potrebné nakupovať nové karty, stačí použiť existujúce. Čítačkou RC522 čítam MAC adresy kariet a tie prevádzam na špecifický DEC formát, aby som sa vyhol kolíziám a pod.
Obrázek
V úlohe mikrokontroléru pre spracovanie a odosielanie dát som použil dosku NodeMCU v3 Lolin, ktorá disponuje wifi konektivitou a je pre tento účel viac než dostačujúca. Systém je vhodný pre haly, firemné vstupné vrátnice, elektronické dvere a pre podobné využitie.

Úlohou NodeMCU je odosielať dáta na web vždy, keď zaznamená kartu (v nečinnosti neodosiela nič) a na základe navrátenej odpovede z webservera (štandardne OK/NO) otvorí, alebo neotvorí dvere. Vo dverách sa okrem klasického mechanizmu s kľučkou nachádza aj elmg. jazýček, ktorý je otváraný mikrokontrolérom na určitú dobu po úspešnej odpovedi z webservera (nastavené v programe na 5500ms). Z vonkajšej strany dverí je guľa, z druhej strany kľučka, ktorá je prepojená i na jazýček. Z tohto dôvodu teda nie je nutné inštalovať dve čítačky a pod.
Obrázek
Dáta sa odosielajú na server a spracujú sa v jazyku PHP. Všetky karty, ktoré boli kedy priložené sú archivované a z administračného rozhrania, kde je možné vidieť i real-time vstupy do objektu je možné dané karty povoliť - autorizovať, alebo zamietnuť - deautorizovať jedným kliknutím do dynamickej tabuľky, prípadne je možné kartu pridať aj zapísaním jej MAC adresy, ak ju dopredu poznáme.

Klienta je teda možné autorizovať do 1 sekundy od prvotného priloženia karty, ktoré jeho prístup odmietne, keďže sa jeho MAC adresa karty nenachádza v systéme. Real-time aktualizácia dát sa realizuje AJAX-ovým volaním .php súboru, ktorý vracia tabuľku.
Obrázek
Systém je rýchly a pravidlá pre karty na jej autorizáciu, alebo deautorizáciu je možné vykonať pohodlne odkiaľkoľvek a pravidlo platí ihneď. Je teda veľmi jednoduché takýto systém spravovať i pre laikov. V prípade nedostupnosti webu/výpadku internetu je možné vždy do objektu vstúpiť kľúčom, ktorý dokáže jazýček odtiahnuť spolu s jazýčkom mechanizmu zámku.

Obšírnejšie info o projekte je možné nájsť i na mojom webe: https://arduino.php5.sk/rfid-system.php
Vyskúšať môžete na (vrátane NodeMCU programu): https://arduino.php5.sk/rfid/
Datasheet čítačky RC522: https://www.nxp.com/docs/en/data-sheet/MFRC522.pdf
Datasheet NodeMCU (ESP8266): http://www.handsontec.com/pdf_learn/esp8266-V10.pdf
Obrázek
Schéma predstavuje zjednodušené zapojenie. Namiesto LED použiť relé na jazýček. Prípadne ak jazýček spĺňa napäťové a prúdového charakteristiky pinu, možno zapojiť aj napriamo.

Projekt je zdarma dostupný pod MIT licenciou bez supportu. Je to vlastne okresaná verzia pôvodného projektu bez overenia mikrokontroléru na strane servera a bez loginu do webového rozhrania. Každý, kto má adresu, kde sa rozhranie nachádza vie ho spravovať. Nemá teda všetky bezpečnostné prvky pôvodného projektu. V ostatných veciach je identický s pôvodnou verziou. Systém si môžete rozšíriť o vaše funkcie, vytvoriť úrovne prístupu, pridať mená pre karty, aby ste vedeli aj menovite koho systém pustil/nepustil do objektu.

Trošku ma mrzí, že sa projekt nedostal na arduino.cz, odoslal som ho do formulára, ale nedostal som odpoveď, článok bude onedlho aj na chiptron-e.
Projekt na Githube: https://github.com/martinius96/RFID-otvaranie-dveri
Video pre lepšiu predstavu (farby sa javia o dosť tmavšie ako v skutočnosti na webe sú): https://www.youtube.com/watch?v=u2VE5SCkHs0
Portfólio realizovaných projektov: https://arduino.php5.sk
Počas prázdnin tvorím nové webové projekty, upravujem existujúce!

martinius96
Příspěvky: 403
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: RFID systém so správou on-line

Příspěvek od martinius96 » 23 čer 2019, 01:03

Update:
Princíp solenoid jazýčka dverí:
Obrázek
Offline tester RFID čítačky:

Kód: Vybrat vše

/*|----------------------------------------------------------|*/
/*|SKETCH PRE TEST RFID CITACKY RC522 S ESP8266       |*/
/*|VYHOTOVIL: MARTIN CHLEBOVEC                               |*/
/*|EMAIL: martinius96@gmail.com                                 |*/
/*|Doska: NodeMCU v3 Lolin (v2 compatible)                 |*/
/*|CORE: 2.3.0                                                             |*/
/*|WEB: https://arduino.php5.sk                                  |*/
/*|-----------------------------------------------------------------|*/
#include <SPI.h>
#include <RFID.h>
#define SS_PIN 4
#define RST_PIN 5
RFID rfid(SS_PIN, RST_PIN); 
unsigned long kod;

void setup(){ 
  Serial.begin(9600);
  SPI.begin(); 
  rfid.init();
}

void loop(){
  if (rfid.isCard()) {
    if (rfid.readCardSerial()) {
      Serial.println(" ");
      Serial.println("Kod karty ziskany: ");
      kod = 10000*rfid.serNum[4]+1000*rfid.serNum[3]+100*rfid.serNum[2]+10*rfid.serNum[1]+rfid.serNum[0];
      Serial.println(kod);
      String kodik = String(kod);        
    }
  }
  rfid.halt();
}
Upravený sketch pre ESP8266 s pridaním aktuálneho platného fingerprintu (od 04/2019 pre web rozhranie):

Kód: Vybrat vše

/*|----------------------------------------------------------|*/
/*|SKETCH PRE RFID SYSTEM S WEB ADMINISTRACIOU               |*/
/*|VYHOTOVIL: MARTIN CHLEBOVEC                               |*/
/*|EMAIL: martinius96@gmail.com                              |*/
/*|Doska: NodeMCU v3 Lolin (v2 compatible)                   |*/
/*|CORE: 2.3.0                                               |*/
/*|WEB: https://arduino.php5.sk                              |*/
/*|----------------------------------------------------------|*/
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <SPI.h>
#include <RFID.h>
const char * ssid = "MenoWifiSiete";
const char * password = "HesloWifiSiete";
const char * host = "arduino.php5.sk"; //bez https a www
const int httpsPort = 443; //https port
const int rele = 16; //GPIO16 == D0
const char * fingerprint = "‎‎b0 6d 7f 8c 98 78 8e 6e 0a 57 a8 2f 7e d1 40 2a 1e 3f 48 f7; // odtlacok HTTPS cert
#define SS_PIN 4
#define RST_PIN 5
RFID rfid(SS_PIN, RST_PIN); 
unsigned long kod;
WiFiClientSecure client; //HTTPS client
void setup(){ 
	Serial.begin(9600);
  	SPI.begin(); 
  	rfid.init();
  	pinMode(rele, OUTPUT);
	WiFi.begin(ssid, password);
  	while (WiFi.status() != WL_CONNECTED) {
    		delay(500);
    		Serial.print(".");
  	}
	Serial.println("");
  	Serial.println("WiFi uspesne pripojene");
  	Serial.println("IP adresa: ");
  	Serial.println(WiFi.localIP());
  	Serial.println("Ready");
}

void loop(){
  	if (WiFi.status() != WL_CONNECTED) {
    		WiFi.begin(ssid, password);
  	}
  	while (WiFi.status() != WL_CONNECTED) {
    		delay(500);
    		Serial.print(".");
  	}
  	if (rfid.isCard()) {
    		if (rfid.readCardSerial()) {
      			Serial.println(" ");
      			Serial.println("Card found");
      			kod = 10000*rfid.serNum[4]+1000*rfid.serNum[3]+100*rfid.serNum[2]+10*rfid.serNum[1]+rfid.serNum[0];
      			Serial.println(kod);
      			String kodik = String(kod);
      			client.stop();      
      			if (client.connect(host, httpsPort)) {
        			String url = "/rfid/karta.php?kod="+kodik;
        			client.print(String("GET ") + url + " HTTP/1.0\r\n" + "Host: " + host + "\r\n" + "User-Agent: NodeMCU\r\n" + "Connection: close\r\n\r\n");
      				while (client.connected()) {
        				String line = client.readStringUntil('\n');
        				if (line == "\r") {
          					break;
        				}	
      				}
  				String line = client.readStringUntil('\n');
  				if (line == "OK"){
	 				digitalWrite(rele, LOW); //invertovane spinane rele active LOW
	 				delay(5500);              //cas otvorenia dveri
  				}else if (line == "NO") {
    					digitalWrite(rele,HIGH);
				}
  			}
          }
    	}
	rfid.halt();
}
Jednotná schéma:
Obrázek
Portfólio realizovaných projektov: https://arduino.php5.sk
Počas prázdnin tvorím nové webové projekty, upravujem existujúce!

Odpovědět

Kdo je online

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