AnaSayfa Arduino Arduino ile RFID Uygulaması

Arduino ile RFID Uygulaması

1,668

Herkese merhaba! Ben Çağrı. Yaklaşık 3 yıldır arduino ve yazılım ile ilgilenen bir lise öğrencisiyim ve bugün sizlere arduino ile nasıl RFID kart uygulaması yapılacağını anlatacağım.

(Kodlar ve Kütüphaneler yazının sonunda verilmiştir.)

İhtiyacımız Olan Malzemeler:
1x Arduino UNO
1x RFID Kart Okuyucu (Tavsiyem RC522)
1x Buzzer
1x Breadboard
2x Led (Kırmızı – Yeşil)
2x 339 Ohm Direnç
Jumper Kablolar
İsteğe bağlı olarak da Servo, LCD ve I2C Modülü.


Pin Bağlantıları:
RFID Kart:
SDA: 10
SCK: 13
MOSI: 11
MISO: 12
GND: GND
RST: 9
3.3V: 3.3V

Not: RC522 modülü SPI haberleşme protokolünü kullandığı için ve arduinoda bu SPI pinleri arduino üzerinde MOSI – 11 MISO – 12 SCK – 13 olarak belirlendiği için bu pinleri farklı pinlerle değiştiremezsiniz fakat isterseniz SDA ve RST pinlerini değiştirebilirsiniz.

Buzzerin + pinini5 5. dijital pine, servomu 6. dijital pine, kırmızı ledi 330 ohmluk direnç ile 8. dijital pine ve yeşil ledi de yine 330 ohmlu direnç ile 8. dijital pine bağlayıp toprak pinlerini GND’ye bağladıktan sonra kodlara geçebiliriz.


