RFID nedir? Nasıl çalışır? RC522 RFID Modülü ile Arduino
İnsanların markette uzun kasa kuyruklarında durup bekledikleri günler çoktan geride kaldı. Sayesinde Ar adio F requency kimliği entification ( RFID ) teknolojisi. Bu RFID tabanlı otomatik ödeme çözümüyle , sepetinizi doldurabilir ve kapıdan çıkabilirsiniz. Artık biri sepetinizdeki her bir ürünü teker teker çaldığında beklemeniz gerekmeyecek. Bunun yerine, ürünlere eklenen RFID etiketleri, arabadaki her öğeyi algılayacak ve neredeyse anında her birini çalacak RFID okuyucu ile iletişim kuracak.
RFID tabanlı Arduino projelerimizin çoğu için RC522 RFID Okuyucu / Yazıcı modülü harika bir seçimdir. Düşük güç, düşük maliyetli, oldukça sağlam, arayüzü kolay ve hobiler arasında delice popüler.
RFID teknolojisi nedir ve nasıl çalışır?
RFID veya Radyo Frekansı Tanımlama sistemi iki ana bileşenden oluşur; tanımlanacak bir nesneye eklenen bir alıcı-verici / etiket ve sorgulayıcı / Okuyucu olarak da bilinen bir Alıcı-Verici.
Okuyucu, bir Radyo Frekansı modülünden ve yüksek frekanslı elektromanyetik alan üreten bir antenden oluşur. Öte yandan, etiket genellikle pasif bir cihazdır, yani pil içermez. Bunun yerine, bilgiyi depolayan ve işleyen bir mikroçip ve bir sinyal alıp iletmek için bir anten içerir.
Bir etikete kodlanmış bilgileri okumak için, Okuyucu'nun yakınına yerleştirilir (okuyucunun doğrudan görüş alanı içinde olması gerekmez). Okuyucu, elektronların etiketin anteni boyunca hareket etmesine ve ardından çipi güçlendirmesine neden olan bir elektromanyetik alan oluşturur.
Etiketin içindeki güçlendirilmiş çip daha sonra sakladığı bilgiyi okuyucuya başka bir radyo sinyali şeklinde geri göndererek yanıt verir. Buna geri saçılma denir. Geri saçılma veya elektromanyetik / RF dalgasındaki değişiklik, okuyucu tarafından algılanır ve yorumlanır ve daha sonra verileri bir bilgisayara veya mikro denetleyiciye gönderir.
Donanıma Genel Bakış - RC522 RFID Okuyucu / Yazıcı Modülü
NXP'den MFRC522 IC'ye dayalı RC522 RFID modülü , dört dolardan daha ucuza çevrimiçi alabileceğiniz en ucuz RFID seçeneklerinden biridir. Genellikle bir RFID kart etiketi ve 1KB belleğe sahip anahtarlık etiketi ile birlikte gelir. Ve en iyisi, bir etiket yazabilir, böylece bir tür gizli mesajınızı içinde saklayabilirsiniz.
RC522 RFID Okuyucu modülü, RFID etiketleriyle (ISO 14443A standart etiketleri) iletişim kurmak için kullandığı 13,56 MHz elektromanyetik alan oluşturmak üzere tasarlanmıştır. Okuyucu, maksimum 10 Mbps veri hızı ile 4 pinli Seri Çevresel Arayüz ( SPI ) üzerinden bir mikrodenetleyici ile iletişim kurabilir . Ayrıca I2C ve UART protokolleri üzerinden iletişimi de destekler.
Modül, bir kesme pimi ile birlikte gelir. Kullanışlı, çünkü sürekli olarak RFID modülüne sormak yerine “görünümde bir kart var mı? ", Modül yakınına bir etiket geldiğinde bizi uyaracaktır.
Modülün çalışma voltajı 2,5 ila 3,3V arasındadır , ancak iyi haber, mantık pinlerinin 5 volt toleranslı olmasıdır , bu nedenle herhangi bir mantık seviyesi dönüştürücü kullanmadan bir Arduino veya herhangi bir 5V mantık mikrodenetleyicisine kolayca bağlayabiliriz.
İşte eksiksiz özellikler:
RC522 RFID Modül Pin Çıkışı
RC522 modülü, kendisini dış dünyaya arayüzleyen toplam 8 pime sahiptir. Bağlantılar aşağıdaki gibidir:
VCCmodül için güç sağlar. Bu, 2,5 ila 3,3 volt arasında herhangi bir yerde olabilir. Arduino'nuzdan 3.3V çıkışa bağlayabilirsiniz. 5V pinine bağlamanın modülünüzü büyük olasılıkla yok edeceğini unutmayın!
RSTSıfırlama ve güç kapatma için bir giriştir. Bu pin azaldığında, sert güç kapatma etkinleştirilir. Bu, osilatör dahil tüm dahili akım alıcılarını kapatır ve giriş pinleri dış dünyayla bağlantısı kesilir. Yükselen kenarda modül sıfırlanır.
GND Ground Pin'dir ve Arduino'daki GND pinine bağlanması gerekir.
IRQ RFID etiketi yakınına geldiğinde mikro denetleyiciyi uyarabilen bir kesme pimidir.
MISO / SCL / Tx pin, SPI arayüzü etkinleştirildiğinde Master-In-Slave-Out gibi davranır, I2C arayüzü etkinleştirildiğinde seri saat görevi görür ve UART arayüzü etkinleştirildiğinde seri veri çıkışı olarak işlev görür.
MOSI (Ana Çıkış Köle Girişi) RC522 modülüne SPI girişidir.
SCK (Seri Saat) SPI veriyolu Master yani Arduino tarafından sağlanan saat darbelerini kabul eder.
SS / SDA / Rxpin, SPI arayüzü etkinleştirildiğinde Sinyal girişi olarak hareket eder, I2C arayüzü etkinleştirildiğinde seri veri olarak davranır ve UART arayüzü etkinleştirildiğinde seri veri girişi olarak davranır. Bu pim genellikle pimi bir kare içine alarak işaretlenir, böylece diğer pimleri tanımlamak için bir referans olarak kullanılabilir.
Kablolama - RC522 RFID modülünü Arduino UNO'ya bağlama
Artık modül hakkında her şeyi bildiğimize göre, onu Arduino'muza bağlamaya başlayabiliriz!
Başlamak için, modül üzerindeki VCC pinini Arduino'daki 3.3V'a ve GND pinini toprağa bağlayın. Pin RST, Arduino'daki herhangi bir dijital pime bağlanabilir. Bizim durumumuzda, 5 numaralı dijital pime bağlıdır. Kullanacağımız Arduino kütüphanesi desteklemediği için IRQ pini bağlantısız bırakılır.
Artık SPI iletişimi için kullanılan pinlerde kaldık. RC522 modülü çok fazla veri aktarımı gerektirdiğinden, bir mikrodenetleyici üzerindeki donanım SPI pinlerine bağlandığında en iyi performansı verecektir. Donanım SPI pinleri, başka bir pin seti kullanarak arayüz kodunu 'bit-vurmaktan' çok daha hızlıdır.
Her Arduino Board'un uygun şekilde bağlanması gereken farklı SPI pinlerine sahip olduğunu unutmayın. UNO / Nano V3.0 gibi Arduino kartları için bu pinler dijital 13 (SCK), 12 (MISO), 11 (MOSI) ve 10 (SS).
Bir Mega'nız varsa, iğneler farklıdır! Dijital 50 (MISO), 51 (MOSI), 52 (SCK) ve 53 (SS) kullanmak isteyeceksiniz. Hızlı anlamak için aşağıdaki tabloya bakın.
Yukarıda belirtilenden farklı bir Arduino kartı kullanıyorsanız, devam etmeden önce Arduino resmi belgelerini kontrol etmeniz önerilir .
Arduino Kodu - RFID Etiketi Okuma
RC522 RFID modülü ile iletişim kurmak bir sürü iştir, ancak neyse ki bizim için MFRC522 kitaplığı , RFID etiketlerinden okumayı ve bunlara yazmayı kolaylaştıran bir kitaplık var . Miguel Balboa'ya teşekkürler. Önce kütüphaneyi, GitHub deposunu ziyaret ederek indirin veya zip dosyasını indirmek için bu düğmeye tıklayın:
Kurmak için Arduino IDE'yi açın, Sketch> Include Library> Add .ZIP Library'ye gidin ve ardından indirdiğiniz rfid-master.zip dosyasını seçin. Bir kitaplık kurma konusunda daha fazla ayrıntıya ihtiyacınız varsa, bu Arduino Kitaplığı Kurma öğreticisini ziyaret edin .
Kitaplığı kurduktan sonra, Örnekler alt menüsünü açın ve MFRC522> DumpInfo örnek taslağını seçin.
Bu taslak etikete herhangi bir veri yazmayacaktır. Yalnızca size etiketi okuyup okumadığını söyler ve bununla ilgili bazı bilgiler görüntüler. Bu, herhangi bir yeni etiketi denemeden önce çok faydalı olabilir!
Taslağın başlangıcına gidin ve RST_PIN'in doğru şekilde başlatıldığından emin olun , bizim durumumuzda dijital pin # 5 kullanıyoruz, bu yüzden 5 olarak değiştirin!
Tamam, şimdi çizimi yükleyin ve Seri Monitörü açın. Etiketi modüle yaklaştırır yakınlaştırmaz, muhtemelen aşağıdaki gibi bir şey elde edeceksiniz. Tüm bilgiler görüntülenene kadar etiketi hareket ettirmeyin.
Etiketin Benzersiz Kimliği (UID), bellek boyutu ve 1K belleğin tamamı dahil olmak üzere etiket hakkındaki tüm yararlı bilgileri görüntüler.
MIFARE Klasik 1K Bellek Düzeni
Etiketin 1K hafızası 16 sektörde düzenlenmiştir (0'dan 15'e kadar) Her sektör ayrıca 4 bloğa bölünmüştür (blok 0'dan 3'e). Her blok 16 bayt veri depolayabilir (0'dan 15'e kadar).
Bu kesinlikle bize sahip olduğumuzu söylüyor
16 sektör x 4 blok x 16 bayt veri = 1024 bayt = 1K hafıza
Sektörler, bloklar ve veriler içeren 1K belleğin tamamı aşağıda vurgulanmıştır.
Uyarı:
Üretici Bloğunun üzerine yazmak çok risklidir ve kartı kalıcı olarak kilitleyebilir.
Arduino Kodu - RFID Etiketi Yazma
RFID etiketini başarıyla okuduğunuzu düşünürsek, bir sonraki deneyimize geçeceğiz. Aşağıdaki taslak, RFID etiketine özel verilerin yazılmasıyla ilgili temel bir gösteri yapacaktır. Ayrıntılı incelemeye başlamadan önce taslağı deneyin.
Seri monitördeki çıktı şöyle görünecektir.
Kod Açıklaması:
Taslak, MFRC522 ve SPI kitaplığını dahil ederek, RC522'nin bağlı olduğu Arduino pinlerini tanımlayarak ve MFRC522 okuyucu nesnesini örnekleyerek başlar.
Ardından, verilerimizi saklayacağımız bir blok tanımlamamız gerekiyor. Burada sektör 0 blok 2 seçilir. Unutmayın, hiçbir sektörün 3. bloğunu seçmeyin. 'Sektör fragmanı' bloğuna yazmak, bloğu kullanılamaz hale getirebilir.
Daha blockcontent[16]
sonra, bloğa yazmak istediğimiz mesajı tutan 16 baytlık bir dizi tanımlarız . Sıfır yazarak herhangi bir bloğu silebilirsiniz.
Ardından, adlı 18 baytlık bir dizi tanımlamamız gerekiyor readbackblock[18]
. Bu, yazılı içeriği geri okumak için kullanılabilir. Bekle… 18 bayt mı? Bunun 16 bayt olması gerekmez mi? Cevap Hayır. MFRC522 kütüphanesindeki MIFARE_Read yöntemi, bir bloğun 16 baytını tutmak için en az 18 baytlık bir arabellek gerektirir.
Kurulum işlevinde: PC, SPI kitaplığı ve MFRC522 nesnesiyle seri iletişimi başlatıyoruz. Ayrıca okuma ve yazma işlevleri için güvenlik anahtarını da hazırlamamız gerekiyor. Burada altı anahtar baytın tümü 0xFF olarak ayarlanmıştır. Kitteki kartlar yeni olduğu ve anahtarlar hiçbir zaman tanımlanmadığı için 0xFF'dir. Başkası tarafından programlanmış bir kartımız olsaydı, ona erişebilmek için anahtarı bilmemiz gerekirdi. Bu anahtarın daha sonra bunun yerine 'anahtar'da saklanması gerekir.
Döngü fonksiyonu: Önce görünümde bir kart olup olmadığını tararız, eğer varsa, o kart yazma ve okuma amacıyla seçilir.
Bloğu sıkmak artık çok kolay, sadece writeBlock()
iki parametre alan özel bir fonksiyon çağırmamız gerekiyor - biri veriyi ve veriyi yazmakla ilgilendiğimiz blok numarası.
Yazma işleminin başarılı olup olmadığını kontrol etmek için blok içeriğini tekrar okumamız gerekir. Bu, readBlock()
yine iki parametre alan özel işlev kullanılarak yapılabilir - biri blok numarası ve diğeri blok içeriklerini depolamak için dizidir. PICC_DumpToSerial()
1k hafızanın tamamını içine yazılan blok ile görmek istiyorsanız fonksiyonu kullanabilirsiniz .
Son olarak, bir for döngüsü kullanarak readbackblock dizisinin içeriğini yazdırır ve içeriği seri monitörde görüntüleriz.
RFID Kapı Kilidi Erişim Kontrol Sistemi
Basit bir RC522 RFID okuyucu modülünün bir RFID Kapı Kilidi Erişim Kontrol Sistemi yapmak için nasıl kullanılabileceğini göstermek için hızlı bir Arduino projesi oluşturalım . Programımız, RC522 okuyucu tarafından enerjilendirilecek kadar yakın olduğunda her RFID etiketinin benzersiz kimliğini tarayacaktır. Etiketin UID'si, Arduino belleğinde depolanan önceden tanımlanmış bir değerle (Ana etiket) eşleşirse, erişim verilecektir. Ve herhangi bir bilinmeyen etiketi tararsak, erişim reddedilecektir.
Elbette bu proje, kapıları açmak, bir röleyi açmak, bir LED'i yakmak veya aklınıza gelebilecek herhangi bir şey için arayüz oluşturabilir.
16 × 2 karakter LCD'lere aşina değilseniz, eğitimin altındaki okumayı (en azından gözden geçirmeyi) düşünün.
Kod yüklemeye ve etiketleri taramaya başlamadan önce, proje için devre şemasına bakalım.
Bu kadar! Şimdi, aşağıdaki taslağı deneyin.
Program oldukça basit. Başlangıçta gerekli kitaplıkları dahil ediyoruz, Arduino pinlerini tanımlıyoruz, LCD ve MFRC522 nesnelerinin örneklerini oluşturuyoruz ve ana etiketi tanımlıyoruz.
Kurulum işlevinde, SPI arayüzünü, MFRC522 nesnesini ve LCD'yi başlatıyoruz. Bunu takiben LCD'ye hoş geldiniz mesajı yazdırıyoruz.
Döngü işlevinde, yeni etiket taranana kadar bekleriz. İşlem tamamlandıktan sonra, bilinmeyen etiketi önceden kurulum işlevinde tanımlanan ana etiketle karşılaştırırız. Bu kadar! Kimliği ana kimlikle eşleşirse, erişim izni verilmezse reddedilir.
Projedeki en önemli şey getID () adında özel bir işlevdir . Yeni kartı taradığında, bir for döngüsü içinde 4 baytlık UID'yi dizeye dönüştürür ve tek bir dize oluşturmak için birleştirir.