RFID čtečka s vestavěnou anténou obsahuje vše potřebné pro její snadné použití. RFID zařízení (dále jako tagy) mohou mít různé podoby jako například karty, nálepky, náramky či kulaté přívěsky a také se dělí podle používaných frekvencí. Tento modul obsahuje jako řídící obvod typ MF RC522 a pracuje na frekvenci 13.56 MHz. V tomto návodu si ukážeme načtení adresy různých tagů a jejich využití v programu.
Pro propojení RFID čtečky s Arduino deskou je zapotřebí propojit celkem 7 vodičů. Propojíme SDA s pinem 10, SCK s pinem 13, MOSI s pinem 11, MISO s pinem 12, GND se zemí, RST s pinem 9 a 3.3V s pinem 3V3 na Arduinu. Modul čtečky komunikuje s Arduinem pomocí SPI protokolu a proto je nutné využít tyto vybrané piny na Arduino desce, je možné změnit pouze piny SDA a RST, přičemž jejich změnu je nutné provést také na začátku programu.
Pro správné přeložení a nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu MFRC522, návod jak na to je uveden zde. Ukázkový kód obsahuje na začátku připojení zmíněné knihovny MFRC522 a také Arduino knihovny SPI a dále definování pinů SDA a RST pro následné vytvoření instance rfid z knihovny MFRC522. V podprogramu setup je nachází zapnutí komunikace přes sériovou linku a dále inicializace komunikace přes protokol SPI a komunikace s RFID čtečkou. V nekonečné smyčce loop je vždy nejprve zkontrolován výskyt RFID tagů v okolí antény pomocí funkce rfid.PICC_IsNewCardPresent() a pokud se zde žádný tag nenachází, je ukončena smyčka loop pomocí příkazu return. Proto by měl být celý kód věnující se práci s RFID čtečkou umístěn vždy na konci loop smyčky. V případě úspěšné detekce tagu se zkontroluje jeho správné načtení funkcí rfid.PICC_ReadCardSerial() a následuje ještě kontrola, jestli načtený tag patří mezi podporované typy. Pokud se dostaneme přes tyto kontroly, je po sériové lince jako první vypsána adresa RFID tagu, která se získá pomocí volání podprogramu vypisHex, který obsahuje pouze převedení adresy do hexa (šestnáctkového) formátu. Dále následuje kontrola známých tagů, kdy se pomocí příkazu if zkontrolují všechny čtyři části adresy a pokud tyto části sedí, je o této skutečnosti vytištěna zpráva po sériové lince. Pro přidání vlastních tagů tedy stačí změnit adresy u všech částí adresy, které získáte po nahrání tohoto programu nad výpisem o neznámém RFID tagu, případně lze samozřejmě nakopírovat další kontroly tagů v úseku if {..}. Na konci smyčky loop se pak už nachází pouze příkazy pro ukončení komunikace a jejího zabezpečení.
// RFID čtečka - ukázka čtení adres tagů
// připojení knihoven SPI a MFRC522
#include <SPI.h>
#include <MFRC522.h>
// definování pinů pro SDA a RST
#define SDA_PIN 10
#define RST_PIN 9
// vytvoření instance RFID čtečky z knihovny
MFRC522 rfid(SDA_PIN, RST_PIN);
void setup() {
// komunikace přes sériovou linku rychlostí 9600 baud
Serial.begin(9600);
// inicializace komunikace přes SPI
SPI.begin();
// inicializace komunikace s RFID čtečkou
rfid.PCD_Init();
}
void loop() {
// kontrola RFID tagů v okolí modulu,
// pokud není žádný tag v okolí, volá se loop funkce od začátku,
// celá část s RFID by tedy měla být na konci programu
if ( ! rfid.PICC_IsNewCardPresent())
return;
// kontrola správného přečtení RFID tagu
if ( ! rfid.PICC_ReadCardSerial())
return;
// výpis informace o verzi RFID tagu
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
Serial.print("RFID tag typu: ");
Serial.println(rfid.PICC_GetTypeName(piccType));
// kontrola podporovaných typů RFID tagu
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println("Tento RFID tag neni podporovany (typ MIFARE Classic).");
return;
}
// výpis adresy RFID tagu v hexa formátu
Serial.print("Adresa RFID tagu: ");
vypisHex(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
if(rfid.uid.uidByte[0] == 0x52 & rfid.uid.uidByte[1] == 0x3D & rfid.uid.uidByte[2] == 0xE5 & rfid.uid.uidByte[3] == 0xD5) {
Serial.println("Detekovana bila karta!");
}
else if(rfid.uid.uidByte[0] == 0xC1 & rfid.uid.uidByte[1] == 0x07 & rfid.uid.uidByte[2] == 0x22 & rfid.uid.uidByte[3] == 0x77) {
Serial.println("Detekovan modry privesek!");
}
/* ukázka přidání dalšího tagu
else if(rfid.uid.uidByte[0] == 0x?? & rfid.uid.uidByte[1] == 0x?? & rfid.uid.uidByte[2] == 0x?? & rfid.uid.uidByte[3] == 0x??) {
Serial.println("Detekovan novy tag ..!");
}
*/
else {
Serial.println("Detekovan neznamy RFID tag!");
}
Serial.println();
// ukončení komunikace a jejího zabezpečení
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
// podprogram pro výpis adresy RFID tagu v hexa formátu
void vypisHex(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], HEX);
}
}
Po nahrání programu do Arduino desky s připojenou RFID čtečkou uvidíme například takovýto výpis:
RFID tag typu: MIFARE 1KB
Adresa RFID tagu: 52 3D E5 D5
Detekovana bila karta!
RFID tag typu: MIFARE 1KB
Adresa RFID tagu: C1 07 22 77
Detekovan modry privesek!
RFID tag typu: MIFARE 4KB
Adresa RFID tagu: FC 61 8C 93
Detekovan neznamy RFID tag!
RFID čtečka s vestavěnou anténou je jednoduše použitelný modul, který lze například využít pro různá zabezpečovací zařízení, kdy chceme vytvořit vlastní přístupový systém či provést určité činnosti pro jednotlivé tagy. Je však důležité zmínit, že tento modul využívá prolomený zabezpečovací systém Crypto1 a nedoporučuji nikomu používat tento modul například pro zabezpečení domu či jiného cenného majetku.
Motorizovaný kulový ventil. Má široké uplatnění v různých průmyslových a obytných instalacích. Může být integrován do automatických systémů řízení, kde je možné ovládat průtok dálkově nebo automatizovaně podle předem nastavených podmínek.
Motorizované kulové vently s obvodem CR01, CR02, CR03 nebo CR04 je poměrně jednoduché po elektrické stránce správně zapojit. U ventilu s obvodem CR05 je tomu ale trochu jinak - ventil si sám nehlídá krajní polohy otevření, nebo zavření. Z toho důvodu vznikl tento článek, ukazující některé výhody, použití a především správné zapojení ventilu s obvodem CR05.