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.
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.
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.
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
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
RFID systém so správou on-line
Pravidla fóra
Vkládejte prosím jen HOTOVÉ projekty, které chcete představit ostatním.
Vkládejte prosím jen HOTOVÉ projekty, které chcete představit ostatním.
-
- Příspěvky: 579
- Registrován: 01 srp 2017, 19:29
- Reputation: 0
- Bydliště: Poprad
- Kontaktovat uživatele:
-
- Příspěvky: 579
- Registrován: 01 srp 2017, 19:29
- Reputation: 0
- Bydliště: Poprad
- Kontaktovat uživatele:
Re: RFID systém so správou on-line
Update:
Princíp solenoid jazýčka dverí:
Offline tester RFID čítačky:
Upravený sketch pre ESP8266 s pridaním aktuálneho platného fingerprintu (od 04/2019 pre web rozhranie):
Jednotná schéma:
Princíp solenoid jazýčka dverí:
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();
}
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();
}
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 4 hosti