</p>
<p>//Öncelikle kullancağımız kütüphaneler için atamalar yapalım:</p>
<p>#include &lt;SPI.h&gt;<br />
#include &lt;RFID.h&gt;<br />
#include &lt;Wire.h&gt;<br />
#include &lt;LiquidCrystal_I2C_AvrI2C.h&gt;<br />
#include &lt;Servo.h&gt;</p>
<p>//Servo, wire ve I2C kütüphanelerini o parçaları kullanmıyorsanız eklemek zorunda değilsiniz.</p>
<p>//Şimdi de dijital pinleri arduinoya belirtelim:</p>
<p>const byte kirmizi_led = 8;<br />
const byte yesil_led = 7;<br />
const byte buzzer = 5;</p>
<p>//Bu kod ile RFID kart okuyucumuzun SDA ve RST pinlerini ve ismini belirliyoruz:</p>
<p>RFID rfid(10, 9); // 10: SDA, 9: RST</p>
<p>//Not: Küçük harflerle yazan rfid, RFID okuyucumuzun ismini arduinoya bildirmemizi sağlar. Eğer oraya farklı bir isim yazmak isterseniz kodun devamında da rfid yazan yerleri belirlediğiniz isim ile değiştirmeniz gerekir.</p>
<p>//Bu kodda benim RFID kartımın bilgilerini buraya yazıyorum:</p>
<p>byte kart[5] = {74, 129, 248, 85, 102};</p>
<p>//Bu kod ile arduinoya kartı okuttuktan sonra izin verilip verilmeyeceği bilgisini saklayacak değişkeni belirleyim default olarak true diyoruz</p>
<p>boolean pass = true;</p>
<p>//Bu kod ile arduinoya servomun ismini belirttim:</p>
<p>Servo SG90;</p>
<p>//Bu fonksiyon ile LCD ekrana kart ID'sini yazdırıyorum:</p>
<p>void ID() {<br />
lcd.setCursor(0, 1);<br />
lcd.print(&quot;Kart ID: &quot;);<br />
lcd.setCursor(0, 2);<br />
lcd.print(rfid.serNum[0]);<br />
lcd.print(&quot;.&quot;);<br />
lcd.print(rfid.serNum[1]);<br />
lcd.print(&quot;.&quot;);<br />
lcd.print(rfid.serNum[2]);<br />
lcd.print(&quot;.&quot;);<br />
lcd.print(rfid.serNum[3]);<br />
lcd.print(&quot;.&quot;);<br />
lcd.print(rfid.serNum[4]);<br />
}</p>
<p>//Not: Fonksiyonun setup ve loop fonksiyonlarından önce yazılmış olmasına dikkat edin. Aksi taktirde bazı arduino compiler sürümlerinde hata alabilirsiniz.</p>
<p>//Bu fonksiyon ile LCD'deki ID'yi siliyorum:<br />
void ID_RST() {<br />
lcd.setCursor(0, 1);<br />
lcd.print(&quot;Kart ID: &quot;);<br />
lcd.setCursor(0, 2);<br />
lcd.print(&quot;-&quot;);<br />
}</p>
<p>//Bu fonksiyonlar ile de buzzerin doğru ve yanlış girişlerde çıkaracağı sesleri ayarlıyorum (beepT : Doğru - beepF : Yanlış) :</p>
<p>void beepT() {<br />
for (int i = 0; i &lt; 4; i++)<br />
{<br />
digitalWrite(buzzer, HIGH);<br />
delay(100);<br />
digitalWrite(buzzer, LOW);<br />
delay(25);<br />
}<br />
}</p>
<p>void beepF()<br />
{<br />
for(int i = 0; i &lt; 2; i++){<br />
digitalWrite(buzzer, HIGH);<br />
delay(225);<br />
digitalWrite(buzzer, LOW);<br />
delay(25);<br />
}<br />
}</p>
<p>//Setup kısmında seri portu, SPI haberleşmeyi, LCD ekranımı, RFID kart okuyucumu başlatıyorum, ledlerimin ve buzzerimin pin modlarını ÇIKIŞ olarak ayarlıyorum ve servo motorumun pinini 6 olarak belirliyorum:</p>
<p>void setup()<br />
{<br />
Serial.begin(9600);</p>
<p>SPI.begin();<br />
lcd.begin();<br />
rfid.init();</p>
<p>pinMode(kirmizi_led, OUTPUT);<br />
pinMode(yesil_led, OUTPUT);<br />
pinMode(buzzer, OUTPUT);</p>
<p>SG90.attach(6);<br />
}</p>
<p>//Loop kısmında LCD ekrana Kartınızı Okutunuz yazdırıp ID_RST fonksiyonunu çalıştırıyorum. Servo motorumu 180 dereceye ayarlayıp sonradan sorun olmasın diye pass değişkenime true değerini atıyorum:</p>
<p>void loop() {<br />
lcd.setCursor(0, 0);<br />
lcd.print(&quot;Kartinizi Okutunuz&quot;);<br />
ID_RST();<br />
SG90.write(180);<br />
pass = true;</p>
<p>//Bu kodda RFID okuyucudan veri geldi mi diye kontrol ediyorum ve eğer geldiyse seri porta kart ID'sini yazdırmasını sağlıyorum:</p>
<p>if (rfid.isCard()) {<br />
if (rfid.readCardSerial()) {<br />
Serial.print(&quot;Kart ID: &quot;);<br />
Serial.print(rfid.serNum[0]);<br />
Serial.print(&quot;,&quot;);<br />
Serial.print(rfid.serNum[1]);<br />
Serial.print(&quot;,&quot;);<br />
Serial.print(rfid.serNum[2]);<br />
Serial.print(&quot;,&quot;);<br />
Serial.print(rfid.serNum[3]);<br />
Serial.print(&quot;,&quot;);<br />
Serial.println(rfid.serNum[4]);<br />
}</p>
<p>//Bu kodda okutulan kartın doğru kart mı yoksa yanlış kart mı olduğunu anlamak için gelen ID'yi bir for döngüsüne sokuyorum. Burada 5 haneli ID'yi kart adlı liste ile karşılaştırıyorum. Eğer 5 hane de doğru ise pass değişkenine true değil ise false değerini atıyorum:</p>
<p>for (int i = 0; i &lt; 5; i++) {<br />
if (rfid.serNum[i] != kart[i]) {<br />
pass = false;<br />
}<br />
else {<br />
pass = true;<br />
}<br />
}</p>
<p>//Bu kodda ise eğer pass değişkenime false atanmışsa  LCD ekrana kart ID'sini ve  &quot;Yanlış kart&quot; bilgisini yazdırıyorum. Daha sonra kırmızı ledi yakıp beepF fonksiyonumu çalıştırıyorum. 1500 ms'lik (milisaniye) sürelik bir bekleme süresi veriyorum ve bu süre sayesinde beepF fonksiyonundaki süreler de eklenince tam iki saniye ediyor.</p>
<p>//Eğer true atanmışsa da yine ID'yi yazıp servo motorumu çalıştırıyorum. LCD ekrana &quot;Izin verildi&quot; bilgisini yazdırıyorum. Yeşil ledi yakıp beepT fonksiyonumu çalıştırıyorum ve ardından yine 1500 ms'lik bir bekleme süresi veriyorum:</p>
<p>if (pass == false) {<br />
lcd.clear();<br />
ID();<br />
lcd.setCursor(0, 0);<br />
lcd.print(&quot;YANLIS KART!&quot;);<br />
Serial.println(&quot;izinsiz Giris&quot;);<br />
digitalWrite(kirmizi_led, HIGH);<br />
beepF();<br />
delay(1500);<br />
digitalWrite(kirmizi_led, LOW);<br />
lcd.clear();<br />
}</p>
<p>else {<br />
lcd.clear();<br />
ID();<br />
SG90.write(13);<br />
lcd.setCursor(0, 0);<br />
lcd.print(&quot;Izin Verildi&quot;);<br />
Serial.println(&quot;izin Verildi&quot;);<br />
digitalWrite(yesil_led, HIGH);<br />
beepT();<br />
delay(1500);<br />
digitalWrite(yesil_led, LOW);<br />
lcd.clear();<br />
}<br />
rfid.halt();<br />
}<br />
}</p>
<p>


Kodlar işinizi gördüyse ne mutlu bana yine bu şekilde yaptığım çalışmaları buraya atmaya devam edeceğim. Takipte kalın.

İLGİLİ MAKALE  Arduino Toplu Kaynak (pdf)

 

 

DOSYALARI İNDİRMEK İÇİN TIKLAYINIZ


 

 

TÜM KOD:

</p>
<p>// ÇAĞRI SERPIN<br />
// RFID UYGULAMASI<br />
// İSTEDİĞİNİZ ALANDA KULLANABİLİRSİNİZ<br />
#include<br />
#include<br />
#include<br />
#include<br />
#include</p>
<p>LiquidCrystal_I2C_AvrI2C lcd(0x3f, 20, 4);</p>
<p>const byte kirmizi_led = 8;<br />
const byte yesil_led = 7;<br />
const byte buzzer = 5;</p>
<p>RFID rfid(10, 9);</p>
<p>byte kart[5] = {74, 129, 248, 85, 102};</p>
<p>boolean pass = true;</p>
<p>Servo SG90;</p>
<p>void ID() {<br />
lcd.setCursor(0, 1);<br />
lcd.print(&quot;Kart ID: &quot;);<br />
lcd.setCursor(0, 2);<br />
lcd.print(rfid.serNum[0]);<br />
lcd.print(&quot;.&quot;);<br />
lcd.print(rfid.serNum[1]);<br />
lcd.print(&quot;.&quot;);<br />
lcd.print(rfid.serNum[2]);<br />
lcd.print(&quot;.&quot;);<br />
lcd.print(rfid.serNum[3]);<br />
lcd.print(&quot;.&quot;);<br />
lcd.print(rfid.serNum[4]);<br />
}</p>
<p>void ID_RST() {<br />
lcd.setCursor(0, 1);<br />
lcd.print(&quot;Kart ID: &quot;);<br />
lcd.setCursor(0, 2);<br />
lcd.print(&quot;-&quot;);<br />
}</p>
<p>void beepT() {<br />
for (int i = 0; i &amp;amp;lt; 4; i++) {<br />
digitalWrite(buzzer, HIGH);<br />
delay(100);<br />
digitalWrite(buzzer, LOW);<br />
delay(25);<br />
}<br />
}</p>
<p>void beepF(){<br />
for(int i = 0; i &amp;amp;lt; 2; i++){<br />
digitalWrite(buzzer, HIGH);<br />
delay(225);<br />
digitalWrite(buzzer, LOW);<br />
delay(25);<br />
}<br />
}</p>
<p>void setup()<br />
{<br />
Serial.begin(9600);</p>
<p>SPI.begin();<br />
lcd.begin();<br />
rfid.init();</p>
<p>pinMode(kirmizi_led, OUTPUT);<br />
pinMode(yesil_led, OUTPUT);<br />
pinMode(buzzer, OUTPUT);</p>
<p>SG90.attach(6);<br />
}</p>
<p>void loop() {<br />
lcd.setCursor(0, 0);<br />
lcd.print(&quot;Kartinizi Okutunuz&quot;);<br />
ID_RST();<br />
SG90.write(180);<br />
pass = true;</p>
<p>if (rfid.isCard()) {<br />
if (rfid.readCardSerial()) {<br />
Serial.print(&quot;Kart ID: &quot;);<br />
Serial.print(rfid.serNum[0]);<br />
Serial.print(&quot;,&quot;);<br />
Serial.print(rfid.serNum[1]);<br />
Serial.print(&quot;,&quot;);<br />
Serial.print(rfid.serNum[2]);<br />
Serial.print(&quot;,&quot;);<br />
Serial.print(rfid.serNum[3]);<br />
Serial.print(&quot;,&quot;);<br />
Serial.println(rfid.serNum[4]);<br />
}</p>
<p>for (int i = 0; i &amp;amp;lt; 5; i++) {<br />
if (rfid.serNum[i] != kart[i]) {<br />
pass = false;<br />
}<br />
else {<br />
pass = true;<br />
}<br />
}</p>
<p>if (pass == false) {<br />
lcd.clear();<br />
ID();<br />
lcd.setCursor(0, 0);<br />
lcd.print(&quot;YANLIS KART!&quot;);<br />
Serial.println(&quot;izinsiz Giris&quot;);<br />
digitalWrite(kirmizi_led, HIGH);<br />
beepF();<br />
delay(1500);<br />
digitalWrite(kirmizi_led, LOW);<br />
lcd.clear();<br />
}</p>
<p>else {<br />
lcd.clear();<br />
ID();<br />
SG90.write(13);<br />
lcd.setCursor(0, 0);<br />
lcd.print(&quot;Izin Verildi&quot;);<br />
Serial.println(&quot;izin Verildi&quot;);<br />
digitalWrite(yesil_led, HIGH);<br />
beepT();<br />
delay(1500);<br />
digitalWrite(yesil_led, LOW);<br />
lcd.clear();<br />
}<br />
rfid.halt();<br />
}<br />
}<br />
 

Daha Fazla İlgili Makale Yükleyin
Daha Fazla Yük Arduino

Bir Yorum Yazın

Ayrıca Kontrol Edin

Temel Arduino Eğitimi | Ders #13: Karakter Dizileri (Stringler)

Karakter Dizileri (Stringler): Arduino’da birden fazla karakter barındıran değişkenlere ka…